Đèn trung thu nhấp nháy với ESP32 và pin 18650: dự án STEM cho học sinh

Làm đèn ông sao trung thu với ESP32, 3 LED và mô đun pin 18650: 4 hiệu ứng chạy vòng, thở, lung linh, chạm cán đổi hiệu ứng, PWM, cách làm vỏ đèn và an toàn với pin.

Mùa Trung thu là dịp tuyệt vời cho một dự án STEM: tự làm chiếc đèn ông sao biết nhấp nháy, "thở" và lung linh như ngọn nến, đổi hiệu ứng chỉ bằng một cái chạm tay vào cán đèn. Bài viết hướng dẫn làm đèn trung thu với ESP32, 3 đèn LED và mô đun pin 18650. Đèn LED gần như không tỏa nhiệt nên an toàn hơn nhiều so với thắp nến trong đèn giấy.

Qua dự án, học sinh học được cách điều khiển độ sáng bằng PWM, cách dùng hàm cos để làm hiệu ứng mượt, số ngẫu nhiên để giả lập ánh nến, và cách cấp nguồn bằng pin cho một thiết bị di động.

1. Chuẩn bị

2. Nối dây

Sơ đồ nối: LED đỏ D25, vàng D26, xanh lá D27 của ESP32 DevKit V1 qua điện trở 220 ohm về GND; dây ở D4 làm nút chạm đổi hiệu ứng; mô đun pin 18650 ở dưới, ngõ 5V nối chân VIN, ngõ G nối GND
Hình minh họa: nguồn 5 V từ mô đun pin vào chân VIN.
  • LED: đỏ ở D25, vàng ở D26, xanh lá ở D27. Mỗi LED nối tiếp một điện trở 220 Ω, chân dài về phía chân ESP32, chân ngắn về GND.
  • Nút chạm: một dây ở D4, đầu kia dán vào miếng giấy bạc quấn quanh cán đèn.
  • Nguồn: ngõ ra 5 V của mô đun pin nối chân VIN, ngõ GND nối chân GND của ESP32. Mạch ổn áp trên ESP32 hạ 5 V xuống 3,3 V cho chip.
  • Khi cắm cáp USB để nạp chương trình, tháo dây VIN ra khỏi mô đun pin để hai nguồn không nối chung.

3. Chương trình 4 hiệu ứng

// PYWORLD.VN - ESP32 DevKit V1: đèn trung thu 3 LED với 4 hiệu ứng, chạy bằng pin 18650
// LED đỏ D25, vàng D26, xanh lá D27 (mỗi LED nối tiếp điện trở 220 ohm xuống GND)
// Chạm dây ở D4 để đổi hiệu ứng: chạy vòng, thở, lung linh, tắt

const int SO_LED = 3;
const int CHAN_LED[SO_LED] = {25, 26, 27};
const int CHAN_CHAM = 4;
const char* TEN_HIEU_UNG[] = {"Chay vong", "Tho", "Lung linh", "Tat"};
const int SO_HIEU_UNG = 4;

int hieuUng = 0;
uint32_t giaTriNen = 1;
bool dangCham = false;

void sang(int led, int doSang) {          // doSang: 0..255
  ledcWrite(CHAN_LED[led], doSang);
}

bool vuaCham() {
  uint32_t v = touchRead(CHAN_CHAM);
  float lech = ((float)v - (float)giaTriNen) / giaTriNen;
  if (lech < 0) lech = -lech;
  bool cham = lech > 0.30;
  bool moi = cham && !dangCham;
  dangCham = cham;
  return moi;
}

void chayVong(unsigned long t) {          // mỗi LED sáng 300 ms, lần lượt
  int dangSang = (t / 300) % SO_LED;
  for (int i = 0; i < SO_LED; i++) sang(i, i == dangSang ? 255 : 0);
}

void tho(unsigned long t) {               // sáng dần rồi tối dần trong 3 giây, ba LED lệch pha nhau
  for (int i = 0; i < SO_LED; i++) {
    float goc = 2 * PI * ((t + i * 1000) % 3000) / 3000.0;
    sang(i, (int)(127.5 * (1 - cos(goc))));
  }
}

void lungLinh() {                         // như ngọn nến: độ sáng đổi ngẫu nhiên quanh mức cao
  for (int i = 0; i < SO_LED; i++) sang(i, random(120, 256));
}

void setup() {
  Serial.begin(115200);
  setCpuFrequencyMhz(80);                 // giảm tốc độ chip để tiết kiệm pin
  for (int i = 0; i < SO_LED; i++) ledcAttach(CHAN_LED[i], 5000, 8);
  delay(500);
  uint32_t tong = 0;
  for (int i = 0; i < 30; i++) {          // lúc khởi động không chạm dây D4
    tong += touchRead(CHAN_CHAM);
    delay(2);
  }
  giaTriNen = tong / 30;
  if (giaTriNen == 0) giaTriNen = 1;
  Serial.println("Den trung thu: cham day D4 de doi hieu ung");
}

