フォトトランジスタに流れる電流の大きさはほぼ照度に比例して変化します。抵抗で電流を電圧に変換して A/D 変換しても照度の測定はできますが、分解能が 10 ビット程度では照度の小さな変化を検知できません。そこで、タイマ IC を利用して電流を周波数に変換します。これをカウントすることで照度の測定ができますが、単純に LED やモーターを駆動させるだけでもちょっとした面白さがあります。
必要なパーツ
以下のパーツが必要になります。LED を点滅させるだけであれば Arduino は不要です。単三乾電池 4 本を直列にして 6V 電源にすれば動作します。照度測定のためにパルスの周波数を計測する目的で Arduino を利用しています。
- フォトトランジスタ NJL7502L x1
- タイマー IC LMC555 x1
- LED x1
- 抵抗 220Ω x1
- 抵抗 20kΩ x1
- コンデンサ 0.1μF x1
- Arduino UNO R3 x1
- ブレッドボード x1
- ジャンプワイヤ (適量)
- 短めのジャンプワイヤ (適量)
回路図
タイマ IC として有名な 555 を利用すると、無安定マルチバイブレータ回路をトランジスタやオペアンプを別途用意することなく設計できます。この発振回路の周波数は接続するコンデンサおよび抵抗の値で決まります。データシート等に記載されている回路例の抵抗一つをフォトトランジスタに置き換えると、照度の変化が抵抗値の変化に相当し、周波数が照度に応じて決まることになります。通常のトランジスタではベース電流に応じて流れる電流の大きさが決まりましたが、フォトトランジスタでは照度に応じて決まるためです。

制御プログラム
pulseIn 関数で周波数を計算しています。照度センサの出力をタイマ IC でパルスに変換することで、今回場合においては Arduino の 10 ビット A/D 変換で直接読み取る場合と比較して精度よく照度の変化を測定できます。

#define PULSE_INPUT_PIN 2
void setup() {
pinMode(PULSE_INPUT_PIN, INPUT);
Serial.begin(9600);
}
void loop() {
// 第二引数で指定した状態 (HIGH/LOW) が継続したマイクロ秒数を計測します。
unsigned long T_H = pulseIn(PULSE_INPUT_PIN, HIGH);
unsigned long T_L = pulseIn(PULSE_INPUT_PIN, LOW);
// 周期と周波数
double T = T_H + T_L; // μ秒
double f = 1000000 / T; // Hz
// シリアルモニタに送信
Serial.print(f);
Serial.print(" Hz\n");
delay(500);
}
記事内で用いられたハードウェア
電子回路の基本を学びながら、Arduinoを活用した実験を発信しています!
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。






