はじめに
本来はフォトダイオード(PD)を使用した光通信デバイスを作りたかったのですが,年末年始のお休みにより通販サイトで注文しても届くのはしばらく先になってしまうことがわかって急遽始めた内容です.なので本編がこれに続く,はずです.
以前にある先生に,お金がなくて必要な機材が揃わなかった場合に研究をどうするのか,と尋ねたとき,今手元にあるもので何ができるのかを考えるのだ,と教えてもらったのでそれを見習ってみよう,という気持ちもあります.
内容
本当はLEDとPDを使用した光通信デバイスを作りたい,が,PDが手持ちに無い.そこでPDの代わりにLEDを受光素子として使用して光通信ができるようにする.
受光素子としてのLED
よく知られている発光素子LEDは適当な電流を流すことで適度に発光してくれます.
PDは受光面に光が当たると微弱な電流が流れます.例えばその電流を抵抗に流すと電圧として値を取り出せます.
ではLEDに光を当てるとどうなるのか.
電流が流れます.
詳細は半導体物性とかの教科書を見るとして,LEDに光を当てると電流が流れるので,PDの代わりに使えます.
実証実験
原理はたしかにそうだが,実際に確かめなければ使えるかどうかはわからない.ということで実験です.と言っても大したことはせず,ArduinoにLEDを2つ繋いでちょろっと確認です.
Arduino Unoのデジタル側3番ピンにLEDアノードを,2番ピンにカソードを接続し,3番をHIGHに,2番をLOWに設定するとLEDが発光します.
今回主役の受光側はアノード端をアナログピン0番に接続し,カソード端はGNDです.
Arduino直差しの都合上,2つのLEDの間は5mmとしています.使用したLEDはOptSupplyのOSW54L5111Pです.
このセットアップでスケッチを用意し,アナログ入力の値が変化するかを調べます.コードはGithubに置いてあります.
受光結果
今回は通信系の評価ということで出力信号には512ビット(511bit + 最後のビットに0)のM系列を使用しました.シリアル出力にはアナログ入力の値と送信した信号の0と1が各ビットごとに書かれています.最後の行はビットエラーレート(BER)で,今回の通信がエラー0で行われたことを示しています.
エラーが0なのでLEDは受光素子として使えることが確認できました.しかし出力値を見てみると,1と0の差は大体60~80ぐらいでしょうか.Arduino UnoのADCは10bitで,電圧5Vを1024段階に分割しているはずです.ということは,ADCの出力が60~80というのは,0.3~0.4Vの変化ということになります.LEDの距離が5mmでこれなので,離すと値は下がるでしょう.
今回の目的はLEDが受光素子として使えるかの確認だったので,これは達成しています.しかし,最終的な目標は光通信デバイスを作ることなので,通信距離が5mmじゃ話になりません.このままでは通信不可なので,実際に使用するにはアンプによる増幅が必要になります.
加えて,現在のセットアップではLEDに流れる電流をそのままArduinoのアナログピンに入力しています.この場合おそらくArduino内部の抵抗に電流が流れ,その値が読まれていると思われます.本来なら電流を電圧に変換して,その電圧値をアナログピンに入力すべきです.簡単に済ませてしまうなら抵抗を直列に入れて抵抗両端電圧を読めばいいのですが,トランスインピーダンスアンプを使うと電流電圧変換に加え増幅もできるはずです.今回はやらないけど.
というか素直にPDを使用するのが一番ですね.
まとめ
PDの代わりにLEDを受光素子として5mmの距離で光通信が達成できました.ので,これに続いて送受信端末を分けてみたり,そもそものPDを使用した受信機を作って光通信デバイスを作っていきたいと思っています.
投稿者の人気記事
-
jeffy
さんが
2020/12/30
に
編集
をしました。
(メッセージ: 初版)
-
jeffy
さんが
2020/12/30
に
編集
をしました。
Opening
3duilab
2021/01/17
jeffy
2021/01/23
ログインしてコメントを投稿するLEDで光が検出できるのですか知らなかったです。感度はPDのほうがいいんだろうけど面白い応用ができそうです
今回は同じLEDを使用しているのですが,色の違う(発光波長の違う)LEDを使用すると光が検出できたりできなかったりするので,そのあたりも詳しく見ていきたいなと思っているところです.