見出し画像

Arduinoでつくる超音波センサーで障害物を避けて走るロボットづくり。その3。完成への道


ロボット作りいよいよ佳境です。金土日と休みを頂きましたので一気に完成させました。作業内容をお伝えしたいと思います。

まずは一段落目として車体の製作についてお伝えします。
車体は以下の材料で製作しました。タミヤの楽しい工作シリーズを主に使用しています。
タミヤ 楽しい工作シリーズ トラック&ホイール
タミヤ 楽しい工作シリーズ ユニバーサルプレート
タミヤ 楽しい工作シリーズ ダブルギアボックス
ただし、ダブルギアボックスには電線をはんだ付けする必要があります。ギア比は選択式ですが一番遅い1/203を選びました。電気系統を乗せるプレートは跳ね上げ式にしました。

駆動系
電気系統を乗せるプレート

次に電気系統について解説します。
以下の材料を用いて製作しました。
Arduino uno
モータードライバー L298N
超音波センサー HC-SR04
ジャンパ線
ブレッドボード
電池 9V

配線は以下のようになります。
超音波センサー (HC-SR04)

  • VCC -> Arduino 5V

  • GND -> Arduino GND

  • Trig -> Arduino デジタルピン 9

  • Echo -> Arduino デジタルピン 10

  • モータードライバ (L298N)

    • IN1 -> Arduino デジタルピン 2

    • IN2 -> Arduino デジタルピン 3

    • IN3 -> Arduino デジタルピン 4

    • IN4 -> Arduino デジタルピン 5

    • ENA (モーターAのPWM) -> Arduino デジタルピン 6

    • ENB (モーターBのPWM) -> Arduino デジタルピン 7

    • VCC -> 電源の+端子

    • GND -> Arduino GND

プログラムは以下のようになります。
// ピン設定
#define trigPin 9
#define echoPin 10
#define in1 2
#define in2 3
#define in3 4
#define in4 5
#define enA 6
#define enB 7

void setup() {
// ピンのモードを設定
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
Serial.begin(9600); // デバッグ用シリアル通信
}

void loop() {
// 距離を測定
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;

Serial.print("Distance: ");
Serial.println(distance);

if (distance < 20) { // 障害物が20cm以内にある場合
// 回避動作
stopMotors(); // 一旦停止
delay(500);
turnRight(); // 右に回転
delay(500);
} else {
moveForward(); // 前進
}
}

void moveForward() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enA, 200); // モーターAの速度
analogWrite(enB, 200); // モーターBの速度
}

void stopMotors() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}

void turnRight() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enA, 200); // モーターAの速度
analogWrite(enB, 200); // モーターBの速度
}

Arduinoやモータドライバ、電池、ブレッドボードは輪ゴムで固定しました。以下の写真が完成図になります。

今後の課題
動くには動いたころロボットですが、課題を多く残しました。以下が課題となります。
①配線が乱雑
②配線が抜けてしまう
③右にしか障害物を避けない。
課題は今後進歩する足掛かりとして重要なものであります。

おわりに。
ロボット作り完成しました。Arduinoでの本格的な工作は初めてでしたが大いに楽しめました。今後はArduinoでの工作を趣味として続けていく所存でありますので、適時経過をアップしていきたいと思います。



この記事が気に入ったらサポートをしてみませんか?