Arduinoで作る自律走行ミニローバー
必要な部品と材料
- Arduino Nano R3 × 1
- ブレッドボード (汎用) × 1
- ジャンパーワイヤ (汎用) × 1
- 超音波距離センサー HC-SR04 × 1
- Adafruit マイクロ連続回転サーボ FS90R用ホイール × 2
- Adafruit 連続回転マイクロサーボ FS90R × 2
- LED (汎用) × 2 (色は任意。走行中に点滅させて楽しむ用)
- 単3電池ボックス (4本用) × 1 (バレル型を使用しましたが、これは参考です)
- SparkFun ボールキャスター メタル 3/8インチ × 1
- プラスチック容器 × 1 (安価なタッパーウェアやマーガリンの空き箱 500gサイズなど)
- シール × 1 (デコレーション用の例)
必要な工具と機器
- ホットボンド (汎用)
- カッターナイフ
アプリとオンラインサービス
- Arduino IDE
プロジェクト概要
背景
甥(9歳)と姪(7歳)が、以前私が作った障害物回避ロボットの動画を見て大興奮しました。
あのロボットのチュートリアルは残念ながら公開できません。ハードディスクがクラッシュし、バックアップやDropbox、GitHubの大切さを知るより前の作品だからです。 :)
そこで、教育的で楽しい、もっとシンプルなロボットを作れないかと考え、このミニローバーが生まれました。
シャーシは元々カニカマが入っていた箱です。これがちょうど良いサイズでした(父が箱買いして食べていたおかげです :D)。マーガリンの空き箱も適しています。
免責事項として、ここでは子供たちにほぼすべての作業をさせた手順を記します。私は決してそれを推奨するものではありません。保護者・保護者代理・叔父叔母・ベビーシッターなど、責任ある大人が各子供の能力を見極めて判断してください。箱は非常に柔らかいプラスチックだったので、カッターナイフを自分や自分の手足に向けないよう注意させた上で、甥と姪に切らせました。LED用の穴を開ける際は、コードレス電動ドライバーの小さなビットを使って怪我のリスクを減らしました。
幸い、スタンバイしていた救急セットは未使用のままです。:)
繰り返しますが、判断するのはあなたという大人です!
回路
サーボ2個の接続方法を少し複雑にしてしまいました。

「子供たち」と言っていますが、今回の「子供たち」には妹(35歳)と母(65歳)も含まれ、彼女たちも実際の子供たちと同じくらい「ロボットと工作」の午後を楽しんでいました。:)


参加者には、ブレッドボードを実物大(1:1)で印刷したA4用紙と、正しい色・長さのジャンパーワイヤを配りました。
回路が組み上がったら、プログラムをArduinoに書き込みます。コードにはコメントを入れているので、必要に応じて調整できます。配線が正しければ、サーボが回り始め、LEDが点滅します。センサーの前に手をかざすと、片方のサーボが止まり、もう片方が一瞬逆回転します。
準備完了!
組み立て
いよいよ「シャーシ」に穴を開けます。
- 前面にセンサー位置をマークし、「目」の穴を切り抜きます。
- 側面でホイール位置を測り、箱の底面ギリギリにサーボが入る大きさで穴を切ります。取り付けブラケットが貫通しないよう、ギリギリのサイズにします。
- 小さなドリルビットでLED用の小さな穴を2つ開けます。
- 箱の底面後方にキャスターホイールをネジ止め(またはホットボンドで固定)します。



すべてを箱に入れ、ホットボンドで固定します。
接着剤が固まったらホイールをサーボに取り付けます。
箱をデコレーション!(写真を投稿してくれたら最高です!)

電池を入れて、部屋の中をランダムに動き回るミニローバーを眺めましょう。電池が切れるまで、または音がうるさくなるまで、あるいは犬に奪われるまで! :D
コード
- LittleRover
LittleRover (Arduino)
4ピン超音波センサー用のコードです。
#include <Servo.h>
/* 3ピンセンサーの場合は6行目を有効にし、7行目をコメントアウトしてください */
//int distanceR = A0; // Triggerピン
int distance = 6; // Triggerピン
int pingDelay = 10; // 超音波センサーのパルス長
int distanceR = A0; // Echoピン
int led1 = 8, led2 = 9; // LED
Servo leftPower;
Servo rightPower;
unsigned long flashTime;
unsigned long nextSensorTime;
float obstacleDist = 0.0f;
void setup() {
//Serial.begin(115200);
leftPower.attach(3);
rightPower.attach(5);
leftPower.write(90);
rightPower.write(90);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
delay(1000);
}
void loop() {
LEDs();
/* センサーのチェックを秒5回に制限して電池消耗を防ぐ。
この数を増やせばチェック頻度は下がるが、壁に突っ込む可能性がある。 */
if(millis() - nextSensorTime > 200){
nextSensorTime = millis();
/* センサーが混乱して値を返さないことがあるため、2回読み取る */
float reading1 = TakeReading();
delay(100);
float reading2 = TakeReading();
Serial.println(reading1);
Serial.println(reading2);
// 大きい方の距離を採用
obstacleDist = reading1 >= reading2 ? reading1 : reading2;
// 距離が10cm未満なら旋回、そうでなければ直進
if(obstacleDist < 10.0f){
//Serial.println("turn");
turn();
}else{
//Serial.println("forward");
forward();
}
}
}
void LEDs(){
if(millis() - flashTime > 1000) flashTime = millis();
if(millis() - flashTime < 500){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}else if(millis() - flashTime > 500){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
}
void forward(){
/* 後退してしまう場合は 135 と 45 を入れ替えてください。 */
leftPower.write(135);
rightPower.write(45);
}
void turn(){
/* 反対方向に曲がらせたい場合は、92-93行目を有効にし、95-96行目をコメントアウトしてください。 */
//leftPower.write(90);
//rightPower.write(135);
leftPower.write(45);
rightPower.write(90);
delay(350);
}
float TakeReading(){
unsigned long echo = 0;
float result = 0.0f;
pinMode(distance, OUTPUT);
digitalWrite(distance, LOW);
delayMicroseconds(2);
digitalWrite(distance, HIGH);
delayMicroseconds(pingDelay);
digitalWrite(distance, LOW);
pinMode(distanceR, INPUT);
digitalWrite(distanceR, HIGH);
echo = pulseIn(distanceR, HIGH, 38000);
result = echo / 58.138;
return result;
}
回路図
Fritzingファイル: littlerover_87IypZOgwm.fzz
製造プロセス
- Windows IoT Core搭載RoverをRaspberry Pi 2で構築 - 初心者から上級者まで
- Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- 水と光で作る疑似炎エフェクト──Arduino Uno+NeoPixel Stick
- 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- ポータブル距離検出器:Arduino Nano自作キット(HC-SR04、18650電源、3Dプリントケース付き)