Arduino UNO互換機を使って、DCモーターを赤外線で制御してラジコンを作成します。
材料
1. Arduino 2輪駆動 三輪スマートカー車体キット(Yahoo!ショッピング、Amazon)
2. Arduino(互換品) UNO R3
3. モータードライバー L298N
4. 赤外線受信モジュール(CHQ1838, 5V, 周波数:37.9KHz)
5. IRワイヤレスリモコン
6. アルカリ電池(単三×4、9V型角型電池×1)
7. 9V型角型電池用ホルダー×1、DCプラグ端子台×1
8. UNO R3ボード固定用ネジ×1・ナット×2、L298Nモジュール固定用ネジ×2・ナット×4、IR受信モジュール固定用ネジ×1・ナット×2、9V型角型電池用ホルダー固定用ネジ×2、ナット×2
上記全部セットはこちら(Yahoo!ショッピング、Amazon)で買えます
写真のように組立をしていきます。
①下段車体にモーター2個と車輪3個を取り付ける
②下段シャーシにL298Nモータードライバーを取り付ける
③モーター2個とL298NのMOTORA、MOTORBとを繋ぐ(要マイナスドライバー)
④上段シャーシにArduino UNOと単三用電池ボックス、9V角型電池用ボックスを取り付ける
⑤単三電池ボックスのプラスマイナス導線をL298NのGNDとVMSに繋ぐ
⑥Arduino UNOとL298Nモータードライバーを下記のように接続する
※上段と下段のシャーシはまだネジで接続して固定しない(最後に行う)
※Arduinoへの接続ピン番号は適当に選んで繋げただけなので、自由に変更してOKです。
それに合わせてスケッチ内の該当ピンナンバーを変更するだけで動きます。
L298NとArduinoのピン接続は下記
ENA ⇒ 5
IN1 ⇒ 2
IN2 ⇒ 4
IN3 ⇒ 8
IN4 ⇒ 7
ENB ⇒ 10
⑦IRレシーバーモジュールとArduinoを下記のようにピン接続する
S ⇒ 12
+ ⇒ 5V
GND ⇒ GND
⑧Arduinoに下記スケッチを書込む⇒リモコン操作で動作確認できたら、上段と下段のシャーシをネジで固定するのをお勧め(配線間違いで何度もネジを外したりするのを避ける為)⇒終了
【詳細】
IRワイヤレスリモコンの7つのボタンを前、後、左、右、停止、右回転、左回転に使用します。
また、使用する7つのボタンを下記のように解析したので、そのHEXコードをスケッチ内で使用します。
※リモコン毎に赤外線コード割り当てが違うので、動かない場合にはご使用のリモコンの赤外線コードを解析して、スケッチ内の該当箇所を変更してください
↑(前): 0x00FF629D
↓(後): 0x00FFA857
→(右): 0x00FFC23D
←(左): 0x00FF22DD
OK(停止): 0x00FF02FD
1(左回転): 0x00FF6897
2(右回転): 0x00FF9867
下記がUNO R3用のスケッチコード
#include <IRremote.h> // Author Fumiyoshi.Yotsugi @ Wind Abaft Co.,Ltd. int RECV_PIN = 12; //IR受信データピンを12に設定 IRrecv irrecv(RECV_PIN); decode_results results; // モーターコントローラー(L298N)とArduino UNO R3の接続 // motor A int enA = 5; int in1 = 2; int in2 = 4; // motor B int enB = 10; int in3 = 7; int in4 = 8; void setup() { irrecv.enableIRIn(); // モーターコントロールピンをoutputにセット pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() { if (irrecv.decode(&results)) { irrecv.resume(); if (results.value == 0x00FF629D){ // ↑ボタンを押すと前進 // turn on motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // スピードは 200に設定、 0~255の範囲で設定できるが100以下だとV不足で回らないこともある analogWrite(enA, 200); // turn on motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // スピードは 200に設定、 0~255の範囲で設定できるが100以下だとV不足で回らないこともある analogWrite(enB, 200); }else if(results.value == 0x00FF22DD){ // ←ボタンを押すと左折する // motor Aを前進させてmotor Bは止める // turn on motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 200); // turn on motor B digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enB, 200); }else if(results.value == 0x00FF6897){ // ボタン1を押すと左回転 // motor Aは前進、motor Bは後進 // turn on motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 200); // turn on motor B digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, 200); }else if(results.value == 0x00FFC23D){ // →ボタンを押して右折する // motor Aは止めてmotor Bは前進 // turn on motor A digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(enA, 200); // turn on motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, 200); }else if(results.value == 0x00FF9867){ // ボタン2を押すと右回転 // motor A後進、motor B前進 // turn on motor A digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, 200); // turn on motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, 200); } else if(results.value == 0x00FFA857){ // ↓ボタン押すと後進(バック) // motor A後進、motor B後進 // turn on motor A digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, 200); // turn on motor B digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, 200); }else if(results.value == 0x00FF02FD){ // OKボタン押すと停止(ストップ) // motor A停止、motor B停止 // turn on motor A digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(enA, 200); // turn on motor B digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enB, 200); } } }
※2WD3輪車体の場合、モーターを付けていない白の後輪車輪が動いてしまい、前進や後進時に曲がって進んでしまいます。4WD4輪車体の場合には、それが解消されますので、気になる場合には4WD4輪車体をご利用ください
ロボットスクール様や塾で教材として使用したい方向けに、本資材のご提供やカスタマイズ、出張講義も可能です!
是非お問い合わせください!