ESP32 Module Cảm Biến Ánh Sáng LDR

Module cảm biến ánh sáng LDR có thể cảm nhận và đo lường ánh sáng xung quanh nó. Module có hai đầu ra: một đầu ra digital có thể là LOW hoặc HIGH, và một đầu ra analog.

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng ESP32 và module cảm biến ánh sáng LDR cùng nhau để phát hiện và đo lường cường độ ánh sáng. Đây là những gì chúng ta sẽ tìm hiểu:

ldr cảm biến ánh sáng module
image source: diyables.io

Sau đó, bạn có thể thay đổi code để làm cho LED hoặc bóng đèn bật lên (sử dụng relay) khi phát hiện ánh sáng.

Nếu bạn quan tâm đến cảm biến ánh sáng ở dạng thô, tôi khuyên bạn nên khám phá hướng dẫn cho ESP32 - Cảm Biến Ánh Sáng.

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Module Cảm Biến Ánh Sáng LDR
1×breadboard
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Module Cảm Biến Ánh Sáng LDR

Module cảm biến ánh sáng LDR có thể được sử dụng để phát hiện có ánh sáng hay không hoặc có bao nhiêu ánh sáng trong khu vực xung quanh nó. Module có một chân đầu ra digital và một chân đầu ra analog cho các tùy chọn khác nhau.

Sơ Đồ Chân

Module cảm biến ánh sáng LDR có bốn chân:

  • Chân VCC: Kết nối chân này với nguồn điện (từ 3.3V đến 5V).
  • Chân GND: Kết nối chân này với đất (0V).
  • Chân DO: Đây là chân đầu ra digital. Nó cho tín hiệu HIGH khi trời tối và LOW khi có ánh sáng. Bạn có thể điều chỉnh ngưỡng giữa tối và sáng bằng potentiometer tích hợp.
  • Chân AO: Đây là chân đầu ra analog. Giá trị giảm khi ánh sáng sáng hơn và tăng khi ánh sáng tối hơn.
ldr cảm biến ánh sáng module sơ đồ chân
image source: diyables.io

Ngoài ra, module cảm biến ánh sáng LDR được trang bị hai đèn LED báo hiệu:

  • Đèn LED PWR báo hiệu trạng thái nguồn điện.
  • Đèn LED DO phản ánh trạng thái ánh sáng trên chân DO: nó sáng khi có ánh sáng và tắt khi trời tối.

Cách Hoạt Động

Về chân DO:

  • Module cảm biến ánh sáng LDR có một potentiometer cho phép bạn điều chỉnh độ nhạy hoặc ngưỡng để phát hiện ánh sáng.
  • Khi cường độ ánh sáng trong môi trường xung quanh cao hơn ngưỡng đã đặt (được coi là có ánh sáng), đầu ra của cảm biến trên chân DO trở thành LOW, và đèn LED DO bật.
  • Khi cường độ ánh sáng trong môi trường xung quanh thấp hơn ngưỡng đã đặt (được coi là tối), đầu ra của cảm biến trên chân DO trở thành HIGH, và đèn LED DO tắt.

Về chân AO:

  • Giá trị đọc từ chân AO tỷ lệ nghịch với cường độ ánh sáng trong môi trường xung quanh. Nói cách khác, khi cường độ ánh sáng tăng (sáng hơn), giá trị trên chân AO giảm.
  • Tương tự, khi cường độ ánh sáng giảm (tối hơn), giá trị trên chân AO tăng.

Điều quan trọng cần lưu ý là việc điều chỉnh potentiometer không ảnh hưởng đến giá trị trên chân AO.

Sơ Đồ Đấu Nối

Module cảm biến ánh sáng cung cấp hai đầu ra, DO và AO, có thể được sử dụng riêng lẻ hoặc cùng nhau.

  • Cách kết nối ESP32 và module ldr bằng breadboard
ESP32 ldr cảm biến ánh sáng module sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

how to connect ESP32 and ldr module

Code ESP32 - Đọc giá trị từ chân DO

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-ldr-module */ #define DO_PIN 13 // ESP32's pin GPIO13 connected to DO pin of the ldr module void setup() { // initialize serial communication Serial.begin(9600); // initialize the ESP32's pin as an input pinMode(DO_PIN, INPUT); } void loop() { int lightState = digitalRead(DO_PIN); if (lightState == HIGH) Serial.println("It is dark"); else Serial.println("It is light"); }

Các Bước Nhanh

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện đấu nối như hình ảnh trên.
  • Kết nối bo mạch ESP32 với PC của bạn qua cáp micro USB
  • Mở Arduino IDE trên PC của bạn.
  • Chọn đúng bo mạch ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Sao chép code trên và mở bằng Arduino IDE
  • Nhấp nút Upload trên Arduino IDE để tải code lên ESP32
  • Che và bỏ che module cảm biến ánh sáng LDR bằng tay bạn hoặc vật gì đó
  • Xem kết quả trên Serial Monitor.
COM6
Send
It is light It is light It is dark It is dark It is dark It is light It is light It is light
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Nếu bạn quan sát thấy trạng thái LED luôn bật hoặc tắt, bất kể có ánh sáng hay không, bạn có thể điều chỉnh potentiometer. Việc điều chỉnh này cho phép bạn tinh chỉnh độ nhạy ánh sáng của cảm biến.

Hơn nữa, code có thể được sửa đổi theo yêu cầu của bạn. Ví dụ, bạn có thể lập trình LED để kích hoạt hoặc đèn bật khi phát hiện ánh sáng. Ngoài ra, bạn có thể linh hoạt làm cho servo motor quay. Hướng dẫn chi tiết và tutorial về các tùy chọn tùy chỉnh này có thể được tìm thấy ở cuối hướng dẫn này.

Code ESP32 - Đọc giá trị từ chân AO

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-ldr-module */ #define AO_PIN 36 // ESP32's pin GPIO36 connected to AO pin of the ldr module void setup() { // initialize serial communication Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } void loop() { int lightValue = analogRead(AO_PIN); Serial.print("The AO value: "); Serial.println(lightValue); }

Các Bước Nhanh

  • Sao chép code trên và mở bằng Arduino IDE
  • Nhấp nút Upload trên Arduino IDE để tải code lên ESP32
  • Che và bỏ che module cảm biến ánh sáng LDR bằng tay bạn hoặc vật gì đó
  • Xem kết quả trên Serial Monitor.
COM6
Send
The AO value: 145 The AO value: 146 The AO value: 146 The AO value: 572 The AO value: 1678 The AO value: 1945 The AO value: 2956 The AO value: 3001 The AO value: 3098 The AO value: 4005 The AO value: 4005 The AO value: 1645 The AO value: 1546 The AO value: 346 The AO value: 172
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Lưu ý:

Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với module LDR. ESP32 ADC phù hợp cho các dự án KHÔNG cần độ chính xác cao. Tuy nhiên, đối với các dự án cần đo lường chính xác, vui lòng lưu ý:

  • ESP32 ADC không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả đúng. Mỗi bo mạch ESP32 có thể hơi khác nhau, vì vậy bạn cần hiệu chuẩn ADC cho từng bo mạch riêng lẻ.
  • Hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không phải lúc nào cũng cho kết quả chính xác mà bạn muốn.

Đối với các dự án cần độ chính xác cao, hãy xem xét sử dụng ADC bên ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ESP32 ADC, hãy tham khảo ESP32 ADC Calibration Driver

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.