Детектор газа с оповещением в Telegram
Сегодня я буду собирать детектор бытового газа, который будет отправлять уведомления и получать команды через Telegram. Основано всё будет на Wemos D1 mini (моя версия на 4 мегабайта).
Предварительно для себя я протестировал датчики MQ серии. Их характеристики и чувствительность к тем или иным газам отличаются друг от друга, но принцип работы одинаковый.
Свой выбор я остановил на датчике MQ-5. Хочу отметить, что выбор датчика имеет абсолютно субъективный характер и выбрать можно любой датчик по ссылке.
Разбор схемы
Все выводы платы микроконтроллера задействованы по максимуму. К единственному аналоговому выводу подключён газовый датчик, и, поскольку у платы ESP8266 3,3-вольтовая логика, необходим делитель напряжения в виде пары резисторов на 10 и 20 кОм. Питание на датчик, как правило, подаётся через резистор 5 Ом.
Так как согласно спецификациям максимальный ток на один вывод микроконтроллера не должен превышать 12 мА, бузер необходимо подключать через транзистор.
Я буду использовать миниатюрный BSS138 в SOT корпусе. Можно использовать множество других вариантов, например, 2N7000 в DIP корпусе. По тому же принципу подключается и реле, только необходимо добавить ещё и защитный диод.
К шине I2C подключается дисплей и модуль BME280. Для управления яркостью дисплея вывод подсветки подключен к GPIO6, поддерживающему ШИМ. Трёхцветный светодиод может быть как с общим анодом, так и с общим катодом, скетч предусматривает оба варианта, только общий вывод нужно подключить соответственно либо на 3,3 вольта, либо на землю.
Я буду использовать светодиод с общим анодом, и в этом случае есть небольшое преимущество: общий вывод можно также подключить на PIN D6, и одновременно с яркостью дисплея будет регулироваться яркость светодиода.
Резисторы под каждый светодиод подбираются индивидуально в диапазоне от 100 до 300 Ом.
Кнопки будут подтягиваться к земле, и резисторы в этом случае не нужны.
Разбор скетча
Для работы с платами ESP8266 (ссылка на скетч) необходимо в меню "Файл" -> "Настройки" развернуть дополнительное поле "Дополнительные ссылки для менеджера плат" и добавить вот эту ссылку.
После чего можно перейти в "Менеджер плат", дождаться обновлений, в поисковой строке набрать ESP8266 и установить соответствующее расширение.
Для работы со скетчем требуется ряд библиотек, их можно скачать через "Менеджер библиотек".
Также хочу отметить, что может потребоваться обновление установленных библиотек, в особенности ArduinoJson. Кроме того, не лишним будет обновить версию Arduino IDE.
В скетче необходимо указать название и пароль своей Wi-Fi сети.
Для получения токена необходимо создать бота. Заходим в Telegram и находим бота под названием BotFather.
Нажимаем "Start", выбираем команду /newbot. Необходимо придумать имя будущему боту, это будет тестовый вариант, назову его TestBot.
После чего необходимо задать пользовательское имя. Бот создан, необходимо скопировать полученный токен и добавить его в скетч.
Остаётся получить chat_id. Для этого можно залить скетч в текущем варианте и после загрузки отправить команду /start созданному боту. В ответ придёт chat_id, который также необходимо добавить в скетч.
Для обработки команд из чата, микроконтроллер периодически должен подключаться к API Telegram и проверять наличие новых сообщений. Периодичность проверки задаётся переменной bot_mtbs в миллисекундах.
Так как подключение к API происходит в общем цикле микроконтроллера и является блокирующей функцией, крайне не рекомендуется уменьшать это значение.
В переменной ledPin - указывается тип светодиодов: 0, если он с общим анодом, и 1, если с общим катодом.
Цикл loop состоит из трёх функций: опроса кнопок, опроса датчиков и вывода данных.
На текущий момент существует 4 режима:
в первом задаются настройки;
второй и третий предназначены для сигнализации о превышении допустимого уровня газа и уведомления о неисправности датчика;
в четвёртом отображаются параметры с датчиков и совершаются запросы к API Telegram.
Для более комфортного переключения экранов при каждом нажатии на кнопки будет останавливаться опрос API Telegram на 10 секунд.
Остаётся схему с макетной платы собрать в окончательном варианте.
Сборка детектора
Разместить всё планирую в таком вот корпусе, приобрести его можно на Aliexpress.
Внешние размеры 86х86 миллиметров, а внутренние 81х81 мм. В комплекте идут колпачки на кнопки под заранее проделанные отверстия и дополнительно нанесена разметка под ещё одну кнопку. На её место я установлю светодиод, закрепив в одном из держателей.
За основу взял печатную плату стандарта 8х12 мм, обрезал до размера 8х8 мм и скруглил края платы, чтобы всё легко помещалось в корпус.
В стойках корпуса я нарезал резьбу диаметром 3 миллиметра. Теперь есть возможность вкручивать стойки необходимой высоты. В моём случае высота дополнительных стоек - 7 миллиметров. Это необходимо для того, чтобы закрепить плату на расстоянии, достаточном для размещения дисплея.
Реле может быть любого размера в зависимости от того, какая нагрузка будет коммутироваться, но независимо от размера схема подключения через транзистор одинакова и реле должно работать от 5 вольт.
Для дисплея я прикрутил стойки высотой 10 миллиметров. Выводы от I2C конвертера необходимо отогнуть или перепаять прямые контакты и немного изогнуть контакты, отвечающие за подсветку дисплея, чтобы они находились на одной линии с остальными и легко размещались на печатной плате без просверливания дополнительных отверстий.
Поскольку подсветку дисплея я планирую сделать регулируемой и питать от PIN микроконтроллера, логика которого 3,3 вольта, необходимо уменьшить сопротивление резистора R8, так как изначально подсветка рассчитана на питание от 5 вольт, этот резистор я заменю на резистор 27 Ом.
Микроконтроллер я планирую разместить под дисплеем, и чтобы вынести USB разъём в более удобное место, я припаял к выводам TTL конвертера два проводника, которые протянул сквозь плату и подключу к разъёму, выполненному в виде модуля.
Такая компоновка у меня получилась в итоге. Возможно, вам удастся найти более удачные варианты размещения, а пока посмотрим на моё исполнение.
Остановился на варианте более компактного реле, для него вынесена клеммная колодка.
На плате присутствуют переходы, все соединения выполнены проволокой 0,3 миллиметра.
Заклеил самоклеющейся плёнкой правую часть платы дисплея, чтобы подсветка не просвечивалась сквозь корпус. По этой же причине не отпаял светодиод с платы микроконтроллера.
Плата Wemos размещена так, чтобы антенна находилась в верхней части.
Кнопки реализовал в виде такого модуля, чтобы расположить их на необходимой высоте. Если использовать стандартные Dupont разъёмы, как сделано у меня, высота кнопок должна составлять 7 миллиметров.
С правой стороны у меня вынесены гребёнки, также в виде Dupont разъёмов, но приподнятые на высоту пластиковой гребёнки, чтобы более надёжно зафиксировать в них дополнительные модули.
Пока у меня в наличии только BME280, позже я планирую добавить GP30 и доработать под него скетч.
Плата с micro USB разъёмом располагается у меня слева, также в Dupont разъёме.
Микроконтроллер уже прошит, поэтому можно подать питание и продемонстрировать работу.
Демонстрация работы
Слева отображается текущее значение с датчика газа. Я задал его в диапазоне от 0 до 10000, а справа - пороговое значение, при котором будет срабатывать сигнализация.
Кнопками влево и вправо можно пролистывать экраны. Можно наблюдать: температуру, влажность и давление, и далее всё по кругу.
Короткое нажатие на центральную кнопку переключит на экран, где будут отображены все параметры с датчиков.
Коротким нажатием влево и вправо можно вернуться к предыдущим экранам, а длительное нажатие крайних кнопок включает режим автоматической смены экранов каждые две секунды. Повторное короткое нажатие отключает его.
Удержание центральной кнопки переводит в меню настроек, где можно выставить порог срабатывания.
Следующий пункт - выбор режима работы реле. Предполагается два варианта: включение на одну секунду для электромагнитных клапанов и замыкание контактов реле на весь период превышения допустимого уровня газа для включения принудительной вентиляции.
И третий пункт - установка яркости подсветки дисплея. Всего четырнадцать уровней градации, есть возможность полностью отключить подсветку дисплея.
Сымитирую режим тревоги и продемонстрирую получение уведомлений и отправку команд. Для наглядности подключил USB вентилятор через реле, он будет имитировать работу вытяжки.
При включении отправляется уведомление в Telegram, я также добавил две кнопки, позволяющие получить текущие значения датчиков и включить или выключить реле.
Всё протестировано, поэтому можно размещать плату в корпусе. Корпус у нас совмещён, две половины соединены, добавляю, чтобы крепления стали по своим местам.
В корпусе сделано окно под micro USB разъём, в нижней части просверлено отверстие под датчик газа, а для дополнительных датчиков будет достаточно перфорации самого корпуса.
При установке соединения горит синий светодиод, а после подключения загорается зелёный.
В режиме тревоги будет моргать красный светодиод вместе с подсветкой дисплея. Таким получился данный проект. Надеюсь, это видео было для вас полезным.
«Реклама» ООО "АЛИБАБА.КОМ (РУ)" ИНН 7703380158