ATTiny13Aを使ってIchigoJamで赤外線リモコン受信を行う(1)
ここしばらく安価なLPC810を赤外線リモコンの受信処理に使っていたのですが、
LPC810が高騰して秋月電子では320円に..
ということで、「安価なATTiny13Aでやってみるか」と思い、実際にやってみると、
LPC810よりも簡単に出来てしまいました。
(以前作成したダイソー プチ電車の赤外線リモコン制御のスケッチを流用)
回路図
これだと、パーツ的には100円位で実装出来ますね。
IchioJamには3線(3.3V->VCC、GND-> GND 、TxD-> RxD)を接続ます。
シリアルポートの通信速度は、ATiny13Aの都合で 38400bpsとなります。
受信した赤外線リモコンのボタンコード(1バイト)は、IchioJamのINKEY()コマンドで
取得出来ます。事前にボタンコードを調べる必要がありますが、普通のキーボード入力
と同じように処理出来ます。
実行すると赤外線リモコンのボタンに応じて操作出来ます。
プログラムを実行していない状態で、赤外線リモコンのボタンを押すと、
ボタンコードに対応する文字が画面に表示されます。
ATTiny13A用のプログラム作成はArduino IDE 1.06(+kosakalabさん公開モジュール)を使っています。
(ちょっと環境構築が面倒なので、後ほど別途記事にまとめます)
スケッチサイズは752バイトでした。
ダウンロード IRremote_Ichigo.zip (1.8K)
(シリアル通信用ライブラリBasicSerial3が別途必要です)
// // 赤外線リモコン信号読み取り(IcigoJam連携バージョン) // 2016/08/29 たま吉さん // // ATMEL ATTINY13 / ARDUINO // // +-\/-+ // ADC0 (D 5) PB5 1| |8 Vcc // ADC3 (D 3) PB3 2| |7 PB2 (D 2) ADC1 // ADC2 (D 4) PB4 3| |6 PB1 (D 1) PWM1 // GND 4| |5 PB0 (D 0) PWM0 // +----+ #define BAUD_RATE 38400 #include <BasicSerial3.h> // for I/O Port #define IR 4 #define Rx 1 #define Tx 0 #define IR_DDR DDRB #define IR_PORT PORTB #define IR_PININ PINB #define IRbitRead() (IR_PININ&_BV(IR)) #define RC_RDH_TS 9000 // リーダコードOFF間隔 9ms判定用 #define RC_RDL_TS 3800 // リーダコードON間隔 4.5ms判定用 #define RC_BITLOW_TS 1000 // ビットデータON間隔 1.69ms判定用 #define RC_TMOVER 8000 // タイムオバー // // 赤外線リモコンコード取得 // 4バイトのデータを返す // CCCCDDdd // CCCC カスタムコード // DD データコード // dd データコードのビット反転(データチェック用) // ただし、 // リピートコードの場合 0 // エラーの場合 0xFFFFFFFF // を返す. // uint32_t Read_IR() { uint8_t repeat = 0; // リピートコード検出フラグ uint32_t dt = 0; // 赤外線リモコン読み取りデータ unsigned long t ; // 信号長計測用 // リード部の取得 // 受信データはH/L反転で読まれる while(1) { while(IRbitRead()); // OFF検出受信待ち t = micros(); // OFF検出時刻取得 while(!IRbitRead()); // ON受信検出待ち t = micros() -t; // OFF->ONの時間間隔取得 if (t > RC_RDH_TS) { // 9ms以上ならリーダコードとみなす t = micros(); // ON検出時刻取得 while(IRbitRead());// OFF検出待ち t = micros() -t; // ON->OFF時間間隔取得 break; } } // データ部取得 if (t < RC_RDL_TS) { // 0N->OFF がリピートコードの場合、データ取得はスキップ repeat = 1; } else { // 0N->OFF がリダーコードの場合、データを取得 for (uint8_t i = 0; i <32; i++) { //32ビット分取得ループ // ビット開始待ち while(!IRbitRead()); // ON待ち t = micros(); while(IRbitRead()); // OFF待ち t = micros() -t; if (t>RC_TMOVER) return 0xFFFFFFFF; // エラー dt<<=1; dt |= (t>RC_BITLOW_TS) ? 1:0; } } // ストップビットの待ち while(IRbitRead()); // OFF待ち if (repeat) return 0; return dt; } // 文字列出力 void serOut(const char* str) { while (*str) TxByte (*str++); } // 整数を16進数で出力 void serOutHex(uint16_t h) { uint8_t c; for (int8_t i=12; i>=0; i-=4) { c = h>>i & 0xf; c = c >9 ? c+'A'-10: c+'0'; TxByte ((uint8_t)c); } } void setup() { IR_DDR &= ~_BV(IR); // IRピンのみ入力設定する } uint8_t prv =0; void loop() { uint32_t rc = Read_IR(); // IR受信 if (rc) { if (rc != 0xFFFFFFFF) { TxByte((rc>>8)&0xff); prv=(uint8_t)((rc>>8)&0xff); } } else { TxByte(prv); } }
LPC810と比べると、ATTiny13Aのプログラムの書き込みがちょっとハードルが高いのが難点です。
ブログ内関連記事
Arduino IDEを使ったATtiny13用スケッチの開発について (2016/08/30)
LPC810を使ってIchigoJamで赤外線リモコン受信を行う(4) (2016/08/17)
LPC810を使ってIchigoJamで赤外線リモコン受信を行う(3) (2016/08/15)
LPC810を使ってIchigoJamで赤外線リモコン受信を行う(2) (2015/06/06)
LPC810を使ってIchigoJamで赤外線リモコン受信を行う(1) (2015/05/31)
IchigoJamとArduinoでI2Cバス通信を試してみる (2) (2015/05/03)
IchigoJamとArduinoでI2Cバス通信を試してみる (2015/05/01)
ATtiny13Aで赤外線リモコン受信センサーを使う (2014/11/15)
ATtiny13Aでシリアル通信(UART)を行う (2014/11/12)
Arduino IDEでUSBaspを使ってATtiny13へプログラムの書き込み (2014/01/29)
Arduino IDEでATtiny13でのLED点滅アプリの作成 (2014/01/26)
« IchigoJam T用のお洒落なアクリルケース | トップページ | Arduino IDEを使ったATtiny13用スケッチの開発について »
「IchigoJam」カテゴリの記事
- Ichigojam Rが届きました(2021.02.05)
- β版 IchigoJam Rを予約注文しました(2021.01.23)
- IchigoJamのファームウェア 1.4.1が正式に公開されました(2019.12.10)
- 「ichigoツール」をGithubにて公開しました(2019.11.09)
- ichigojamのファームウェアを1.4b13にアップデートしました(2019.11.06)
「ATtiny13A」カテゴリの記事
- ATtiny13AでI2C接続キャラクタLCDを利用する(4)(2018.04.16)
- ATtiny13Aで赤外線リモコン受信センサーを使う(2)(2018.04.15)
- ATtiny13AでHC-SR04を使った距離計測(2018.04.14)
- Arduino 1.8.5環境でATtiny13Aを利用する(2018.04.14)
- Arduino IDEを使ったATtiny13用スケッチの開発について(2016.08.30)
« IchigoJam T用のお洒落なアクリルケース | トップページ | Arduino IDEを使ったATtiny13用スケッチの開発について »
コメント