4WD赤外線リモコン制御 Arduinoロボットカーの製作
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| 赤外線リモコン受信モジュールキット (WINGONEER等) | 1 | 受信機+リモコン付き |
| SainSmart L298N デュアルHブリッジ モータードライバー | 1 | 2ch DCモーター駆動用 |
| 4WDロボットカーチャンネルキット | 1 | シャーシ、モーター4個、ホイール含む |
| Arduino UNO | 1 | 制御用マイコン |
必要な工具
- はんだごて
プロジェクト概要
Instructablesで公開されていたクローラー型ロボットをベースに、4輪駆動(4WD)版としてリビルドしました。オリジナル設計ではモーター駆動時に発生するノイズ(モーターが発電機のように働き、グラウンド線で干渉)がIR受信機に悪影響を与えていました。これを解決するため、IR受信機のピン割り当てと配線を見直しています。
シャーシ組み立て
SainSmartローバーキットの説明書に従って車体を組み立てます。
IR受信機の配線 (ノイズ対策済み)
int receiver_pin = 4; // IR受信機 OUT → Arduino D4
int vcc = 5; // IR受信機 VCC → Arduino D5 (電源供給用)
int gnd = 6; // IR受信機 GND → Arduino D6 (GND供給用)
Arduinoのデジタルピンから直接VCC/GNDを供給することで、モーター系のノイズが乗った共通グラウンドを避けています。
L298N モータードライバー接続
モーターA (右側2輪)
int enA = 8; // PWM速度制御
int in1 = 12; // 方向制御1
int in2 = 11; // 方向制御2
モーターB (左側2輪)
int enB = 7; // PWM速度制御
int in3 = 10; // 方向制御1
int in4 = 9; // 方向制御2
L298NのGNDはArduinoのGNDと共通接続。
L298N → モーター接続
モーターセットA (右側)
- モーター+ (赤) → OUT4
- モーター- (黒) → OUT3
モーターセットB (左側)
- モーター+ (赤) → OUT2
- モーター- (黒) → OUT1
バッテリー → L298N: + (赤) → VCC, - (黒) → GND
Arduinoスケッチ (IRリモコン制御)
IRremoteライブラリが必要です(ライブラリマネージャからインストール)。リモコンのボタンコード(0xFF18E7等)は使用するリモコンに合わせて変更してください。
#include <IRremote.h>
char command;
int receiver_pin = 4;
int vcc = 5;
int gnd = 6;
int statusled = 13;
IRrecv irrecv(receiver_pin);
decode_results results;
// モーターA (右)
int enA = 8;
int in1 = 12;
int in2 = 11;
// モーターB (左)
int enB = 7;
int in3 = 10;
int in4 = 9;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(statusled, OUTPUT);
digitalWrite(statusled, LOW);
// モーター制御ピンを出力に
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// IR受信機用電源ピン
pinMode(vcc, OUTPUT);
pinMode(gnd, OUTPUT);
digitalWrite(vcc, HIGH); // VCC供給開始
digitalWrite(gnd, LOW); // GND固定
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(statusled, LOW);
irrecv.resume();
// ボタン「2」: 前進
if (results.value == 0xFF18E7) {
Serial.println("Button 2 - Forward");
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
// ボタン「4」: 左旋回 (右モーターのみ前進)
else if (results.value == 0xFF10EF) {
Serial.println("Button 4 - Turn Left");
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
// ボタン「1」: 右回転 (右前進、左後退)
else if (results.value == 0xFF30CF) {
Serial.println("Button 1 - Rotate Right");
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
analogWrite(enB, 100);
}
// ボタン「6」: 右旋回 (左モーターのみ前進)
else if (results.value == 0xFF5AA5) {
Serial.println("Button 6 - Turn Right");
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
// ボタン「3」: 左回転 (右後退、左前進)
else if (results.value == 0xFF7A85) {
Serial.println("Button 3 - Rotate Left");
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
// ボタン「8」: 後退
else if (results.value == 0xFF4AB5) {
Serial.println("Button 8 - Backward");
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
analogWrite(enB, 100);
}
// ボタン「5」: 停止
else if (results.value == 0xFF38C7) {
Serial.println("Button 5 - Stop");
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
}
}
回路図
改良のポイントとヒント
- IRノイズ対策: モーター駆動時のスパイクノイズを避けるため、IR受信機の電源をArduinoの別ピンから供給し、コンデンサ(0.1μF + 10μF)を近接配置するのがコツです。
- リモコン対応: 使用するリモコンのコードを
Serial.println(results.value, HEX)で確認し、コード内の定数を書き換えてください。 - 速度調整:
analogWrite(enA, 100)の値(0-255)で速度を変えられます。左右バランスを取るため個別に調整可能です。 - 電源: モーター用とロジック用で電源を分けるか、大容量コンデンサ(470μF以上)をL298Nの電源入力近くに入れると安定します。
- 拡張性: 超音波センサーで障害物回避、ラインセンサーでライントレース、Bluetoothモジュールでスマホ制御などへ発展可能です。
製造プロセス
- 経口避妊薬:歴史、メリット、リスク、製造
- LIRCでプロフェッショナルなRaspberry Piユニバーサルリモコンを構築
- 自動プール給水・監視システム
- リモート心拍数監視システム:AWS IoTアラート付き
- 使わなくなった赤外線リモコンを再利用:LIRC で Raspberry Pi のシャットダウン & リブート
- 制御回路:基礎、応用、ベストプラクティス
- クラウド監視:リアルタイム資産管理のためのリモート制御システム
- モダン産業におけるリモート生産制御の5つの主要メリット
- オーバーヘッドクレーンリモコン完全攻略:倉庫の安全性と効率を飛躍的に向上
- Delta Controls「enteliBUS」の脆弱性:ビルシステムのリモート制御が露見
- C# コンストラクター:種類、例、高度なパターン