Bài 98-3: Cách Bật/Tắt Đèn LED Toggle Bằng Nút Nhấn Với Arduino
Nút nhấn có mặt ở khắp mọi nơi — trong điều khiển từ xa, thiết bị gia dụng và bảng điều khiển — và ngay khi một nút phải đảm nhận nhiều hơn một nhiệm vụ, bạn cần logic bật/tắt. Dự án này hướng dẫn bạn cách làm cho một nút nhấn bật đèn LED ở lần nhấn đầu tiên và tắt ở lần nhấn tiếp theo, để đèn giữ nguyên đúng trạng thái bạn để lại. Hành vi "nhấn một lần để giữ, nhấn lần nữa để nhả" đó là nền tảng của gần như mọi nút menu, công tắc nguồn và bộ chọn chế độ mà bạn sẽ từng tạo ra.
Khi bạn đã hiểu về chức năng bật/tắt, cùng một mẫu mã đó có thể mở rộng sang phần cứng thực tế. Bạn có thể dùng nó để:
- Điều khiển một relay đóng cắt đèn xoay chiều hoặc đèn bàn từ một nút trên bảng điều khiển.
- Khởi động và dừng một động cơ hoặc máy bơm bằng một nút thay vì hai nút.
- Chuyển vòng qua các chế độ hoạt động trên một thiết bị (ví dụ: chậm / nhanh / tắt).
- Xây dựng một báo động tự giữ luôn bật cho đến khi có người xác nhận.
- Tạo một nút tắt tiếng cho dự án âm thanh có ghi nhớ trạng thái của nó.
- Hoạt động như một công tắc nguồn mềm cho thiết bị chạy pin, thay thế công tắc cơ.
Giảng viên lưu ý điểm này trực tiếp trong video (trong video tại 19:52): dự án thực ra không phải về đèn LED — mà là về kỹ thuật bật/tắt, thứ bạn có thể áp dụng cho relay, driver động cơ hoặc bất kỳ đầu ra nào khác.
Phần cứng và linh kiện
Danh sách linh kiện được cố ý giữ tối giản, nên đây là dự án tuyệt vời nếu bạn mới bắt đầu. Bạn cần:
- Một bo mạch Arduino — Uno, Nano hoặc Mega đều được.
- Một đèn LED, 3 mm hoặc 5 mm, màu bất kỳ.
- Một điện trở cho đèn LED, trong khoảng từ 200 Ω đến 1000 Ω. Bản ghi chú giải thích lý do (trong video tại 03:49): một đèn LED sụt áp khoảng 2 V và tiêu thụ khoảng 10 mA, nên với nguồn 5 V thì 3 V còn lại phải bị điện trở làm sụt. Định luật Ohm cho 3 V ÷ 0,01 A = 300 Ω, và bất kỳ giá trị nào từ 300 Ω đến 1000 Ω đều hoạt động — giá trị cao hơn chỉ làm đèn LED mờ hơn.
- Một công tắc nút nhấn. Video trình bày cả loại tactile bốn chân nhỏ và phiên bản chân dài hơn (trong video tại 12:43). Nếu bạn không có nút nhấn, một công tắc thông thường cũng dùng được — chỉ cần tìm hai cực đóng và ngắt mạch.
- Một breadboard và vài dây jumper DuPont.
Một mẹo thực tế từ video (trong video tại 07:50): nút tactile bốn chân có hai cặp chân được nối với nhau bên trong. Dùng đồng hồ vạn năng ở chế độ thông mạch để tìm hai chân kêu bíp với nhau — đó là một phía của công tắc. Nối một phía với chân đầu vào và phía còn lại với GND.
Hướng dẫn đấu dây
Cách đấu dây giống như mạch LED đơn giản và mạch nút nhấn, với nút được thêm vào. Anode của LED (chân dài hơn) nối với chân 3, và cathode của nó (chân ngắn hơn, ở phía dẹt của thân) nối qua điện trở xuống GND. Nút nhấn nối giữa chân 2 và GND — không cần gì thêm, vì mã sẽ bật điện trở kéo lên nội bộ của Arduino.
Điện trở kéo lên nội bộ đó đáng để hiểu: nếu không có nó, một chân đầu vào thả nổi sẽ đọc nhiễu ngẫu nhiên. Bật INPUT_PULLUP giữ chân ở 5 V khi nút mở, và nhấn nút sẽ kéo nó xuống 0 V. Đây là lý do mã coi giá trị đọc LOW là "đã nhấn" — logic bị đảo so với một công tắc thường nối xuống GND với điện trở ngoài.
Giải thích mã
Toàn bộ sketch có sẵn bên dưới bài viết này. Ở đây chúng ta sẽ tập trung vào những phần bạn thực sự muốn thay đổi.
Ở đầu tệp, hai phép gán chân được định nghĩa là hằng số. Nếu bạn chuyển dây sang các chân khác, đây là nơi duy nhất bạn cần sửa:
const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
Tiếp theo là ba biến trạng thái. Bạn thường không cần thay đổi chúng, nhưng sẽ hữu ích khi biết chúng làm gì:
int pushButtonStatus = 0; // push value from pin 2
int lightStatus = 0;//light status
int pushed = 0;//push statuspushButtonStatus lưu giá trị đọc thô của chân nút nhấn mỗi lần qua vòng lặp. lightStatus ghi nhớ giá trị mà chân nút nhấn đọc được ở lần trước, đây là cách chương trình phát hiện thời điểm có lần nhấn mới thay vì phản ứng liên tục. pushed là cờ bật/tắt thực sự — nó lật giữa 0 và 1 và quyết định xem LED nên bật hay tắt.
Việc bật/tắt được thực hiện bằng một mẹo số học gọn gàng (trong video tại 18:30). Lấy một trừ đi cờ sẽ đảo ngược nó: 1 - 0 cho 1, và 1 - 1 cho 0. Vì vậy, một dòng duy nhất sẽ lật trạng thái mỗi khi phát hiện một lần nhấn mới:
pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press
Độ trễ 100 ms ở đó để cho ngón tay của bạn rời khỏi nút nhấn. Nếu không có nó, một lần nhấn vật lý có thể bị đếm nhiều lần. Nếu nút nhấn của bạn có vẻ không ổn định hoặc ngón tay của bạn run, hãy tăng giá trị này lên (trong video tại 40:39).
Điều kiện kích hoạt việc bật/tắt là chìa khóa cho toàn bộ chương trình. Nó chỉ kích hoạt khi nút nhấn không được nhấn (HIGH, do điện trở kéo lên) và giá trị đọc trước đó là LOW — nghĩa là nút nhấn vừa được thả ra sau một lần nhấn:
if(pushButtonStatus == HIGH && lightStatus == LOW){
pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press
}
Cuối cùng, LED được điều khiển từ cờ bật/tắt, và giá trị đọc hiện tại của nút nhấn được lưu lại cho lần so sánh tiếp theo:
lightStatus = pushButtonStatus;
if(pushed == HIGH){
Serial.println("Light ON");
digitalWrite(LEDPin, HIGH); //turn the LED ON
}else{
Serial.println("Light OFF");
digitalWrite(LEDPin, LOW);//turn the LED OFF
}
Bạn cũng có thể mở Serial Monitor ở tốc độ 9600 baud để xem các thông báo "Light ON" và "Light OFF" khi bạn nhấn nút.
Trình diễn trực tiếp
Trong video (tại 19:41) bạn có thể thấy hành vi này trong thực tế: lần nhấn đầu tiên bật LED và nó vẫn sáng sau khi ngón tay được thả ra. Lần nhấn tiếp theo tắt nó, và nó vẫn tắt. Không cần giữ nút nhấn, đây chính xác là điểm khác biệt giữa dự án này và phiên bản "giữ để sáng" đơn giản hơn được trình bày trong Bài 98-2: Cách Bật và Tắt LED Sử Dụng Nút Nhấn với Arduino.
Video cũng chỉ ra rằng bạn có thể thay LED bằng mô-đun rơ-le để điều khiển các thiết bị dùng điện lưới, hoặc bằng driver động cơ để khởi động và dừng động cơ. Logic bật/tắt không thay đổi — chỉ thiết bị đầu ra thay đổi.
Các biến thể khác được trình bày trong cùng video — làm mờ LED, hiệu ứng bập bênh, đèn chạy, đồng hồ đo thanh điện áp, và đèn giao thông — đều được trình bày trong các bài hướng dẫn riêng của chúng, được liên kết bên dưới.
Các dự án liên quan từ video này
- Bài 98-1: Cách Bật và Tắt LED với Arduino
- Bài 98-2: Cách Bật và Tắt LED Sử Dụng Nút Nhấn với Arduino
- Bài 98-4: Làm Mờ Đèn LED Sử Dụng Arduino: Điều Khiển Độ Sáng
- Bài 98-5: Làm Mờ Đèn Khi Nhấn Nút Sử Dụng Arduino
- Bài 98-6: Trò Chơi LED Bập Bênh với Arduino
- Bài 98-7: Đèn Chạy Sử Dụng Arduino và 5 LED
- Bài 98-8: Đèn Chạy với Nút Nhấn và LED với Arduino
- Bài 98-9: Đồng Hồ Đo Mức Điện Áp LED Sử Dụng Arduino hoặc đèn chạy với biến trở
- Bài 98-10: Đèn Giao Thông Arduino
Các chương
- [00:00] Tổng quan về 10 dự án LED
- [01:00] Giới thiệu khóa học Arduino từng bước
- [02:29] Kiến thức cơ bản về LED: ký hiệu, cực dương, cực âm, và tính toán điện trở
- [05:53] Dự án 1: Bật và tắt một LED
- [12:43] Dự án 2: Nút nhấn điều khiển LED
- [17:13] Dự án 3: Nút nhấn bật và tắt LED
- [20:12] Dự án 4: Làm mờ LED
- [23:20] Dự án 5: Làm mờ LED bằng nút nhấn
- [27:32] Dự án 6: Bập bênh với hai LED
- [30:47] Dự án 7: Đèn chạy với năm LED
- [36:41] Dự án 8: Đèn chạy nâng cao bằng nút nhấn
- [42:25] Dự án 9: Đồng hồ đo mức điện áp LED với biến trở
- [49:25] Dự án 10: Đèn giao thông Arduino
This code has not been parsed yet. Please return to the admin panel to parse it.
Nghĩ bạn có thể cần
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
Tài nguyên & tài liệu tham khảo
-
Tài liệuDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
Bên ngoài
-
Bên ngoài
-
Bên ngoài
Tập tin📁
Thư viện Arduino (tệp nén)
-
Mã nguồn bộ kit học xe thông minh 3-trong-1 của SunFounder
3in1-kit-main-v2.zip12.80 MB
Hướng dẫn Sử dụng
-
Hướng dẫn lắp ráp xe thông minh SunFounder 3-in-1 ArduinoTài liệu này hướng dẫn từng bước lắp ráp xe thông minh SunFounder 3-in-1 Arduino
SunFounder_car_assembly_manual.pdf1.20 MB