フォト
2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ

« IchigoJam T用のお洒落なアクリルケース | トップページ | Arduino IDEを使ったATtiny13用スケッチの開発について »

2016年8月29日 (月)

ATTiny13Aを使ってIchigoJamで赤外線リモコン受信を行う(1)

ここしばらく安価なLPC810を赤外線リモコンの受信処理に使っていたのですが、
LPC810が高騰して秋月電子では320円に..

ということで、「安価なATTiny13Aでやってみるか」と思い、実際にやってみると、
LPC810よりも簡単に出来てしまいました。

(以前作成したダイソー プチ電車の赤外線リモコン制御のスケッチを流用)

Dscn5651

回路図

Photo_2
これだと、パーツ的には100円位で実装出来ますね。

IchioJamには3線(3.3V->VCC、GND-> GND 、TxD-> RxD)を接続ます。
シリアルポートの通信速度は、ATiny13Aの都合で 38400bpsとなります。

受信した赤外線リモコンのボタンコード(1バイト)は、IchioJamのINKEY()コマンドで
取得出来ます。事前にボタンコードを調べる必要がありますが、普通のキーボード入力
と同じように処理出来ます。

20160829225214

実行すると赤外線リモコンのボタンに応じて操作出来ます。

20160829225252

プログラムを実行していない状態で、赤外線リモコンのボタンを押すと、
ボタンコードに対応する文字が画面に表示されます。

20160829225107

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用スケッチの開発について »

ATtiny13A」カテゴリの記事

IchigoJam」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/64129288

この記事へのトラックバック一覧です: ATTiny13Aを使ってIchigoJamで赤外線リモコン受信を行う(1):

« IchigoJam T用のお洒落なアクリルケース | トップページ | Arduino IDEを使ったATtiny13用スケッチの開発について »