今回は、フォトダイオードを使って、光を数値化します。具体的には光の強さです。なんだか難しそうなイメージがありますが、【光を数値化】これって、実はあなたも日常的に使っているあるものの中に入っています。
それが、デジタルカメラです。デジタルカメラは内部に細かいフォトダイオードが板状に並んでいます。その板状のフォトダイオードに、レンズを通した光が入ってきます。その光を数値化して画像に変換している、というわけです。
詳しい原理はこちらを見てもらえればスッキリすると思います。
そんなフォトダイオードですが、
手軽に電子工作にも使えるようにモジュール化されたものが販売しています。
そのモジュール化されたものとArduinoを使って、手軽に光を可視化してみます。
光を数値化するフォトダイオードの使い方が理解できる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
【道具】今回の解説に使ったもの
今回解説に実際に使用したものをご紹介します。
どれも一般的な量販店では販売されていないものですが、安心してください。
すべてAmazonで購入可能ですので、
どこにお住まいでも入手可能!便利な時代ですね…
今回の主役【フォトダイオード】
今回の主役です。これが無いと始まりません。
このフォトダイオードをArduinoにつないで抵抗値を測定することで
光の強さを数値化することができます。
Arduinoとの接続方法などは次の章で解説します。
とりあえず「光を受けると、流せる電流値が増加する。」
これだけ理解していればOKです。
Arduino UNO R4
Arduinoも主役の一人です。
今回は、光をフォトダイオードで電気に変換するわけですが、
変換された電気を数値化するものが必要になりますよね。
そんな時便利なのがArduinoです。
Arduinoは電圧を数値化することが可能なので、どれくらいの強さの光が入ってきたかについて数値化できるのはもちろんのこと、いつフォトダイオードに入ったか?という結果も出すことができます。
電圧を数値化することができればいいので、ArduinoのA/D変換付きのモデルや、
RaspberryPiでも電圧をアナログ入力できるようなモジュールを使うことで
代用可能です。
ただ、今回Arduino UNO R4を選択した理由は2つありました。
1つ目のArduinoなら~の理由ですが、Arduino UNO R4は2023年に発売された新しいArduinoです。Arduino UNO R3から、R4までのモデルチェンジにかかった時間は約10年なので、今後10年約にたつ記事となればと思って選んでみました。
Arduino UNO R4はA/D変換が10bit⇒14bitに強化された
Arduino UNOに限らず、Arduino系列のA/D変換は10bit階調が基本となっていました。A/D変換の階調とは、簡単に言うと、AnalogPinと呼ばれる端子に、どれくらいの電圧がかかっているか数値で表せる細かさのようなものです。
そもそも、Arduinoには、2種類の端子が存在しています。1つは、ある一定以上の電圧がpinにかかった場合、その時点でHIGHと認識。それ以外の時はLOW。つまり、HIGH or LOWで1bit階調ともいえるわけです。これをdigitalPin(デジタルピン)と言います。
次に、2つ目の端子ですが、こちらは、電圧値をアナログ値として認識する端子です。具体的には、ArduinoはDC5Vで動作していますから、10bit階調の場合は、2の10乗の分解能を持っていることになります。つまり、5/1024 = 約5mVとなり、5mVの差を表すことが可能となっています。従来のArduinoはこの階調が10bitでしたが、Arduino UNO R4に関しては14bitに強化されています。14bitというと、2の14乗ですから、5/16384 =約0.3mVの差まで表すことが可能となりました。
単純計算で今までの最小分解能の1/10以下ということで、是非使ってみようということでArduino UNO R4を選択しました。 10bitから14bitにパワーアップした内容について、こちらに詳しく書いています。何がどう変わったのか参考にしてみてください。
抵抗や配線関係の部品
抵抗がなぜ必要なのかについての説明が必要となりますが、
とりあえず抵抗は10kΩの物を1個。それから、これから配線図をお見せしますが、
ジャンパーワイヤーとブレッドボードはあったほうが良いです。
ブレッドボードを使わずに何とか浮かせながら配線する方法もありますが、
落ち着いて作業をするには必要です。
【配線方法】フォトダイオードとArduinoの接続
それではフォトダイオードとArduinoを接続していきましょう。
ポイントは、ただフォトダイオードをArduinoとつなぐだけではダメで、
抵抗をつないで、その間の電圧を監視してあげる。ということ。
具体的に配線方法をお見せします。こんな感じです。
フォトダイオードから抵抗に電気が流れるわけですが、
フォトダイオードと抵抗の間のところの電圧を読み取っています。
【原理】フォトダイオードと抵抗で光の強さがわかる理由
フォトダイオードと抵抗で光の強さがわかる理由ですが、
そもそもフォトダイオードは、光の強さによって抵抗値が変わります。冒頭でお話したフォトダイオードは受けた光の強さによって流せる電流値が変わる。ということにつながります。
具体的には、フォトダイオードで光を検知すると、抵抗値が下がり、電気がよく流れるようになります。Arduinoをはじめとしたマイコンボードは流れている電流値をそのまま数値化することができないため、フォトダイオードの抵抗値を測定することで入ってきた光の強さを数値化しています。
ただし、フォトダイオードに5Vをそのまま入れて、GNDに流すようなことをするのは危険です。なぜならフォトダイオードの抵抗値が低い状態のときはショートしたような流れができてしまうためです。ショートさせてしまうと、フォトダイオードが耐えられる限界を超えることになり最悪フォトダイオードが壊れてしまします。
ですから、今回は10kΩを入れましたが、ショートさせないために抵抗が必要ということだけ頭に入れておいてください。
また、この抵抗値は今回10kΩですが、購入した・もしくは手元にあるフォトダイオードによって、
抵抗値を調整することで、照度と電圧の関係式が出せます。
基準となる照度があるのであれば、それに対してArduinoのAnalog値を控えておけばOKということです。
【プログラム】Arduinoに書き込むスケッチ
それでは、Arduinoに書き込むスケッチ(プログラム)をご紹介します。とはいっても、配線したA0でanalogReadするだけなので難しいことはありません。
void setup() {
Serial.begin(115200);
pinMode(A0,INPUT);
analogReadResolution(14);
}
void loop() {
int getLuminus = 0;
getLuminus = analogRead(A0);
Serial.println(getLuminus);
}
Serial.printlnしているので、シリアルモニタを開くと、とんでもない速さで照度が表示されます。
もしデータを取得してエクセルなんかで分析したい場合は、面倒ですが、TeraTermなどのシリアル通信ソフトでデータの吸出しをしたほうが良いです。
【実演】LEDと豆電球の点灯・消灯を数値化
さて、せっかく光の強さが数値化できるようになったので、LEDと豆電球の点滅について数値化してみましょう。
前提として、豆電球とLEDの特徴はご存じでしょうか?豆電球は、フィラメントに電圧・電流をかけることで、赤熱して発光します。
対するLEDは、半導体に電圧・電流をかけることで、P型とN型半導体の再結合により、生まれたエネルギーが光に変わって放出されます。
LEDのほうが、長寿命で省エネなことは有名なので、あなたももちろんご存知だと思いますが、意外と意識されていないのが、点灯の応答性です。ここでいう応答性は、ONしてから実際に光るまでのラグのことです。
最近クルマのウインカーもLED化されることが多くなってきましたが、そのときの点滅が昔よりも、スパスパっと変わる印象なのはわかりますか?LEDのウインカーは、残光のようなじわっと点滅する感じが無くなっています。
この現象はLEDの特性を見てみると説明がつきます。LEDは従来の電球に比べて、ON/OFFに対する反応がとても速いのです。それを示すためにフォトダイオードを使って実験した結果がこちらです。横軸が時間、縦軸が光の強さです。
まずは上段のLEDのグラフをご覧ください。LEDは一瞬でMAX輝度まで到達しているのがわかると思います。消灯するときも一瞬で輝度が下がっていますね。
対する下段の豆電球のグラフをご覧ください。豆電球はLEDに比べてMAXに到達するまでゆっくり上昇しているのがわかりますね。同様に消灯するときもゆっくり下がっています。
この応答性の違いが、見た目のふわっとついたり、ふわっと消えたりすることにつながっています。
【今回のまとめ】光を数値化することで電子工作の幅が広がる!
今回は、フォトダイオードを使うことで、
光を数値化することができました。
数値化できるのと同時に、
時系列で値を取得することも可能なので、今回の実験例のように、
点灯の様子をプロットすることで、点灯の強さを数値化して視覚的にわかりやすくできます。
Arduinoとフォトダイオードがあればできてしまうので、
光を数値化してみたいな。とお考えの場合はやってみるといいかもしれません。
コメント