ESP32 w połączeniu z czujnikiem ruchu PIR (Passive Infrared) może posłużyć jako baza prostego systemu alarmowego z powiadomieniem przez Wi-Fi. Czujnik PIR wykrywa zmiany promieniowania podczerwonego emitowanego przez ciepłe obiekty – m.in. poruszające się osoby. Takie rozwiązanie jest popularnym projektem edukacyjnym wśród hobbystów elektroniki.
Opisane rozwiązanie ma charakter wyłącznie edukacyjny i hobbystyczny. Nie zastąpi profesjonalnego, certyfikowanego systemu alarmowego. Wszelkie prace elektryczne i elektroniczne wykonujesz na własne ryzyko i odpowiedzialność. W razie wątpliwości skonsultuj się z wykwalifikowanym elektrykiem lub elektronikiem.
| Element | Ilość | Cena orientacyjna |
|---|---|---|
| Moduł ESP32 (np. ESP32 DevKit V1) | 1 | ~25 zł |
| Czujnik ruchu PIR HC-SR501 | 1 | ~7 zł |
| Buzzer aktywny 5V | 1 | ~3 zł |
| Dioda LED czerwona + rezystor 220 Ω | 1 kpl. | ~1 zł |
| Płytka stykowa (breadboard) | 1 | ~8 zł |
| Kable dupont (zestaw) | 1 | ~5 zł |
| Kabel USB-A do micro-USB | 1 | ~5 zł |
| Element | Pin modułu | Pin ESP32 |
|---|---|---|
| PIR HC-SR501 | VCC | VIN (5V) |
| PIR HC-SR501 | GND | GND |
| PIR HC-SR501 | OUT | GPIO 13 |
| Buzzer aktywny | + (plus) | GPIO 12 |
| Buzzer aktywny | – (minus) | GND |
| LED czerwona (+ rezystor 220 Ω) | Anoda (+) | GPIO 14 |
| LED czerwona | Katoda (–) | GND |
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json/dev/ttyUSB0 (Linux/Mac).Poniższy szkic wysyła powiadomienie HTTP do serwisu ntfy.sh po wykryciu ruchu. Wbudowany buzzer i LED sygnalizują alarm lokalnie:
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "TWOJA_SIEC_WIFI";
const char* password = "TWOJE_HASLO_WIFI";
const char* webhookUrl = "https://ntfy.sh/MojAlarm2025";
const int PIN_PIR = 13;
const int PIN_BUZZER = 12;
const int PIN_LED = 14;
bool alarmAktywny = false;
unsigned long ostatniRuch = 0;
const unsigned long CZAS_ALARMU = 10000UL; // ms
void setup() {
Serial.begin(115200);
pinMode(PIN_PIR, INPUT);
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_LED, OUTPUT);
WiFi.begin(ssid, password);
Serial.print("Łączenie z Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nPołączono. IP: " + WiFi.localIP().toString());
}
void loop() {
if (digitalRead(PIN_PIR) == HIGH) {
ostatniRuch = millis();
if (!alarmAktywny) {
alarmAktywny = true;
digitalWrite(PIN_LED, HIGH);
digitalWrite(PIN_BUZZER, HIGH);
wyslijPowiadomienie();
}
}
if (alarmAktywny && millis() - ostatniRuch > CZAS_ALARMU) {
alarmAktywny = false;
digitalWrite(PIN_LED, LOW);
digitalWrite(PIN_BUZZER, LOW);
}
delay(100);
}
void wyslijPowiadomienie() {
if (WiFi.status() != WL_CONNECTED) return;
HTTPClient http;
http.begin(webhookUrl);
http.addHeader("Title", "Alarm – wykryto ruch!");
http.addHeader("Priority", "high");
http.POST("Ruch wykryty w chronionym obszarze.");
http.end();
Serial.println("Powiadomienie wysłane.");
}
Ntfy.sh to bezpłatny serwis (z limitami dla kont darmowych) umożliwiający wysyłanie powiadomień push bez własnego serwera. Sposób uruchomienia:
MojAlarm2025xYZ (im bardziej unikalna, tym mniej prawdopodobne, że ktoś inny ją zna).webhookUrl w kodzie, po https://ntfy.sh/.Na module HC-SR501 znajdują się dwa potencjometry i jedna zworka:
CZAS_ALARMU lub zwiększ czas opóźnienia potencjometrem na PIR.ESP32 z czujnikiem PIR HC-SR501 to jeden z popularniejszych projektów wśród hobbystów elektroniki – koszt kompletnego zestawu to zazwyczaj poniżej 60 złotych. Projekt może być dobrym punktem startowym do nauki programowania mikrokontrolerów i technologii IoT. Pamiętaj, że opisane rozwiązanie to projekt edukacyjny, a nie certyfikowany system bezpieczeństwa.