04 フォトレジスタで明るさに反応するシステムをつくる
準備物
・LED
・フォトレジスタ
・300Ω抵抗
・1kΩ抵抗
・ジャンパワイヤ x7
フォトレジスタ
フォトレジスタ(光依存性抵抗)は、感知する光の強度が増加すると電気抵抗が低下する部品です。光を受け取ると内部に電流が流れ、それによって抵抗が低くなります。フォトレジスタを使って、光を感知して明るさを調節するシステムを構築します。
A/Dコンバーター (アナログデジタルコンバーター)
RedBoardがアナログ信号を使用するために、A/D変換を使用します。センサーが読み取ったアナログ信号を、システムが処理できる形式であるデジタル信号に変換(サンプリング)します。
解像度とはA/D変換器がどれくらいの精度でサンプリングできるかを表す指標です。解像度が上がると、元のアナログ信号をデジタル信号に変換したときの表現力が上がります。8bitの解像度では、0-256の数値でデジタル化します。16bitの解像度では0-65535でデジタル化されます。解像度が高い場合は、より元のアナログ信号に近いデータとして、デジタル化することができます。
RedBoardのA/D変換器の解像度は10bitです。つまり、2^10 = 1024の値で表現します。そのため、RedBoardが処理したアナログ信号は、0~1023のデジタル信号値として処理されます。
接続
- LEDの(+)と(-)の方向に注意してください
- フォトレジスタの向きはありません
- 使用する抵抗の抵抗値が1KΩであることを確認してください
プログラムの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// 定数の定義 int photoresistor = 0; //フォトレジスタからの値を格納する定数 int threshold = 750; //フォトレジスタの明るさの閾値、これより値が小さい場合は明るくする void setup() { Serial.begin(9600); //ボーレートは9600でシリアル通信を開始する pinMode(13, OUTPUT); //13番のPINを出力モードに設定する } void loop() { //フォトレジスタを使用して明るさを読み取る photoresistor = analogRead(A0); //フォトレジスタからのアナログ値を0-1023までのデジタル値として読み取る Serial.println(photoresistor); //シリアルモニタに読み取った値を出力する //フォトレジスタからの値が閾値よりも小さいならLEDをONにする if (photoresistor < threshold) { digitalWrite(13, HIGH); //LEDをオンにする } else { digitalWrite(13, LOW); //LEDをオフにする } delay(100); //100msごとに値をチェックしてLEDのオンオフを切り替える } |
結果
フォトレジスタを手や物で覆ったりすると、LEDが光ります。
まとめ
フォトレジスタを使って、明るさ(アナログ信号)をデジタル信号に変換して、LEDのオンオフを切り替えました。