ESP32で可視光通信をする #1
概要
ESP32で可視光通信を目指している.
LEDと照度センサを使って,LEDのオンオフをシリアル通信で確認.
照度センサにハイパスフィルタをつけて,直流成分をカットした.
結論
シリアル通信でLEDのオンオフが認識できるようになった.
実行したこと
実行環境
【ホストPC】
【ターゲットボード】
- ESP32-WROOM-32 開発ボード
【センサ類】
- フォトICダイオード S9648-100
- 赤LED
- コンデンサ 100μF :ハイパスフィルタ用
- コンデンサ 4.7μF :ローパスフィルタ用
- 抵抗 1 kΩ :ローパスフィルタ用
- 抵抗 220 Ω :ハイパスフィルタ用
- 抵抗 100 Ω :LED用
手順
ハードウェア準備
【送信機】
LEDをつけるだけ.
【受信機】
照度センサをつける.
回路構成は,こちらのサイトを参考にした.
http://arms22.blog91.fc2.com/blog-entry-416.html
周囲の明るさが直流成分となってしまうのを避けたいので,ハイパスフィルタを追加した.手元にあったコンデンサと抵抗を使って,カットオフ周波数7 Hz程度の丁度いい感じのハイパスフィルタができた.
フィルタ作成で参考にしたサイトはこちら.
http://sim.okawa-denshi.jp/CRtool.php
ソフトウェア準備
VScodeとPlatformIOで送信機,受信機ともにプログラムを作成.
受信機はこちらのプログラムを参考にした.
http://arms22.blog91.fc2.com/blog-entry-416.html
とりあえず,受信データを0と1で区別できるように閾値を10 mVとした.
構成
プログラム
作成したプログラムはこちら.
【送信機】
【受信機】
結果
受信波形をArduino IDEのシリアルプロッタで出力してみた.
ハイパスフィルタのおかげで,LEDが点灯しているときのみはっきりと電圧が高くなっている.部屋の照明を消しても,LEDが点灯しているときにのみ反応できている.
ハイパスフィルタなしだと,下図のように,直流成分が大きく乗ってしまう.部屋の照明をつけると大きく変動してしまう.
あとがき
ハイパスフィルタがとてもいい仕事をしてくれた.
もう少し細かい信号処理はソフト側でやりたいが,ハードで解決できる方が楽でいい.
現在は,固定された通信距離(10 cm)で一度通信をしてから閾値を固定で決めているので,自動で閾値を決められるように工夫したい.