Arduino cơ bản 12: Điều khiển động cơ quạt bằng nút nhấn sử dụng Arduino

Trong nội dung bài viết hôm nay mình sẽ hướng dẫn các bạn cách dùng nút nhấn và rơ le (Relay) để đóng cắt động cơ.

Qua bài viết các bạn có thể hiểu thêm về cấu tạo và nguyên lý hoạt động của nút nhấn và Rơ le.

Chúng ta đi ngay vào bài viết nhé.

Cấu tạo và nguyên lý hoạt động của Button

Nút nhấn là một thiết bị đơn giản được sử dụng để tạo ra tín hiệu điện khi được nhấn. Nguyên lý hoạt động của nó dựa trên sự tiếp xúc giữa hai mảnh kim loại bên trong thiết bị. Khi nút không được nhấn, hai mảnh kim loại không tiếp xúc và không có tín hiệu điện được tạo ra. Khi nút được nhấn, hai mảnh kim loại tiếp xúc và tạo ra một mạch điện đóng, kết nối hai chân của nút. Khi đó, tín hiệu điện được tạo ra và được gửi đến vi điều khiển hoặc các thiết bị điện tử khác để xử lý.

Ứng dụng của nút nhấn trong lập trình Arduino

Nút nhấn là một linh kiện rất quan trọng trong lập trình Arduino. Dưới đây là một số ứng dụng phổ biến trong lập trình Arduino bao gồm:

  • Điều khiển thiết bị: Nút nhấn có thể được sử dụng để điều khiển các thiết bị như đèn LED, servo motor, motor DC, …
  • Nhập dữ liệu: Nút nhấn có thể được sử dụng để cung cấp đầu vào từ người dùng cho chương trình Arduino, ví dụ như chọn một chế độ hoạt động hoặc nhập giá trị cho một biến.
  • Xử lý sự kiện: Nút nhấn có thể được sử dụng để kích hoạt một chức năng nào đó khi được nhấn. Ví dụ: khi người dùng nhấn nút, chương trình Arduino sẽ thực hiện một hành động nhất định.
  • Bảo mật: Nút nhấn có thể được sử dụng để xác nhận quyền truy cập vào các chức năng quan trọng của chương trình.
  • Tương tác với ngữ cảnh: Nút nhấn có thể được sử dụng để tương tác với ngữ cảnh trong nhà, ví dụ như điều khiển đóng/mở cửa.

Cấu tạo Rơ le (Relay)

Để có thể nắm được cấu tạo và hoạt động của rơ le các bạn đọc bài viết bên dưới nhé.

Sơ đồ nguyên lý

Các linh kiện cần thiết cho dự án

Tên linh kiệnSố lượng
Arduino Uno R31
Dây cắm9
Breadboard1
Button1
LED 5mm1
Trở 220R2
Relay1
Motor1
Fan1

Code

int buttonPin = 2;
int relayPin = 3;
int relayState = HIGH;                      
int buttonState;                            
int lastButtonState = LOW;                 
long lastDebounceTime = 0;                  
long debounceDelay = 50;                    

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(relayPin, OUTPUT);

  digitalWrite(relayPin, relayState);       
}
void loop() {
  
  int reading = digitalRead(buttonPin);  

  if (reading != lastButtonState) {   
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
   
    if (reading != buttonState) {
      buttonState = reading;
      
      if (buttonState == HIGH) {
        relayState = !relayState;
      }
    }
  }

   // set the relay: 
  digitalWrite(relayPin, relayState);

  lastButtonState = reading;
}

Giải thích code

if (reading != lastButtonState) {   
    lastDebounceTime = millis();
  }   
if ((millis() - lastDebounceTime) > debounceDelay) {
    
    if (reading != buttonState) {
      .....
    }
}

Khi tín hiệu được trả về, chương trình sẽ không thực thi ngay lập tức mà sẽ kiểm tra tín hiệu của nút nhấn đã đúng chưa trong trường hợp đã nhấn sẽ cho chương trình hoạt động.

Lý do sao lại có đoạn kiểm tra này. Vì độ nảy của nút nhấn sẽ gây ra tín hiệu không chính xác trong quá trình hoạt động, vậy để khắc phục điều này thay cho phần cứng nên cần có một đoạn chương trình kiểm tra trong một khoảng thời gian để đảm bảo tín hiệu là đúng.

Scroll to Top