Этот мощный скетч превращает Arduino в охранную систему, которая:
Обнаруживает движение с помощью PIR-датчика
Делает фото при срабатывании
Отправляет уведомление в Telegram
Включает сирену и световую сигнализацию
Сохраняет журнал событий на SD-карту
Необходимые компоненты:
Плата Arduino Uno/Nano
Модуль ESP32-CAM (камера + WiFi)
PIR-датчик движения HC-SR501
Релейный модуль
Сирена 12V
Светодиодная лента (красная)
Модуль SD-карты
Источник питания 5V и 12V
Макетная плата и провода
Полный скетч
#include <WiFi.h> #include <ESP32CAM.h> #include <UniversalTelegramBot.h> #include <SD.h> #include <SPI.h> // Настройки WiFi const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; // Настройки Telegram #define BOT_TOKEN "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX" #define CHAT_ID "XXXXXXXXXX" // Пины подключения #define PIR_PIN 2 #define RELAY_PIN 3 #define LED_PIN 4 #define BUZZER_PIN 5 #define SD_CS_PIN 15 // Переменные bool motionDetected = false; unsigned long lastDetectionTime = 0; const unsigned long ALARM_DURATION = 30000; // 30 секунд тревоги WiFiClientSecure client; UniversalTelegramBot bot(BOT_TOKEN, client); ESP32CAM camera; void setup() { Serial.begin(115200); // Инициализация пинов pinMode(PIR_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); // Подключение к WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); // Инициализация камеры camera.init(); camera.setResolution(FRAMESIZE_VGA); // Инициализация SD-карты if (!SD.begin(SD_CS_PIN)) { Serial.println("SD Card error"); } // Тестовое уведомление bot.sendMessage(CHAT_ID, "Система безопасности активирована", ""); } void loop() { // Проверка датчика движения if (digitalRead(PIR_PIN) == HIGH && !motionDetected) { triggerAlarm(); lastDetectionTime = millis(); motionDetected = true; } // Автоматическое отключение через 30 секунд if (motionDetected && (millis() - lastDetectionTime > ALARM_DURATION)) { stopAlarm(); motionDetected = false; } // Проверка новых сообщений в Telegram if (motionDetected) { int numNewMessages = bot.getUpdates(bot.last_message_received + 1); handleTelegramMessages(numNewMessages); } } void triggerAlarm() { // 1. Активация сигнализации digitalWrite(RELAY_PIN, HIGH); // Сирена digitalWrite(LED_PIN, HIGH); // Световая сигнализация tone(BUZZER_PIN, 1000); // Зуммер // 2. Сделать фото camera_fb_t *fb = camera.capture(); if (fb) { // 3. Сохранить на SD-карту String filename = "/photo_" + String(millis()) + ".jpg"; File file = SD.open(filename.c_str(), FILE_WRITE); file.write(fb->buf, fb->len); file.close(); // 4. Отправить в Telegram bot.sendPhoto(CHAT_ID, fb->buf, fb->len); // 5. Освободить память camera.returnFrameBuffer(fb); } // 6. Запись в журнал logEvent("Motion detected"); } void stopAlarm() { digitalWrite(RELAY_PIN, LOW); digitalWrite(LED_PIN, LOW); noTone(BUZZER_PIN); bot.sendMessage(CHAT_ID, "Тревога отключена", ""); logEvent("Alarm stopped"); } void handleTelegramMessages(int numNewMessages) { for (int i = 0; i < numNewMessages; i++) { String text = bot.messages[i].text; if (text == "/status") { String reply = "Статус: " + String(motionDetected ? "ТРЕВОГА" : "НОРМА"); bot.sendMessage(CHAT_ID, reply, ""); } else if (text == "/off") { stopAlarm(); motionDetected = false; } } } void logEvent(String event) { File logFile = SD.open("/log.txt", FILE_APPEND); if (logFile) { logFile.println(getTime() + " - " + event); logFile.close(); } } String getTime() { // Здесь можно добавить RTC модуль для точного времени return String(millis() / 1000); }
Как это работает:
Обнаружение движения:
PIR-датчик реагирует на перемещение в зоне 5-7 метров
Игнорирует мелких животных (регулировка чувствительности)
Фотофиксация:
Камера делает снимок в разрешении 640x480 (VGA)
Сохранение на SD-карту с временной меткой
Мгновенная отправка в Telegram
Сигнализация:
Громкая сирена (105 дБ)
Мигающая красная подсветка
Звуковой сигнал зуммера
Удаленное управление:
Команды Telegram: /status, /off
Push-уведомления при срабатывании
Журналирование:
Лог всех событий на SD-карту
Возможность просмотра истории
Подключение компонентов:
ESP32-CAM:
U0R → TX Arduino
U0T → RX Arduino
5V → 5V
GND → GND
PIR-датчик:
OUT → D2
VCC → 5V
GND → GND
Релейный модуль:
IN → D3
VCC → 5V
GND → GND
COM → Сирена +
NO → 12V+
Светодиоды:
→ D4 через резистор 220 Ом
→ GND
Улучшения системы:
Добавьте Face Recognition:
// Используйте библиотеку ESP-FACE для распознавания if (recognizeFace(fb)) { bot.sendMessage(CHAT_ID, "Опознан знакомый человек", ""); }
Интеграция с охранной компанией:
void callSecurity() { // Отправка API-запроса в охранный сервис }
Даталоггер на облаке:
void sendToFirebase() { // Запись событий в Firebase Realtime Database }
Резервный аккумулятор:
Литий-ионный аккумулятор 18650
Схема автоматического переключения
Настройка Telegram-бота:
Создайте бота через @BotFather
Получите chat ID через @getidsbot
Вставьте данные в скетч:
#define BOT_TOKEN "123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11" #define CHAT_ID "123456789"
Стоимость реализации: ~4000-6000руб
Время сборки: 1.5-2 часа
Зона покрытия: до 10 м²
Идеально для: дома, офиса, гаража, дачи. Полноценная охранная система с возможностью удаленного мониторинга!