フォトトランジスタに流れる電流の大きさはほぼ照度に比例して変化します。抵抗で電流を電圧に変換して 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);
}
記事内で用いられたハードウェア
関連記事
- 内蔵LEDを点灯させるまで (Arduino)Arduinoとは Arduino は初心者でも入門しやすいマイコンボードです。アルデュイーノと読みます。マイコンとは家電などに内蔵されている小さなコンピュータで、マイコンが必要とする周辺機器一式と一緒に一つのボードにまとめたものがマイコンボードです。数あるマイコンの中で特にArduinoにはAVRマイコンが使用されています。2005年にイタリアで開始されたオープンソースハードウェアのプロジェクト...
- 虚仮威しの防犯装置 (Arduino)人が接近すると防犯用の音を鳴らします。インターネットに接続してメール送信機能を追加すれば、虚仮威しどころか立派な防犯装置になります。センサの性能は視野角が約 120 度と広範囲で、距離もおおよそ 2m まで検知可能です。赤外線を発する人体や動物などが動くと反応します。自動ドアや照明の自動点灯にも応用されています。
- Arduino で作る温度と気圧の計測基板専用の IC を利用すると、簡単に温度や気圧を測定できます。インターネットに接続してグラフ化したりボットを作ったりと応用先は様々ですが、ここでは LCD に結果を表示する測定基板を作成します。 必要なパーツ 以下のパーツが必要になります。画像ではコンデンサを直列に接続したり抵抗を並列に接続したりしていますが、これは手元に適切な値のパーツがなかったためです。 高精度
- 電力の無駄遣い (定電圧電源)マイコンを含む様々な IC を動作させるためには定電圧電源が必要です。USB ケーブルなどで供給する場合を除き、定電圧を出力するための回路が必要になります。ここでは、乾電池 9V 形から得られる電圧を 5V に変換し、更に 3.3V に変換し、最後に 5V に昇圧するという電力の無駄遣いともとれる基板を作ります。動作させるものはマイコンではなく燦然と輝く LED です。汎用基板として様々な場面で利...
- Arduino で作る 7 セグメント LED タイマーArduino の入門として、4 桁の 7 セグメント LED でカウントアップタイマーを作ってみます。PIN の電流制限を考慮してトランジスタを使用する必要があったり、桁数が多いためダイナミック点灯制御を用いなければならなかったりと、単なる LED 点灯制御と比較して考えなければならない事項は多めです。