- Wiiリモコン+Arduino+LEGO でラジコンを作る(1):材料選定
- Wiiリモコン+Arduino+LEGO でラジコンを作る(2):DCモーターを動かす
- Wiiリモコン+Arduino+LEGO でラジコンを作る(3):USB Host Shield で Bluetooth ドングルを使えるようにする
- 【完成】Wiiリモコン+Arduino+LEGO でラジコンを作る(4):WiiリモコンでDCモーターを操作する
前回で材料がそろいました。
まずはDCモーターを動かします。
いきなり左右キャタピラのモーターを制御するのは面倒ですので、1個で試してみましょう。
出来上がるとこんな感じになります。
これの回路図は次のようになります。
前回書かなかった可変抵抗器と固定抵抗器が含まれていますが、
これらはArduinoでソフトウェア的に代替させることも可能です。
固定抵抗器なしの接続方法については「建築発明工作ゼミ2008」さんが参考になります。
モータードライバ TA7291P
10本のピンが生えていて、上部の鉄板が欠けている側が1番ピンです。
それぞれのピンの役割は次のようになります。
- 1番ピン:GND
グランドピンです。
Arduino の GND に接続します。 - 2番ピン:OUT1
モーターへの出力です。
モーターの片方の端子につなぎます。
動かしたときにモーターが思ったのと逆向きに回ってしまう場合は、
2番ピンと10番ピンを入れ替えればOKです。 - 3番ピン:NC
使いません。
誤って逆に挿した場合、ちょうどこの位置にVs(8番ピン)が来ます。
Vs はモーター電源なので、万が一逆に挿してしまっても
回路が壊れないように3番ピンをアースしてあるんだと思います。
これを考えた人って賢いですね。 - 4番ピン:Vref
モーター制御ピンです。
普通はここには抵抗器ではなくArduinoのPWM出力を繋いでモーターの回転速度を制御します。
その場合は5番6番ピンをデジタル出力するようにArduinoのプログラムを書きます。
今回はその代わりに4番を固定抵抗にして5番6番をPWM出力にすることで回転速度を制御しています。
どちらでもモーター制御は可能です。
「ところでPWMって何?」
という方は前掲の「建築発明工作ゼミ2008」さんで詳しく説明されていますのでご参照ください。 - 5番ピン:IN1
モーター制御用の入力です。
今回は Arduino の6番ピンにつなぎます。
IN1をHIGH、IN2をLOWにするとモーターが正転します。
IN1をLOW、IN2をHIGHにするとモーターが反転します。
Vrefの電圧で回転速度を制御します。
というのが普通の使い方です。
今回の場合、Vrefの電圧を固定にする代わり、
IN1とIN2の電圧を変化させることで回転速度と方向を一気に制御します。
つまり、TA7291Pの内部では IN1 - Vref と IN2 - Vref の値を元に
モーター電源からモーターに流す電圧を変化させているようですね。 - 6番ピン:IN2
モーター制御用の入力です。
5番ピンと組み合わせて使います。
今回はArduinoの5番ピンにつなぎます。
IN1, IN2 の両方が LOW だったらモーターは停止します。 - 7番ピン:Vcc
Arduino の 5V ピンにつなぎます。 - 8番ピン:Vs
モーター用電源です。
最大20Vまで入力できます。
Arduinoに20Vを繋ぐと壊れてしまうのでArduino用とモーター用の電源を分ける必要があります。
Vs の電圧がVrefの電圧より低くなるとTA7291Pが壊れるそうです。
モーター用電源をエネループ4本(1.2V x 4)にするとUSBの5Vより
下がってしまう可能性があるので注意してください。
その場合は USB 電源をやめて Arduino の 5V ピンにモーター用電源も繋ぐと動く可能性がありますが、
うっかり Arduino の許容電圧以上を掛けてしまうと今度は Arduino が壊れるため、
それはそれで注意が必要です。
余談ついでに言うと
「モーターをパワフルに動かしたいがバッテリーも1つにまとめたいぜ!」
という欲張りな方は20Vを分圧して5Vに落として繋ぐ方法もあります。
QuadcopterにArduinoを載せる場合などにはこの方法で軽量化することもありますが
電圧が不安定になるのであまりお奨めしません。 - 9番ピン:NC
使いません。
万が一、左右反転して挿してしまっても、OUT1(2番ピン)の位置になってモーター回路がカットされます。 - 10番ピン:OUT2
モーターへの出力です。
Arduino UNO
やっと Arduino の登場です。
Arduino へのスケッチ(プログラム)書き込み方法については様々なサイトで紹介されていますので、
簡単な説明だけに留めておきます。
- Arduino公式サイトから Arduino IDE をダウンロードしてインストールします。
- Arduino UNO を USB ケーブルでPCにつなぎます。
- Arduino IDE を起動すると既に認識されているはずです。
今回使用した Arduino IDE のスケッチは次の通りです。
このスケッチは「hiramine.com」さんを参考にさせていただきました。
というか、ピン番号以外ほとんどそのままです。すみません。
このプログラムを Arduino に流し込んで可変抵抗器を動かすと動画のように動くはずです。
レゴはお好みで適当に。
#define IN1PIN 5
#define IN2PIN 6
#define VOLUMEPIN 0
void setup()
{
pinMode(IN1PIN, OUTPUT);
pinMode(IN2PIN, OUTPUT);
}
void loop(){
int iValue = analogRead(VOLUMEPIN);
int iMotor = Map(iValue, 0, 1023, -255, 255, true);
MotorDrive( IN1PIN, IN2PIN, iMotor );
delay(15);
}
int Map(int iIn, int iIn1, int iIn2, int iOut1, int iOut2, boolean bConstrain = false) {
double dValue = (double)(iIn - iIn1) * (iOut2 - iOut1) / (iIn2 - iIn1) + iOut1;
int iValue = (0 < dValue) ? (int)(dValue + 0.5) : (int)(dValue - 0.5);
if( bConstrain ) {
int iOutMin, iOutMax;
if( iOut1 < iOut2 ){
iOutMin = iOut1;
iOutMax = iOut2;
} else {
iOutMin = iOut2;
iOutMax = iOut1;
}
if( iOutMin > iValue ){
return iOutMin;
}
if( iOutMax < iValue )
{
return iOutMax;
}
return iValue;
}
}
void MotorDrive( int iIn1Pin, int iIn2Pin, int iMotor ){
if( -5 < iMotor && iMotor < 5 ){
digitalWrite(iIn1Pin, LOW);
digitalWrite(iIn2Pin, LOW);
} else if( 0 < iMotor ) {
analogWrite(iIn1Pin, iMotor);
analogWrite(iIn2Pin, 0);
} else {
analogWrite(iIn1Pin, 0);
analogWrite(iIn2Pin, -iMotor);
}
}
スケッチの説明
- void setup()
Arduino起動時に実行されます。
Arduinoのスケッチを作る際は必ず必要な関数です。
pinMode(PIN,MODE) は第一引数に指定したピンを第二引数のモードに設定する関数です。 - void loop()
setup() で初期化された後、繰り返し実行されます。
これも必ず必要な関数です。
analogRead(PIN) は引数に指定したアナログピンからアナログ値を読む関数で、0~1023の値が返ります。
何もしないとものすごい勢いでループが回ってしまうので delay(N) で適当にスリープを入れています。 - int Map
第一引数で与えた二、三引数の範囲内の値を四、五引数の範囲に丸めています。
Arduino 自体にも map という関数があるので見比べると参考になるかもしれません。
Arduino map - void MotorDrive
可変抵抗の値がプラス側だったらモーターを正転させ、マイナス側だったら逆転させています。
digitalWrite(PIN,VALUE) は VALUE=HIGH だと PIN が 5V になります。
LOW だと 0V になります。
analogWrite(PIN,VALUE) は PWM ピンの場合、PWM で電圧が VALUE 相当になります。
アナログピンでも PWM ピンでもないデジタルピンの場合は正しく動作しません。
以上でモーター1個の制御は出来るようになりましたので、
次回からはいよいよキャタピラ部分を作っていきます。
0 件のコメント:
コメントを投稿