實驗說明:
本篇將介紹ESP32類比訊號(Analog signal)讀取處理。類比訊號在時間和數值上都是連續的訊號。就好比在大自然裡一切的 訊號 ,包括我們聽到的聲音、看到的影像,感覺到的溫度濕度這些都屬於類比訊號。在類比訊號讀取(analogRead)是Arduino非常重要的課程,因為大部分的感測器都是提供類比腳位AO,以類比方式感測可以獲取更多的數據來收集或比較,提供使用者在程式設計上更多的選擇,ESP32可以將類比數值切成0~4095之間的表示範圍。ESP32類比輸入建議優先使用GPIO36、39、34、35、25、26這六根腳位。
實驗中,我們將會使用光線感測器做一個多段光感小夜燈,來觀察光敏電阻類比訊號的特性,當光敏電阻感測器讀出的數值為0表示環境亮度最小,4095表示環境亮度最大,並將會依據環境亮度的明暗開啟不同數量的LED燈。
材料:
- ESP32-E DevKit
- USB 傳輸線
- 直插LED
- 220Ω直插電阻
- 光敏電阻感測器模組 或 (光敏電阻 + 10kΩ直插電阻)
- 麵包板
- 麵包板跳線
▼ 購買IoT物聯網學習教材:
相關知識:
- 光敏電阻(photovaristor)又叫光感電阻,也可以稱為光線感測器,是利用半導體的光電效應製成的一種電阻值隨入射光的強弱而改變的電阻器;入射光強,電阻減小,入射光弱,電阻增大。光敏電阻器一般用於光的測量、光的控制和光電轉換(將光的變化轉換為電的變化)。
- 光敏電阻感測器可廣泛應用於各種光控電路,如對燈光的控制、調節等場合,也可用於光控開關。
接線說明:
程式:
int led_1 =15;
int led_2 =2;
int led_3 =4;
int led_4 =16;
int led_5 =17;
int light_sensor = 36;
void setup()
{
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(led_5, OUTPUT);
pinMode(light_sensor, INPUT);
Serial.begin(9600);
}
void loop()
{
int val=analogRead(light_sensor);
Serial.println(val);
if (val>3500){
digitalWrite(led_1, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>2800){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>2100){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>1400){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, LOW);
digitalWrite(led_5, LOW);
}else if (val>700){
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, HIGH);
digitalWrite(led_5, LOW);
}else {
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, HIGH);
digitalWrite(led_5, HIGH);
}
delay(100);
}