Друзья, разрешите представить проектик GSM сигнализации на Arduino. В сети довольно много проектов по типу «Arduino + модем + датчики», однако я часто вижу в них некоторую незаконченность (в особенности, с программной точки зрения): отсутствие гибкости в настройках и конфигурировании. В представленном решении я попытался сделать устройство максимально готовое к «боевым» условиям, предусмотрев все, что может понадобится среднестатистическому пользователю (на мой взгляд).
![](https://habrastorage.org/webt/rw/4g/kc/rw4gkc8unhxvptegx57pl41r-6g.jpeg)
TL; DR программно и аппаратно задуманное реализовано, тест в реальных условиях запущен, исходники и бинарники опубликованы, корпус не осилил.
Устройство и характеристики
Устройство отправляет SMS при возникновении следующих событий:
- открытие двери (герконовый датчик);
- резкое изменение освещения (фоторезистор);
- движение (PIR датчик);
- выход температуры из заданного диапазона;
- низкое напряжение батареи.
![](https://habrastorage.org/webt/pf/hk/rb/pfhkrbd3g--al48ixlmcoqi5yey.png)
Пример SMS с событием
![](https://habrastorage.org/webt/jg/ra/bj/jgrabjm3-yvaaghayhettjpclge.png)
Также, раз в сутки можно настроить время ежедневного отчета
Питается устройство от 3-х батареек AA. Расчетное время работы ?6мес.
Настройка устройства, считывание логов событий и построение месячного графика температуры происходит с помощью утилиты (Python 2.7 + Tk + pyserial + matplotli).
![](https://habrastorage.org/webt/wr/fm/w3/wrfmw3anufft8_4nrw0g45dy_lw.png)
Основное окно утилиты настройки
![](https://habrastorage.org/webt/ya/5h/s0/ya5hs0wgubsv0wgqxxaqfutboie.png)
Окно лога событий
![](https://habrastorage.org/webt/uj/ra/9-/ujra9-x21dg0lb1yzldyi_1-p30.png)
Окно лога температуры
Сборка устройства
Себестоимость деталей устройства на момент публикации этой статьи составляет примерно 1000-1200 рублей (без учета заказа платы).
Для удобства сборки и надежности в эксплуатации лучше заказать плату. Китайские друзья с известного сайта предлагают сделать 10 штук с доставкой за ~$7, а иногда и меньше. Но всегда можно собрать и на макетке, как я и поступил с первым прототипом:
![](https://habrastorage.org/webt/mm/b7/iv/mmb7ivdmelqirytqrhopse2ybl4.jpeg)
Прототип.
Arduino и совместимые модули были заказаны с aliexpress. Понадобятся:
- Arduino Pro Mini 3.3v 8MHz (5v 16MHz is also acceptable, but requires different firmware);
- MH-SR602 MINI Motion Sensor;
- SIM800C(L) GSM Module;
- CP2102 MICRO USB to UART TTL Module;
- DS3231 RTC Module For Raspberry Pi;
- 3 AA battery holder With ON OFF Switch;
- различная рассыпуха (резисторы, конденсаторы, зуммер и поч.).
В списке специально указаны названия, дающие нужный результат при вводе в поиск.
![](https://habrastorage.org/webt/x9/wn/fw/x9wnfwuddwfhtwvdedyrxsxjigs.png)
Схема устройства
Для снижения энергопотребления с платы Arduino нужно обязательно удалить резистор светодиода питания и регулятор напряжения. Проект платы сделан в Ki-CAD.
Использование
- После сборки и прошивки устройство требует загрузки конфигурации (с помощью утилиты).
- При подключении к USB нормальная работа устройства приостанавливается, очередь неотправленных сообщений очищается.
- При неудачной отправке SMS, устройство произведет повторную попытку через 2 минуты, затем через 5, 10, 20, дважды через 40 и затем каждые 12 часов.
- После принятого звонка, он будет завершен через 3 минуты.
- Звуковая сигнализация включается на 30 секунд.
- События «открытие двери», «движение» и «изменения освещения» срабатывают не чаще, чем раз в 20 мин.
- Если питание устройства отсутствует более 3 часов, то записанная история измерения температуры сбрасывается.
Локализация
Поддержаны два языка для программы конфигурирования и текста SMS: английский, русский. При желании не сложно добавить поддержку других языков: все локализуемые строки вынесены в отдельный файл (принимаю issue с реквестом, если приложите переводы всех строк).
Полевые испытания
Прошу прощения за эстетику монтажа.
![](https://habrastorage.org/webt/1a/h0/yc/1ah0yclrhs_w9ao9gvxnq1vfn7g.jpeg)
Установка на входную дверь. Часть конструкции справа (непосредственно на самой двери) — магнит для срабатывания геркона
На место постоянного использования (гараж) устройство было установлено 4 месяца назад. Для целей усиленного тестирования, функция расписания не используется (по каждому событию отправляется SMS). В среднем получается 5 SMS в день: два при входе в гараж (срабатывает датчик открытия двери и датчик освещения), два при выходе и один «ежедневный отчет». На текущий момент батареи (3x AA) держат напряжение 4.1в при включенном модеме.
Проблемы
За время эксплуатации температура в помещении понизилась с +10°С до -15°С и обнаружилась две проблемы.
- Используемый PIR датчик начинает давать ложные срабатывания при низких температурах. При +5°С использование стало совсем невозможным: число ложных срабатываний превысило одно в день. Попытка замены датчика на другой проблему не решило, поэтому сейчас этот датчик временно отключен. Что с этим делать пока не понятно.
- Датчик температуры, встроенный в DS3231 при -10°С и ниже начал сходить с ума: периодически выдает случайные значения, например, «-84°С» или «+115°С». Интересно, что RTC работает нормально. На текущий момент не понятно, проблема ли это конкретно моего экземпляра или нет. Жду для проверки второй идентичный модуль, при повторении с ним проблемы в устройство будет добавлен DS18B20.
В остальном полет нормальный.
Что дальше
В планах (когда-нибудь):
- спроектировать и напечатать корпус;
- подключить ESP-01 для конфигурации и просмотра логов через браузер с телефона.
Отладка
Отладочные сообщения выводятся в виртуальный COM на 250kbod. Нужно замкнуть на землю D12, чтобы отключить детекцию подключенного USB (чтобы устройство продолжало работу в нормальном режиме). Конфигурирование через утилиту продолжит работать нормально.
Ссылки
Репозиторий проекта: github
Доступны схема и плата в Ki-CAD, прошивка и исходники для Arduino, exe и исходники утилиты конфигурации.
Аналог с aliexpress: RF-V13
remzalp
Датчик температуры сменить на резистивный ntc10k, перевод сопротивления в температуру по формуле Стейнхарта — Харта (пример использования), датчик дешевле в 6 раз
Alex-111 Автор
Не люблю аналоговые интерфейсы. Пусть лучше зона ответственности с расчетом числового представления температуры будет на плечах производителя датчика.
rrpv
Также ATmega содержит встроенный термодатчик, возможно стоит попробовать использовать его?
Alex-111 Автор
Можно было бы, но не радует следующая фраза из ДШ:
rrpv
Надо чуть дальше даташит прочитать:
Т.е. нужно просто скорректировать на значение смещения, а точность значения k обещает производитель. Цифровой датчик конечно точен из коробки, но я думаю что и такой метод даст приемлемый результат.
Alex-111 Автор
Тут уже дело вкуса. Я просто стараюсь как можно ближе соответствовать «правильно собранное устройство в настройке не нуждается». Особенно при разработке DIY, где нужно минимизировать «порог входа», время и количество инструкций, для тех, кто захочет это повторить. Разбирающиеся товарищи уже смогут сделать модификации на свой вкус, для чего и исходники.
update: не понял сразу, что калибровочные значения уже записаны в камень и их не нужно самому определять. Посмотрю поближе.
remzalp
Обычно производитель по датчику сообщает коэффициент B из уравнения Стейнхарта — Харта, с разбросом в пределах 5%.
Это если «нет времени разбираться, просто воткнем и работать». Но можно по 3 точкам измеренной температуры откалибровать (вычислить точное значение константы B) при наличии хоть как-то точного термометра.