Arduinoの基礎 - 赤外線LEDとフォトダイオード
ナビゲーションに移動
検索に移動
概要
フォトダイオードは、光のエネルギーを電流に変換することができる半導体である。
したがって、フォトダイオードに光を当てることでダイオードを通り電流が流れる。
フォトダイオードも通常のダイオードと同じく、アノードとカソードがあり、足の長い方がアノード、短い方がカソードである。
なお、光が当たっていない(反応の弱い波長の光しか当たっていない)場合でも、僅かながら電流は流れており、それを暗電流(ダークカレント)という。
赤外線LEDとフォトダイオードの使用
ここでは、Arduinoと赤外線LEDおよびフォトダイオードを組み合わせて、障害物の検出を行う。
Arduinoとの配線を下図に示す。
フォトダイオードの種類において、最も感度の良い波長は異なる。
ここでは、940[nm]の波長の赤外線への感度の高いフォトダイオードと940[nm]の赤外線LED(IR LED)を組み合わせて使用する。
Arduinoにおいて、digitalRead関数
で入力を読み取った場合、3[V]が閾値となり、それより低い電圧の場合はLow、それより高い電圧ではHighとなる。
上図において、電流が流れている場合、フォトダイオードのVFは1.2[V]程度である。
このため、電流が流れている場合(つまり、障害物がなく、赤外線LEDの光が当たっている場合)は、digitalRead
関数はLowを返す。
逆に、電流が流れていない場合(つまり、障害物があり、赤外線LEDの光が当たっていない場合)は、digitalRead関数
はHighを返す。
これらの特徴を活かして、ブザーを鳴らしたり止めたりする。
<syntaxhighlight lang="c++"> const int PIN_PD = 3; const int PIN_BZ = 4; void setup() { pinMode( PIN_PD, INPUT ); pinMode( PIN_BZ, OUTPUT ); digitalWrite( PIN_BZ, LOW ); } void loop() { int pd = digitalRead( PIN_PD ); if( pd == HIGH ) { digitalWrite( PIN_BZ, HIGH ); delay( 100 ); } else { digitalWrite( PIN_BZ, LOW ); } delay( 50 ); } </source>