Arduinoコントローラ
今日は「Grove - Starter Kit」に付属のスイッチ・ボリュームと、別売りのモータードライバ「Grove - I2C Motor Driver」をテストした。
このモータードライバは StartKit の4芯ケーブルでI2C接続すればすぐ使えるので便利。
本来、電源とモーターの接続用にターミナルブロックが使われているが、利便性を考慮して XH コネクタに変更した。
購入先はこちら。
- モータードライバ「GROVE - I2C モータードライバ - スイッチサイエンス」…サンプルスケッチあり
- XHコネクタ「http://www.monotaro.com/g/00158275/」
次のスケッチでまとめてパーツをテストした。
ボリュームでモーターの回転速度を、スイッチのON・OFFでモーターの正転・逆転を指示し、シリアルLCDにはボリュームの値を表示する。
モータードライバでモーターを回転させるだけならサンプルスケッチから10数行で流用すれば済む。簡単。
/** * SeeedStudio Grove-I2C_Motor_Driver TEST * for Arduino 1.0.1 * 2012-07-25 ohguma */ #include <SerialLCD.h> #include <SoftwareSerial.h> #include <Wire.h> SerialLCD slcd(11,12); #define MOTOR1 0xa1 #define MOTOR2 0xa5 #define PIN_SW_DIR 2 #define PIN_VR A0 void motorAndspd( unsigned char motor_s,unsigned char Mstatus, unsigned char spd) { Wire.beginTransmission(0x28); Wire.write(motor_s); Wire.write(Mstatus); Wire.write(spd); Wire.endTransmission(); delay(1); } void setup() { Wire.begin(); delayMicroseconds(10); slcd.begin(); slcd.print("hello, world!"); pinMode(PIN_SW_DIR, INPUT); } void loop() { // Motor rotate direction int val = digitalRead(PIN_SW_DIR); int dir = 0b01; if (val == 1) { dir = 0b10; } // Motor speed int sensorValue = analogRead(PIN_VR); motorAndspd(MOTOR1, dir, sensorValue / 5); motorAndspd(MOTOR2, dir, sensorValue / 5); // LCD output slcd.setCursor(0, 1); slcd.print(val,DEC); slcd.print(' '); slcd.print(sensorValue,DEC); slcd.print(' '); delay(10); }