Tìm kiếm mã

Bài 98-2: Cách Bật và Tắt Đèn LED bằng Nút Nhấn với Arduino

Bài 98-2: Cách Bật và Tắt Đèn LED bằng Nút Nhấn với Arduino

Dự án này hướng dẫn bạn cách điều khiển một đèn LED bằng nút nhấn sử dụng Arduino. Thay vì để đèn LED tự nhấp nháy, bạn quyết định khi nào nó sáng: giữ nút nhấn xuống thì đèn LED bật, thả ra thì đèn tắt. Đây là bước tiếp theo tự nhiên sau một sketch nhấp nháy đơn giản, vì nó giới thiệu hai ý tưởng xuất hiện trong hầu hết mọi dự án Arduino mà bạn sẽ từng xây dựng — đọc một đầu vào kỹ thuật số, và sử dụng đầu vào đó để đưa ra quyết định trong mã.

tất cả các dự án của bài 98, breadboard và linh kiện
tất cả các dự án của bài 98, breadboard và linh kiện

Giá trị thực sự ở đây là học cách một vi điều khiển cảm nhận thế giới vật lý. Nút nhấn là thiết bị đầu vào đơn giản nhất của con người, nhưng cùng một mô hình — đọc một đầu vào, kiểm tra một điều kiện, điều khiển một đầu ra — chính xác là cách bạn sẽ đọc một công tắc giới hạn trên máy in 3D, phát hiện cửa mở trên hệ thống an ninh, hoặc khởi động động cơ từ bảng điều khiển. Khi bạn đã hiểu mạch này, bạn có thể thay đèn LED bằng hầu hết mọi thứ.

Dưới đây là một số thứ thực tế bạn có thể chế tạo với cùng kỹ thuật này:

  • Một chuông cửa hoặc nút gọi tạm thời làm sáng đèn khi được nhấn.
  • Một "công tắc người chết" chỉ giữ một relay (và bất cứ thứ gì nó cấp nguồn) được cấp điện khi nút được giữ.
  • Một nút kiểm tra thủ công cho máy móc, trong đó đèn LED chỉ báo xác nhận đầu vào đang được ghi nhận.
  • Một nút khởi động cho driver động cơ hoặc máy bơm, với đèn LED đóng vai trò đèn trạng thái.
  • Một bộ rung trò chơi đơn giản nơi người chơi đầu tiên nhấn sẽ thắng và đèn LED thông báo người thắng cuộc.
  • Một nút hiệu chuẩn hoặc "học" trên dự án cảm biến sáng lên khi chế độ đang hoạt động.

Phần cứng và linh kiện

Danh sách linh kiện được cố ý giữ nhỏ, đó là lý do tại sao đây là một dự án đầu vào đầu tiên tuyệt vời:

  • Một bo mạch Arduino — Uno, Nano, Mega, hoặc bất kỳ bo mạch tương thích nào.
  • Một đèn LED, loại 5 mm hoặc 3 mm, với bất kỳ màu nào.
  • Một điện trở cho đèn LED, trong khoảng từ 200 Ω đến 1000 Ω.
  • Một công tắc nút nhấn tạm thời.
  • Một breadboard và một số dây jumper DuPont.
LED-5mm-hổ phách
LED-5mm-hổ phách

Nếu bạn đang thắc mắc tại sao lại cần điện trở, bản ghi chép sẽ giải thích phép tính (trong video ở 03:49). Một đèn LED điển hình giảm khoảng 2 V qua chính nó và cần khoảng 10 mA dòng điện. Với nguồn cung cấp 5 V, 3 V còn lại phải được giảm bởi điện trở, vì vậy định luật Ohm cho R = 3 V / 0.01 A = 300 Ω. Bất cứ giá trị nào từ 300 Ω đến khoảng 1000 Ω đều hoạt động — giá trị càng cao, đèn LED càng mờ, nhưng càng an toàn và hiệu quả hơn. Dòng điện không quan trọng; bạn chỉ đơn giản đánh đổi độ sáng để lấy mức tiêu thụ dòng điện thấp hơn.

Hướng dẫn đấu dây

Sơ đồ Arduino cho đèn LED với công tắc nút nhấn
Sơ đồ Arduino cho đèn LED với công tắc nút nhấn
Đấu dây Arduino cho đèn LED với công tắc nút nhấn
Đấu dây Arduino cho đèn LED với công tắc nút nhấn

Mạch này chính là mạch đèn LED bạn sẽ dùng cho một sketch nhấp nháy, với một nút nhấn được thêm vào. Cực dương của đèn LED (chân dài hơn) kết nối qua điện trở đến chân 3 của Arduino, và cực âm (chân ngắn hơn, được đánh dấu bằng cạnh phẳng của vành nhựa) nối với đất. Nút nhấn kết nối giữa chân 2 và đất.

Một chi tiết đáng biết: nút nhấn có bốn chân, nhưng chúng được ghép cặp bên trong. Hai trong số các chân được kết nối vĩnh viễn với nhau, và hai chân còn lại cũng được kết nối vĩnh viễn với nhau — nhấn nút sẽ nối hai cặp này lại. Nếu bạn có đồng hồ vạn năng, hãy dùng chế độ thông mạch (tiếng bíp) để tìm xem những chân nào đã được kết nối khi nút không được nhấn; hai chân đó là cặp bạn không nên dùng. Chọn một chân từ mỗi cặp độc lập trong hai cặp (trong video ở 07:50).

điện trở_330_ohm
điện trở_330_ohm

Cách mã hoạt động

Sketch ngắn, và gần như toàn bộ là cấu hình bạn có thể điều chỉnh. Ba dòng ở trên cùng là những dòng bạn sẽ thực sự chạm vào:

