SSブログ

リモートコントロール(RC)戦車をつくる【赤外線コントロール】 [RC戦車]

マイコンをArduinoと決めたので、次に遠隔コントロールの方法を考えます。
もちろん遠隔コントロールの方法もいくつもあるのですが、最初は赤外線を使ってみたいと思います。いわゆる”リモコン”ですね。
PCと比較するまでもないですが、マイコンはピン数とかに制限があるため、全部の機能をいっぺんに動かすことが難しいケースがあります。そんなときは赤外線リモコンがあれば必要な機能を切り替えながらということもできるので、一度使い方を覚えておけば便利です。

で、テレビのリモコンでも何でもいいのですが、電子工作の気分も出していきたいのでこれ↓です。
以前秋葉原に行ったときに、お店でたまたま目に入ったので買ったものです。
SparkFun 赤外線リモコン COM-11759
SparkFun 赤外線リモコン COM-11759.jpg
"https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4C3S"

赤外線受光部にはこのセンサを使っています。
赤外線リモコン受信モジュール PL-IRM2121(38kHz)
PL-IRM2121-A538.JPG
"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)コード
リモコン(COM-11759)コード.png

【配線図】
IRremotecontrol_ブレッドボード.jpg

【スケッチ】
/*
  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>は表示の不具合で全角<>で記載しています。本当は半角<>ですのでご注意ください。

【シリアルモニタ出力結果】
シリアルモニタキャプチャ.jpg

一例として「POWER」の時の波形データを載せます。
送信されたデータは受光部で波形が反転されています。
【(デジタル)オシロデータ(POWER)】
オシロデータ(POWER).jpg
【「POWER」波形記録】
「POWER」波形記録.jpg


※(2019.10.19)オプトサプライ赤外線リモコン[OE13KIR]を使った作製例はこちら↓
リモートコントロール(RC)戦車をつくる【赤外線コントロール②】



profile_picture_40×40.JPG

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。