Re:50歳から始めるArduino UNO-20
Re:50歳から始めるArduino UNO
amazon kindle版を出版しました。
5. 自律移動ロボットの製作
5.1 ロボットの筐体
(6)サーボモーター動作チェック
次にサーボモーターの動作チェックをします。同じユニバーサル基板にサーボモーターの端子が取り付けられるように、pinをハンダ付けします。
チェックプログラムはこのようになります。
#include <Servo.h> //サーボモータのヘッダー
Servo srv1; //サーボモータを使う宣言
void setup() {
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
srv1.attach(7,650,2250);
}
void loop() {
analogWrite(3,127);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
delay(3000);
srv1.write(0);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
delay(3000);
srv1.write(45);
analogWrite(3,255);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
delay(3000);
srv1.write(90);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
delay(3000);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
analogWrite(6,127);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
delay(3000);
srv1.write(135);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
delay(3000);
analogWrite(6,255);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
delay(3000);
srv1.write(180);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
delay(3000);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
(7)超音波センサー動作チェック
次に、前方の距離が測れるように超音波センサを取り付けます。
超音波センサは、サーボモーター上に取り付けることにより、前方だけでなく、180°方向の測定ができます。
ロボットを組上げる前に、全体のプログラムを同時に動作させて、モータ動作、サーボモータ動作を行いながら、超音波センサによって、距離が測れるかテストプログラムです。
#include <Servo.h> //サーボモータのヘッダー
Servo srv1; //サーボモータを使う宣言
void distance(){
unsigned long i;
float d;
pinMode(13, OUTPUT);//13pinを出力に設定する
digitalWrite(13, LOW);
delayMicroseconds(2);//2μs LOWとする。
digitalWrite(13, HIGH);
delayMicroseconds(5);//5μs HIGHで超音波を発振
pinMode(13, INPUT);//13pinを入力に設定する
i = pulseIn(13, HIGH);//HIGHになるまでの時間を計測する。単位μsec
i=i/2; //片道の時間を測定 音速を340m/sとすると、1μsecで、0.34mm進む
d=float(i)*0.34;
Serial.print(d);
Serial.println("mm");
}
void setup() {
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
srv1.attach(7,650,2250);
Serial.begin( 9600 );
}
void loop() {
analogWrite(3,127);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
distance();
delay(3000);
srv1.write(0);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
distance();
delay(3000);
srv1.write(45);
analogWrite(3,255);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
distance();
delay(3000);
srv1.write(90);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
distance();
delay(3000);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
analogWrite(6,127);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
distance();
delay(3000);
srv1.write(135);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
distance();
delay(3000);
analogWrite(6,255);
digitalWrite(5,HIGH);
digitalWrite(4,LOW);
distance();
delay(3000);
srv1.write(180);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
distance();
delay(3000);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
前方の測定
超音波センサの向きを変えて測定できます。