Hướng dẫn ESP32 31/55 - Dự án Dải đèn LED với Tránh vật cản | Bộ học IoT ESP32 của SunFounder
Trong hướng dẫn này, chúng ta sẽ tạo một dự án sử dụng vi điều khiển ESP32 và dải đèn LED WS2812 có thể thay đổi hướng dựa trên việc phát hiện chướng ngại vật. Khi dải đèn LED di chuyển về phía trước, nó sẽ hiển thị các màu ngẫu nhiên, và khi phát hiện chướng ngại vật, nó sẽ chuyển sang một màu định sẵn và đảo ngược hướng. Dự án này thể hiện khả năng của ESP32 khi kết hợp với cảm biến tránh vật cản hồng ngoại.
Trong suốt hướng dẫn này, chúng ta sẽ đề cập đến các linh kiện phần cứng cần thiết, hướng dẫn đấu dây và mã code cần thiết để hiện thực hóa dự án này. Để có phần giải thích trực quan hơn, hãy xem video được liên kết bên dưới (trong video tại 00:00).
Giải thích phần cứng
Dự án này yêu cầu một số linh kiện, bao gồm vi điều khiển ESP32, dải đèn LED WS2812 và cảm biến tránh vật cản hồng ngoại. ESP32 là một vi điều khiển mạnh mẽ có Wi-Fi và Bluetooth tích hợp, khiến nó trở nên hoàn hảo cho các ứng dụng IoT. Dải đèn LED WS2812 là một dải đèn LED RGB có thể lập trình, cho phép điều khiển từng đèn LED một cách riêng lẻ, giúp chúng ta tạo ra các hiệu ứng ánh sáng động.
Cảm biến tránh vật cản hồng ngoại hoạt động bằng cách phát ra ánh sáng hồng ngoại và phát hiện phản xạ từ các vật thể gần đó. Khi phát hiện chướng ngại vật, cảm biến thay đổi trạng thái đầu ra, cho phép ESP32 phản hồi tương ứng bằng cách thay đổi hành vi của dải đèn LED.
Chi tiết datasheet
| Nhà sản xuất | WS2812B |
|---|---|
| Số bộ phận | WS2812B |
| Điện áp Logic/IO | 3.3 V (điển hình) |
| Điện áp cung cấp | 5 V (điển hình) |
| Dòng điện đầu ra (mỗi kênh) | 20 mA (tối đa) |
| Dòng điện đỉnh (mỗi kênh) | 60 mA (tối đa) |
| Hướng dẫn tần số PWM | 400 Hz (điển hình) |
| Ngưỡng logic đầu vào | 0.3 Vcc (cao), 0.1 Vcc (thấp) |
| Sụt áp / RDS(on) / bão hòa | 1.2 V (tối đa) |
| Giới hạn nhiệt | 85 °C (tối đa) |
| Kiểu đóng gói | Gắn trên bề mặt |
| Ghi chú / biến thể | Có sẵn với nhiều chiều dài và mật độ khác nhau |
- Đảm bảo dải đèn LED được cấp nguồn 5 V để có hiệu suất tối ưu.
- Sử dụng điện trở phù hợp cho chân dữ liệu để tránh các vấn đề về tính toàn vẹn tín hiệu.
- Cẩn thận với giới hạn dòng điện đầu ra để tránh quá nhiệt.
- Tách nguồn điện đúng cách để ngăn ngừa các xung điện áp.
- Điều chỉnh cảm biến hồng ngoại cẩn thận để đạt được phạm vi phát hiện mong muốn.
Hướng dẫn đấu dây

