Bật tắt đèn dùng cảm biến chuyển động

Bật tắt đèn dùng cảm biến chuyển động

Ứng dụng bật tắt đèn thông qua relay và cảm biến chuyển động HC-SR501

Ứng dụng thực hiện nhiệm vụ bật đèn khi có chuyển động và tắt đèn khi không có chuyển động.

Chuẩn bị

Các linh kiện cần chuẩn bị:

  • 1xboard UnoX.

    • Đọc tín hiệu Digital từ HC-SR501.
    • Xuất tín hiệu Digital để điều khiển Relay.
  • 1xcảm biến phát hiện chuyển động HC-SR501

    • Cảm biến HC-SR501 phát hiện chuyển động của các vật có thân nhiệt phát ra bức xạ hồng ngoại.
    • Khi phát hiện có chuyển động, ngõ ra OUT của cảm biến có mức 1, ngược lại thì là 0.
    • Điện áp cung cấp: 3.3-5VDC.
    • Cảm biến có 2 biến trở để điều chỉnh độ nhạy và thời gian delay. Khi theo chiều kim đồng hồ, thời gian delay và độ nhạy sẽ tăng; ngược lại sẽ giảm.
  • 1xmodule Relay 1 kênh 5V

    • Module Relay 5V có 1 kênh dùng để đóng cắt thiết với nguồn cấp DC 5V.
  • 1xbó dây cắm breadboard male-famale

    • Dây để kết nối UnoX với cảm biến và relay.
  • 1xLED

    • LED để sáng-tắt tương ứng với việc phát hiện chuyển động.

Đấu nối

Bảng đấu nối UnoX và cảm biến chuyển động HC-SR501:

HC-SR501UnoX
Chân VCCChân 5VDC
Chân GNDChân GND
Chân OUTDigital 2

Lưu ý: Ngõ ra chân 2 của UnoX kết nối đến chân OUT của Relay. Kết nối chân NC, COM của Relay tham khảo hình vẽ đấu nối Fritzing.

Mã nguồn

  • Chương trình phát hiện chuyển động qua việc xử lí tín hiệu đọc về từ chân Digital 2 của cảm biến. Chương trình so sánh 2 trạng thái đọc được trước - sau của cảm biến tương ứng với 2 biến pirStatus và pirState để từ đó điều khiển bật tắt LED.
```c
int inputPin = 2;   //dùng chân Digital 2 để kết nối tới cảm biến
int ledPin = 3; // dùng chân Digital 3 để kết nối tới Relay
bool pinStatus = LOW; // biến để so sánh với trạng thái trước
bool pirState = LOW; //LOW = không có chuyển động, HIGH = có chuyển động

void setup()
{
  pinMode(inputPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
}
void loop()
{
  pinStatus = digitalRead(inputPin);
  if (pinStatus == HIGH) {
    if (pirState == LOW) {
      Serial.println("Phát hiện chuyển động");
      digitalWrite(ledPin, LOW);
      PIR_State = HIGH;
    }
  }
  else
  {
    if (pirState == HIGH) {
      Serial.println("Không có chuyển động");
      digitalWrite(ledPin, HIGH);
      pirState = LOW;
    }
  }
}
```

Kết quả

Ứng dụng mở rộng

  • Phát triển thêm dự án hoạt động với relay AC.
  • Tích hợp dự án trong các ứng dụng nhà thông minh, đặc biệt là các tính năng an ninh, chống trộm.