這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。
當(dāng)太陽(yáng)落山時(shí),您的房子會(huì)開(kāi)始變暗,您可能需要打開(kāi)幾盞燈才能看清。那么,如果這些燈光可以自動(dòng)打開(kāi)不是更方便嗎?使用光敏電阻傳感器和Arduino,您就可以實(shí)現(xiàn)根據(jù)周圍的環(huán)境光線變化對(duì)照明燈、百葉窗或者其他任何物件進(jìn)行控制了。
光敏電阻的工作原理
在本項(xiàng)目中,我們的重點(diǎn)在于介紹光敏電阻以及如何將它們整合到您的項(xiàng)目中。光敏電阻是一種電阻器,它會(huì)根據(jù)照射的光亮來(lái)改變其電阻值。典型的電阻器以恒定的電阻值來(lái)阻止電子在電路中的流通,而光敏電阻會(huì)在受到更多的光線照射時(shí)允許更高的電壓通過(guò)電路。反而言之,當(dāng)受到較少的光線照射時(shí),其電阻值會(huì)增加。
可以通過(guò)Arduino的模擬引腳讀取其電阻值,讀數(shù)范圍在0到1023之間。有了這些信息,您可以使您的項(xiàng)目對(duì)明亮的日光、黃昏或沒(méi)有光亮的夜晚作出不同的響應(yīng),比如在外面很亮的時(shí)候打開(kāi)百葉窗,或者在天黑的時(shí)候打開(kāi)照明燈。
光敏電阻體積小,價(jià)格便宜,而且通常在入門(mén)套件和其他傳感器套件里都包含該組件。如果您買過(guò)電子套件,可能會(huì)發(fā)現(xiàn)其中就有一兩個(gè)光敏電阻。為了演示它們是如何工作的,我們將控制兩個(gè)LED,當(dāng)有光線時(shí)其中一個(gè)亮起,沒(méi)有光線時(shí)另外一個(gè)亮起。
所需組件
在本項(xiàng)目中,不需要很多標(biāo)準(zhǔn)電子套件中以外的東西。但是,如果您想要使用光敏電阻控制大型項(xiàng)目則需要注意準(zhǔn)備一些特殊組件。例如,如果您想控制百葉窗,就需要準(zhǔn)備一些伺服,如果您想要控制一盞燈,那么需要使用一個(gè)繼電器?,F(xiàn)在,我們將僅介紹如何使用該傳感器。
Arduino Uno | |
Arduino IDE | |
兩個(gè)LED 功能完好,具有不同顏色! |
|
光敏電阻 | |
一個(gè)220 歐姆電阻 進(jìn)一步降低通過(guò)光敏電阻的阻值,將其降低到更有效的水平 |
|
兩個(gè)100 歐姆 電阻 防止燒壞LED |
如果您沒(méi)有一根躺在某個(gè)角落里的USB數(shù)據(jù)線,還需要購(gòu)買USB數(shù)據(jù)線。
在本項(xiàng)目的原型構(gòu)建中使用面包板也會(huì)很有幫助。同樣,所有這些材料通常都可以在任何入門(mén)電子套件中找到,因此請(qǐng)事先查看您是否已經(jīng)具備這些組件。
代碼
在本項(xiàng)目中,我們將使用Arduino上的一個(gè)引腳讀取光敏電阻阻值,并使用兩個(gè)引腳來(lái)控制兩個(gè)獨(dú)立的LED。當(dāng)光敏電阻檢測(cè)到高于某個(gè)閾值的光線強(qiáng)度時(shí),其中一個(gè)LED將會(huì)亮起。當(dāng)光線強(qiáng)度低于該閾值時(shí),另一個(gè)LED將會(huì)亮起。實(shí)現(xiàn)以上功能的全部代碼如下所示:
int redLED = 7;
int blueLED = 8;
int photoresistorPIN = A0;
int lightValue = 0;
void setup() {
pinMode(redLED, OUTPUT);
pinMode(blueLED,OUTPUT);
Serial.begin(9600);
}
void loop(){
lightValue = analogRead(photoresistorPIN);
Serial.println(“Light value: “);
Serial.println(lightValue);
if(lightValue < 50){
digitalWrite(redLED, HIGH);
}
else{
digitalWrite(blueLED, HIGH);
}
delay(200);
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
}
這段代碼中有幾個(gè)部分需要解釋,我們從要設(shè)置的變量開(kāi)始。
int redLED = 7;
int blueLED = 8;
int photoresistorPIN = A0;
int lightValue = 0;
在這里,我們將紅色LED分配給引腳7,藍(lán)色LED分配給引腳8。這些可以分配給Arduino上的任何數(shù)字引腳。接下來(lái),我們將光敏電阻分配給A0。該引腳必須分配給六個(gè)模擬引腳之一,因?yàn)樗枰x取來(lái)自光敏電阻的模擬值。
最后,我們將創(chuàng)建一個(gè)名為lightValue的變量來(lái)存儲(chǔ)光敏電阻返回的值。
void setup() {
pinMode(redLED, OUTPUT);
pinMode(blueLED,OUTPUT);
Serial.begin(9600);
}
在setup()部分中,前兩行用于將紅色和藍(lán)色LED 引腳分配為輸出引腳。
我們還將初始化串行監(jiān)視器,這樣就可以查看光敏電阻的返回值。這在設(shè)定用于切換兩個(gè)LED開(kāi)關(guān)的閾值時(shí)會(huì)很有用。
根據(jù)設(shè)置項(xiàng)目時(shí)所在房間的環(huán)境光強(qiáng)度,您可以基于自己的需要對(duì)閾值進(jìn)行調(diào)整。
void loop(){
lightValue = analogRead(photoresistorPIN);
Serial.println(“Light value: “);
Serial.println(lightValue);
if(lightValue < 50){
digitalWrite(redLED, HIGH);
}
else{
digitalWrite(blueLED, HIGH);
}
delay(200);
digitalWrite(redLED, LOW);
digitalWrite(blueLED, LOW);
}
在loop()部分中,第一行用于讀取光敏電阻的模擬值,并將其分配給lightValue變量。然后該值將會(huì)被立即打印到串行監(jiān)視器上。
接下來(lái),如果光傳感器讀取的值低于50,循環(huán)代碼中的一部分代碼將會(huì)被啟用,紅色LED燈將會(huì)亮起,如果值高于50,則藍(lán)色LED將會(huì)亮起。如果50對(duì)您的環(huán)境光線來(lái)說(shuō)太低,紅燈一直亮起,那么請(qǐng)使用串行監(jiān)視器為您的項(xiàng)目設(shè)定一個(gè)合適的值。
接線
現(xiàn)在您已經(jīng)理解了代碼,接下來(lái)請(qǐng)將其上傳到您的Arduino。然后,我們將開(kāi)始設(shè)置接線—幸運(yùn)的是,這非常簡(jiǎn)單,并且很容易將其添加到您的其他項(xiàng)目中。要完成接線設(shè)置,請(qǐng)按照下列步驟操作:
● 將藍(lán)色LED的長(zhǎng)端連接到Arduino的引腳8。將LED的短端連接到一個(gè)100歐姆的電阻上,然后將該電阻的另一端連接到GND。
● 對(duì)紅色LED重復(fù)上一步驟,LED連接到Arduino上的引腳7。
● 將光敏電阻的一端連接到5V引腳,另一端連接到引腳A0。此外,在光敏電阻的第二個(gè)端口連接一個(gè)220歐姆的電阻,并將該電阻連接到GND。
● 如果需要,將之前的電路與面包板上的正負(fù)軌連接。
完成所有接線后,您可以將Arduino插入電源以啟動(dòng)項(xiàng)目。在光敏電阻上揮動(dòng)您的手,將會(huì)從藍(lán)色LED亮起切換到紅色LED亮起。如果只有其中一個(gè)LED保持亮起的狀態(tài),請(qǐng)嘗試調(diào)整草圖中if()語(yǔ)句中的值,直到傳感器按照預(yù)期方式進(jìn)行工作。當(dāng)您對(duì)結(jié)果感到滿意的時(shí)候,項(xiàng)目就完成了!
DevicePlus 編輯團(tuán)隊(duì)
設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。
審核編輯黃宇
-
光傳感器
+關(guān)注
關(guān)注
3文章
171瀏覽量
29958 -
Arduino
+關(guān)注
關(guān)注
188文章
6474瀏覽量
187442
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論