• Điều khiển Relay dùng Arduino cảm biển chuyển động

QC

Điều khiển Relay dùng Arduino cảm biển chuyển động

 Hướng dẫn về Mô-đun giao tiếp với Arduino

Cấu Trúc Module Relay !


GIẢI THÍCH.

COM: chân chung

NC (Thường đóng): cấu hình thường đóng được sử dụng khi bạn muốn đóng rơ le theo mặc định, nghĩa là có dòng điện chạy trừ khi bạn gửi tín hiệu từ Arduino đến mô-đun rơ le để mở mạch và dừng dòng điện.

KHÔNG (Thường Mở): cấu hình thường mở hoạt động theo cách khác: rơ le luôn mở, do đó mạch bị hỏng trừ khi bạn gửi tín hiệu từ Arduino để đóng mạch.

Bộ ở bên phải bao gồm VCC và GND để cấp nguồn cho mô-đun, và đầu vào 1 (IN1) và đầu vào 2 (IN2) để điều khiển rơ le phía dưới và phía trên tương ứng.

Bộ chân thứ hai bao gồm các chân GND, VCC và JD-VCC. Chân JD-VCC cấp nguồn cho nam châm điện của rơ le.

MÔ HÌNH ĐIỀU KHIỂN.

khi có người di chuyển qua, cảm biến chuyển động cảm nhận được và điều khiển bóng đèn sáng.




// Relay pin is controlled with D8. The active wire is connected to Normally Closed and common
int relay = 8;
volatile byte relayState = LOW;

// PIR Motion Sensor is connected to D2.
int PIRInterrupt = 2;

// Timer Variables
long lastDebounceTime = 0;  
long debounceDelay = 10000;

void setup() {
  // Pin for relay module set as output
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);
  // PIR motion sensor set as an input
  pinMode(PIRInterrupt, INPUT);
  // Triggers detectMotion function on rising mode to turn the relay on, if the condition is met
  attachInterrupt(digitalPinToInterrupt(PIRInterrupt), detectMotion, RISING);
  // Serial communication for debugging purposes
  Serial.begin(9600);
}

void loop() {
  // If 10 seconds have passed, the relay is turned off
  if((millis() - lastDebounceTime) > debounceDelay && relayState == HIGH){
    digitalWrite(relay, HIGH);
    relayState = LOW;
    Serial.println("OFF");
  }
  delay(50);
}

void detectMotion() {
  Serial.println("Motion");
  if(relayState == LOW){
    digitalWrite(relay, LOW);
  }
  relayState = HIGH;  
  Serial.println("ON");
  lastDebounceTime = millis();
}

How the code works

Đầu tiên, chúng ta tạo các biến để giữ chân mà chân IN1 của rơle được kết nối và để lưu trạng thái rơle:
int relay = 8;
volatile byte relayState = LOW;

Cảm biến chuyển động PIR được kết nối với chân 2:

int PIRInterrupt = 2;

Chúng ta cần tạo một số biến phụ trợ để xử lý bộ định thời với cảm biến chuyển động PIR. Biến lastDebounceTime lưu lần cuối cùng chuyển động được phát hiện. DebounceDelay tiết kiệm thời gian đèn vẫn sáng sau khi phát hiện chuyển động (ở đây chúng tôi đặt 10 giây = 10000 mili giây)

(TÓM LẠI LÀ THỜI GIAN ĐÈN SÁNG ỨNG 10S).

long lastDebounceTime = 0;
long debounceDelay = 10000;

Trong thiết lập (), chúng tôi đặt rơle làm OUTPUT và tắt nó theo mặc định:

pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);

(CHÚ Ý: ĐIỀU KHIỂN RELAY MỨC LOW, Mức HIGH ĐÈN TẮT).

Đặt cảm biến chuyển động PIR làm ngắt: ( NGẮT SẢY RA).

pinMode(PIRInterrupt, INPUT);
// Triggers detectMotion function on rising mode to turn the relay on, if the condition is met
attachInterrupt(digitalPinToInterrupt(PIRInterrupt), detectMotion, RISING);


Bất cứ khi nào cảm biến chuyển động PIR được kích hoạt, nó sẽ gọi hàm detector () được khai báo ở cuối mã để bật rơ le:

void detectMotion() {
    Serial.println("Motion");
    if(relayState == LOW){
        digitalWrite(relay, LOW);
    }
    relayState = HIGH;
    Serial.println("ON");
    lastDebounceTime = millis();
}


Trong vòng lặp (), chúng tôi kiểm tra xem 10 giây đã trôi qua kể từ khi rơle được bật hay chưa. Nếu điều kiện đó là đúng, chúng ta có thể tắt rơ le.

if((millis() - lastDebounceTime) > debounceDelay && relayState == HIGH){
    digitalWrite(relay, HIGH);
    relayState = LOW;
    Serial.println("OFF");
}



Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...