キイロイトリらぼ

ぬいぐるみと一緒に生きていきます

ESP32で可視光通信をする #1

概要

ESP32で可視光通信を目指している.

LEDと照度センサを使って,LEDのオンオフをシリアル通信で確認.

照度センサにハイパスフィルタをつけて,直流成分をカットした.

結論

 シリアル通信でLEDのオンオフが認識できるようになった.

f:id:gijin94yobu:20200517184115j:plain

実行したこと

実行環境

【ホストPC】

  • windows10 64bit Home
  • VSCode - 1.45.1
  • PlatformIO(VScodeにインストール済み)

【ターゲットボード】

  • 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とした.

構成

f:id:gijin94yobu:20200525174752p:plain

プログラム

作成したプログラムはこちら.

【送信機】

ESP32で可視光通信の送信機

【受信機】

ESP32で可視光通信の受信機

結果

 受信波形をArduino IDEのシリアルプロッタで出力してみた.

ハイパスフィルタのおかげで,LEDが点灯しているときのみはっきりと電圧が高くなっている.部屋の照明を消しても,LEDが点灯しているときにのみ反応できている.

f:id:gijin94yobu:20200517215140p:plain

 ハイパスフィルタなしだと,下図のように,直流成分が大きく乗ってしまう.部屋の照明をつけると大きく変動してしまう.

f:id:gijin94yobu:20200517215406p:plain

あとがき

ハイパスフィルタがとてもいい仕事をしてくれた.

もう少し細かい信号処理はソフト側でやりたいが,ハードで解決できる方が楽でいい.

現在は,固定された通信距離(10 cm)で一度通信をしてから閾値を固定で決めているので,自動で閾値を決められるように工夫したい.

参考