・目的
最終的な目標は距離センサとATmega328Pを使って
自立走行できるロボットを作る。
超音波センサで距離を測り障害物に
近づいたらそれを避けて直進するように
する。
今回はブレッドボード上に回路を組む
ところまで。
・使用したもの
Arduino uno
ATmega328P
TA7291P
HC-SRO4
ブレッドボード
XHコネクタ
ユニバーサル基板
16Mhz振動子
タミヤモーター
レギュレータ5V1A
・方法
1)Arduino unoで回路を組み立てる
ブレッドボードにArduino を使って回路を組み立てる
回路図は図1に示した。
図1:プロトタイプ
超音波センサとモータードライバの詳しい使い方は
以下から。
2)コード
コードを図に示した。
const int で接続するピンを
宣言しておく
また前進、後退、右、左、停止、距離測定
を行う関数を作成
const int Pin1 = 6;
const int Pin2 = 7;
const int Pin3 = 9;
const int Pin4 = 10;
const int pwm1 = 5;
const int pwm2 = 11;
const int Trig = 3;
const int Echo = 4;
void setup() {
pinMode(Pin1,OUTPUT);
pinMode(Pin2,OUTPUT);
pinMode(Pin3,OUTPUT);
pinMode(Pin4,OUTPUT);
pinMode(pwm1,OUTPUT);
pinMode(pwm2,OUTPUT);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
//Serial.begin(9600);
}
void forward(int val){
digitalWrite(Pin1,LOW);
digitalWrite(Pin2,HIGH);
analogWrite(pwm1,val);
digitalWrite(Pin3,HIGH);
digitalWrite(Pin4,LOW);
analogWrite(pwm2,val);
}
void reverse(int val){
digitalWrite(Pin1,HIGH);
digitalWrite(Pin2,LOW);
analogWrite(pwm1,val);
digitalWrite(Pin3,LOW);
digitalWrite(Pin4,HIGH);
analogWrite(pwm2,val);
}
void right(int val){
digitalWrite(Pin1,LOW);
digitalWrite(Pin2,HIGH);
analogWrite(pwm1,val);
digitalWrite(Pin3,LOW);
digitalWrite(Pin4,HIGH);
analogWrite(pwm2,val);
}
void left(int val){
digitalWrite(Pin1,HIGH);
digitalWrite(Pin2,LOW);
analogWrite(pwm1,val);
digitalWrite(Pin3,HIGH);
digitalWrite(Pin4,LOW);
analogWrite(pwm2,val);
}
void despin() {
digitalWrite(Pin1,LOW);
digitalWrite(Pin2,LOW);
digitalWrite(Pin3,LOW);
digitalWrite(Pin4,LOW);
}
float echo() {
int dur;
float distance;
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
dur = pulseIn(Echo,HIGH);
distance = (float)dur*0.017;
return distance;
}
void loop() {
float a,b;
float dis;
float Distance;
dis = echo();
if(dis >= 0.5){
Distance = dis;
}
if(Distance <= 5.0){
//Serial.println(Distance);
reverse(50);
delay(5000);
right(50);
delay(5000);
despin();
a = echo();
left(50);
delay(10000);
despin();
b = echo();
delay(5000);
if(a >= b){
right(50);
delay(10000);
}
}else{
//Serial.println(Distance);
forward(200);
delay(1000);
}
}
3)ATmega328Pで動かしてみる
今度はArduinoからATmega328P
に置き換えてみる
図のコードをATmega328Pに書き込んで
ブレッドボード上に繋いでみた
書き込みは以下の記事のように
行った。