ホーム > ロボット関連 > Grove-I2Cモータドライバ_SeeedStudio
Grove-I2Cモータドライバ_SeeedStudio
1,980円(税180円)
Grove-I2Cモータドライバは2つのDCモータもしくは1つの4線2相のステッピングモータを駆動させることができます。デュアルチャンネルのHブリッジドライバチップ(L298N)を搭載し、L298Nは1チャンネルあたり2A(5V)までの電流を供給します。L298Nドライバチップの制御やArduinoとのI2C通信は、ATmega8Lが行います。 各モータは、それぞれ異なる回転速度と回転方向に設定したうえで同時に駆動させることが出来ます。モータの駆動には6V〜15Vの入力電圧が必要です。Grove-I2Cモータドライバは5Vのオンボードのレギュレータも備えており、I2CバスやArduinoにも電源供給可能です。全てのドライバラインはダイオードによって逆起電力から保護されています。 Grove - I2C Motor Driverには、電源ステータスを示すLEDとモータの回転方向を示す4個のLEDを持ち、わかりやすいインタフェースとなっています。ネジ式ターミナル端子により電源やモータの接続は容易になっています。 GROVE共通のコネクタとI2Cインタフェースにより他のデバイスとデイジーチェーン接続が可能です。 <Grove-I2Cモータドライバの主な特徴> Grove対応 I2Cインタフェース モータ速度と回転方向が制御可能 2つのDCモータもしくは1つの4線2相のステッピングモータを駆動可能 スレーブアドレスをスイッチにより変更可能 電圧:6V-15V Grove-I2Cモータドライバについての詳細情報は下記ページ(英語)をご覧ください。 http://www.seeedstudio.com/wiki/Grove_-_I2C_Motor_Driver_V1.2 <Grove-I2Cモータドライバのサンプルソース、DCモータ2つを制御> GroveI2Cモータドライバのアドレスを確認します。 Groveベースシールドを使用し、Grove-I2Cモータドライバを接続します。 #include <Wire.h> #define MotorSpeedSet 0x82 #define PWMFrequenceSet 0x84 #define DirectionSet 0xaa #define MotorSetA 0xa1 #define MotorSetB 0xa5 #define Nothing 0x01 #define I2CMotorDriverAdd 0x0f // Set the address of the I2CMotorDriver void MotorSpeedSetAB(unsigned char MotorSpeedA , unsigned char MotorSpeedB) { MotorSpeedA=map(MotorSpeedA,0,100,0,255); MotorSpeedB=map(MotorSpeedB,0,100,0,255); Wire.beginTransmission(I2CMotorDriverAdd); // transmit to device I2CMotorDriverAdd Wire.write(MotorSpeedSet); // set pwm header Wire.write(MotorSpeedA); // send pwma Wire.write(MotorSpeedB); // send pwmb Wire.endTransmission(); // stop transmitting } void MotorPWMFrequenceSet(unsigned char Frequence) { Wire.beginTransmission(I2CMotorDriverAdd); // transmit to device I2CMotorDriverAdd Wire.write(PWMFrequenceSet); // set frequence header Wire.write(Frequence); // send frequence Wire.write(Nothing); // need to send this byte as the third byte(no meaning) Wire.endTransmission(); // stop transmitting } void MotorDirectionSet(unsigned char Direction) { // Adjust the direction of the motors 0b0000 I4 I3 I2 I1 Wire.beginTransmission(I2CMotorDriverAdd); // transmit to device I2CMotorDriverAdd Wire.write(DirectionSet); // Direction control header Wire.write(Direction); // send direction control information Wire.write(Nothing); // need to send this byte as the third byte(no meaning) Wire.endTransmission(); // stop transmitting } void MotorDriectionAndSpeedSet(unsigned char Direction,unsigned char MotorSpeedA,unsigned char MotorSpeedB) { //you can adjust the driection and speed together MotorDirectionSet(Direction); MotorSpeedSetAB(MotorSpeedA,MotorSpeedB); } void setup() { Wire.begin(); // join i2c bus (address optional for master) delayMicroseconds(10000); //wait for motor driver to initialization } void loop() { while(1) { MotorSpeedSetAB(100,20);// 各モータのスピードを指定。0-100 delay(10); //this delay needed MotorDirectionSet(0b1010); //0b1010 Rotating in the positive direction delay(1000); MotorDirectionSet(0b0101); //0b0101 Rotating in the opposite direction delay(500); } } <Grove-I2Cモータドライバを2つ使用し、DCモータ4つを制御する場合> #include <Wire.h> #define MotorSpeedSet 0x82 #define PWMFrequenceSet 0x84 #define DirectionSet 0xaa #define MotorSetA 0xa1 //necessary? #define MotorSetB 0xa5 //necessary? #define Nothing 0x01 #define I2CMotorDriverAdd1 0x0f // Set the address of the I2CMotorDriver #define I2CMotorDriverAdd2 0x0a // Set the address of the I2CMotorDriver void MotorSpeedSetAB(unsigned char MotorSpeedA , unsigned char MotorSpeedB) { MotorSpeedA=map(MotorSpeedA,0,100,0,255); MotorSpeedB=map(MotorSpeedB,0,100,0,255); Wire.beginTransmission(I2CMotorDriverAdd1); // transmit to device I2CMotorDriverAdd Wire.write(MotorSpeedSet); // set pwm header Wire.write(MotorSpeedA); // send pwma Wire.write(MotorSpeedB); // send pwmb Wire.endTransmission(); // stop transmitting } void MotorSpeedSetCD(unsigned char MotorSpeedC , unsigned char MotorSpeedD) { MotorSpeedC=map(MotorSpeedC,0,100,0,255); MotorSpeedD=map(MotorSpeedD,0,100,0,255); Wire.beginTransmission(I2CMotorDriverAdd2); // transmit to device I2CMotorDriverAdd Wire.write(MotorSpeedSet); // set pwm header Wire.write(MotorSpeedC); // send pwma Wire.write(MotorSpeedD); // send pwmb Wire.endTransmission(); // stop transmitting } void MotorPWMFrequenceSet1(unsigned char Frequence) { Wire.beginTransmission(I2CMotorDriverAdd1); // transmit to device I2CMotorDriverAdd Wire.write(PWMFrequenceSet); // set frequence header Wire.write(Frequence); // send frequence Wire.write(Nothing); // need to send this byte as the third byte(no meaning) Wire.endTransmission(); // stop transmitting } void MotorPWMFrequenceSet2(unsigned char Frequence) { Wire.beginTransmission(I2CMotorDriverAdd2); // transmit to device I2CMotorDriverAdd Wire.write(PWMFrequenceSet); // set frequence header Wire.write(Frequence); // send frequence Wire.write(Nothing); // need to send this byte as the third byte(no meaning) Wire.endTransmission(); // stop transmitting } void MotorDirectionSet1(unsigned char Direction) { // Adjust the direction of the motors 0b0000 I4 I3 I2 I1 Wire.beginTransmission(I2CMotorDriverAdd1); // transmit to device I2CMotorDriverAdd Wire.write(DirectionSet); // Direction control header Wire.write(Direction); // send direction control information Wire.write(Nothing); // need to send this byte as the third byte(no meaning) Wire.endTransmission(); // stop transmitting } void MotorDirectionSet2(unsigned char Direction) { // Adjust the direction of the motors 0b0000 I4 I3 I2 I1 Wire.beginTransmission(I2CMotorDriverAdd2); // transmit to device I2CMotorDriverAdd Wire.write(DirectionSet); // Direction control header Wire.write(Direction); // send direction control information Wire.write(Nothing); // need to send this byte as the third byte(no meaning) Wire.endTransmission(); // stop transmitting } void MotorDriectionAndSpeedSet1(unsigned char Direction,unsigned char MotorSpeedA,unsigned char MotorSpeedB) { //you can adjust the driection and speed together MotorDirectionSet1(Direction); MotorSpeedSetAB(MotorSpeedA,MotorSpeedB); } void MotorDriectionAndSpeedSet2(unsigned char Direction,unsigned char MotorSpeedC,unsigned char MotorSpeedD) { //you can adjust the driection and speed together MotorDirectionSet2(Direction); MotorSpeedSetCD(MotorSpeedC,MotorSpeedD); } void setup() { Wire.begin(); // join i2c bus (address optional for master) delayMicroseconds(10000); //wait for motor driver to initialization } void loop() { while(1) { MotorSpeedSetAB(100,20); MotorSpeedSetCD(100,20); delay(10); //this delay needed MotorDirectionSet1(0b1010); //0b1010 Rotating in the positive direction MotorDirectionSet2(0b0101); //0b1010 Rotating in the positive direction delay(1000); MotorDirectionSet1(0b0101); //0b0101 Rotating in the opposite direction MotorDirectionSet2(0b1010); //0b1010 Rotating in the positive direction delay(500); } }