const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
const int delayLED = 0;//how long the LED should stay ON

pushButtonPin là chân kỹ thuật số mà nút được đấu dây tới. Thay đổi điều này nếu bạn chuyển nút sang một chân khác — chỉ cần nhớ di chuyển dây vật lý cho phù hợp.

LEDPin là chân điều khiển đèn LED. Bất kỳ chân kỹ thuật số nào cũng được, nhưng hãy nhớ rằng chân 0 và 1 được dùng cho kết nối nối tiếp, vì vậy tốt nhất nên tránh chúng.

delayLED là cài đặt thú vị nhất. Nó điều khiển thời gian đèn LED sáng sau khi bạn nhả nút, tính bằng mili giây. Đặt thành 0 nghĩa là đèn LED tắt ngay khi bạn nhấc ngón tay. Đặt thành 1000 giữ đèn LED sáng trong một giây sau khi nhả, và 5000 giữ nó sáng trong năm giây (trong video ở 16:31). Con số duy nhất này thay đổi hoàn toàn cảm giác của dự án, và đây là cách tốt để thấy cách một biến trong mã chuyển trực tiếp thành hành vi bạn có thể quan sát.

Hai điều khác trong phần thiết lập đáng chú ý. Thứ nhất, chân nút được cấu hình với INPUT_PULLUP thay vì INPUT thông thường:

pinMode(pushButtonPin, INPUT_PULLUP);//define a pin for push button switch

Điều này kích hoạt điện trở kéo lên nội bộ của Arduino, giữ chân ở mức HIGH ổn định khi nút không được nhấn. Nếu không có nó, một chân đầu vào thả nổi sẽ bắt nhiễu điện và cho kết quả đọc ngẫu nhiên, và bạn sẽ cần một điện trở ngoài để khắc phục. Với điện trở kéo lên nội bộ được bật, việc đấu dây vẫn đơn giản: một bên nút nối với chân, bên kia nối với đất. Khi bạn nhấn nút, chân bị kéo xuống đất và đọc là LOW (trong video ở 14:08).

Thứ hai, màn hình nối tiếp được khởi động ở tốc độ 9600 baud để bạn có thể xem các thay đổi trạng thái khi chúng xảy ra:

Serial.begin(9600);//initialize the serial monitor
Serial.println("Robojax LED with push button");//print this text on Serial Monitor

Trong vòng lặp chính, logic là một câu lệnh if/else đơn giản. Mã đọc chân nút và so sánh với LOW. Nếu nút được nhấn, chân LED chuyển sang HIGH, thông báo "LED ON" được in ra, và sketch chờ delayLED mili giây. Nếu nút không được nhấn, chân LED chuyển sang LOW và đèn LED tắt. Vì loop() chạy lặp đi lặp lại, việc kiểm tra này diễn ra hàng nghìn lần mỗi giây, nên phản hồi có cảm giác tức thì.

Trình diễn trực tiếp

Với delayLED được đặt là 1000, nhấn nút sẽ làm sáng đèn LED và nó vẫn sáng trong một giây sau khi bạn nhả. Giảm giá trị xuống 5000 và đèn LED sẽ kéo dài năm giây — đủ lâu để bạn có thể rời khỏi nút mà vẫn thấy nó sáng. Đặt thành 0 và đèn LED theo ngón tay bạn chính xác: nhấn, sáng; nhả, tắt (trong video ở 17:02).

Sau khi mã được tải lên, bạn có thể ngắt Arduino khỏi USB và cấp nguồn từ pin hoặc bộ chuyển đổi 5 V. Bo mạch không cần máy tính để chạy — chương trình được lưu trong bộ nhớ của nó và tự động khởi động mỗi khi được cấp nguồn (trong video ở 12:27).

Nếu bạn muốn đèn LED vẫn sáng sau một lần nhấn và tắt ở lần nhấn tiếp theo, đó là một hành vi khác gọi là chuyển đổi trạng thái, và nó được đề cập trong Bài 98-3: Cách Bật/Tắt Đèn LED Chuyển Đổi Sử Dụng Nút Nhấn với Arduino. Việc đấu dây nút nhấn là giống hệt, nên bạn có thể tái sử dụng chính xác mạch này.

Các dự án liên quan từ video này

Các chương

  • [00:00] Tổng quan về 10 dự án trong video này
  • [01:00] Giới thiệu về khóa học Arduino từng bước
  • [02:29] Đèn LED là gì: ký hiệu, cực dương, cực âm và hình dạng vật lý
  • [03:49] Tính toán điện trở LED với định luật Ohm
  • [07:32] Đấu dây đèn LED và nút nhấn trên breadboard
  • [08:50] Giải thích mã: các chân, thiết lập và vòng lặp chính
  • [12:43] Cách hoạt động của công tắc nút nhấn
  • [13:22] Đấu dây nút nhấn với chân 2 và đất
  • [13:43] Hướng dẫn mã: INPUT_PULLUP và đọc nút
  • [16:14] Trình diễn: thay đổi delayLED từ 1 giây sang 5 giây rồi 0
  • [19:52] Ứng dụng thực tế của nút nhấn chuyển đổi trạng thái

Hình ảnh

2 pin tactile push button switch
2 pin tactile push button switch
Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
tất cả các dự án của bài 98, breadboard và linh kiện
tất cả các dự án của bài 98, breadboard và linh kiện
tất cả các dự án của bài 98, breadboard và linh kiện
tất cả các dự án của bài 98, breadboard và linh kiện
LED-5mm-amber
LED-5mm-amber
934-Lessson 98-LED-2: Arduino code push button to turn LED ON and OFF
Ngôn ngữ: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Tập tin📁

Thư viện Arduino (tệp nén)

Hướng dẫn Sử dụng