pusuke0418’s diary

異常にマルチタスクな社内SEのブログ

Arduino nanoとモータドライバTA7291PとIR赤外線障害物回避センサLM393

Arduino nano 3.0互換ボードATMEGA 328 Pを介して、IR赤外線障害物回避センサLM393で物体を検知していなければモータを回し、検知するとモータを止める。上記の他に準備したものは、電池ボックス(単三×2)とタミヤのギヤボックスセット

今回つかっているこのIRセンサは、検知距離の調節までは厳しかった。本体のメータを調節しても、数センチの距離で検知しているか、していないか程度が測定可能(ただし安い。Amazonでも5個550円だった)

物理的な接続とスケッチは下記のとおり。参考サイトも下記の中に記載。検出状態をシリアルモニタに出力させながら実施しているので、コンソール(USBケーブル)はPCにつないだままで実行している。

/*モータドライバ接続
 *https://fabkura.gitbooks.io/arduino-docs/content/chapter17.html 
 * モータドライバ#10 OUT2      --- モータ(+)
 * モータドライバ#9  使用無し   --- 無し
 * モータドライバ#8  出力側電源 --- 電池ボックス(+)
 * モータドライバ#7  電源+    --- 電源5V=PIN5V
 * モータドライバ#6  IN2(信号2) --- digital#2=PIN2
 * モータドライバ#5  IN1(信号1) --- digital#4=PIN4
 * モータドライバ#4  制御電源(速度) --- digital#3(PWM)=PIN3
 * モータドライバ#3  使用無し   --- 無し
 * モータドライバ#2  OUT1       --- モータ(-)
 * モータドライバ#1  GND        --- GND
 * 
 * *電池ボックス(-)                   --- GND
 */

/*モータの動作参考
 * https://www.petitmonte.com/robot/motor_driver_ta7291p.html
 */

/*赤外線センサ接続
 * OUT --- digital#12=PIN12
 * GND --- GND
 * VCC --- 電源5V=PIN5V
 * センサはデジタルで通常"1"を返し、検知時に0を返す
 */

int val = 0;                                      //for Infrared sensor

void setup() {
  pinMode(2,OUTPUT); //IN2
  pinMode(4,OUTPUT); //IN1
  pinMode(12,INPUT); //infrared sensor 
  Serial.begin(9600);
}

void loop() {
  analogWrite(3,255);                    //モーターの回転速度を設定。最大にしている
  
  val = digitalRead(12);                 //赤外線センサの読み取り用
  if (val==1) {                               //センサが何も検出していない
     //モータを回転
  Serial.println(val);                      //シリアルモニタにセンサの状態を出す用  
  digitalWrite(4,HIGH);
  digitalWrite(2,LOW);
  delay(1000);
  } else {                                        //センサが検出した条件
  //ブレーキ
  Serial.println(val);                      //シリアルモニタにセンサの状態を出す用
  digitalWrite(4,HIGH);
  digitalWrite(2,HIGH);
  delay(1000);
  }
}