Raspberry Pi Pico Wを使って、学習リモコンモドキを作りテレビリモコンの代わりに使えるか試してみました。
計画
概要は以下のとおりです。
この計画に合うように、ハード、ソフトを考えていきます。まずは上の4つが上手くいくようにします。
リモコンの信号フォーマット
リモコンの信号がどのように出力しているか、リモコンの基本(フォーマット)について理解しておく必要があります。
Bluetooth接続する
なんとか形になりました。LEDの点灯・消灯テストをやってみました。(TVリモコンの代替はやってません。)
準備

ハードの準備
以下のものを用意しました。
主要部品
電子部品は、データシートがあるものを優先して選定しました。
Raspberry Pi Pico W
ブレッドボードを使用するので、既にピンヘッダーが付いているRaspberry Pi Pico WHを購入しました。
赤外線リモコン受信モジュール

GP1UXC41QS/シャープ
5mm赤外線LED 940nm

OSI5LA5113A/OptoSupply
電子部品の殆どは「秋月電子通商」で購入しました。
信号受信

ハード回路
受信回路は以下のようにしました。リモコンをモジュールに近づければ、信号は受信できます。

抵抗、コンデンサはモジュールに合ったものを選定します。今回は、R=47Ω、C=47μFを使います。
ソフトと主なコード
ソフト
以下のような動作になるようにプログラムを組んでいきたいと思います。開発プログラムは「MicroPython」です。

水色の様な信号入力になることを想定して、Raspberry Pi PicoのAD入力を利用してオン時間とオフ時間を測定します。(オシロスコープで測定すればいいのですが、持っていないのでやってみての結果から対応していきます。)上記の様なデータが取れるコードを作ります。
主なコード
データ整理イメージ
Thonny上でデータを表示させて、そのデータを元に解析します。

シェル部に表示されているのが取得したデータです。次項で、詳しく説明します。

取得するデータは、上図の様になります。一番目のデータは無視します。以降のデータ(計測時間)から、送信コードのフォーマットを解析します。上図の分析結果は、「0-1-1」となります。実際のデータを使って解析します。
データ整理実際
受信データをエクセル(Googleスプレッドシート)に貼り付けしてデータ整理をします。

A列
A列にRaspberry Pi Picoで取得したデータを貼り付けます。
1個目(セルA1)のデータは無視します。
B列
それ以降のデータを約550で割ります。(B列)
B列の値は小数点以下も表示されるので整数表示にする。
B列に表示されている値は、上記の処理をした後の値です。
最初の2行(B2、B3)の説明は省略します。知りたい人は通信フォーマットを勉強して下さい。
C列
B列の1、-1、1、-3と表示されているのを確認。
B列の縦2セル(緑色の□枠)でひとつの信号として考えます。
「1と-1」(例:B4とB5) は「0」(例:C4)
「1と-3」(例:B16とB17)は「1」(例:C16)となります。
この考え方で、信号コードを最後まで作ります。
最後の方の変なデータ

データを作っていくと最後の方(赤色□枠)に、通信フォーマットに合わない変なデータが取れています。正直、これが何なのか全く分かりません。下に書いた条件にも合わないので、今回は無視します。(今回は、無視して上手く行きました。)
通信フォーマットによっては、コードの終わりに「繰り返し信号」を発信して、再度頭からコードを発信している場合もあります。(今回はこれでは無さそうです。)
信号送信

ハード回路
2通りの回路でやってみました。ひとつは簡単な回路だけど送信距離が短い方法、もうひとつはトランジスタを使った少し複雑な回路だけど送信距離が長くなる方法です。

抵抗をひとつかませただけです。今回の抵抗はR=47Ωを使いました。

トランジスタを使っています。抵抗が内蔵されているタイプのトランジタなのでGP*端子とトランジスタの間には抵抗がありません。今回は、R2=23.5Ωです。
ソフトと主なコード
ソフト
発信のプログラムイメージは、以下の感じです。
プログラムが動作してるかどうかが分かるように、処理開始から終了までの間、オンボードのLEDを点灯させます。
主なコード
動作確認・参考
動画
参考サイト
下記の2つのサイトを参考にさせて頂きました。
Electronic Lives Manufacturing さん
通信フォーマットについて、詳しく書いてあります。サイトの重いです。
マイコン技術Navi さん
詳しい原因は分かりませんが、サイトにあるコードをそのまま使用ただけでは、上手く動作しませんでした。プログラムの考え方のベースになっています。



コメント