ワスレナグサ

気付いたら、夜は終わりはじめてる
<< June 2017 | 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 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

- | permalink | - | -
<< Google、Android SDKをリリース | main | Arduinoでリモコンの赤外線信号を読み取る(その2) >>

Arduinoでリモコンの赤外線信号を読み取る

突然ですが、Arduinoを初めてみようと思いますよ。

(この記事の内容にはちょっといただけないトコがあります。そこんとこを改善した記事を次にアップしました。参考にするなんて方がいらっしゃいましたらこちらをどうぞ!)

注意:私は電気回路とかあまりよくわかってない素人ですよ!参考にされる場合は自己責任でお願いしますね♪

以前からMake blogでArduinoってのが盛り上がってるみたいだなーとは思ってたんですが、Make Tokyo meeting 03で数々の作品に出会ってArduinoの事を調べてみるまではこんなに簡単に触れるものだとは思いませんでしたよ。ということで、感銘を受けたのでちょっと触ってみようというわけ。

LEDのちかちかにも飽きたのでそろそろ何か作ってみようかと思います。最終的には学習リモコンを作りたいのですが、今回は第一歩としてまずはリモコンの信号を読み取るところから。

1.材料

 1) Arduino 本体
  Arduino Duemilanove - Amazonで買いました。
 2) 赤外線センサー(フォトICっていうんですね)
  TPS830 - 千石電商で買いました。
 3) その他
  ブレッドボード、ジャンパーワイヤー、USBケーブルを用意しました。

2.ビルドアップ

今回は簡単です。ブレッドボードに赤外線センサーを挿します。でもって次のように結線します。
 1) Arduino の5VをセンサーのVcc(一番右のピン)に
 2) Arduino のGndをセンサーのGND(真ん中のピン)に
 3) Arduino のANALOG INの0をセンサーのVout(一番左のピン)に

つないだ状態がこれ。


3.スケッチ
#define IR_SENSOR 0 // 赤外線センサーのポート番号
#define BUFFER_SIZE 1024 // パルスのサンプル数

int irSensorValue; 
boolean buffer[BUFFER_SIZE]; // パルスを記録するバッファ

void setup() { 
  Serial.begin(115200); // PCとの通信速度
}

void loop() {
  irSensorValue = analogRead(IR_SENSOR);
  boolean recorded = false;

  if(irSensorValue < 512) {
    // センサーが信号をとらえた場合
    recorded = true;
    int currentBufferPosition = 0;
    while(currentBufferPosition < BUFFER_SIZE) {
      // バッファ終端までセンサーの状態を記録
      irSensorValue = analogRead(IR_SENSOR);
      if (irSensorValue > 512) {
        buffer[currentBufferPosition] = false;
      } 
      else {
        buffer[currentBufferPosition] = true;
      }
      // delayMicroseconds(1);
      currentBufferPosition++;
    }
  }

  // サンプリングしたデータをPCに転送
  if(recorded == true) {
    for (int i = 0; i < BUFFER_SIZE; i++) {  
      if(buffer[i] == true) {
        Serial.println(1);
      } 
      else {
        Serial.println(0); 
      }
    }
  }
}

このスケッチは信号を検知したらその時点から最大限のスピードでセンサーにかかってる電圧を閾値512(2.5V?)を境に2値化してbooleanの配列に記録していきます。ディレイがコメントあうとされていますが、実のところanalogReadがかなり遅いんですね(1回のコールに100μsecかかる)。というわけで、ディレイ入れなくてもこれだけで10kHzでのサンプリングということになります。

10kHzがサンプリングに十分な周波数なのかーとか、パルスが2値だって仮定してるけど中間値はいらないのかーとか、bufferがboolean配列だけどこれほんとにバイト数の削減になってるのかーとかいろいろ不安はありますが、細かい事はまだ気にしない事にします。

4.動作確認
Arduinoにスケッチを転送して、SerialMonitorの画面にしたらお手元のTVリモコンでボタンをポチッ!おおーちゃんと取れてるっぽい♪


ま、0とか1とか言われてもみんな困ると思うので、Serial Monitorの出力をプロットしてみたよ!(プロットは幅の都合上256サンプルのみだけど、本当はBUFFER_SIZEで指定した数のサンプルが出力されます)


なんとなくいけてそうな感じ♪(いい加減ですみません…)

次回はこれに赤外線LEDをつけて記録したパルスの再生をやってみます。
クリエイティブ | permalink | comments(0) | trackbacks(0)

スポンサーサイト

- | permalink | - | -

この記事に対するコメント

コメントする









この記事のトラックバックURL
http://forget-me-not.jugem.jp/trackback/139
この記事に対するトラックバック