void loop() {
  if (vuaCham()) {
    hieuUng = (hieuUng + 1) % SO_HIEU_UNG;
    Serial.printf("Hieu ung: %s\n", TEN_HIEU_UNG[hieuUng]);
  }
  unsigned long t = millis();
  if (hieuUng == 0) chayVong(t);
  else if (hieuUng == 1) tho(t);
  else if (hieuUng == 2) lungLinh();
  else for (int i = 0; i < SO_LED; i++) sang(i, 0);
  delay(hieuUng == 2 ? 80 : 20);
}

Nạp chương trình, mở Serial Monitor (115200 baud). Mỗi lần chạm vào dây D4, đèn đổi sang hiệu ứng tiếp theo: chạy vòng, thở, lung linh, tắt, rồi lại chạy vòng. Lúc cấp điện, đừng chạm vào dây D4 để chương trình đo đúng giá trị nền.

4. Ba hiệu ứng hoạt động thế nào?

Bốn đồ thị độ sáng của LED đỏ, vàng, xanh lá trong 3 giây: chạy vòng là các xung vuông lần lượt mỗi 300 ms; thở là ba đường cong hình sin lệch nhau 1 giây với chu kỳ 3 giây; lung linh là độ sáng nhảy ngẫu nhiên quanh mức cao; tắt là đường thẳng bằng 0
Hình minh họa: tính đúng công thức trong chương trình.
  • PWM điều khiển độ sáng: ledcWrite(chân, độ sáng) bật tắt LED 5.000 lần mỗi giây; độ sáng 0–255 là tỉ lệ thời gian bật. Mắt người không thấy nhấp nháy mà chỉ thấy đèn sáng mạnh hay yếu.
  • Chạy vòng: (t / 300) % 3 cho biết LED nào đang tới lượt: cứ 300 ms đổi một lần, lặp lại 0, 1, 2.
  • Thở: 127.5 × (1 − cos(góc)) đi mượt từ 0 lên 255 rồi về 0 trong 3 giây. Ba LED lệch nhau 1 giây nên ánh sáng "lượn" quanh đèn. Đây là dịp tốt để học sinh lớn thấy hàm lượng giác dùng vào việc thật.
  • Lung linh: cứ 80 ms, mỗi LED nhận một độ sáng ngẫu nhiên từ 120 đến 255, giống ngọn nến bị gió thổi nhẹ.
  • Tiết kiệm pin: setCpuFrequencyMhz(80) giảm tốc độ chip từ 240 xuống 80 MHz; hiệu ứng ánh sáng không cần chạy nhanh hơn thế.

Đèn sáng được bao lâu? Ước tính với pin 2.000–3.000 mAh, mạch tiêu thụ khoảng 40–60 mA, mạch tăng áp hiệu suất khoảng 85 %: đèn sáng khoảng 20–45 giờ. Đây là số ước tính, cho trẻ tự đo bằng cách ghi giờ bật và giờ đèn tắt.

5. Làm vỏ đèn ông sao

Đèn ông sao 5 cánh màu đỏ có 3 LED bên trong và cán cầm; 5 bước làm đèn từ làm khung, dán giấy bóng kính, đặt mạch và pin vào hộp giữa đèn, đưa dây cảm ứng ra cán, thử trong phòng tối; ô an toàn về nến, pin 18650 và nước mưa
Hình minh họa: mạch và pin đặt trong hộp nhỏ ở giữa đèn.
  1. Làm khung ngôi sao 5 cánh bằng que tre hoặc cắt từ bìa cứng.
  2. Dán giấy bóng kính màu hoặc giấy pơ-luya lên khung. Giấy mỏng, sáng màu giúp ánh LED lan đều.
  3. Đặt mạch ESP32, LED và mô đun pin vào một hộp nhỏ ở giữa đèn. Hướng LED ra các cánh sao.
  4. Đưa dây cảm ứng ra ngoài, quấn giấy bạc ở cán cầm: cầm vào cán là có thể đổi hiệu ứng.
  5. Thử từng hiệu ứng trong phòng tối, chỉnh vị trí LED cho đẹp.

6. An toàn với pin 18650

  • Pin 18650 có dung lượng lớn: nếu chập hai cực, pin nóng rất nhanh và có thể cháy. Luôn để pin nằm chắc trong mô đun, lắp đúng cực.
  • Người lớn sạc pin; không để đèn giấy đang sạc mà không có người trông.
  • Không thắp nến chung với mạch điện trong đèn giấy.
  • Che kín mạch, không mang đèn ra mưa.

7. Xử lý lỗi thường gặp

Lỗi thường gặp và cách xử lý
Hiện tượngNguyên nhân thường gặpCách xử lý
Một LED không sángCắm ngược chiều LEDXoay ngược LED: chân dài về phía chân ESP32
Chạy bằng USB được, chạy bằng pin thì khôngNối 5 V vào chân 3V3 thay vì VIN; pin hếtNối đúng chân VIN; sạc pin, xem đèn báo của mô đun
Hiệu ứng tự đổi liên tụcLúc cấp điện đang chạm dây D4Bỏ tay ra, bấm nút EN để khởi động lại
Chạm cán không đổi hiệu ứngGiấy bạc không tiếp xúc tốt với dâyKẹp chặt đầu dây vào giấy bạc, hoặc chạm thẳng vào đầu dây

