- アルディーノ最近始めました!って人
- 自然光の光を計測したい!って人
- 回路図とプログラムを見たい!って人
こんにちは.けんゆー(@kenyu0501_)です.
今日はフォトレジスタを使って自然光の明るさを計測します.
フォトレジスタは,光の強度が増加すると電気抵抗値が下がる電子部品になります.
今回はCdSセル(硫化カドミウム)という,かなりポピュラーなフォトレジスタを使います.
以下のようなものです.
CdSセルは映像の一番後ろ側にあります.
周囲の明るさを計測して,暗ければLEDの照度をあげるような回路です.
周囲の明るさを計測したあとは,LCDによりデジタル的に表示するものと,LEDによりアナログ的に表示するものの2つに分けてます.
回路図
回路図はこのような感じです!
興味がある人は真似して見て下さい!
なお,LCDに関してはI2C通信をしています.
接続は4本のワイヤのみですが,混乱している方は以下を参考にしてみてください.
(参考:Arduino,I2C通信により4本のケーブルでLCDを動かす!)
プログラム
プログラムはこちらです!
Prototyping Labを参考にしていますが,I2C通信にてLCDを表示してます.
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <LiquidCrystal_I2C.h> // CdSセルに接続したピンの番号 const int sensorPin = 0; // LEDに接続したピンの番号 const int ledPin = 9; // LCDオブジェクト LiquidCrystal_I2C lcd(0x3f,16,2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hello, CdS cell!"); } void loop() { // 明るさを読み取る int brightness = analogRead(sensorPin); // LCDの表示をクリアしてから読み取った明るさを表示 lcd.setCursor(0, 0); lcd.clear(); lcd.print("CdS: "); lcd.print(brightness); // センサの値(0~1023)をLEDの輝度(255~0)に変換 int intensity = map(brightness, 0, 1023, 255, 0); // LEDの輝度を表示 lcd.setCursor(0, 1); lcd.print("LED: "); lcd.print(intensity); // LEDに接続したピンに輝度の値をセット analogWrite(ledPin, intensity); // 次回の処理まで100ms待つ delay(100); } |
周りの環境が明るければLEDは暗くなり,周りの環境が暗ければLEDは明るくなります.
CdSセルの代替!?
このCdSセルは,光の強度を電圧に変換することのできる優れものであり,セルの感度が人間の視覚的なものに非常に近いです.
また,セルの価格もかなり安いです.
しかしながら,近年では,セルの中に有害物質が問題となっており,年々入手が困難になってきているそうです.
そのため代替センサとして,パナソニック電工の照度センサNaPiCa(AMS302)が同じような接続方法で使用できるようです.
(参考:Prototyping Lab)
かなり多くのセンシングが可能!
光計測の他にも,Arduinoはいろんなセンシングが実装できます.
例えば
- 距離(赤外線センサや超音波センサ)
- 振動(ピエゾ素子)
- タッチ判定,直線上の位置(SoftPot)
- 圧力(感圧センサ)
- 曲がり具合(曲げセンサ)
- 温度(温度センサ)
- 傾き(チルトセンサ,水銀)
- 動き(加速度センサ)
- 方位角(デジタルコンパス)
- 人体感知(焦電センサ)
などなど,かなりの数があります.
このブログでも余裕があれば全て取り上げて行きます!