ここから本文です

赤外線LEDによる通信についての質問です。

log********さん

2017/5/1620:41:02

赤外線LEDによる通信についての質問です。

私は赤外線LEDと赤外線受信モジュール(IRM2121)を使った送受信装置を作ろうと思っています。

・送信側の装置についているタクトスイッチを押すことで赤外線LEDにより信号を送信。
・受信側の装置は送られた信号を8bitの2進数の値で受信する。

というものです。どちらの装置もArduinoUnoを使って制御しています。
送信側の信号は以下のようなプログラムを使っています。
//0b00000001を出力する
For(int i = 0; i < 7; i++){
digitalWrite(OUTPUT_PIN,LOW);
delayMicroseconds(1);
}
For(int i = 0; i < 1; i++){
digitalWrite(OUTPUT_PIN,HIGH);
delayMicroseconds(1);
}

受信側の装置はIRM2121の3ピンを
VCC:+5V
GND:GND
VOUT:digitalピン12番
に接続しています。
プログラムは
//赤外線受信のプログラム
Void loop(){
Int A = 0;
For(int i = 0;i<8;i++){
If(digitalRead(INPUT_PIN) = HIGH)A++;
}
Serial.println(A);
}

上の様に試してみましたところ受信側に問題があるようで出力がすべて8となってしまいます。
これはおそらく蛍光灯の光などによるノイズなのかなと思っています。
そこで質問なのですが
・ノイズと信号の区別をつけたい
・その他、このダメなところを指摘してもらえると勉強になります。

回答よろしくお願いします。

閲覧数:
71
回答数:
3

違反報告

ベストアンサーに選ばれた回答

yam********さん

2017/5/1621:24:44

>38 kHzのパルスをデータで変調して

意味分かる?

添付画像見たいな、PWM出力をUARTでオンオフするのが簡単でいい。

せいぜい2400bps程度の速度しか出ないが。

上のトランジスタがTxで、下のトランジスタがPWMだ。

下の基板から変調光を飛ばし、上の基板でシリアル通信で受けているのだ。

>38 kHzのパルスをデータで変調して

意味分かる?...

  • 質問者

    log********さん

    2017/5/1621:45:09

    >>PWM出力をUARTでオンオフするのが簡単でいい

    UARTを使ったことがないのでよく分からないのですが、PWM出力可能なピンをUARTの入力ピンに繋いで、Unoからのパルス波を何らかの意味ある信号に変えて出力してくれるという感じでしょうか

    >>下の基板から変調光を飛ばし、上の基板でシリアル通信で受けている
    前半の意味は理解しました。UARTからの信号をトランジスタか何かを挟んで赤外線LEDをオンオフするってことですよね。
    後半のシリアル信号で受けているというのは赤外線LEDからの信号を1つ1つ読んで信号と捉えているということであっているでしょうか。

    上記の認識であっているか確認をお願いします。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

dai********さん

2017/5/1716:48:51

赤外線送受信ユニットというものを使うことをお勧めします。

変調復調と言うことをやっていて自然光の影響を受けにくくして通信できるようにしてあります。テレビやビデオなどのリモコンでやっている方法です。

マイコンのシリアルのデータを送信してシリアルのデータを受信します。

ken********さん

2017/5/1620:59:37

まず、if文の文法の間違いから指摘します。

If(digitalRead(INPUT_PIN) = HIGH)A++;

これは、

If(digitalRead(INPUT_PIN) == HIGH)A++;

この様にする必要が有ります。

本題ですが、根本的な考え方に間違いがあります。
送信側は、8bitのデータを1us間隔で区切りなしで送信しています。一方受信側は、送信側の都合に関係無く、ピンを監視してHiが検出されたらA++を実行しています。
送信側と受信側で一切同期が取れないため、データが正しく伝わることはありません。
8と言う数値が検出されるのは、最初に指摘したif文の文法ミスの性で、A++が8回実行されるからであって、受信データとは関わりはありません。
それと、Hiが検出されたときにa++を行ったのでは、データは復元されません。単にHiの下図をカウントしているだけです。

1us毎にデータを送信してしまう(実際にはそんな高速では送れていないはずです)のにも問題が有りますし、送信側と受信側で、同期を取る手段が無いのも問題です。
基本的な所から、もう一度検討し直すことが必要です。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

「IRM2121、digitalWrite」に関する質問

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる