Skip to content

Repository files navigation

Signalization

Охранная сигнализация на основе микроконтроллера esp32

Краткий обзор возможностей:

  • Управление через Telegram
  • Уведомления о сработке датчиков движения
  • Уведомления о сработке пожарных датчиков (температурных/дымовых/огневых датчиков)
  • Отслеживание температуры окружающего воздуха (датчик DS18b20) и построение графиков на open.monitoring.online
  • Отслеживание связи с WiFi, проверка наличия выхода в интернет, перезагрузка модема/роутера при потере интернет-соединения
  • Поддержка настраиваемого количества пользователей, выбор количества "админов" среди них
  • Запись в EEPROM-память важных настроек, возможность их изменения без перепрошивки
  • Обновление прошивки через ArduinoOTA (в локальной сети) и через Telegram (на любом расстоянии)

Оглавление:

Нам понадобится:

  • ESP32
  • Созданный телеграм бот (инструкцию по созданию и настройке можно найти здесь)
  • Релейный модуль(-ли)
  • Датчики движения (инфракрасного или иного типа)
  • Пожарные датчики (читайте соответствующий раздел)
  • Несколько номиналов резисторов (4.7 кОм для DS18b20 и несколько для делителя напряжения (читайте о подключении пожарных датчиков))
  • Наличие стабилизированного постоянного питания
  • Постоянное наличие интернет-соединения
  • Температурный датчик DS18b20 (опционально)

Краткий обзор настроек:

О файле passwords.txt

В каталоге с проектом вы можете увидеть файл passwords_example.txt, который содержит все самые важные и конфиденциальные дефайны. Остальная их часть находиться в файле Signalization.ino. Чтобы проект успешно скомпилировался и работал, вам нужно:

  • Заполнить все конфиденциальные данные в дефайнах файла passwords_example.txt (ssid и password, BOT_TOKEN и так далее...) вашими значениями
  • Переименовать файл из passwords_example.txt в passwords.txt. Это позволит проекту видеть ваши настройки и успешно их использовать

Обязательные дефайны (проект не запуститься без них):

#define ssid ""            //имя WiFi сети
#define password ""        //пароль от WiFi сети
#define BOT_TOKEN ""       //идентификатор бота в телеге (получаем у BotFather после создания)

Важные дефайны (проект будет работать неправильно без их настройки):

Необходимо заменить значения по умолчанию своими данными:

#define FIRE_SENSOR1 39        //пин, к которому подключен 1-й датчик дыма
#define FIRE_SENSOR2 36        //пин, к которому подключен 2-й датчик дыма
#define RELAY1 4               //пин управления первым реле
#define RELAY2 18              //пин управления вторым реле
#define RELAY3 17              //пин управления третьим реле
#define RELAY4 16              //пин управления четвертым реле
#define DATCH_HOME 22          //пин, к которому подключен домашний датчик движения
#define DATCH_1 23             //пин, к которому подключен первый датчик движения
#define DATCH_2 25             //пин, к которому подключен второй датчик движения
#define DATCH_3 26             //пин, к которому подключен третий датчик движения
#define ThermoPin 32           //пин, к которому подключен датчик температуры
#define USERS_NUM 2            //кол-во пользователей (с начала общего списка), которым будет показана часть меню с управлением реле, от которых можно обновлять прошивку и т.д.
#define FIRE_RELE_NUM 1        //номер реле, через которое питаются датчики дыма (нумерация с 1)
#define MODEM_RELE_NUM 2       //номер реле, через которое питается роутер/модем (нумерация с 1)

Остальные дефайны можно оставить по умолчанию, либо же изменить, руководствуясь приведенными в коде комментриями.

