Đóng cửa tự động khi trời mưa

Mô hình đóng cửa tự động khi trời mưa

Khi có mưa, cảm biến mưa sẽ gửi tín hiệu đến board Unox, board sẽ điều khiển động cơ servo đóng cửa lại.

Các linh kiện cần dùng

Giới thiệu cảm biến mưa

  • Đúng như tên gọi, cảm biến mưa được sử dụng nhằm mục đích nhận biết trời mưa hoặc chất lỏng thông qua tấm cảm biến.
  • Tấm cảm biến có cấu tạo đơn giản gồm 2 bản cực song song nhau, khi có nước hoặc dung dịch chảy trên tấm cảm biến, điện áp sẽ truyền giữa 2 bản cực, mức điện áp sẽ phụ thuộc vào độ dẫn điện của nước.
  • Cảm biến mưa giao tiếp với Board UnoX thông qua 4 chân:
  • VCC: Cấp điện áp 5V.
  • GND: Cấp điện áp 0V.
  • A0: Ngõ ra tín hiệu Analog.
  • DO: Ngõ ra tín hiệu Digital (có thể điều chỉnh biến trở trên module để thay đổi độ nhạy của tín hiệu).

Động cơ RC Servo 9G SG90

Động cơ RC servo là loại động cơ nhỏ, có thể khiển chính xác góc quay bằng phương pháp điều rộng xung PWM (chân có dấu ~ trên UnoX). Tuy nhiên, nó chỉ có thể quay được góc từ 0-180 độ.

Kết nối các thiết bị với UnoX

  • Kết nối UnoX với cảm biến mưa
UnoXCảm biến mưa
Chân 5V5V
Chân GNDGND
Chân A6AO
  • Kết nối UnoX với động cơ servo
UnoXServo
Chân 5VChân Đỏ
Chân GNDChân Đen
Chân 9Chân Vàng

TIP: Board UnoX được thiết kế để có thể cắm trực tiếp cảm biến mưa và động cơ servo lên board. Vì vậy, chúng ta có thể cắm trực tiếp mà không cần sử dụng header.

Chuẩn bị mô hình

Chuẩn bị mô hình mút như hình bên.

Source code

Giải thích chương trình

  • Thư viện Servo.h sẽ tạo đối tượng myservo nhằm quản lý hoạt động của động cơ servo (thông qua chân số 9).
  • Chương trình sẽ liên tục đọc gía trị từ cảm biến mưa (thông qua chân A6) nếu giá trị này:

    • Nhỏ hơn 600 (trời mưa) thì động cơ sẽ quay đến vị trí 90° (cửa đóng).
    • Lớn hơn 600 (trời không mưa) thì động cơ sẽ quay đến vị trí 0° (cửa mở).

TIP: Giá trị 600 không phải là cố định, bạn có thể tùy chỉnh phụ thuộc vào độ lớn trời mưa để phù hợp.

Source code

  #include <Servo.h>
  #define sensor    A6    // Khai báo chân A6 kết nối cảm biến mưa.
  #define servoPin  9     // Khai báo chân sô 9 kết nối động cơ servo.

  Servo myservo;          // Tạo đối tượng myservo nhằm điều khiển động cơ.
  int val;                // Khai báo biến val lưu giá trị đọc được từ cảm biến.

  void setup()
  {
    pinMode(sensor,INPUT);    // Cấu hình chân cảm biến mưa là ngõ vào.
    myservo.attach(servoPin); // Cấu hình đối tượng servo với chân số 9.
  }

  void loop()
  {
    int val = analogRead(sensor); //  Đọc giá trị từ cảm biến mưa và lưu vào biến val.
    /*Khi có mưa (biến val < 600) đông cơ servo ở vị trí 90 độ (cửa đóng)
      Khi không có mưa (val>600) động cơ servo ở vị trí 0 độ (cửa mở.*/
    if ( val < 600 )
    {
      myservo.write(90);  // Servo ở vị trí 90 độ.
    } else {
      delay(1000);        // Dừng 1s trước khi mở cửa.
      myservo.write(0);   // Servo ở vị trí 0 độ.
    }
      delay(200);
  }

Kết quả

  • Mô hình nhà tự động đóng mở cửa khi trời mưa.