商品カテゴリー

Grove-I2Cモータドライバ_SeeedStudio

型番 ROB72212P
販売価格

1,944円(税144円)

在庫数 5[個]
購入数

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インタフェースにより他のデバイスとデイジーチェーン接続が可能です。

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モータドライバのアドレスを確認します。
GroveI2Cモータドライバアドレス
Groveベースシールドを使用し、Grove-I2Cモータドライバを接続します。
GroveI2Cモータドライバ接続

#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);
}
}