Двухзонный мониторинг температуры на Arduino с GPRS и исполнительным модулем


Опубликовано 05.10.2020 19:21 | Автор: Admin

В данной статье рассматривается:
Двухзонный мониторинг температуры (Ds18b20), влажности (AM2320) на Arduino (Pro Mini) и исполнительными модулями (два реле) с передачей, приему данных по каналу GPRS (sim800l). Вывод информации на OLED (SSD1306) дисплей. Управление исполнительным устройством из Telegram. Вывод статистики в виде графика на сервере.

Данное устройство разрабатывалось для мониторинга температуры в гараже где один датчик отправляет температуру (Ds18b20) в основном помещении, а второй датчик температуру и влажность (AM2320) подвала, отдален от основной платы по витой паре на 10м. Локально информация выводиться на OLED (SSD1306) дисплей. Статистика с датчиков температуры собирается на сервере, отображается в виде графика. Управление исполнительным устройством производиться через Telegram. Исполнительное устройство (два спаренных реле) добавлено без определенной цели, но думаю оно там нужно.

Устройство питается от источника 5В 2А.

Все исходные коды доступны по ссылке. Так же приложена принципиальная схема устройства.

  •  ../arduino_source/Shema.dch - схема устройства
  • ../arduino_source - исходный код для Arduino
  • ../WebServer - исходный код сервера

Релиз Альфа.

Состав устройства:

  • Ядро: Arduino Pro Mini китайский клон (чуток отличается от оригинала) купить;
  • Блок питания: 5В 2А купить;
  • Датчик температуры основной: Ds18b20 работает по I2C купить ;
  • Датчик температуры, влажности: AM2320 работает по протоколу 1-Wair купить;
  • GPRS приемник/передатчик: mini sim800l сигнальные уровень TTL (3.3В) купить;
  • Исполнительный модуль: два спаренных реле купить;
  • Дисплей: OLED 0.91 на контроллере SSD1306 купить;
  • Преобразователь уровней: 5В в 3.3В купить;
  • Мини DC-DC конвертор: питания sim800l купить;
  • Пару резисторов, конденсаторы;
  • Витая пара: для датчика AM2320, вынос датчика до 10м от устройства;
  • Кнопка.


Сим карту для устройства порекомендую от Tele2 т.к. у них есть опция 100мб, за 10 рублей. Берем классический тариф и подключаем данную опцию, 100мб для данного устройства за глаза. Данный тариф они не афишируют, но как подключить спокойно ищется в поисковике.

С помощью USSD-команды:

Включить *155*281#

Отключить *155*280#


Схема принципиальная

схема устройства

Настройка устройства

Необходимо подобрать резисторы R1 и R2 для преобразователя уровня. 

На DC-DC конверторе, питающий sim800l выставить напряжение 4.1В.

Модуль sim800l работает в автоматическом режиме определение скорости обмена по USART.

Модуль sim800l можно заменить на другие сборки, где уже имеются преобразователи уровней на плате.

Т.к. OLED дисплеи сильно склонны к выгоранию в устройстве добавлена кнопка, что включает дисплей при нажатии. Не работает пока идет обмен с сервером (можно переделать, повесив на прерывание).

Работа с исходниками

В исходниках перед сборкой необходимо внести правку в заголовочный файл data.h, где указать URL реального сервера и точку APN оператора SIM карты.

Код написан в среде Visual Studio Code с расширение PlatformIO (очень приятное и универсальное расширение)

Серверная часть

Для работы устройства нам никак не обойтись без сервера т.к. где-то нужно накапливать статистику. Но, вполне возможно переработать код устройства и наладить работу исключительно через Telegram, без использования своего сервера.

Наш сервер написан на языке C# с использованием технологии .NET Core 2.2. Среда разработки Visual Studio 2019. Да, выбор языка для сервера не лучший и требует для запуска VPS/VDS сервер, но я просто люблю этот язык. Данная технология позволяет без проблем запускать наш сервер как на Windows, так и на Linux. Подробнее можно почитать в интернете.

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

http://nameServer.ru/GG

Сервер, график температуры

Для взаимодействия с исполнительным устройством используется Telegram. Где сообщения боту транслируются на наш сервер, а далее эти команды забирает исполнительное устройство.

Грубо это выглядит так: мы посылаем команду телеграм боту, наш сервер считывает команду от бота и запоминает ее. Через некоторое время наше устройство подключается к серверу и передает данные по температуре и в тоже время запрашивает команду на исполнение. Когда устройство считало команду, бот сообщает об этом.

Доступные команды:

  • r1on – включить реле 1
  • r2on– включить реле 2
  • r1off – выключить реле 1
  • r2off - выключить реле 2
  • r1togle – включить и с задержкой выключить реле 1 (чуток не корректное название)
  • r2togle - включить и с задержкой выключить реле 2
  • roff – выключить оба реле
  • help – справка по доступным командам


Пример:

gg r1on
gg help

где, gg – имя сервера, r1on, help – команды для устройства.

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

Все исходники доступны так, что все можно переделать как вам нравится.

Работа с исходниками

В серверной части перед необходимо внести правки в файл конфигурации appsettings.json.

В ветке TelegramStrings внести:

  • apilToken – токен телеграмм бота (подробнее как его получить можно спросить у моего брата yandex)
  • destID – ИД группы или же ваш ИД
  • name – имя сервера на которое он будет отзываться


Результат

Вот такой монстр у нас получился.

устройство в сборе


Метки
Arduino Pro Mini Мониторинг C/C++ C#

Комментариев: 0

 42 |


Добавить комментарий:
Отправить