Bài 3: Dùng nút nhấn để bật tắt đèn Led với Arduino (Digital In)
Jump to navigation
Jump to search
Giới thiệu
Ở Bài 2 các bạn được làm quen với thành phần Output mới là 1 module LED.
- Tuy nhiên, ở hiện tại chỉ với mỗi thành phần Output, chúng ta cũng chỉ có thể điều khiển LED theo một kịch bản cố định, không thay đổi được theo các sự kiện (Event) trong thời gian thực, tức nó còn thiếu sự linh động.
- Để có thể điều khiển LED theo ý mình muốn bất kì lúc nào, ta cần sử dụng thêm thành phần Input nữa.
- Trong bài này, mình sẽ hướng dẫn cách sử dụng kết hợp thêm 1 module Nút nhấn để điều khiển LED bật tắt theo ý mình.
- Oke, đi nào!
Kiến thức cơ bản
Nút nhấn?
- Nút nhấn là một linh kiện giúp bạn gửi đi các tín hiệu điều khiển đến các thiết bị điện, điện tử qua thao tác của người dùng.
- Nó chứa ít nhất hai tiếp điểm, các điểm tiếp xúc này sẽ đóng khi nhấn nút (loại thường mở) hoặc mở khi nhấn nút (loại thường đóng). Thông thường lò xo sẽ khôi phục nút về vị trí ban đầu khi áp lực tác động lên nút được giải phóng.
- Bên trong nút nhấn có một "Lò xo hồi vị", để tạo ra lực cản đối với lực hướng xuống trên nút và một "Cặp lò xo" phía trên một "Cặp tiếp điểm" (có liên kết điện), để giữ mỗi tiếp điểm ở đúng vị trí và tạo một kết nối chắc chắn khi nút được nhấn.
Điện trở?
- Để sử dụng được Nút nhấn trong các mạch điện tử, ta cần phải dùng kết hợp với Điện trở (Resistor), là một linh kiện giúp hạn chế "Dòng điện".
- Bản thân Điện trở mang một giá trị Trở kháng được xác định bằng đơn vị Ohm (Ω). Khi được cấp vào một mức "Điện áp" giữa hai đầu linh kiện, giá trị Trở kháng sẽ quyết định cường độ "Dòng điện" chạy qua là bao nhiêu theo công thức từ Định luật Ohm.
- Mục đích của việc dùng thêm Điện trở là để Vi điều khiển (vd: các bo Arduino, ...) có thể đọc tín hiệu Digital vào rõ ràng, ổn định hơn, tránh điện áp tín hiệu rơi vào trạng thái trôi nổi ngẫu nhiên.
- Có 2 cách sử dụng phổ biến, mình sẽ đề cập tiếp dưới đây!
Pull-Up?
- Điện trở kéo lên (Pull-up Resistor) được sử dụng để đặt trạng thái mặc định của chân Digital là
HIGH
tương ứng mức Điện áp 5V.
- Khi nhấn hoặc giữ đè nút, tín hiệu chân Digital sẽ rơi xuống mức
LOW
. Cho đến khi bạn nhả nút nhấn ra (với loại không tự giữ) nó sẽ quay lại mức tín hiệu mặc định ban đầu.
Pull-Down?
- Điện trở kéo xuống (Pull-down Resistor) được sử dụng để đặt trạng thái mặc định của chân Digital là
LOW
tương ứng mức Điện áp 0V.
- Khi nhấn hoặc giữ đè nút, tín hiệu chân Digital sẽ tăng lên mức
HIGH
. Cho đến khi bạn nhả nút nhấn ra (với loại không tự giữ) nó sẽ quay lại mức tín hiệu mặc định ban đầu.
Phần mềm
Arduino
Trước khi bắt đầu:
|
Phần cứng
Danh sách thiết bị
Tên sản phẩm | Số lượng |
---|---|
Mạch Vietduino Uno (Arduino Uno Compatible) | 1 |
Mạch Arduino MakerEDU Shield | 1 |
Mạch nút nhấn MKL-M02 push button tact switch module | 1 |
Mạch led đơn MKL-M01 10mm single LED module | 1 |
Cáp Micro USB | 1 |
Cáp Kết Nối MakerEDU XH2.54 3Wires 20cm Cable [XH2.54 - XH2.54] | 2 |
Hướng dẫn kết nối
- Gắn Shield "Arduino MakerEDU" lên bo Vietduino.
- Kết nối Module Nút nhấn với Shield bằng dây "XH2.54 3Wires" vào Port D9.
- Kết nối Module LED với Shield bằng dây "XH2.54 3Wires" vào Port D10.
- Kết nối bo Vietduino với máy tính thông qua cáp MicroUSB.
Code
- Mở Arduino IDE.
- Vào
File -> New
(hoặc Ctrl+N) tạo 1 file Arduino mới và đặt tên là ...\Button_Control_Led.ino
- Vào
Tool
để cấu hình Board:... và Port:... đúng tương ứng với bo Arduino bạn đang dùng. - Copy đoạn Code sau và nhấp vào Verify (Ctrl+R) để IDE kiểm tra lỗi cú pháp.
- Sau khi IDE kiểm tra không có lỗi trong Code, lúc này bạn có thể nhấp Upload (Ctrl+U) để nạp Code vào bo Arduino.
Code Example
Giải thích Code
bool /*** KIỂU DỮ LIỆU ***/
Chức năng:
- Tạo một biến kiểu dữ liệu chỉ chứa một trong hai giá trị là
true
hoặcfalse
.
Về cơ bản, chúng ta chỉ cần 1 bit (21 = 2) thôi là có thể đại diện cho 2 giá trị trên rồi, trong đófalse
tương ứng Bit 0 vàtrue
tương ứng Bit 1.
Tuy nhiên, trên thực tế điều này còn do cấu trúc thiết kế bên trong Vi điều khiển quyết định. Trong các bo Arduino, mỗi biếnbool
chiếm tận 1 byte bộ nhớ lận!
Cú pháp:
- bool var = val;
- bool var;
Tham số:
- var - tên biến.
- val - giá trị bạn "gán" cho biến đó.
if(condition) { // statement(s) }
Chức năng:
- Câu lệnh
if
kiểm tra một Điều kiện (Condition) và thực hiện một câu lệnh hoặc tập hợp các câu lệnh sau, nếu điều kiện làtrue
.
Vậy còn điều kiện làfalse
thì sao? Với câu lệnh chỉ có phầnif
, chương trình sẽ bỏ qua, không làm gì cả!
Tham số:
- condition - một biểu thức Boolean (có thể là
true
hoặcfalse
).
while(expression) { // statement(s) }
Chức năng:
- Là một Vòng lặp và nó sẽ lặp liên tục và vô hạn, cho đến khi Biểu thức (Expression) bên trong cặp dấu () trở thành
false
.
Vậy nên cần phải có một cái gì đó làm thay đổi kết quả biểu thức, nếu không vòng lặpwhile
sẽ không bao giờ dừng.
Tham số:
- expression - một biểu thức Boolean được đánh giá là
true
hoặcfalse
.
digitalRead(); /*** HÀM ***/
Chức năng:
- Đọc giá trị từ một chân Digital được chỉ định.
Cú pháp:
- digitalRead(pin);
Tham số:
- pin - chân (con số) chọn từ bo Arduino.
Kiểu dữ liệu trả về:
- Trả về
HIGH
hoặcLOW
.
== /*** TOÁN TỬ ***/
Chức năng:
- Là một Toán tử So sánh có 2 Toán hạng.
Nó giúp "so sánh" Biến ở bên trái với Biến hoặc Hằng số ở bên phải của toán tử.
Cú pháp:
- x == y; // kết quả là
true
nếu x bằng y vàfalse
nếu x không bằng y
Tham số: → cả 2 toán hạng đều có thể là bất kì kiểu dữ liệu nào.
- x - là Biến (toán hạng bên phải).
- y - là Biến hoặc Hằng số (toán hạng bên trái).
! /*** TOÁN TỬ ***/
Chức năng:
- Là Toán tử Logic NOT có 1 Toán hạng.
Nó cho kết quả làtrue
nếu toán hạng làfalse
và ngược lại.
Cú pháp:
- x = (!y); // giá trị "đảo ngược" của y được lưu trữ trong x
Tham số: → có thể là bất kì kiểu dữ liệu nào.
- y - là Biến hoặc Hằng số (toán hạng bên trái).
Kết quả Demo
Các bạn có thể xem chương trình sẽ hoạt động như thế nào theo video dưới đây nhé.
!!! nhúng 1 clip youtube, để xem video trực tiếp trên trang này. Dùng extension <iframe> cho MediaWiki.
Tìm hiểu thêm
Về hiện tượng Bounce của Nút nhấn: | Switch Bounce and How to Deal with It.
Về Điện trở PullUp và PullDown: | Pull Up and Pull Down Resistor.
Ngôn ngữ lập trình Arduino: | Language - Arduino Reference.