PICを用いた赤外線通信について

このQ&Aのポイント
  • 赤外線通信におけるPICの使い方や通信方式について教えてください。
  • 赤外線通信でのデータ送信の仕組みやリーダー部、データ部の送信方法について知りたいです。
  • 赤外線通信において、変調周波数と送信周期の関係について教えてください。
回答を見る
  • ベストアンサー

PICを用いた赤外線通信

 PICを使って赤外線通信をしたいんですが、 いくつか教えていただきたいことがあります。 (1)赤外線の通信仕様・方式なについてなんですが、 下記の2つのページを参考にしたんですが、 http://www.picfun.com/appframe.html http://www.sendai-ct.ac.jp/~ckuma/micom/3048/ir.html 1つ目のページには、リーダー部(8bit)、データ部(16bit)、データ部連送(16bit)の40bitを送ると載っています。 しかし、2つ目のページには、リーダー部()、カスタム部、カスタム反転、データ部、データ部反転の順番で送っているようです。 これって、どちらの方式で送っても、受信した際のソフトの書き方で対応しろってことなんでしょうか? それとも、自分が使用する受信モジュールによって、どっちの送信方法で送れっていうのが決まっているのでしょうか? (2)そもそも、38KHzで変調するということがピンとこないんですが、 例えば上の1つ目のページでいうと、送信する40bit分を1/38K=26mSec周期にしろってことなんでしょうか? ちなみに、PIC16f873、赤外線受信モジュールはSPS440-1を使用しています。 初歩的な質問で申し訳ありませんが、よろしくお願いしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

>これって、どちらの方式で送っても、受信した際のソフトの書き方で対応しろってことなんでしょうか? >それとも、自分が使用する受信モジュールによって、どっちの送信方法で送れっていうのが決まっているのでしょうか? 送受信のフォーマットは自分で決めてプログラムで制御する必要があります。受信モジュールは何もしてくれませんので、全部プログラムで書きましょう。ちなみに送信フォーマットにスタートビットやらストップビットが必要なのはノイズによる誤動作対策です。 >2)そもそも、38KHzで変調するということがピンとこないんですが、 例えば上の1つ目のページでいうと、送信する40bit分を1/38K=26mSec周期にしろってことなんでしょうか? 変調の意味が分からないみたいですね。 ビットレート(速度)と変調周波数はまったく関係がありません。変調が必要な理由は赤外線受信モジュールが38Khz変調した赤外線しか受け付けないためです。 受信モジュールは、38Khz変調した赤外線を受け取ると1の信号と判断します。それ以外は0と判断して出力ピンに信号を出しています。ただし負論理で出力する受信モジュールがあるのでデータシートで確認のこと。 赤外線の送信側は、1の信号を送信したい場合は38KHzで変調して赤外線LEDを駆動します。0の場合は赤外線LEDを消します。 38Khzで変調している理由は、自然光の赤外線などのノイズと区別するためです。

pic16f873
質問者

お礼

大変詳しい説明ありがとうございます。 もう少しお聞きしたいんですが、 >送受信のフォーマットは自分で決めてプログラムで制御する必要があります。受信モジュールは何もしてくれませんので、全部プログラムで書きましょう。 と、ありますが、そうしたら上記のページの送信方法でなくとも、自分なりにデータの送り方を作ってしまってもいいということでしょうか? (例えば、スタートビットのビット数を変えたり、データ部を16ビット以上にするなどしてもいいのでしょうか?)

その他の回答 (2)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>と、ありますが、そうしたら上記のページの送信方法でなくとも、自分なりにデータの送り方を作ってしまってもいいということでしょうか? >(例えば、スタートビットのビット数を変えたり、データ部を16ビット以上にするなどしてもいいのでしょうか?) 自由にして良いです。気を付ける点は家庭にある赤外線リモコンとは違う信号にしておかないと家庭内で実験中に思わぬ機器が反応しますので注意してください。急にエアコンが動いたり、TVが点いたり(笑)。 >例えば、00101というデータを送りたいときは、 >1/76000秒=12μ秒なので >プログラム的には、まずスタートビットを立ち上げた後に、(この時点をt=0とすると)、その後に >off (0 < t < 12 μSec) >off (12 < t < 24 μSec) >off (24 < t < 36 μSec) >off (36 < t < 48 μSec) >on (48 < t < 60 μSec) >off (60 < t < 72 μSec) >off (72 < t < 84 μSec) >off (84 < t < 96 μSec) >on (96 < t < 108 μSec) >off (108 < t < 120 μSec) >とすればいいのでしょうか? >初歩的で申し訳ないんですが、よろしくお願いします。 合ってます。ただし、こんなに高速なビットレートで信号は送れません。限界に挑戦するのも面白いので挑戦してみてほしいのですが、勘で少なくとも1つのビット辺り8周期(12μSecx16)ぐらいは最低限でも必要な気がします。この辺りは送受信環境などの使う場所で変わりますので実際の実験で調整していってください。

