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