Để đấu dây các linh kiện, hãy bắt đầu với cảm biến tránh vật cản hồng ngoại. Kết nối chân đầu ra của cảm biến với chân 25 trên ESP32. Chân giữa nên được kết nối với đất, và chân cuối cùng (VCC) nên được kết nối với nguồn điện 3.3 V.
Tiếp theo, đối với dải đèn LED WS2812, kết nối chân dữ liệu (thường là dây màu vàng) với chân 14 trên ESP32. Dây màu đỏ nên được kết nối với nguồn điện 5 V, và dây màu đen nên được kết nối với đất. Đảm bảo cố định tất cả các kết nối đúng cách để tránh dây bị lỏng.
Ví dụ code & hướng dẫn chi tiết
Dưới đây là tổng quan ngắn gọn về code chạy dự án này. Đầu tiên, chúng ta định nghĩa số lượng pixel trong dải đèn LED và chân dữ liệu được sử dụng để giao tiếp:
#define NUM_PIXELS 8
#define DATA_PIN 14
Trong hàm setup(), chúng ta khởi tạo dải đèn LED và cảm biến hồng ngoại:
void setup() {
pixels.begin();
pinMode(AVOID_PIN, INPUT_PULLUP);
uint32_t color = pixels.Color(random(256), random(256), random(256));
pixels.fill(color);
pixels.show();
}
Trong hàm loop(), chúng ta kiểm tra xem có chướng ngại vật được phát hiện hay không và điều khiển dải đèn LED tương ứng:
if (avoid_value) {
for (int i = 0; i < NUM_PIXELS; i++) {
pixels.setPixelColor(i, color);
pixels.show();
pixels.setPixelColor(i, 0);
delay(100);
}
} else {
for (int i = NUM_PIXELS - 1; i >= 0; i--) {
pixels.setPixelColor(i, color);
pixels.show();
pixels.setPixelColor(i, 0);
delay(100);
}
}
Code này cho phép dải đèn LED hiển thị các màu ngẫu nhiên khi di chuyển về phía trước và thay đổi hướng khi phát hiện chướng ngại vật. Toàn bộ code được tải xuống bên dưới bài viết, vì vậy hãy xem để biết tất cả các chi tiết.
Trình diễn / Điều gì sẽ xảy ra
Khi thiết lập hoàn tất và code được tải lên, dải đèn LED sẽ bắt đầu hiển thị các màu ngẫu nhiên trong khi di chuyển về phía trước. Khi phát hiện chướng ngại vật, dải đèn sẽ chuyển sang một màu định sẵn (chẳng hạn như màu xanh lá cây) và đảo ngược hướng. Nếu chướng ngại vật được loại bỏ, dải đèn sẽ tiếp tục di chuyển về phía trước với các màu ngẫu nhiên. Lưu ý rằng phạm vi phát hiện của cảm biến hồng ngoại có thể thay đổi dựa trên nguồn điện được sử dụng (trong video tại 10:30).
Mốc thời gian video
- 00:00 Bắt đầu
- 2:14 Giới thiệu về dự án
- 4:58 Giải thích cách đấu dây
- 7:41 Điều chỉnh cảm biến tránh vật cản
- 10:03 Giải thích mã Arduino
- 15:40 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
- 17:22 Dự án 1: Trình diễn
- 18:17 Thay đổi màu phản hồi
#include <Adafruit_NeoPixel.h>
// Set the number of pixels for the running light
#define NUM_PIXELS 8
// Set the data pin for the RGB LED strip
#define DATA_PIN 14
// Initialize the RGB LED strip object
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);
// Initialize the avoid sensor
#define AVOID_PIN 25
void setup() {
// Initialize the RGB LED strip
pixels.begin();
// Initialize the avoid sensor
pinMode(AVOID_PIN, INPUT_PULLUP);
// Set the initial LED color
uint32_t color = pixels.Color(random(256), random(256), random(256));
pixels.fill(color);
pixels.show();
}
void loop() {
// Read the input from the infrared sensor
bool avoid_value = digitalRead(AVOID_PIN);
// Generate a random color for the current pixel
uint32_t color = pixels.Color(random(256), random(256), random(256));
// If no obstacle is detected
if (avoid_value) {
for (int i = 0; i < NUM_PIXELS; i++) {
// Turn on the current pixel with the random color
pixels.setPixelColor(i, color);
// Update the RGB LED strip display
pixels.show();
// Turn off the current pixel
pixels.setPixelColor(i, 0);
delay(100);
}
}
// If detects an obstacle, change the direction of the LED strip
else {
for (int i = NUM_PIXELS - 1; i >= 0; i--) {
pixels.setPixelColor(i, color);
pixels.show();
pixels.setPixelColor(i, 0);
delay(100);
}
}
}
Common Course Links
Common Course Files
Tài nguyên & tài liệu tham khảo
-
Tài liệuESP32 Tutorial 31/55- SunFounder doc page for flowing lightdocs.sunfounder.com
Tập tin📁
Không có tệp nào khả dụng.