pic16f873
質問者

お礼

あっりがとうございます! 明日早速プログラム組んで、実験してみます☆ ほんと親切にありがとうございました!

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

補足します。 >赤外線の送信側は、1の信号を送信したい場合は38KHzで変調して赤外線LEDを駆動します。0の場合は赤外線LEDを消します。 変調してって書き方が誤解を生みそうなので書き直します。 赤外線の送信側は、1の信号を送信したい場合は38KHzの周波数で赤外線LEDをON/OFFします。0の場合は赤外線LEDをOFFにします。 ※ 注意。38Khzとは1/38000秒周期でON/OFFが1組の動作です。ですので、実際には1/72000秒毎にON/OFFを反転してやらないとだめです。 >38Khzで変調している理由は、自然光の赤外線などのノイズと区別するためです。 ここも言葉不足でした。38Khzで変調している理由は、自然光や電球、蛍光灯など赤外線を発するものをノイズとして区別するためです。

pic16f873
質問者

お礼

度々ありがとうございます。 申し訳ないんですが、もう一つ聞きたいんですが、 >38Khzとは1/38000秒周期でON/OFFが1組の動作です。ですので、実際には1/76000秒毎にON/OFFを反転してやらないとだめです。 とありますが、ちょっと確認してよろしいでしょうか? 例えば、00101というデータを送りたいときは、 1/76000秒=12μ秒なので プログラム的には、まずスタートビットを立ち上げた後に、(この時点をt=0とすると)、その後に off (0 < t < 12 μSec) off (12 < t < 24 μSec) off (24 < t < 36 μSec) off (36 < t < 48 μSec) on (48 < t < 60 μSec) off (60 < t < 72 μSec) off (72 < t < 84 μSec) off (84 < t < 96 μSec) on (96 < t < 108 μSec) off (108 < t < 120 μSec) とすればいいのでしょうか? 初歩的で申し訳ないんですが、よろしくお願いします。

