Теперь, когда мы научились фиксировать сработки PIR-датчика HC-SR501 в Serial Monitor, перейдём к практическому применению: подключим модуль реле.
Реле позволит включать/выключать внешнюю нагрузку (лампочку, вентилятор, сирену и т. п.) при обнаружении движения.
HC-SR501
Модуль реле
Нагрузка
⚠️ Важно: при работе с сетевым напряжением соблюдайте правила электробезопасности!
Некоторые модули реле могут потреблять значительный ток (до 70–100 мА на канал).
Arduino Uno способна выдавать ограниченный ток по линии 5V, поэтому при использовании более 1 реле или подключении тяжёлой нагрузки рекомендуется запитывать реле от отдельного 5В блока питания.
Как правильно сделать:
Таким образом, Arduino управляет только логическим уровнем, а питание реле берёт из отдельного, более мощного источника.
// === HC-SR501 + Relay Control ===
// OUT (датчик) -> D2
// IN (реле) -> D3
const int PIR_PIN = 2; // пин датчика
const int RELAY_PIN = 3; // пин реле
volatile unsigned long detectCount = 0;
bool motionState = false;
void setup() {
Serial.begin(9600);
pinMode(PIR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // по умолчанию реле выключено
Serial.println(F("=== Motion + Relay Control Started ==="));
}
void loop() {
int val = digitalRead(PIR_PIN);
if (val == HIGH && !motionState) {
motionState = true;
detectCount++;
Serial.print(F("Motion detect register: "));
printTime();
Serial.print(F("Total detect: "));
Serial.println(detectCount);
digitalWrite(RELAY_PIN, HIGH); // включаем реле
Serial.println(F("Relay: ON"));
}
if (val == LOW && motionState) {
motionState = false;
Serial.print(F("Motion stop: "));
printTime();
digitalWrite(RELAY_PIN, LOW); // выключаем реле
Serial.println(F("Relay: OFF"));
}
}
void printTime() {
unsigned long seconds = millis() / 1000;
unsigned long h = (seconds / 3600) % 24;
unsigned long m = (seconds / 60) % 60;
unsigned long s = seconds % 60;
if (h < 10) Serial.print("0");
Serial.print(h); Serial.print(":");
if (m < 10) Serial.print("0");
Serial.print(m); Serial.print(":");
if (s < 10) Serial.print("0");
Serial.println(s);
}
📋 Пример вывода в Serial Monitor:
=== Motion + Relay Control Started ===
Motion detect register: 00:00:15
Total detect: 1
Relay: ON
Motion stop: 00:00:30
Relay: OFF
Для работы примера дополнительные библиотеки не требуются.