标签 光敏电阻 下的文章

说起来是某天逛珠海这边的电子城(就是二十几家电子元件店铺聚合的地方),经过个一小摊位时,一个自动打招呼的小装置吸引了我(就是那种当有人经过时,播放“欢迎光临”的装置)。店主MM走过来,我仔细研究了一下,问:“光敏电阻?”MM笑了一下,说:“是的,光敏电阻。”顿时明白了这东西的原理——当有人经过时,内置的光敏电阻感应到光的变化(应该是变暗了),然后播放声音。于是想回去后自己也弄一个。

然后到了昨天才想起那件事情,但还是今天晚上才有空做出来。拿出满是灰尘的Arduino盒子,按照网上的电路图接上电路,再写个小程序来读取光敏电阻的数据并作出反应(用个LED闪两下来,代替播放声音的功能)。

电路图如下:
读取光敏电阻(From Arduino台湾使用者社群 http://arduino.tw
http://arduino.tw/allarticlesindex/2009-09-06-18-37-08/50-%E8%AE%80%E5%8F%96%E5%85%89%E6%95%8F%E9%9B%BB%E9%98%BB.html

该控制程序的代码如下:
//---------begin---------------------
int inPin = 2;    //set input pin
int outPin = 13;   //set output pin
int val = 0;   //the current data from LDR (light dependent resistor)
int pre = 0;   //the previous data

void setup() {
//Serial.begin(9600);
pinMode(outPin, OUTPUT);
val = analogRead(inPin);   //read the data from LDR
pre = val;   //init the previous data
}

void loop() {
val = analogRead(inPin);
if(pre - val >= 5) {   //compare the light change, if it turns darker
//Serial.print(pre - val);
//Serial.print("\n");
blinkLED(outPin);
pre = val;
} else if(val - pre >= 5) {  //if it turns brighter
pre = val;
}
}

//make the LED blinks
void blinkLED(int pin){
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
delay(200);
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
}
//---------end---------------------

int inPin = 2;    //set input pin
int outPin = 13;   //set output pin
int val = 0;
int pre = 0;
void setup() {
//Serial.begin(9600);
pinMode(outPin, OUTPUT);
val = analogRead(inPin);
pre = val;
}
void loop() {
val = analogRead(inPin);
if(pre - val >= 5) {
//Serial.print(pre - val);
//Serial.print("\n");
blinkLED(outPin);
pre = val;
} else if(val - pre >= 5) {
pre = val;
}
}
void blinkLED(int pin){
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
delay(200);
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
}

总结下吧。对电路方面还是有很多不熟悉的地方,虽然高中物理的电路理论几乎都能用上,但都忘了很多。唉~~更不用说大学时还学过的“大学物理”、“数字电路”、“模拟电路”……对了,该装置可以在很多情况下代替红外线感应的,而且成本上可以节省一大笔(例如开头提到的“欢迎光临”装置)。对于我来说,或者可以用来抓蟑螂。