搜尋程式碼

ESP32 教學 22/55 - 用 LED Arduino 感受光線 | SunFounder 嘅 ESP32 IoT 學習套件

ESP32 教學 22/55 - 用 LED Arduino 感受光線 | SunFounder 嘅 ESP32 IoT 學習套件

喺呢個教學入面,我哋會探討點樣用ESP32微控制器配合光敏電阻(LDR)嚟量度光強度。透過讀取LDR嘅電阻值,我哋可以觸發動作,例如當光線水平超過某個臨界值時啟動蜂鳴器。呢個項目會示範光線水平同ESP32模擬讀取能力之間嘅互動,等我哋可以根據環境光嚟建立響應式應用程式。(喺影片5:30位置)

硬件講解

我哋喺呢個項目入面會用到嘅主要元件包括ESP32微控制器、一個LDR同一個10 kΩ電阻。LDR會根據照射喺佢表面嘅光強度而改變電阻值:光線越強,電阻值越低;光線越弱,電阻值越高。呢個特性令我哋可以透過將LDR同電阻以分壓電路形式連接,嚟量度唔同嘅光線水平。

ESP32微控制器內置Wi-Fi同藍牙功能,令佢好適合用喺物聯網項目。佢有幾個模擬引腳可以讀取唔同嘅電壓水平,我哋會利用呢啲引腳嚟監測LDR兩端嘅電壓。呢個電壓會被轉換成一個ESP32可以處理嘅模擬值,並用嚟觸發動作,例如啟動蜂鳴器。

數據手冊詳情

製造商Espressif Systems
零件編號ESP32
邏輯/IO電壓3.3 V
供電電壓3.0 - 3.6 V
輸出電流(每個GPIO)最大40 mA
PWM頻率指引1 kHz - 40 kHz
輸入邏輯臨界值高電平:最低2.0 V,低電平:最高0.8 V
電壓降 / RDS(on) / 飽和最大0.3 V
熱限制-40 °C 至 125 °C
封裝QFN48
備註 / 變體支援多種Wi-Fi同藍牙協議

  • 使用一個10 kΩ電阻同LDR串聯嚟做分壓。
  • 確保ESP32以3.3 V供電,以免損壞。
  • 正確連接LDR同電阻嚟量度光強度。
  • 如有需要,可以使用電容做去耦嚟穩定電源供應。
  • 檢查模擬讀取值,確保佢哋喺預期範圍之內。

接線說明

ESP32-22_light_sensor-wiring

要將LDR同電阻接到ESP32,首先將LDR其中一個端子連接到ESP32嘅3.3 V電源引腳。LDR嘅另一個端子應該連接到10 kΩ電阻嘅其中一個端子。然後將電阻嘅另一個端子連接到接地。

跟住,將一條跳線由LDR同電阻之間嘅連接點連接到ESP32嘅引腳35。呢個設置會形成一個分壓電路,令ESP32可以根據照射喺LDR上嘅光強度嚟讀取變化嘅電壓。確保所有連接穩固,並且LDR嘅位置可以準確感應光線變化。

程式碼示例同講解

喺程式碼入面,我哋首先初始化串列通訊嚟監測LDR嘅讀取值。呢度嘅關鍵識別符係analogValue,佢儲存咗引腳35嘅讀取值。

void setup() {
  Serial.begin(115200);
}

void loop() {
  int analogValue = analogRead(35);
  Serial.printf("ADC analog value = %d\n",analogValue);
  delay(100);
}

呢段程式碼以115200嘅鮑率初始化串列監視器,並持續讀取引腳35嘅模擬值。呢個值會被打印到串列監視器,等我哋可以觀察佢點樣隨光線水平變化。

當光強度改變時,LDR嘅電阻值會變化,因此ESP32讀取到嘅電壓亦會改變,反映光線狀況(喺影片12:45位置)。

示範 / 預期效果

當你運行程式並觀察串列監視器時,你應該會見到ADC analog value根據環境光線條件而波動。當你遮住LDR時,數值應該會增加,表示電阻值較高;而將佢暴露喺強光下時,數值應該會顯著下降。呢種行為可以用嚟根據預設嘅臨界值觸發蜂鳴器或其他動作。

如果讀取值冇按預期變化,請檢查接線問題,確保LDR冇浮空,並確認ESP32供電正確。咁樣可以幫助避免常見嘅陷阱,確保運作順暢(喺影片15:30位置)。

影片時間戳

  • 00:00 開始
  • 1:48 LDR介紹
  • 8:33 接線講解
  • 11:07 Arduino程式碼講解
  • 13:07 喺Arduino IDE入面選擇ESP32開發板同COM埠
  • 14:49 讀取值示範
  • 17:24 了解日間同夜間數值
  • 18:47 DAC數值同讀取電壓

圖片

ESP32-22_light_sensor
ESP32-22_light_sensor
ESP32-22_light_sensor-wiring
ESP32-22_light_sensor-wiring
821-ESP32 Tutorial 22/55- Arduino code for Light dependant resistor
語言: C++

void setup() {
  // initialize serial communication at 115200 bits per second:
  Serial.begin(115200);

}

void loop() {
  // read the analog value
  int analogValue = analogRead(35);
  
  // print out the values you read:
  Serial.printf("ADC analog value = %d\n",analogValue);
  
  delay(100);  // delay in between reads for clear read from serial
}

資源與參考資料

文件📁

冇文件可用。