
- アルディーノ最近始めました!って人
- 自然光の光を計測したい!って人
- 回路図とプログラムを見たい!って人
こんにちは.けんゆー(@kenyu0501_)です.
今日はフォトレジスタを使って自然光の明るさを計測します.
フォトレジスタは,光の強度が増加すると電気抵抗値が下がる電子部品になります.
今回はCdSセル(硫化カドミウム)という,かなりポピュラーなフォトレジスタを使います.
以下のようなものです.
CdSセルは映像の一番後ろ側にあります.
周囲の明るさを計測して,暗ければLEDの照度をあげるような回路です.
周囲の明るさを計測したあとは,LCDによりデジタル的に表示するものと,LEDによりアナログ的に表示するものの2つに分けてます.
回路図
回路図はこのような感じです!
興味がある人は真似して見て下さい!

なお,LCDに関してはI2C通信をしています.
接続は4本のワイヤのみですが,混乱している方は以下を参考にしてみてください.
(参考:Arduino,I2C通信により4本のケーブルでLCDを動かす!)

プログラム
プログラムはこちらです!
Prototyping Labを参考にしていますが,I2C通信にてLCDを表示してます.
#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)
- 圧力(感圧センサ)
- 曲がり具合(曲げセンサ)
- 温度(温度センサ)
- 傾き(チルトセンサ,水銀)
- 動き(加速度センサ)
- 方位角(デジタルコンパス)
- 人体感知(焦電センサ)
などなど,かなりの数があります.
このブログでも余裕があれば全て取り上げて行きます!







