GO-AHEADの日記

GO-AHEADで出版した書籍の紹介をします

Re:50歳から始めるArduino UNO-20

Re:50歳から始めるArduino UNO

amazon kindleを出版しました。


5. 自律移動ロボットの製作

 5.1 ロボットの筐体

 (6)サーボモーター動作チェック

 次にサーボモーターの動作チェックをします。同じユニバーサル基板にサーボモーターの端子が取り付けられるように、pinをハンダ付けします。

 

f:id:GO-AHEAD:20201222105636p:plain

チェックプログラムはこのようになります。

#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)超音波センサー動作チェック
次に、前方の距離が測れるように超音波センサを取り付けます。

f:id:GO-AHEAD:20201222105658p:plain

超音波センサは、サーボモーター上に取り付けることにより、前方だけでなく、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);

}

前方の測定

f:id:GO-AHEAD:20201222105926p:plain

超音波センサの向きを変えて測定できます。

f:id:GO-AHEAD:20201222105936p:plain