2016-06-22 18:19 | カテゴリ:PIC応用回路

回路を自作して赤外線リモコンに仕上げる

ブレッドボード上の回路で動作が確認できましたので、一連のハードを汎用基板に組み込みました。
使用する部品はこちらです。

joy07.jpg

続きは、、、


回路は、PICとTTLのICです。

joy08.jpg

joy09.jpg

また、赤外線シリアル通信リモコンの仕様としてこの様に決めました。

1)ジョイスティックの抵抗値(X,Y)をAD変換して読み取り。
2)各1バイトのデータとして、シリアルポート経由で送出。
3)PWMにIR(変調)の周波数(変調周波数: 37.9kHz)をセット。
4)TX端子の信号とPWMの出力をANDして、結果でIRのLEDを点滅。

赤外線LEDは、ある程度の距離を飛ばすと言うことで、3個ドライブすることにしました。
そのため、PICのポート一つでは無理な為、TRを一つ追加しました。
また、赤外線LEDは目に見えないので、回路が動作しているか否かを確認する為に、赤色LEDを赤外線LEDと並列に追加しました。

あとは、AD変換CH数を2から4に増やし、左右2個のジョイスティックと、追加で2個のプッシュSWを追加します。

回路が完成し、一通りの動作確認が出来ました。

joy06.jpg

赤外線の到達距離をテストしてみました。
机上に赤外線受信モジュールと、シリアル通信ICをブレッドボード上に組み立て、受信したシリアル信号がPCに取り込まれて、画面表示されるようになっています。

製作した送信モジュールを持って、1m、2m、3mと離れて受信状況を見ました。
赤外線LEDの照射角度は15度(50%強度)で、それを少し広げて取り付けています。

joy02.jpg

3mくらいになると、照射を向けていても時々取りこぼしがあります。
照射方向を少しずらすと、かなりの頻度で受信取りこぼしが生じました。

なにか改善できないかと考えました。
一つは、PWMのデューティー比です。
今回は、33%程度にしていました。
これを50%にして再度テスト。

今度は、結構優秀です。
3mでも、照射方向が合っていると、ほぼ問題なく受信できます。
また、壁面に向けても、ある程度は、受信できました。

次に、赤外線LEDに流す電流をUPする方法です。
推奨値は20mAです。Vfは、1.2-1.8Vと有りましたので、安全をもって、1.8Vとし、20mA流すには、

(5-1.8)/0.02 = 160Ω

ちょっと危険率をみて、220Ωにしています。
これを、160くらいにして、テストしました。

しかし、効果は確認できませんでした。
多少の電流UPでは、LEDの輝度向上にはあまり貢献しないようです。
しかし、せっかくなので、基板の裏側に追加抵抗(並列接続)を半田付けしておきました。

joy04.jpg

というわけで、リモコンのAD変換部分を含む赤外線送信が完成しました。
基板は未だ固定できていませんが。
更に、指で操作できる様に押しボタンSWを左右二個取り付け、基板と電池BOXを固定し、電源SWを取り付ければ完成です。

joy10.jpg

joy11.jpg

3m程度の距離で、目標物体に向けて照射するような角度で使用すれば、何とか実用になりそうです。
最後のリモコンボックスのプッシュSWや電池ケースも取り付けて、一応の完成です。(HW的に)

ところで、リモコンとして使用することを考えると、単に、AD変換値やプッシュSWの状態を、2400bpsの速度で垂れ流し的に送るだけでは、恐らくはだめでしょう。
なぜなら、ソフト的な処理が何も工夫されていないからです。

例えば

* 電源ONの順番によっては、信号の途中から発信・受信され、何がなんだか分からなくなる
* 正常通信中にノイズなどで中断した場合、誤動作が続く
* 電源投入時に毎回VRの校正をしなければならない

などの場合です。

そこで、信号に「始め」と「終わり」を付けます。

「始め」の印としては、データ中に含まれない数字列が良いはずです。
そこで、例えば(16進数文字列として)

「AA」「AA」-->「始め」の合図(2バイト)
「X1のAD値」「Y1のAD値」-->(4バイト)
「AA」-->中間チェック(1バイト)
「X2のAD値」「Y2のAD値」-->(4バイト)
「スイッチ状態」-->(1バイト)
「AA」-->「終了」の合図(1バイト)

合計13バイト
通信速度を2400bpsとすれば、最大毎秒約19セットを処理できます。(10bpsで1バイトと仮定して)
これですと、多少読みこぼしがあっても、模型の動作としては、何とかなりそうです。

あとは、受信側で、規定通りに受信が出来なかった際の、ERROR処理を工夫して、読み飛ばしや、次のデータサイクルまで待つ、などを行えばよいはずです。

三つ目の「毎回校正をしなければならない」の問題は、校正した補正値をROMに記憶して、毎回始動時に呼び出せば解決しそうです。

【ジャンル】:趣味・実用 【テーマ】:ホビー・おもちゃ
コメント(2)

管理者のみに表示する