Arduinoコントローラ

今日は「Grove - Starter Kit」に付属のスイッチ・ボリュームと、別売りのモータードライバ「Grove - I2C Motor Driver」をテストした。


このモータードライバは StartKit の4芯ケーブルでI2C接続すればすぐ使えるので便利。
本来、電源とモーターの接続用にターミナルブロックが使われているが、利便性を考慮して XH コネクタに変更した。

購入先はこちら。


次のスケッチでまとめてパーツをテストした。
ボリュームでモーターの回転速度を、スイッチの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);  
}