障害物を発見したら「自動ブレーキ」をするロボットカー [Arduino]
ロボットカーで障害物との衝突を回避する「自動ブレーキ」を実現します。今回は「超音波距離センサー」で障害物を認識して15cm以内に障害物がある場合は自動ブレーキをかけます。
ロボットカーは最後まで組み立てていませんが、衝突を回避する原理はこんな感じになります。これ以外には赤外線やレーザー、画像処理などを使用する手法もあります。
使用部品・材料
総額で約3,844円です。(Arduino本体の値段を除く)
| 部品/材料 | 値段 | 備考 |
|---|---|---|
| サンハヤト SAD-101 ニューブレッドボード (2個) | ¥1000 | Amazon.com |
| 超音波距離センサー HC-SR04 | ¥400 | 秋月電子の通販コード(M-11009) |
| モータードライバ(TA7291P) (2個) | ¥300 | 秋月電子の通販コード(I-02001) |
| タミヤ ユニバーサルプレート 2枚セット (70157) | ¥468 | Amazon.com |
| 3mmプラネジ(7mm)+六角スペーサー(14mm)セット | (任意) | ユニバーサルプレートの結合用。 秋月電子の通販コード(P-01861) |
| タミヤ ツインモーターギヤーボックス (70097) | ¥587 | ギアは低速ギヤー比203:1のCタイプを使用。 Amazon.com |
| タミヤ マンモスダンプ 17013 | ¥819 | タイヤ2個のみを使用しています。 Amazon.com |
| 電池ボックス 単3x3本 リード線 | ¥60 | モーター用。 秋月電子の通販コード(P-02667) |
| 単3電池 3本 | ¥100 | モーター用。 100円ショップ |
| コネクタ付コード(みの虫×ジャンパーワイヤ) | ¥110 | 電池ボックス用。 秋月電子の通販コード(C-08916) |
※超音波距離センサー及びモータードライバの詳細は表内のリンク先をご覧ください。
モーターにはリード線がありませんので「耐熱電子ワイヤー」(P-06756)や片側をカットした「ジャンパーワイヤー」を半田付けして下さい。その2本を繋ぐ場合は2本のリード線をつなぐをご参考にして下さい。
配線図
2つのタイヤが同じ回転方向になるように、モーターの配線を状況に応じて変更して下さい。(配線図で言うと、モーターの黄色・緑色を逆にする)
スケッチ(プログラム)
超音波距離センサーで障害物が15cm以内に出現すると、モーターの回転を停止して自動ブレーキをします。
int PIN_R_IN1 = 3;
int PIN_R_IN2 = 4;
int PIN_R_VREF = 5; // PWM
int PIN_L_IN1 = 7;
int PIN_L_IN2 = 8;
int PIN_L_VREF = 9; // PWM
int TRIGGER_PIN = 10;
int ECHO_PIN = 11;
boolean OnFlg = false;
void setup(){
Serial.begin(9600);
pinMode(PIN_R_IN1,OUTPUT);
pinMode(PIN_R_IN2,OUTPUT);
pinMode(PIN_L_IN1,OUTPUT);
pinMode(PIN_L_IN2,OUTPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// モーターの回転速度を中間にする
analogWrite(PIN_R_VREF,127);
analogWrite(PIN_L_VREF,127);
}
void loop(){
// [超音波の発射]
// ※トリガーとなるHIGH時間は「10us ~ 60ms」まで
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(5);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(18);
digitalWrite(TRIGGER_PIN, LOW);
// [距離の取得]
// ※echoピンに入力されるパルスの長さを検出する(HIGH時間の取得/μ秒)
int duration = pulseIn(ECHO_PIN, HIGH);
if (duration > 0) {
// 距離(cm) = ECHOのHIGH時間 x 超音波速度(0.034cm/μ秒) / 2
float distance = (duration * 0.034) / 2;
Serial.print(distance);
Serial.println("cm");
if(distance >= 15){
if (!OnFlg){
// モーター回転
Serial.println("ok");
digitalWrite(PIN_R_IN1,LOW);
digitalWrite(PIN_R_IN2,HIGH);
digitalWrite(PIN_L_IN1,HIGH);
digitalWrite(PIN_L_IN2,LOW);
OnFlg = true;
}
}else{
// モーター停止
OnFlg = false;
digitalWrite(PIN_R_IN1,HIGH);
digitalWrite(PIN_R_IN2,HIGH);
digitalWrite(PIN_L_IN1,HIGH);
digitalWrite(PIN_L_IN2,HIGH);
}
}
delay(200);
}
今回の超音波センサーはカラダに当てると若干、不快感があるので、人体には向けないほうが良いかもです。
スポンサーリンク
掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。
関連記事
公開日:2017年12月02日 最終更新日:2017年12月09日
記事NO:02615
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









