Raspberry Pi Pico Wを使って学習リモコンモドキを作りTVのチャンネルを変えてみた

プロモーションが含まれています。

スポンサーリンク
サムネイル Pico W

Raspberry Pi Pico Wを使って、学習リモコンモドキを作りテレビリモコンの代わりに使えるか試してみました。

スポンサーリンク

計画

概要は以下のとおりです。

  • 受信機に向けてリモコン(TV)のボタンを押す
  • Raspberry Pi Picoでデータを読み取る
  • データ記録(解析・検証)
  • Raspberry Pi Picoから信号を発信してTVが反応するか確認
  • スマホ(Android)で操作できるようにする(苦戦中)

この計画に合うように、ハード、ソフトを考えていきます。まずは上の4つが上手くいくようにします。

リモコンの信号フォーマット

リモコンの信号がどのように出力しているか、リモコンの基本(フォーマット)について理解しておく必要があります。

【参照サイト】Electronic Lives Mfg.

Bluetooth接続する

なんとか形になりました。LEDの点灯・消灯テストをやってみました。(TVリモコンの代替はやってません。)

スポンサーリンク

準備

電子パーツ

ハードの準備

以下のものを用意しました。

用意するもの
  • Raspberry Pi Pico WH
  • 赤外線リモコン受信モジュール
  • 赤外線LED
  • 抵抗・コンデンサ等
  • ブレッドボードセット

主要部品

電子部品は、データシートがあるものを優先して選定しました。

Raspberry Pi Pico W

ブレッドボードを使用するので、既にピンヘッダーが付いているRaspberry Pi Pico WHを購入しました。

赤外線リモコン受信モジュール

GP1UXC41QS

GP1UXC41QS/シャープ

5mm赤外線LED 940nm

OSI5LA5113A

OSI5LA5113A/OptoSupply


電子部品の殆どは「秋月電子通商」で購入しました。


スポンサーリンク

信号受信

データ受信

ハード回路

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

受信回路

抵抗、コンデンサはモジュールに合ったものを選定します。今回は、R=47Ω、C=47μFを使います。

ソフトと主なコード

ソフト

以下のような動作になるようにプログラムを組んでいきたいと思います。開発プログラムは「MicroPython」です。

  • リモコンの信号を受診したら計測開始
  • 入力はAD変換とする
  • オン時間、オフ時間を計測
  • 計測したデータは、外部テキストに記録
出^タ波形

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

主なコード

【Python】繰り返し処理、条件分岐処理

データ整理イメージ

Thonny上でデータを表示させて、そのデータを元に解析します。

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

データ整理

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

データ整理実際

受信データをエクセル(Googleスプレッドシート)に貼り付けしてデータ整理をします。

スプレッドシート1

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

送信回路1

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

送信回路2

トランジスタを使っています。抵抗が内蔵されているタイプのトランジタなのでGP*端子とトランジスタの間には抵抗がありません。今回は、R2=23.5Ωです。

ソフトと主なコード

ソフト

発信のプログラムイメージは、以下の感じです。

  • 解析データをリスト化
  • PWM信号を赤外線LEDで出力

プログラムが動作してるかどうかが分かるように、処理開始から終了までの間、オンボードのLEDを点灯させます。

主なコード

【Python】繰り返し処理、条件分岐処理

スポンサーリンク

動作確認・参考

動画



参考サイト

下記の2つのサイトを参考にさせて頂きました。

Electronic Lives Manufacturing さん

赤外線リモコンの通信フォーマット

通信フォーマットについて、詳しく書いてあります。サイトの重いです。

マイコン技術Navi さん

ラズパイPicoでテレビを操作

詳しい原因は分かりませんが、サイトにあるコードをそのまま使用ただけでは、上手く動作しませんでした。プログラムの考え方のベースになっています。

コメント

タイトルとURLをコピーしました