Xác định trạng thái của một nút nhấn (button)

Giới thiệu

Bài viết này sẽ hướng dẫn bạn cách xác định trạng thái của một nút nhấn (nhấn / thả), mô tả cách sử dụng một công cụ giao tiếp giữa Arduino với máy tính (cũng như với mạch Arduino khác) để xem trạng thái nút nhấn vừa đọc được.

Cấu tạo của nút nhấn

 
Nếu bạn đã biết đến cái công tắc đóng / mở thì nút nhấn cũng hoạt động tương tự như vậy. Thay vì chỉ có 2 chân như công tắc, nút nhấn có 4 chân chia làm 2 cặp. Những chân trong cùng một cặp được nối với nhau, những chân khác cặp thì ngược lại. Khi bạn nhấn nút, cả 4 chân của nút nhấn đều được nối với nhau, cho phép dòng điện từ một chân bất kì có thể tới 3 chân còn lại.

Bạn cần những gì ?

  • Mạch Arduino (ở đây mình sử dụng Arduino UNO).
  • Breadboard (một số nơi gọi là Test Board).
  • Điện trở 10 kΩ.
  • Nút nhấn (hoặc công tắc tương đương).

Lắp mạch

Sơ đồ nguyên lí

Khi bạn chưa nhấn nút, chân D2 được nối với GND qua một điện trở 10 kΩ, do đó lệnh digitalRead(2) sẽ trả về giá trị 0 (LOW). Khi bạn nhấn nút, chân D2 sẽ được nối trực tiếp với 5V và nối với GND thông qua 1 điện trở 10kΩ, lệnh digitalRead(2) sẽ trả về giá trị 1 (HIGH).
Vì sao lại là 1 mà không phải là 0 ? Bạn hãy thử dùng định luật Ôm học ở lớp 9 để kiểm tra nhé.
Khi chưa nhấn nút, nếu bạn nối chân D2 với GND qua 1 điện trở thì người ta gọi điện trở này là điện trở pulldown. Trái lại, nếu bạn nối D2 với chân 5V qua một điện trở thì người ta gọi nó là điện trở pullup. Cách nối ở trên hình sử dụng cách nối điện trở pulldown.
Vì sao ta lại cần đến điện trở này ? Mình sẽ để bạn tự khám phá ở bước tiếp theo ...

Lập trình

int button = 2;

void setup() {
  Serial.begin(9600);   //Mở cổng Serial ở baudrate 9600 để giao tiếp với máy tính
  pinMode(button, INPUT);  //Cài đặt chân D2 ở trạng thái đọc dữ liệu
}

void loop() {
  int buttonStatus = digitalRead(button);    //Đọc trạng thái button
  Serial.println(buttonStatus);              //Xuất trạng thái button
  delay(200);                                //Chờ 200ms
}
Sau khi upload code lên mạch Arduino, bạn bấm Ctrl + Shift + M để mở cửa sổ Serial Monitor để xem trạng thái button được mạch Arduino gửi về máy tính.

Hãy thử tháo điện trở 10 kΩ  trên breadboard ra và quan sát lại cửa sổ Serial Monitor ...

Gợi ý cho bạn

Trong câu lệnh:
pinMode(button, INPUT);
Bạn hãy sửa INPUT thành INPUT_PULLUP rồi tải lại code của bạn lên mạch Arduino. Bạn có thể tháo điện trở 10 kΩ ra và xem kết quả ... Đó là vì trong vi điều khiển ATmega328 của Arduino UNO đã có sẵn điện trở pullup tương tự điện trở pulldown mà bạn đang mắc, tuy nhiên nếu bạn khai báo là INPUT như mặc định thì nó sẽ không được sử dụng, trái lại việc khai báo INPUT_PULLUPsẽ kích hoạt điện trở này.

Chân kỹ thuật số có thể được sử dụng như là INPUT, INPUT_PULLUP , hoặc OUTPUT . Để thay đổi cách sử dụng một pin, chúng ta sử dụng hàm pinMode().

Cấu hình một pin là INPUT

Các pin của Arduino ( Atmega ) được cấu hình là một INPUT với pinMode ( ) có nghĩa là làm cho pin ấy có trở kháng cao (không cho dòng điện đi ra) . Pin được cấu hình là INPUT làm việc tiêu thụ năng lượng điện của mạch rất nhỏ, nó tương đương với một loạt các điện trở 100 Mega-ôm ở phía trước của pin . Điều này làm cho chúng cực kì hữu ích cho việc đọc một cảm biến, nhưng không cung cấp năng lượng một đèn LED.
Nói một cách nôm na, dân dã, thì khi một pin được cấu hình là INPUT thì bạn sẽ dễ dàng đọc được các tín hiệu điện và đọc được từ bất cứ thứ gì (Có điện <= 5V)!
Nếu bạn đã cấu hình pin là INPUT, bạn sẽ muốn pin có một tham chiếu đến mặt đất (GND, cực âm), thường được thực hiện với một điện trở kéo xuống ( một điện trở đi xuống mặt đất ) như mô tả trong kỹ thuật số đọc nối tiếp.

Cấu hình một pin là INPUT_PULLUP

Chip Atmega trên Arduino có nội kéo lên điện trở (điện trở kết nối với hệ thống điện nội bộ) mà bạn có thể truy cập. Nếu bạn không thích mắc thêm một điện trở ở mạch ngoài, bạn có thể dùng tham số INPUT_PULLUP trong pinMode(). Mặc định khi không được kết nối với một mạch ngoài hoặc được kết nối với cực dương thì pin sẽ nhận giá trị là HIGH, khi pin được thông tới cực âm xuống đất thì nhận giá trị là LOW.

Cấu hình một pin là đầu ra (OUTPUT)

Để thiết đặt pin là một OUTPUT, chúng ta dùng pinMode ( ), điều này có nghĩa là làm cho pin ấy có một trở kháng thấp (cho dòng điện đi ra). Điều này có nghĩa, pin sẽ cung cấp một lượng điện đáng kể cho các mạch khác . Pin của vi điều khiển Atmega có thể cung cấp một nguồn điện liên tục 5V hoặc thả chìm ( cho điện thế bên ngoài chạy vào ) lên đến 40 mA ( milliamps ). Điều này làm cho chúng hữu ích để tạo năng lượng đèn LED nhưng vô dụng đối với các cảm biến đọc!
Lúc bấy giờ, nếu bạn làm làm ngắn mạch (digitalWrite 1 pin là HIGH rồi nối trực tiếp đến cực âm hoặc digitalWrite 1 pin là LOW rồi mắc trực tiếp đến cực dương, hoặc những việc làm tương tự) thì mạch sẽ bị hỏng! Ngoài ra, với dòng điện chỉ 40mA thì trong một số trường hợp chúng ta không thể làm cho mô tơ hoặc relay hoạt động được. Để làm chúng hoạt động thì chúng ta cần chuẩn bị cho mình một số mạch sử dụng các IC khuếch đại chuyên dụng (gọi là mạch giao tiếp)

0 nhận xét:

Copyright © 2012 My Blog