工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

4WD赤外線リモコン制御 Arduinoロボットカーの製作

必要な部品と材料

部品数量備考
赤外線リモコン受信モジュールキット (WINGONEER等)1受信機+リモコン付き
SainSmart L298N デュアルHブリッジ モータードライバー12ch DCモーター駆動用
4WDロボットカーチャンネルキット1シャーシ、モーター4個、ホイール含む
Arduino UNO1制御用マイコン

必要な工具

プロジェクト概要

Instructablesで公開されていたクローラー型ロボットをベースに、4輪駆動(4WD)版としてリビルドしました。オリジナル設計ではモーター駆動時に発生するノイズ(モーターが発電機のように働き、グラウンド線で干渉)がIR受信機に悪影響を与えていました。これを解決するため、IR受信機のピン割り当てと配線を見直しています。

シャーシ組み立て

SainSmartローバーキットの説明書に従って車体を組み立てます。

4WD赤外線リモコン制御 Arduinoロボットカーの製作
完成した4WDシャーシ

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を供給することで、モーター系のノイズが乗った共通グラウンドを避けています。

4WD赤外線リモコン制御 Arduinoロボットカーの製作
IR受信機の単独電源配線

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と共通接続。

4WD赤外線リモコン制御 Arduinoロボットカーの製作
L298NとArduinoの接続

L298N → モーター接続

モーターセットA (右側)

モーターセットB (左側)

バッテリー → L298N: + (赤) → VCC, - (黒) → GND

4WD赤外線リモコン制御 Arduinoロボットカーの製作
完全配線図
4WD赤外線リモコン制御 Arduinoロボットカーの製作
実装状態

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);
    }
  }
}

回路図

4WD赤外線リモコン制御 Arduinoロボットカーの製作

改良のポイントとヒント

製造プロセス

  1. 経口避妊薬:歴史、メリット、リスク、製造
  2. LIRCでプロフェッショナルなRaspberry Piユニバーサルリモコンを構築
  3. 自動プール給水・監視システム
  4. リモート心拍数監視システム:AWS IoTアラート付き
  5. 使わなくなった赤外線リモコンを再利用:LIRC で Raspberry Pi のシャットダウン & リブート
  6. 制御回路:基礎、応用、ベストプラクティス
  7. クラウド監視:リアルタイム資産管理のためのリモート制御システム
  8. モダン産業におけるリモート生産制御の5つの主要メリット
  9. オーバーヘッドクレーンリモコン完全攻略:倉庫の安全性と効率を飛躍的に向上
  10. Delta Controls「enteliBUS」の脆弱性:ビルシステムのリモート制御が露見
  11. C# コンストラクター:種類、例、高度なパターン