ESP32, IOT物聯網

【ESP32教學】第七篇:類比輸入(ADC)與光線感測器控制光感小夜燈實作

一、 實驗說明:什麼是類比輸入(Analog Input)與光線感測?

在前幾篇教學中,我們學會了只有 0 與 1(高電位與低電位)的數位訊號。但在真實物聯網專題中,許多環境數據都是連續變化的——例如環境光的明暗變化。

本實驗我們將學習 ESP32 的 ADC(類比數位轉換器) 原理,透過光敏電阻(光線感測器)來感測環境光線強度。當環境越暗時,ESP32 讀取到的類比數值就會隨之改變,我們便能利用這個特性做出會根據光線明暗自動開啟不同數量 LED 的「多段光感小夜燈」!

 

二、 實驗材料準備清單

本篇實作專案所需的硬體元件如下:

  • ESP32 開發板

  • 麵包板 (Breadboard)

  • 光敏電阻 / 光線感測器模組

  • LED 發光二極體

  • 220Ω 直插電阻

  • 杜邦跳線

  • USB 傳輸線

 

🛒  還沒有材料嗎? 歡迎直接購買米羅為您搭配好的 ESP32 物聯網應用學習套件,新手零基礎也能輕鬆上手!

 

三、 核心知識:ESP32 的 ADC 腳位選擇與解析度

1. 建議使用的類比輸入腳位

ESP32在做類比輸入實驗時,建議優先使用以下 6 根 ADC 腳位:

  • GPIO 36、GPIO 39、GPIO 34、GPIO 35、GPIO 25、GPIO 26

 

 

2. ESP32 高解析度數值特性

ESP32 內建 12-bit 的 ADC,數值轉換範圍為 0 ~ 4095:

  • 數值接近 0:代表環境亮度最小(最暗)。

  • 數值接近 4095:代表環境亮度最大(最亮)。

 

3.光敏電阻(photovaristor):

又叫光感電阻,也可以稱為光線感測器,是利用半導體的光電效應製成的一種電阻值隨入射光的強弱而改變的電阻器;入射光強,電阻減小,入射光弱,電阻增大。光敏電阻器一般用於光的測量、光的控制和光電轉換(將光的變化轉換為電的變化)。

 

四、 電路接線與實作步驟

把光敏電阻與 LED 燈依照以下步驟連接至麵包板上:

 

 

五、 實作程式碼:光感多段小夜燈控制

請將以下程式碼複製到 Arduino IDE 中並上傳。程式會讀取光線感測器數值,並根據明暗變化控制 LED 開啟數量:

程式:

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);
}

六、 結語與下一篇教學

掌握了 ESP32 的 ADC 類比輸入與光敏電阻後,你已經學會如何讓專題具備「感知周遭環境」的能力!這種光感控制邏輯也是智慧路燈、自動調光螢幕的核心。下一篇教學,我們將帶大家進入物聯網非常經典的溫濕度感測器應用!

👉 上一篇回顧:【ESP32教學】第六篇:蜂鳴器控制與音調頻率播放實作

👉 下一篇預告:【ESP32教學】第八篇:PWM呼吸燈原理與LED燈光亮度調控實作

▼【ESP32教學】教學總索引頁面

相關文章