[中級の電子工作テスト]
CANONデジ一で遊ぶ
PIC24F RTCCでカレンダー
PICで赤外線通信
PICでシリアル通信
FT232RL変換モジュール
K型熱電対 AD595CQ
K型熱電対のテスト MAX6675
連枝でラダープログラム
連枝でステッピングモータ
各種デバイスのテスト
[シーケンス回路テスト]
リレーシーケンス
[車載用電子工作テスト]
電源の取り方
[PCBCAD]
EAGLE CAD
[掲示板]
電子工作のテスト工場BBS
[リンク]
工作お役立ちリンク集
[電子工作のテスト工場]
表紙[TOP]へ戻る
[電子工作系]
Sivanyan_Radioのブログ
(↑↑管理人のブログです)
GAMEってたのすぃー
電子回路実験教材の部屋 RLC
電子マスカット 必見[MP3]!
kunioのホームページ AVR+MP3
なひたふ電子
ワタヤンの日記
BLUE's electronics room
isi's 趣味の電子工作
獣医さんの電子工作とパソコン研究室
電子用語集Web
YS電子工作ラボ
(↑↑管理人のブログです)
[プログラム系]
信彦の家
[SNS]
電子工作の広場SNS
[写真]
シャッターを押した瞬間
赤外線受信モジュールには「キャリア周波数」というものがあります。
「40kHz」とか「38kHz」となっているはずです。
テストで使用するモジュールは「38kHz」のものなので「38kHz」でテストしていきます。 「キャリア周波数ってなんやねん?」って思いますが、その周波数に合わせた周波数で赤外線LEDを点滅させないと受信モジュールが働かないということのようです。 つまりは送信側は38kHzの周波数で赤外線LEDを点滅(方形波)させる必要があるということです。 次に赤外線受信モジュールには「出力パルス幅」というものが記載されています。 またまた「「出力パルス幅ってなんやねん?」と思いますが、赤外線受信モジュールが出力する「HIorLOW時間」のようです。 つまりは赤外線受信モジュールが「Hi」と判断した場合は「Hiを出力パルス幅分出力」し、「Lo」と判断した場合は「Lowを出力パルス幅分出力する」ということです。 今回テストに使用するモジュールの出力パルス幅は「600μs」なので「600μs」を元にテストを進めていきます。 |
仕様の項目で説明したように、受信モジュールは600μs事にHiかLowを出力します。赤外線LEDは38kHzで点滅させると書いたのですが、これでは周期がマッチしません。
その謎は「受信モジュールからHiを出力したい場合は600μs間38kHzの周波数で赤外線LEDを点滅させる」ということです。
必然的にLowを出力させたい場合は600μsの間赤外線LEDを消灯していればいいのです。 周波数が38kHzなので周期が26μsと求める事ができます。 よって、23回点滅を繰り返せば≒600μsということになります。 上の画像を見てもらうと分かりますが、赤外線LEDからHiを出力すると受信モジュールはLowを出力します。逆に赤外線LEDからLowを出力すると受信モジュールはHiを出力します。 この辺りをしっかり把握していないとマイコンのプログラムを作成する段階でミスをしてしまいます。 |
赤外線通信と制御の方法がわかったら後はデータをどう送るかということを考えるだけ。
まずはどれだけの制御をするかということにかかってきます。
複雑な制御を細かく指示するコントローラを作る場合はビット数を増やさないと対応できません。
しかし、今回のコントローラはマイコンの内臓オシレータを使用するため、あまり長いビットだと
データがうまく伝わらない可能性があります。そこで、今回はこれだけはあれば何とかなるかなと
おもう「4ビット」でデータを構成したいと思います。 4ビットデータと考えた場合、上図のようなデータになります。 受信側はスタートビット「1」を監視し、「1」が入力された後に順次600μs事にデータを拾うようにします。 この場合、「1」を監視しますが受信モジュールは反転するので本当は「0」の監視ですね。お間違いのないように。 データビットを2ビットにして全体を8ビット通信にする方法もありますが、ビットを短くするとあらゆるリモコンの 影響を受け易くなってしまいます。実際10ビットでもテレビの一部のボタンで反応したりします。 データの作り方を間違ってるのかな? |
送信回路としては赤外線LEDに100mAを与えるのがメインになります。 もちろん100mAをかけ続けるのは良くなく、点滅周期でのみ赤外線LEDを点灯させます。 回路図は上図のようにしてみました。この回路では100mA流れませんが、今回は通信距離に とらわれないので適当に光る範囲で回路を組んでみました。 簡単に言うと手持ちの部品で回路を構成したと言う事ですね。送信スイッチを押すと順番に データを繰り上げて送信するようなプログラムにする予定です。 大した回路じゃないですね。回路図には書いてませんが、スイッチの入力はプルアップする必要がありますね。 |
受信側の回路図もいたって簡単です。 赤外線モジュールは電源とOUT端子の3本で構成されています。素直に電源をつないでOUTを PICのポートに入力するだけでテストする分には大丈夫です。受信データ確認用にLEDを二つつけました。 本来は4つつけて試すのが一番いいのですけどね。 |
送信側プログラムで注意すべき事は特にない。 しいて言うならば赤外線LEDの点滅時間。 これを間違うと永遠に受信はしないので注意が必要です。 タイマーを使う方法もあるかも知れませんが、動作を把握し易いように動きを見てとれるようにプログラムしてみました。 赤外線LEDを点滅させるサブルーチンと600μs間消灯しているサブルーチンを作り、それを必要な個数呼び出している だけです。ひょっとするとアセンブラで書いたほうが早かったかも? ソースはここ 回路図がPIC12F675だったのにプログラムがPIC18F2320なのは気にしないで。 設定変えるだけだからわかるよね? プログラムの内容はスイッチが3つあって、押すとスイッチごとのデータを送信してるだけです。 |
受信側のプログラムはどうしようか迷いました。
ネットで検索した結果、このやり方がベターなのかと思いプログラムしてみました。 まずはスタートビットを監視し、スターとビットを検出すると600μs事にポートの状態を確認。 順序だってればデータの部分を変数に代入するというやり方です。今回は3つのパターンしかつかわないかったので 変数は2個しか用意していません。 動作としては出力にLED3つとモータが一つある回路で、「1」が送信されてくるとLEDが順に点灯します。 「2」が送られてきた場合はLEDを点滅させながらモーターを動かします。「3」の場合はモーターだけ動かします。 モーターは振動モーターなので動かしたり止めたりしてます。 ソースはここ このプログラムで実際にうまく動くか不安でしたが、取りこぼしもなく動いています。他のリモコンからの信号を受信して 動いてしまいますがビット数が少ないのでしかたないでしょう。ビット数を増やすかデータ方式を考えて回避する事も簡単でしょう。 |
Copyright (c) 2007-2022 amahime All Rights Reserved.