Как увеличить/уменьшить количество датчиков/реле:

    1. Делаем новый дефайн, содержащий номер пина, к которому подключен этот датчик (например #define FIRE_SENSOR3 39)
    1. Добавляем его в соответствующий список, например, для датчиков движения, в const byte d_pins[]
    1. Если добавляем реле, то придумываем ему имя и вписываем его в const char* r_names[]
    1. если это датчик движения, то имя вписываем в const char* d_names[]
    1. Во вкладке AlarmString, руководствуясь комментариями (добавляем новый case в конструкцию), придумываем текст, который будет содержаться в сообщении о сработке датчиков дыма и движения
Для уменьшения количества датчиков/реле действуем по аналогичному принципу в обратную сторону.

Добавление пользователей и задание количества "админов":

  • id пользователей добавляются в const String Users[], id пользователя можно узнать например через него или него или через другого подобного бота.
  • Количество админов задается дефайном:
#define USERS_NUM 2    //кол-во пользователей (с начала общего списка), которым будет показана часть меню с управлением реле, от которых можно обновлять прошивку и т.д.

Настройка сервиса OpenMonitoring для работы с проектом:

Создание контроллера и подключение к проекту:

  • Для того, чтобы иметь возможноть удаленно отслеживать графики изменения температуры окружающего воздуха (датчик DS18), а также време без сети (см. ниже), нам нужно зарегистрироваться на cервисе Open-Monitoring.online, а так же получить оттуда некоторые данные. Подробно процесс регистрации и создания нового устройства описан здесь, рекомендую на этапе создания параметров создать дополнительные, по 1-2 каждого типа (целые, с плавающей точкой и строковые). Их можно скрыть от видимости и они не будут мешать, а если не взять такой запас, в будущих обновлениях, возможно, вы не сможете использовать новые функции. Созданные параметры должны выглядеть следующим образом:

image

После создания нового контроллера на сервере, раскрываем меню действий с ним -> "о контроллере" и копируем поле с заголовком "Код для отправки GET-запросом".

777

Где после cid и key будут идти ваши уникальные значения, позволяющие добавлять, с помощью http запроса, данные на сервер. Копируем эту строку, вплость до &p1= во вкладку HTTP.ino, а именно в эти кавычки: String req = "";

Если вы создавали все параметры как на фото выше (порядок, имена и т.д.), то остальные параметры в этой вкладке можно не трогать. Иначе вам придется немного видоизменить поля сборки запроса.

Уведомления о потере связи с сигнализацией:

На странице open.monitoring.online выполняем следующие шаги:

  • На стартовой странице сайта, в левой части экрана нажимаем на название нашего ранее созданного контроллера
  • Кнопка Журнал событий
  • В правой верхней части экрана ищем кнопку: image
  • Жмем Создать событие
  • Название вписываем любое
  • Тип -> Таймаут
  • В следующее поле вписываем время ожидание, т.е., если в течении этого времени контроллер ни разу не свяжется с сервером (не отправит новые данные), то событие сработает
  • Вписываем текст, который будет записываться в журнал событий
  • Включаем уведомления на почту
  • Указываем email, на который будут приходить письма (Важно! Следите, чтобы отправитель не попал в спам или другое место, из которго вам не будут приходить уведомления о новом письме)
  • Вписываем сообщение, которое будет приходить в письме, при потере связи с контроллером
  • Вписываем сообщение, которое будет приходить в письме, при восстановлении связи с контроллером
  • Нажимаем Создать

Уведомления настроены! Если что-то работает не правильно, проверяем наличие отправителя в папке спама, или включаем уведомиления о входящих сообщениях.

Печатная плата и подключение компонентов:

  • Компоненты подключаются подобным образом (для контактов, установленных по умолчанию):

image

Питание пожарных датчиков осуществляется через нормально замкнутый контакт реле. Номер (в нумерации по массиву ) того реле, через которое питаются датчики, должен быть указан в:

    #define FIRE_RELE_NUM 1        //номер реле, через которое питаются датчики дыма (нумерация с 1)

Аналогичная история получается и с питание модема, если вы хотите осуществлять его программный сброс.
По данной схеме можно развести печатную плату, либо заказав ее у китайцев, либо изготовив ее наколенным методом, например ЛУТ.

Note

Подключение пожарных датчиков к микроконтроллеру, возможность их использования в проекте, а так же их напряжения питания различаются для каждой модели датчиков!

  • В зависимости от типа пожарных датчиков, у них может быть разное напряжение питания, а так же тип сигнала, который они выдают при сработке. Если у вас датчик с "сухим контактом", то вам повезло. В вашем случае достаточно, чтобы датчик размыкал, например, пин 3.3V и контакт на esp. Для некоторых других датчиков, например для ИП212-45, есть возможность регистрировать срабатывания, подогнав напряжение сработки под максимум 3.3 - 3.2V (максимальное входное напрыяжение на пины esp32) с помощью делителя напряжения (вот тут можно рассчитать сопротивления для вашего делителя).
  • В итоге суть колхоза заключается в получении четкой разницы в напряжении, подаваемом на контакт микроконтроллера, для случаев тревоги и обычной работы. Для исходного кода разница должна быть такова, чтобы digitalRead() выдавал false при работе и true для сработки датчика. Да, придется поколхозить. Да, придется просчитывать все сопротивления вашей модели датчика. Да, придется покопаться в документациях к вашему датчику, чтобы узнать его тип и пригодность к участию в проекте. Но не в этом ли счастье настоящего радиолюбителя?)
  • Возможно перестроение кода, для других изменение сигнала при тревоги датчика, например для извещателей с изменяющимся током. Смотрите комментарии в коде и раздел Как это работает?.

Как это работает?

Довольно полное описание всех частей программы, включая логику работы и особенности реализации:

  • Информация скоро обновится.

Примечание:

Important

  • Проект написан одним энтузиастом, переписывался полностью 7 раз (каждый раз, когда навыки программирования создателя становились на уровень выше). Проект имеет известные и еще не обнаруженные баги и ошибки, список известных можно найти в соответствующем разделе, а вами обнаруженные можно написать в Issues или сразу на почту alekseyzh5@gmail.com. Конечно, автор не несет никакой ответственности за работоспособность вашего устройства и за последствия, к которым может привести использование проекта. Рекомендуется тщательно протестировать собранный проект в разных условиях, прежде чем возлагать на него какую-нибудь ответственность. При возниконовении проблем, большая просьба, не выливать негатив в адрес автора, а с пониманием отнестись к его несовершенству. Проект открыт для ваших Issues и Pull Request'ов! Буду рад каждому вашему вкладу в развитие проекта! Спасибо, что помогаете развивать и улучшать его!

Версии:

  • v0.5 - Пре-релизная версия, имеет несколько функций в разработке
  • v1.0 - Релизная версия. Все основные функции реализованы

Известные ошибки:

Те баги программы, которые известны автору (он обязательно приступит к их исправлению при первой возможности):

  • ...

About

Сигнализация на основе микроконтроллера esp32, управляемая через телеграм-бота

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages