SparkFun L298で作る最シンプルなArduinoライントレースロボット
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | 制御用マイコン |
| SparkFun デュアルHブリッジ モータードライバー L298 | 1 | 2ch DCモーター駆動 |
| IRラインセンサー (反射型) | 2 | 左/右ライン検出用 |
| ジャンパーワイヤー | 1式 | 配線用 |
必要な工具
- グルーガン
- ドライバー
- ライントレースロボットキット (シャーシ、モーター、ホイール含む)
使用ソフトウェア
- Arduino IDE
プロジェクト概要
ライントレースロボットはロボティクスの「Hello World」的存在です。このロボットは非常にシンプルで、初心者でも簡単に製作できます。2つのIR反射型センサーで黒線(ライン)を検出し、左右のモーターを制御してラインを追従します。
Arduinoスケッチ
基本的な4状態制御(前進、右折、左折、停止)を実装しています。
/*------- 入力ピン定義 -------*/ #define LS 2 // 左センサー #define RS 5 // 右センサー /*------- 出力ピン定義 -------*/ #define LM1 11 // 左モーター制御1 #define LM2 10 // 左モーター制御2 #define RM1 9 // 右モーター制御1 #define RM2 6 // 右モーター制御2 void setup() { pinMode(LS, INPUT); pinMode(RS, INPUT); pinMode(LM1, OUTPUT); pinMode(LM2, OUTPUT); pinMode(RM1, OUTPUT); pinMode(RM2, OUTPUT); } void loop() { // 両センサーがライン検出せず (白地) → 前進 if ((digitalRead(LS) == LOW) && (digitalRead(RS) == LOW)) { MoveForward(); } // 両センサーがライン検出 (黒線上) → 停止 if ((digitalRead(LS) == HIGH) && (digitalRead(RS) == HIGH)) { Stop(); } // 左センサーのみ白、右センサーが黒 → 右に曲がる (左モーター前進、右停止) if ((digitalRead(LS) == LOW) && (digitalRead(RS) == HIGH)) { TurnLeft(); } // 左センサーが黒、右センサーのみ白 → 左に曲がる (右モーター前進、左停止) if ((digitalRead(LS) == HIGH) && (digitalRead(RS) == LOW)) { TurnRight(); } } void MoveForward() { analogWrite(LM1, 50); analogWrite(LM2, 0); // 左前進 analogWrite(RM1, 50); analogWrite(RM2, 0); // 右前進 delay(20); } void TurnRight() { analogWrite(LM1, 0); analogWrite(LM2, 60); // 左後退 analogWrite(RM1, 60); analogWrite(RM2, 0); // 右前進 delay(30); } void TurnLeft() { analogWrite(LM1, 60); analogWrite(LM2, 0); // 左前進 analogWrite(RM1, 0); analogWrite(RM2, 60); // 右後退 delay(30); } void Stop() { analogWrite(LM1, 0); analogWrite(LM2, 0); analogWrite(RM1, 0); analogWrite(RM2, 0); delay(20); }回路図
配線のポイント
- IRセンサー: VCC→5V, GND→GND, OUT左→D2, OUT右→D5。センサーは黒線上でHIGH、白地でLOWを出力するタイプを想定。
- L298N: IN1→D11, IN2→D10 (左モーター), IN3→D9, IN4→D6 (右モーター)。ENA/ENBはジャンパーで常時HIGH (PWM制御はINピンで実施)。
- 電源: モーター用電池ボックスをL298NのVCC/GNDに接続。ArduinoはUSBまたは別電源。
動作原理と調整のコツ
4状態の論理
左センサー 右センサー 状態 動作 LOW (白) LOW (白) ライン中央 前進 HIGH (黒) HIGH (黒) ライン外れ/太線 停止 LOW (白) HIGH (黒) 右にはみ出し 左旋回 (右モーター後退/停止) HIGH (黒) LOW (白) 左にはみ出し 右旋回 (左モーター後退/停止) 改良のヒント
- PID制御導入: 単純なON/OFF制御ではなく、センサー値のアナログ読み取りとPID制御でスムーズな追従が可能。
- センサー増設: 3-5個のセンサー配列でより正確な位置検出と高速走行が可能。
- 速度調整:
analogWriteの値(50, 60等)でモーター速度を調整。バッテリー電圧低下時は値を上げる必要あり。 - コース設計: 急カーブや分岐がある場合、停止条件(両センサーHIGH)を見直し、交差点検出ロジックを追加。
- シャーシ剛性: フレームが歪むとセンサー高さが変わり誤動作の原因に。しっかり固定すること。
学習ステップとしての位置づけ
このプロジェクトは以下のスキル習得に最適です:
- マイコンによるGPIO制御 (入力読み取り、PWM出力)
- モータードライバー (Hブリッジ) の使い方
- フィードバック制御の基本 (センサー→判断→アクチュエーター)
- ロボットシャーシの機械的組み立て
- トラブルシューティング (配線ミス、ノイズ、電源降下等)
このベースから、迷路解析ロボット、障害物回避ロボット、Bluetooth/スマホ制御ロボットなどへステップアップできます。
製造プロセス
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- V4スピードラインフォロワーロボット – Arduino Nanoベースの高度な自律走行
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino Nanoで音声制御ロボットを自作
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- PiBot:Arduino駆動の精密ピアノ演奏ロボット
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム