Bài 5: Nút nhấn, lấy trạng thái nút nhấn, bật tắt led bằng 1 nút nhấn

Bài trước: Điều khiển nhiều led và mô phỏng bằng tinkercad.com 

1. Nút nhấn là gì:

    Nút ấn là một loại công tắc đơn giản điều khiển hoạt động của máy hoặc một số loại quá trình. Hầu hết, các nút nhấn là nhựa hoặc kim loại. Hình dạng của nút ấn có thể phù hợp với ngón tay hoặc bàn tay để sử dụng dễ dàng. Tất cả phụ thuộc vào thiết kế cá nhân. Nút ấn có 2 loại chính là nút nhấn thường mở hoặc nút nhấn thường đóng.





 2. Nguyên lí làm việc của nút nhấn

    Nút nhấn có ba phần: Bộ truyền động, các tiếp điểm cố định và các rãnh. Bộ truyền động sẽ đi qua toàn bộ công tắc và vào một xy lanh mỏng ở phía dưới. Bên trong là một tiếp điểm động và lò xo. Khi nhấn nút, nó chạm vào các tiếp điểm tĩnh làm thay đổi trạng thái của tiếp điểm. Trong một số trường hợp, người dùng cần giữ nút hoặc nhấn liên tục để thiết bị hoạt động. Với các nút nhấn khác, chốt sẽ giữ nút bật cho đến khi người dùng nhấn nút lần nữa.



 3. Ứng dụng

    Công tắc nút nhấn sử dụng nhiều trong các ứng dụng khác nhau như máy tính, điện thoại nút nhấn và nhiều thiết bị gia dụng. Bạn có thể nhìn thấy chúng trong nhà, văn phòng và trong các ứng dụng công nghiệp ngày nay. Chúng có thể bật, tắt máy hoặc làm cho thiết bị thực hiện các hoạt động cụ thể, như trường hợp với máy tính. Trong một số trường hợp, các nút nhấn có thể kết nối thông qua liên kết cơ học, điều khiển một nút nhấn khác hoạt động

Đa số, các nút sẽ có màu sắc cụ thể để biểu thị mục đích của chúng. Ví dụ như nút nhất màu xanh thường được sử dụng để bật thiết bị hay nút nhấn màu đỏ để tắt thiết bị. Điều này tránh gây nên một sô nhầm lẫn. Nút dừng khẩn cấp thường là các nút ấn lớn, thường có màu đỏ và có đầu lớn hơn để sử dụng dễ dàng hơn.


4. Xác định trạng thái một nút nhấn.

          Mục đích: Xác định xem nút được nhấn hay chưa để thực hiện một công việc cụ thể nào đó. Ví dụ khi nhấn nút sẽ bật đèn, nhấn thêm lần nữa sẽ tắt đèn.

    Để đọc trạng thái một nút nhấn chúng ta có thể thiết kế theo 2 dạng là INPUT và INPUY_PULLUP.

  •     Lắp mạch xác định trạng thái nút nhấn theo kiểu INPUT.

        Sơ đồ mạch:


Code: 
int congtac=2;
void setup()
{
  pinMode(congtac, INPUT);
  Serial.begin(9600);
}

void loop()
{
  int trangthai=digitalRead(congtac);
  Serial.println(trangthai);
  delay(500);
  
}

Kết quả mô phỏng


Các bạn để ý thấy trong hình khi nhấn nút giá trị tại serial port là 1 còn khi không nhấn là 0.
Tiếp theo tôi sẽ lắp mạch một nút nhấn và 1 led sau cho khi chúng ta nhấn sẽ mở led, nhấn lần nữa sẽ tắt led. 
Sơ đồ mạch như sau:

Code:
int nutnhan=2;
int led=3;
int trangthailed=0;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(nutnhan,INPUT);
  Serial.begin(9600);
  digitalWrite(led,LOW);
}

void loop()
{
  int trangthai=digitalRead(nutnhan);
  int ledsang=digitalRead(led);
  
  if(trangthai==1 && ledsang==trangthailed)
  {
    digitalWrite(led, !trangthailed);
    delay(500);
    trangthailed= !trangthailed;
  }
}

Giải thích code:
Trong đoạn code trên ta thấy nút nhấn nối với chân số 2 và Led nối với chân số 3 của Arduino Uno R3, ở đây tôi khai báo thêm một biến tranthailed để cho biết trạng thái hiện tại của led là hay tắt.
Trong phần setup(): chân led là chân OUTPUT và chân nút nhấn là chân INPUT. Ban đầu tôi đặt trạng thái led là LOW tức là khi cấp nguồn đèn led sẽ tắt trước.
Trong vòng lặp loop(): tôi dùng 2 biến trangthai để đọc giá trị nút nhấn xem có nhấn chưa và biến ledsang xem trạng thái led có sáng hay không. Nếu nút nhấn đang nhấn và led đang sáng hoặc tắt thì ghi trạng thái led ngược lại với trạng thái hiện tại bằng toán tử not (!).
Có rất nhiều cách để bật tắt led bằng một nút nhấn nên các bạn có thể tìm thấy đâu đó code khác với code này cũng là chuyện bình thường nên đừng lăng tăng gì nhé các bạn.
Ví dụ đoạn code sau cũng cho kết quả tương đương với cách điều khiển là nếu số lần nhấn nút là lẻ thì led sáng, chẵn thì led tắt
int nutnhan=2;
int led=3;
int i;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(nutnhan,INPUT);
  Serial.begin(9600);
  digitalWrite(led,LOW);
  i=1;
} void loop() { int trangthai=digitalRead(nutnhan); if(trangthai==1 && i % 2 !=0) { digitalWrite(led, HIGH); delay(500); }
  else {
    digitalWrite(led,LOW);
    delay(500);
 }
i++;
}

Kết quả mô phỏng:

Trong kết quả mô phỏng trên ta thấy khi nhấn nút nhấn đèn sáng lên và nhấn thêm lần nữa đèn sẽ tắt
  • Lắp mạch kiểu INPUT_PULLUP: mặc định trong mỗi chân của Arduino Uno đều có điện trở nên khi lắp mạch ta có thể không cần gắn thêm điện trở mà gọi INPUT_PULLUP để kéo điện trở trong mỗi chân của Arduino luôn. 
  • Sơ đồ mạch theo cách này như sau: 
  • Code:
int congtac=2;
void setup()
{
  pinMode(congtac, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop()
{
  int trangthai=digitalRead(congtac);
  Serial.println(trangthai);
  delay(500);
  
}
  • Kết quả mô phỏng:

  • Với khai báo INPUT_PULLUP chúng ta thấy khi không nhấn giá trị nút nhấn là 1 và khi nhấn giá trị là 0.
  • Sau đây là sơ đồ điều khiển led bằng nút nhấn với INPUT_PULLUP

  • Code:
 int nutnhan=2;
int led=3;
int trangthailed=0;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(nutnhan,INPUT_PULLUP);
  Serial.begin(9600);
  digitalWrite(led,LOW);
}

void loop()
{
  int trangthai=digitalRead(nutnhan);
  int ledsang=digitalRead(led);
  
  if(trangthai==0 && ledsang==trangthailed)
  {
    digitalWrite(led, !trangthailed);
    delay(500);
    trangthailed= !trangthailed;
  }
}

    • Các bạn thấy đó code giống như trên chỉ thay đổi ở chỗ thay vì khi nhấn trạng thái nút nhấn là 1 thì bây giờ là 0.
    • Đến đây chúng ta đã tìm hiểu về nút nhấn với 2 kiểu nhận trạng thái là INPUT và INPUT_PULUP. 
    • Các bạn có thể xem video tại kênh Youtube:

    • Trong bài tiếp theo tôi sẽ hướng dẫn các bạn cách sử dụng Driver L298N để điều khiển động cơ DC và loạt bài tiếp theo sẽ liên quan đến Driver này với nhiều ứng dụng hấp dẫn như: điều khiển cửa cuốn, điều khiển xe mô hình, làm robot,...

    • Các bạn hãy đón xem nhé, xin chào và hẹn gặp lại.




    Nhận xét, góp ý, thắc mắc, câu hỏi của bạn

    Mới hơn Cũ hơn