リモートコントロール(RC)戦車をつくる【赤外線コントロール】 [RC戦車]
マイコンをArduinoと決めたので、次に遠隔コントロールの方法を考えます。
もちろん遠隔コントロールの方法もいくつもあるのですが、最初は赤外線を使ってみたいと思います。いわゆる”リモコン”ですね。
PCと比較するまでもないですが、マイコンはピン数とかに制限があるため、全部の機能をいっぺんに動かすことが難しいケースがあります。そんなときは赤外線リモコンがあれば必要な機能を切り替えながらということもできるので、一度使い方を覚えておけば便利です。
で、テレビのリモコンでも何でもいいのですが、電子工作の気分も出していきたいのでこれ↓です。
以前秋葉原に行ったときに、お店でたまたま目に入ったので買ったものです。
SparkFun 赤外線リモコン COM-11759
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4C3S"
赤外線受光部にはこのセンサを使っています。
赤外線リモコン受信モジュール PL-IRM2121(38kHz)
"http://akizukidenshi.com/catalog/g/gI-01570/"
赤外線リモコンのデータフォーマットには
NECフォーマット
家製協フォーマット
ソニーフォーマット
の3種類があり、COM-11759はNECフォーマットです。
データフォーマットの詳細は”赤外線リモコン フォーマット”で検索するといくつものページで説明をしていますので詳細はそちらにお任せするとして、実際に動作させてみます。
FAQ 1007800 : 赤外線リモコン通信に関係して、NEC方式のフォーマットとはどのようなものか?
"https://support.renesas.com/hc/ja/articles/210901268-FAQ-1007798-%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3%E3%81%AE%E4%BF%A1%E5%8F%B7%E3%81%AF%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8B-"
リモコンフォーマット(秋月電子)
"http://akizukidenshi.com/download/k4174_format.pdf"
メーカのsprakfunのサイトには使い方をまとめたページがあり、ここのサンプルプログラムを参考に動かしてみたいと思います。
"https://learn.sparkfun.com/tutorials/ir-control-kit-hookup-guide"
赤外線リモコンにはボタンに対応したコードが割り当てられており、サンプルプログラムでは押下したときにコンソール画面に表示するようになっています。
リモコン(COM-11759)コード
【配線図】
【スケッチ】
※#include <IRremote.h>は表示の不具合で全角<>で記載しています。本当は半角<>ですのでご注意ください。
【シリアルモニタ出力結果】
一例として「POWER」の時の波形データを載せます。
送信されたデータは受光部で波形が反転されています。
【(デジタル)オシロデータ(POWER)】
【「POWER」波形記録】
※(2019.10.19)オプトサプライ赤外線リモコン[OE13KIR]を使った作製例はこちら↓
リモートコントロール(RC)戦車をつくる【赤外線コントロール②】
もちろん遠隔コントロールの方法もいくつもあるのですが、最初は赤外線を使ってみたいと思います。いわゆる”リモコン”ですね。
PCと比較するまでもないですが、マイコンはピン数とかに制限があるため、全部の機能をいっぺんに動かすことが難しいケースがあります。そんなときは赤外線リモコンがあれば必要な機能を切り替えながらということもできるので、一度使い方を覚えておけば便利です。
で、テレビのリモコンでも何でもいいのですが、電子工作の気分も出していきたいのでこれ↓です。
以前秋葉原に行ったときに、お店でたまたま目に入ったので買ったものです。
SparkFun 赤外線リモコン COM-11759
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4C3S"
赤外線受光部にはこのセンサを使っています。
赤外線リモコン受信モジュール PL-IRM2121(38kHz)
"http://akizukidenshi.com/catalog/g/gI-01570/"
赤外線リモコンのデータフォーマットには
NECフォーマット
家製協フォーマット
ソニーフォーマット
の3種類があり、COM-11759はNECフォーマットです。
データフォーマットの詳細は”赤外線リモコン フォーマット”で検索するといくつものページで説明をしていますので詳細はそちらにお任せするとして、実際に動作させてみます。
FAQ 1007800 : 赤外線リモコン通信に関係して、NEC方式のフォーマットとはどのようなものか?
"https://support.renesas.com/hc/ja/articles/210901268-FAQ-1007798-%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3%E3%81%AE%E4%BF%A1%E5%8F%B7%E3%81%AF%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8B-"
リモコンフォーマット(秋月電子)
"http://akizukidenshi.com/download/k4174_format.pdf"
メーカのsprakfunのサイトには使い方をまとめたページがあり、ここのサンプルプログラムを参考に動かしてみたいと思います。
"https://learn.sparkfun.com/tutorials/ir-control-kit-hookup-guide"
赤外線リモコンにはボタンに対応したコードが割り当てられており、サンプルプログラムでは押下したときにコンソール画面に表示するようになっています。
リモコン(COM-11759)コード
【配線図】
【スケッチ】
/* SparkFun Electronics 2013 Playing with Infrared Remote Control IR Receiver Breakout (SEN-8554): Supply voltage of 2.5V to 5.5V Attach OUT: To pin 11 on Arduino GND: GND VCC: 5V This is based on Ken Shirriff's code found on GitHub: https://github.com/shirriff/Arduino-IRremote/ This code works with cheap remotes. If you want to look at the individual timing of the bits, use this code: http://www.arduino.cc/playground/Code/InfraredReceivers */ #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; #define POWER 0x10EFD827 #define A 0x10EFF807 #define B 0x10EF7887 #define C 0x10EF58A7 #define UP 0x10EFA05F #define DOWN 0x10EF00FF #define LEFT 0x10EF10EF #define RIGHT 0x10EF807F #define SELECT 0x10EF20DF void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { if (results.value == POWER) { Serial.println("POWER"); } if (results.value == A) { Serial.println("A"); } if (results.value == B) { Serial.println("B"); } if (results.value == C) { Serial.println("C"); } if (results.value == UP) { Serial.println("UP"); } if (results.value == DOWN) { Serial.println("DOWN"); } if (results.value == LEFT) { Serial.println("LEFT"); } if (results.value == RIGHT) { Serial.println("RIGHT"); } if (results.value == SELECT) { Serial.println("SELECT"); } irrecv.resume(); } }
※#include <IRremote.h>は表示の不具合で全角<>で記載しています。本当は半角<>ですのでご注意ください。
【シリアルモニタ出力結果】
一例として「POWER」の時の波形データを載せます。
送信されたデータは受光部で波形が反転されています。
【(デジタル)オシロデータ(POWER)】
【「POWER」波形記録】
※(2019.10.19)オプトサプライ赤外線リモコン[OE13KIR]を使った作製例はこちら↓
リモートコントロール(RC)戦車をつくる【赤外線コントロール②】
リモートコントロール(RC)戦車をつくる【マイコン選び】 [RC戦車]
戦車をいろいろ制御するマイコンを選びたいのですが、これが一番の悩みネタになります。。。
電卓を例にとると「カシオ」派と「シャープ」派に大別されるのですが、キー配置とかメモリ機能のキー操作とか違うのですね。これはどちらが良いということではなく、最初に使ったものを後から変えるというのは、それまでの慣れというのもありますので、ちょっと面倒だったりするわけです。
制御できるマイコンにもいろいろとあるのですが、今手持ちにあるものや今後の入手のし易さを考慮して、
①Arduino (https://www.arduino.cc/)
②mbed (https://os.mbed.com/)
の二択で考えたいと思います。
ここの記事にもあるように、Raspberry Piももちろん選択肢に入れても良いのですが、今回は戦車を動かすくらいですからそこまでの能力もいらないため、ちょっと横に置いておきます。
さて次に、Arduinoかmbedか?ということになるわけですが、しばらくはArduinoを使ってみようと思います。理由は完全に主観的な比較になるのですが、
・Arduinoの方がmbedより情報が多い(WEBや書籍)
Googleでそれぞれ検索すると圧倒的にArduinoの方がヒット数が多いです。
・Arduinoのプログラムの方がmbedより初心者向け
mbedはArduinoよりCPUスペックも高くパワフルなのが魅力的で、既にC/C++言語スキルを持っている方はmbedの方が良いように思えますが、Arduinoは上手くC/C++の難しいところを隠ぺいした”Arduino言語”を使用しており、そのためどちらからというとArduinoの方が必ずしもプログラミングを本職としていない人でも取っ掛かり易い感じがします。
いずれにせよ、ここは自分なりに納得するまで選ぶことが大切です。これは本当です(笑)
Arduino
mbed
電卓を例にとると「カシオ」派と「シャープ」派に大別されるのですが、キー配置とかメモリ機能のキー操作とか違うのですね。これはどちらが良いということではなく、最初に使ったものを後から変えるというのは、それまでの慣れというのもありますので、ちょっと面倒だったりするわけです。
制御できるマイコンにもいろいろとあるのですが、今手持ちにあるものや今後の入手のし易さを考慮して、
①Arduino (https://www.arduino.cc/)
②mbed (https://os.mbed.com/)
の二択で考えたいと思います。
ここの記事にもあるように、Raspberry Piももちろん選択肢に入れても良いのですが、今回は戦車を動かすくらいですからそこまでの能力もいらないため、ちょっと横に置いておきます。
さて次に、Arduinoかmbedか?ということになるわけですが、しばらくはArduinoを使ってみようと思います。理由は完全に主観的な比較になるのですが、
・Arduinoの方がmbedより情報が多い(WEBや書籍)
Googleでそれぞれ検索すると圧倒的にArduinoの方がヒット数が多いです。
・Arduinoのプログラムの方がmbedより初心者向け
mbedはArduinoよりCPUスペックも高くパワフルなのが魅力的で、既にC/C++言語スキルを持っている方はmbedの方が良いように思えますが、Arduinoは上手くC/C++の難しいところを隠ぺいした”Arduino言語”を使用しており、そのためどちらからというとArduinoの方が必ずしもプログラミングを本職としていない人でも取っ掛かり易い感じがします。
いずれにせよ、ここは自分なりに納得するまで選ぶことが大切です。これは本当です(笑)
Arduino
mbed