8. Gợi ý cho phụ huynh và giáo viên

  • Kết hợp truyền thống và công nghệ: kể cho trẻ nghe về đèn ông sao, đèn kéo quân ngày xưa, rồi so sánh với chiếc đèn "biết lập trình".
  • Chia việc: học sinh nhỏ làm vỏ đèn và trang trí; học sinh lớn nối mạch và sửa chương trình (thêm hiệu ứng mới, đổi tốc độ chạy vòng).
  • Thử thách: thêm hiệu ứng thứ năm, ví dụ ba LED cùng nháy theo nhịp trống; hoặc thêm LED cho từng cánh sao.
  • Thời lượng: 2–3 buổi 45 phút: nối mạch và chạy chương trình; làm vỏ đèn; lắp ráp và trình diễn trong đêm Trung thu ở lớp.

9. Xem thêm


Tin tức liên quan

An toàn khi dùng máy khắc laser và máy CNC: cấp laser, kính bảo hộ, khói độc, cháy và mũi phay
An toàn khi dùng máy khắc laser và máy CNC: cấp laser, kính bảo hộ, khói độc, cháy và mũi phay

Những điều phải biết trước khi bật máy khắc laser và máy CNC: cấp laser, chọn kính bảo hộ theo bước sóng và OD, vật liệu cấm khắc, phòng cháy, hút khói, an toàn dao phay và điện.

IC 555: chế độ dao động và đơn ổn, cách tính tần số và thời gian
IC 555: chế độ dao động và đơn ổn, cách tính tần số và thời gian

IC 555 là gì, sơ đồ chân và cấu tạo bên trong, mạch đơn ổn tạo trễ và mạch dao động nháy LED, nguồn gốc công thức t = 1,1RC và f = 1,44/((R1 + 2R2)C), bảng giá trị và mạch tạo trễ relay.

Vali nhựa hay vali nhôm: chọn loại nào để đựng thiết bị, dụng cụ
Vali nhựa hay vali nhôm: chọn loại nào để đựng thiết bị, dụng cụ

So sánh vali nhựa và vali nhôm đựng thiết bị theo chống nước, chống bụi, chịu va đập, nhiệt độ, vẻ ngoài, khóa và bảo dưỡng; khi nào nên chọn mỗi loại và sơ đồ chọn nhanh.

Cách đấu jack Type-C tích hợp mạch sạc với pin 18650, Li-po: sơ đồ, đèn báo và lỗi thường gặp
Cách đấu jack Type-C tích hợp mạch sạc với pin 18650, Li-po: sơ đồ, đèn báo và lỗi thường gặp

Hướng dẫn đấu jack Type-C tích hợp mạch sạc với pin 18650 hoặc Li-po một cell: dây đỏ, dây đen nối vào đâu, tải nối thế nào, khi nào cần mạch bảo vệ, cách đọc đèn đỏ xanh và bảng tra lỗi thường gặp.

Encoder tương đối: cấu tạo, tín hiệu A B Z, cách chế tạo và đếm xung bằng PCNT của ESP32
Encoder tương đối: cấu tạo, tín hiệu A B Z, cách chế tạo và đếm xung bằng PCNT của ESP32

Encoder tương đối hoạt động thế nào: đĩa mã, mặt nạ, kênh A B lệch 90°, vạch Z, đếm x4, ngõ ra NPN, HTL, RS-422, cách chế tạo đĩa mã và đếm encoder bằng PCNT của ESP32.

Tư duy logic, phản biện, thiết kế và kỹ năng 4C: rèn cho trẻ qua hoạt động STEM
Tư duy logic, phản biện, thiết kế và kỹ năng 4C: rèn cho trẻ qua hoạt động STEM

Phân biệt tư duy logic, phản biện, thiết kế và kỹ năng 4C bằng ví dụ; câu đố logic 4 x 4, thí nghiệm kiểm chứng, dự án hộp bút theo tư duy thiết kế và bảng đánh giá 4C.

Pin LiPo cho flycam: 1S–6S, mAh, C, tính thời gian bay, sạc cân bằng và bảo quản an toàn
Pin LiPo cho flycam: 1S–6S, mAh, C, tính thời gian bay, sạc cân bằng và bảo quản an toàn

Pin LiPo cho flycam: ý nghĩa S, P, mAh, C, điện áp đầy và bảo quản, đường cong xả, cách tính thời gian bay, sạc cân bằng, dấu hiệu pin phồng và quy định mang pin khi đi máy bay.

Cách dùng đồng hồ vạn năng: đo điện áp, dòng điện, điện trở, thông mạch, diode
Cách dùng đồng hồ vạn năng: đo điện áp, dòng điện, điện trở, thông mạch, diode

Hướng dẫn dùng đồng hồ vạn năng số cho người mới: các bộ phận, chọn thang, cách mắc đo điện áp, dòng điện, điện trở, thử thông mạch và diode, đọc kết quả, độ chính xác, lỗi cần tránh.


Bình luận
Đã thêm vào giỏ hàng