関連するQ&A

  • PICでの赤外線通信について

    PICでの赤外線通信について教えてください。 PIC初心者で、赤外線を利用したものを作るための下準備として、赤外LEDを発光させそれを受信モジュールで受け取り普通のLEDを光らせるということをしています。 受信モジュールにはSANYO製のSPS440-1を使用しており、出力が反転するものなので信号がなければLEDは光り続けています。 テレビのリモコンなどを向けると、チラつくのが確認できました。 次にPIC16F84Aで赤外LEDを38kHzで発光させましたが、何も反応がありません。 受信モジュールの出力が反転するものなので、「13μ間ON、13μ間OFF」を続けていれば、常に「1」ということで受信側のLEDは消える、という予想の元行ったのですが・・・ 私の検討違いなのでしょうか?? ケータイのカメラで赤外線を発光していることは確認できました。 ちなみに10MHzのセラロックを使用していますので、正確には13.2μsecのON・OFFを繰り返しています。これが原因でしょうか?? どなたか教えてください。よろしくお願いします。

  • PICで赤外線を検知したいのですが

    射的を作りたいと思い、銃口に赤外線LED、的に受信モジュール (SPS-440-1 http://akizukidenshi.com/catalog/items2.php?q=%C0%D6%B3%B0%C0%FE&s=score&p=1&r=1&page=#I-00614) を使用して、銃を撃つと赤外線が一瞬でてそれを受信モジュールで検知、 マイコンでその後の処理をしようと思っています。 とりあえずPICで動作確認をしたく、受信モジュールと普通のLEDをPICに付け 赤外線を検知するとLEDが光るようにしました。 しかし、赤外線を発光していないときもLEDが微妙に光っていました。 オシロスコープで受信モジュールの出力を調べると ━━━┳━━━━━┳━━━━━┳━━5V    ┃     ┃     ┃    ┃     ┃     ┃    ┃     ┃     ┃    ┃     ┃     ┃                   0V のように一定周期で信号(幅はほぼなし)が出ていました。(赤外線を検知するとL) 受信モジュールを手で覆うと5Vと一定になるので、たぶん蛍光灯などが 原因だと思います。このままではマイコンがこの信号を検知して モータを回すなどの動作が思い通りにいかなくなります。 銃口から出る赤外線 ━━━┓             ┏━━━5V    ┃             ┃    ┃             ┃    ┃             ┃    ┗━━━━━━━━━━━━━┛   0V のみを検知したいのですが、上の瞬間的な信号だけを除去したりして 思い通りに動かす方法はないでしょうか? よろしくお願いします。

  • PICで赤外線送受信機を作りたいのですが

    PICで赤外線送受信機を作りたいのですが、調べたところ、1bit送るのに38khzのon/offを何十回と繰り返したものを1bitとしてるものばかりでした。 できるだけ高速な通信を行いたいので、これをできるだけ少ない回数繰り返したいのですが、1回とかでは出来ないものでしょうか? また、一般的な受信機は38khzのパスフィルターを使っていますが、これを自分で100khzや200khzのパスフィルターを作ってしまえば多い回数でも高速な通信ができたりはしないのでしょうか? ご回答、よろしくお願いします。

  • PIC USART 全二重通信

    2つのPIC(A, B)間でUSART機能を使用し、全二重通信を行いたいと考えています。 PIC(A)で送信を開始し、同じタイミングでPIC(B)からのデータを受信したい場合、 PIC(B)は送信レジスタにデータを入れておくだけで自動的に送信されるされるのでしょうか?それとも、受信を開始した直後くらいに何か送信設定を行う必要があるのでしょうか?

  • 赤外線の導通状態??

    先日、赤外線送信、受信で”0101”の信号を送信したときに、受信部では反転して”1010”の信号が出力するのに、赤外線の回路が導通状態だからってきいたんですが、なんで導通状態で反転するかわかりません。。。 教えてくれたらうれしいです。

  • 赤外線の反転について

    赤外線の送信で"1010"の信号を送信して、赤外線モジュールとかで信号をキャッチしたら"0101"と、信号が反転するのは何でですか??

  • 赤外線通信ができません。

    win95に赤外線モニターをインストールしました。 で、ドコモの赤外線通信機能を使って、 データをパソコンに送信したいのですが、 「接続相手が見つかりません」と言われ、 送信できません。調べてみたのですが、 win95の赤外線通信規格はIrDA 携帯はIrMCとなっていました。 規格が合わないと駄目なのでしょうか? 解る方いらしたら、是非ご教授ください。 お願いいたします。<(__)>

  • 赤外線通信の受信の仕方

    初めて赤外線通信を使いました。 私の機種はソフトバンクの705SHで、相手の機種はドコモのSH702iSでした。 が、705SHの方のデータはSH702iSに送信できたのですが SH702iSから705SHには送信できませんでした。 私は、初めて赤外線通信を使ったので受信の仕方が間違っていたのかもしれません。 705SHでの受信の仕方は、 メニュー→外部接続→赤外線通信でOn/Off設定を「On」にして、 相手から送信してもらえばいいんですよね? 何か、設定をしておかなければいけないことがあるのでしょうか?

  • 赤外線通信

    新しく携帯をP504iに買い替えて、赤外線通信を使おうと思い、試したのですが赤外線プロトコルで送信中にエラーが発生しましたと出てしまいます。携帯電話をきちんと認識し、データを途中まで送信しているようなのですが、何回やってもこのようなエラーが出てしまいますなぜでしょうか?

  • 赤外線受信機

    赤外線受信回路を制作したいのですが、赤外線送信回路からアッセンブラで指定したビット信号をだす送信回路を制作できたのですが、送信回路からのアッセンブラで指定したビット信号を赤外線モジュールでキャッチして、その信号に合ったLEDをPICを使って何個か発行させたいのですが、回路に失敗して困ってます。 なにかいい例となるサイトありますか?? アッセンブラのサンプル例もあれば助かります。 回路では、PIC18F84Aを使用した回路です。

専門家に質問してみよう