今回のDCモータは、電気を流すと回り、電気を止めると回転も止まり、逆方向に電気を流すと逆回転するDC(直流式)モータです。模型に使われることが多いモーターです。マブチモータが有名ですよね。
DCモータ以外に、サーボと呼ばれるモータもありますが、これは、また今度です。
子供のころから慣れ親しんだ、たくさんの電気を流すと高速に回転し、電池が無くなってきて流れる電流も少なくなるとゆっくり回転、電気を流さないと止まり、+と-を逆にすると逆回転する動きは、良くわかっていますが、これをArduinoから直接制御するとなるとちょっと大変なんですって。
たとえば、ArduinoはDCモータほど、電気的におおざっぱではなく、モータが動き出す時に流れる大きな電流でArduino本体が壊れたりする恐れがあるそうです。
なので、モータを制御する専用のICを使うことがおすすめです。
今回使用するのは、東芝 TA7291P です。
早い回転、遅い回転、止める、逆回転なんかを指定する信号を、Arduinoからこの モータ制御ICへ伝えれば、その指示通りに動かしてくれる優れものです。
さっそく、回路図からです。
ゆっく落ち着いて、電池をつなぐのは最後の最後、何度も確認しないと、誤配線で、焦げちゃいそうです。
ちなみに私は、電池の+と-を逆につないで、ものすごくTA7291Pが熱くなってしまいました。
もう少しで、焦げていました。好奇心で放熱板を触ったら、指先が火傷並に痛かったです。
ご注意を。
スケッチは、 こんな感じです。応用すれば、いろいろできますが、今回は、まず、きちんと動作できることを確認する意味で、こういうスケッチにしました。
void setup(){
pinMode(1,OUTPUT); //信号用ピン
pinMode(2,OUTPUT); //信号用ピン
pinMode(11,INPUT); //スイッチ
}
void loop(){
int val;
if(digitalRead(11)==HIGH){
val=300; // ゆっくりめで回転
}else{
val=254; //止める
}
//静止/正転/逆転の状態に分けてプログラムする
if(val>=255 && val<=256){ //静止:255~256
//LOW,LOWでデジタル出力
digitalWrite(1,LOW);
digitalWrite(2,LOW);
}else if(val>256){ //正転:257~511
//HIGH,LOWでデジタル出力
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
//valが大きいほど出力値も大きくなる
analogWrite(3,val-256); //出力値:1~255
}else{ //逆転:0~254
//LOW,HIGHでデジタル出力
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
//valが小さいほど出力値は大きくなる
analogWrite(3,255-val); //出力値:1~255
}
}
後半部分の analogWritでは、スピードの調整、digitalWrite 1番ピンと2番ピンでは回転方向を指示しています。
タクトスイッチを押すと回転し、手を離すと回転が止まる動作を確認し、大成功です。
・電子工作の基本100
・図解でわかるはじめての電子回路
・Android×Arduinoでつくるクラウド連携デバイス―Android ADKで電子工作
0 件のコメント:
コメントを投稿