Этот мощный скетч превращает 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 м²
Идеально для: дома, офиса, гаража, дачи. Полноценная охранная система с возможностью удаленного мониторинга!


