ShIoTiny: вентилация на мокро помещение (примерен проект)

ShIoTiny: вентилация на мокро помещение (примерен проект)

Основни тези или за какво става дума в тази статия

Продължаваме цикъла статии за ShIoTiny — визуално програмируем контролер на основата на чип ESP8266.

В тази статия се разказва на примера на проект за управление на вентилацията в банята или в друго помещение с повишена влажност как се изгражда програма за ShIoTiny.

Предишни статии от поредицата.

ShIoTiny: малка автоматизация, интернет на нещата или "половин година преди отпуска"
ShIoTiny: възли, връзки и събития или особености на рисуването на програми

Връзки

Бинарни фърмуери, схема на контролера и документация
Инструкция и описание на модулите
Настройка на MQTT брокер cloudmqtt.com
Панел за управление на MQTT dashboard за Android

Въведение

Няма разбиране извън опита. Това е истина, доказана през времето и поколенията. Затова няма нищо по-добро за обучение на практическите умения от опитите да направиш нещо сам. И примерите, които показват какво може да се направи и какво не трябва да се опитва, ще дойдат много удобно. Чуждите грешки, разбира се, не могат да предотвратят възникването на собствените грешки, но могат да помогнат да се намали броят на последните.

Въпросите и писмата на читателите на предишните статии ме подтикнаха да направя малък проект-пример за управление на вентилацията, за да покажа как работят модулите ShIoTiny.

Първоначалната идея, на базата на която е създаден контролерът ShIoTiny — помпена поливна станция — не е подходяща за всеки и не е интересна за всички. Затова избрах нещо, което е напълно разбираемо и полезно за много, а именно система за управление на вентилацията, за да послужи като пример.

Ще кажа, че идеята за проекта не е моя, а я почерпих оттук и след това я адаптирах към ShIoTiny.

Първо, разберете какво искате

Процесът на усъвършенстване е безкраен. И точно това качество погуби много добри идеи и проекти. Разработчикът, вместо да пусне нещо работещо, макар и не идеално, продължим да го усъвършенства. И го усъвършенства, докато конкурентите не го изпревариха, пускайки нещо, което е може би не идеално (често дори съвсем посредствено), но работещо решение.

Затова е много важно да знаеш — къде да сложиш край на проекта. Или, с други думи, трябва да определи какво искаме да получим в края на проекта от това, което имаме в началото. В руския език за документ, който се съставя с цел описание на пътя за създаване на нещо, има прекрасно кратко и съдържателно слово „план“, което умствено ограничени преводачи и недостатъчни мениджъри напоследък по някаква причина започнаха да наричат „пътна карта“. Но да, да бъде с тях.

Нашият план ще бъде такъв. Да предположим, че имаме помещение, в което влажността може в определени моменти да се повишава значително. Например, като баня или кухня. Влажността е неприятен фактор и борбата с нея е стара колкото света: проветряване на помещението. Има доста методи за проветряване. Но, вероятно, ще се откажем от екзотични и старомодни подходи, като например чернокожи с перли и ще се спрем на обикновен вентилатор. Вентилаторите са по-евтини и по-лесни за намиране в нашите райони.

С една дума, искаме да управляваме вентилатора: да го включваме и съответно, да го изключваме. По-точно, искаме той да се включва и изключва сам, когато е необходимо.

Остава да определим: при какви условия вентилаторът трябва да се включва и при какви условия — да се изключва.

Тук всичко е очевидно: ако влажността е над определен лимит — вентилаторът се включва и изважда въздуха; когато влажността се нормализира — вентилаторът се изключва.

Внимателният читател веднага ще се закачи за думата „определен“. Кой я е определил? Как е определена?

Определянето на праговата влажност може да става по няколко начина. Ще разгледаме два от тях: първият — с помощта на променливо съпротивление, и вторият — по мрежа чрез протокол MQTT. Всеки от тези методи има свои предимства и недостатъци, които ще бъдат разгледани по-късно.

За тези, които не разбрахме, уточнявам, че „прагова влажност“ е такъв нивото на влажност, при което е необходимо включването на вентилатора.

Следващият въпрос е: да предоставим ли на потребителя правото да включи вентилатора директно? Тоест независимо от нивото на влажност, с натискане на бутон? Ние ще предвидим такава възможност. В крайна сметка, вентилаторът може да се наложи не само при повишена влажност, но и за отстраняване на неприятни миризми от помещението, известни в народа като „задушаване“.

И така, ние разбрахме какво искаме и дори малко как ще работи това. Ще изброим накратко всичките функции на системата за управление на вентилацията:

  • установяване на прагова стойност на влажността (два варианта);
  • измерване на нивото на влажността;
  • автоматично включване на вентилатора;
  • автоматично изключване на вентилатора;
  • ръчно включване на вентилатора (с натискане на бутон).

И така, планът е ясен. Необходимо е да реализираме всички изброени функции в нашата програма. На базата на този "план" ще действаме. Първо, ще начертаем структурна схема на устройството.

Структурна схема на устройството

Всъщност, ще имаме две такива схеми. Първата е за вариант, в който праговото ниво на влажност се задава с променливо съпротивление. Втората схема е за вариант, в който праговото ниво на влажност се задава през мрежата чрез протокол MQTT.

Но тъй като тези схеми ще се различават само с един елемент — променлив резистор "задаване на прагово ниво на влажност", ще нарисуваме само една структурна схема. Разбира се, структурната схема според ГОСТ изглежда различно. Но ние не се ориентираме към устатите инженери, а към младото поколение. Ето защо визуализацията е по-важна.

ShIoTiny: вентилация на мокро помещение (примерен проект)

И така, какво виждаме на изображението? Вентилаторът е свързан към реле Relay1 на контролера ShIoTiny. Обърнете внимание, че вентилаторът е устройство, което работи под високо напрежение. Затова, ако някой реши да направи това сам, нека прояви предпазливост. Тоест, най-малкото, преди да слагате пръстите или измервателните уреди в схемата, изключете поне вентилатора. И второ забележка. Ако вашият вентилатор е по-мощен от 250Вт, тогава не го свързвайте директно към ShIoTiny не е добре — само чрез стартер.

С вентилатора приключихме. Сега бутона "ръчно включване" на вентилатора. Той е свързан към входа Input1. Тук всичко е ясно.

Датчик за температура и ниво на влажност DHT-11 (или DHT-22 или техни аналози). За неговото свързване е предвиден специален вход на контролера ShIoTiny. Както се вижда на изображението — свързването на такъв датчик също не представлява проблем.

И накрая, променливото съпротивление, задаващо праговото ниво на влажност. По-точно — разделител, състоящ се от променливо и постоянно съпротивление. Няма проблем с неговото свързване, но ще поясня, че вграденият АЦП на ESP8266 е проектиран за максимум 1Волт. Затова е необходим разделител на напрежение, който е около 5 пъти.

И още веднъж напомням, че този разделител не е необходим, ако праговото ниво на влажност се задава по мрежата посредством протокол MQTT.

Нека започнем да съставяме алгоритъма за работа на устройството в редактора ElDraw ShIoTiny. Как да влезем в този редактор, може да прочетете в предходните статии или в инструкцията, линкът към която е в началото на статията.

Първи вариант, най-простият

Нека започнем с простото: включване на реле Relay1 при превишаване на праговото ниво на влажността за зададено време.

ShIoTiny: вентилация на мокро помещение (примерен проект)

Както виждаме, няма нищо сложно: има само четири възела, без да броим коментарните възли. DHT11 — това е собствено датчик за температура и влажност (може да се смени с DHT22).

Константа CONST — праговото ниво на влажност, в проценти.

Компаратор — възел, който сравнява две числа и поставя на изхода 1, ако зададеното условие е изпълнено и 0, ако не е.

В нашия случай такова условие ще бъде A>B, където A — измереното от датчика ниво на влажност, а B — праговото ниво на същата тази влажност.

В момента, в който измереното ниво на влажност (A) надхвърли праговото ниво на влажността (B), веднага на изхода на компаратора A>B ще се появи 1 и реле ще се включи. И обратно, веднага щом нивото на влажност се нормализира (т.е. A<=B), веднага на изхода на компаратора A>B ще се появи 0 и реле ще се изключи.

Всичко ясно? На кого не е — прочетете отново или погледнете в описанието на работата на възлите в инструкциите.

Забелязвам, че данните от датчика DHT11 се актуализират приблизително веднъж на 10 секунди. Следователно реле не може да се включва и изключва по-често от веднъж на 10 секунди.

Всичко би било наред, но ние бихме искали да зададем праговото ниво на влажност с помощта на променлив резистор. Няма нищо по-просто!

ShIoTiny: вентилация на мокро помещение (примерен проект)

Просто заменяме константния възел с АЦП възел. Понеже именно към АЦП сме свързали делителя на напрежение с променлив резистор.

Напрежението на входа на АЦП варира от 0 до 1 Волт. А влажността на изхода на датчика — варира от 0 до 100%. Как тогава ги сравняваме? Всичко е просто. Възелът АЦП в ShIoTiny не просто измерва напрежението на входа, но също така умее да мащабира и измести.

Т.е. на изхода на узла ADC1 (АЦП) ще бъде стойността X, изчислена по формулата

ShIoTiny: вентилация на мокро помещение (примерен проект)

, където ShIoTiny: вентилация на мокро помещение (примерен проект) — напрежение на входа на ADC (от 0 до 1V); k — диапазон (ADC range) и b-изместване (ADC offset). Така че, ако зададем k=100 и b=0, тогава, когато се променя ShIoTiny: вентилация на мокро помещение (примерен проект) в диапазона от 0 до 1, стойността X на изхода на узла АЦП ще се променя в диапазона от 0 до 100. Тоест, числено равно на диапазона на изменение на влажността от 0 до 100%.

Или, по-простому, завъртайки двигателя на променливото съпротивление, можете да зададете праг на влажността от 0 до 100. Единственото неудобство е, че няма никакви устройства за визуализация. Но на практика, ако у двигателя на променливото съпротивление има 6 деления (0%, 20%, 40%, 60%, 80%, 100%) — това е абсолютно достатъчно, за да зададете прага на влажността.

Как да зададем коефициентите k — диапазон (ADC range) и b-изместване (ADC offset)? По-лесно от всичко! Наклонете курсора на мишката върху възела ADC1 и веднага ще се появи прозорец за настройка. В него можете да зададете всичко, от което имате нужда. За нашия случай ще бъде такъв прозорец, какъвто е на изображението.

ShIoTiny: вентилация на мокро помещение (примерен проект)

И така, имаме най-простото работещо решение. Нека да започнем да го усъвършенстваме.
Между другото, най-простото решение има едно предимство — не се нуждае от интернет. То е напълно автономно.

Вторият вариант включва бутон

Всичко работи и всички са доволни. Но ето проблемът, не можем да включим вентилацията принудително. Ние вече се уговорихме, че към входа Input1 ще бъде свързан бутон, който ще включва и изключва вентилатора принудително, без да се съобразява с датчика за влажност.
Време е да обработим този бутон в нашата схема-програма.

ShIoTiny: вентилация на мокро помещение (примерен проект)

Блокът за обработка на натискането на бутона е обозначен с оранжева линия. Той представлява брояч на натисканията на бутона, който се нулира, когато стойността на изхода му надвиши единица (зелена линия, изход на възела CT).

Всичко тук работи по същия прост начин, както преди: броячът CT отчита натисканията на бутона, свързан към входа Input1. Тоест, стойността на изхода на този брояч нараства с 1 при всяко натискане на бутона.

Както само това значение стане равно на две (тоест повече от 1), веднага на изхода на компаратора A>B появява се 1. И това 1 ще нулира брояча CT на нула. Има предвид компаратора, долния по схемата!

Така, нашият бутон има две състояния — 0 и 1. Ако ни бяха нужни повече състояния (3 или 4 или още повече) — само щеше да е необходимо да променим константата CONST от 1 на друга стойност.

И така, имаме две условия за включване на вентилатора: надвишаване на зададения праг на влажност и еднократно натискане на бутона. При изпълнение на която и да е от тези условия, вентилаторът ще се включи. И ще работи, докато бутона не бъде натиснат отново И или докато нивото на влажност не се нормализира.

Разбира се, можем да усложним алгоритъма още повече, но няма да го правим — ще оставим пространство за творчество на желаещите.

Третият вариант, свързваме се с интернет

Всичко, което описахме — е напълно работещо. А какво ще кажем за имиджа? Всеки хипстър-хакер-крекер с акне ще се подиграе на онзи, който върти ръчката и натиска бутона, вместо да управлява със смартфон! Въртенето на ръчката — не е „модерно“. А да пляскаш с пръст по смартфона, стигайки до кръв — е, ето го, пикът на желанията на хипстера-хакера-крекера (никога не можах да различа всички тях — така че ако сбърках, извинете).

Но нека бъдем снизходителни към споменатите личности. Управлението чрез интернет има и реални предимства. Първо, това е визуализация. Има куп приложения за всички платформи, които позволяват с няколко клика да създадем напълно функционална контролна панел за нашия контролер-карлсон. На второ място, можем да наблюдаваме дистанционно влажността в помещението. И трето, можем да видим не само дали вентилаторът работи — върти ли се или не, но и какъв праг на влажност е зададен. И дали вентилаторът е включен автоматично или ръчно. Всъщност, всичко, което пожелаете.

Разбира се, за един вентилатор е много чест — толкова внимание. Но това е само пример.

И така, за свързване с интернет ще използваме технологията MQTT и съответния протокол.
За да използваме тази технология, имаме нужда от MQTT-брокер. Това е специален сървър, който обслужва MQTT-клиентите, например ShIoTIny и вашия смартфон.

Същността на технологията MQTT е, че всеки от клиентите публикува на MQTT-брокера (сървъра) произволни данни под определено име (наречено топик в терминологията MQTT). Други клиенти могат да се абонират за произволни данни по тяхното име (топик) и да получават новопубликуваните данни. Тоест, целият обмен на данни става по принципа клиент-брокер-клиент.

Аз няма да задълбавам в подробностите. В интернет има много статии и уроци по това как работи MQTT и какви програми има за създаване на контролни панели. Просто ще покажа как да приемаме и публикуваме данни чрез ShIoTiny.

Като брокер използвах www.cloudmqtt.com, но принципът навсякъде е един и същ.

И така, ще приемем, че сте се регистрирали на MQTT-брокера. В общия случай, брокерът ще ви издаде (или ще изиска да измислите) потребителско име и парола (за авторизация), както и порт за свързване. Свържете ShIoTiny к MQTT брокера по два начина — стандартно свързване и чрез TLS (SSL).

Всички тези параметри в ShIoTiny се въвеждат на раздела Нетворкинг, подраздел MQTT Connection to server.

ShIoTiny: вентилация на мокро помещение (примерен проект)

Ако вашият MQTT-брокер не изисква авторизация — не въвеждайте потребителско име и парола (оставете тези полета празни).

Параметър MQTT topic prefix изисква отделно обяснение.

Префиксът на MQTT параметрите — това е стринг, добавян към името на темата (топик) при публикуване и абониране на MQTT брокера. За да настроите MQTT префикс за вашия контролер, просто трябва да го въведете в полето за въвеждане «Префикс на темата MQTT» («MQTT topic prefix»). Префиксът винаги започва със слеш («/»)! Ако не въведете слеш в полето за въвеждане — той ще бъде добавен автоматично. В префикса не могат да се използват символи «#» и «+». Няма други ограничения.

Например, ако публикувате параметъра «статус» (или се абонирате за него), а вашият префикс е зададен като «/shiotiny/», то на брокера този параметър ще бъде публикуван под името «/shiotiny/status». Ако имате зададен празен префикс, то всички параметри на брокера ще започват със слеш («/»): «статус» ще се публикува като «/status».

И така, предполагаме, че сте се регистрирали на MQTT-брокера и сте получили потребителско име, парола и порт. След това сте попълнили тези параметри на раздела Нетворкинг, подраздел MQTT Connection to server на контролера ShIoTiny.

Предполагаме, че префиксът е зададен на «/room/».

Нека започнем с публикуването на състоянието на всички ключови параметри: релета Realay1, състоянието на ръчния превключвател, състоянието на автоматичния превключвател и, накрая, праговото и текущото ниво на влажност. И бонус — температурата в помещението. Как да го направите, вижте на рисунка.

ShIoTiny: вентилация на мокро помещение (примерен проект)

Както виждаме, разликата от предишния вариант — само възлите «MQTT Publish». С отчитане на префикса, се публикуват следните параметри:
ShIoTiny: вентилация на мокро помещение (примерен проект)

Както виждаме, всичкото състояние на системата е пред нас!

Но искаме не само да виждаме, а и да управляваме. Какво да правим? Много просто. Ще се откажем от задаването на праговото ниво на влажност чрез ADC и променлив резистор и ще задаваме това прагово ниво на влажност пряко от смартфона! MQTT Премахваме възела ADC от схемата и добавяме там три нови възела:

ShIoTiny: вентилация на мокро помещение (примерен проект)

FLASH store FLASH restore, MQTT describe и Функцията на възела.

е очевидна: той получава параметъра Функцията на възела (прагово ниво на влажност) от /room/trigHset MQTT брокера . Но какво прави той с данните нататък? Просто ги предава на възела. FLASH restore, който от своя страна запазва тези данни в енергонезависима памет под името trigH. След това, възелът MQTT describe извлича от енергонезависимата памет данни под името trigH и какво се случва по-нататък вече знаем.

Защо тези сложности? Защо не може веднага да се предадат получените данни на входа на компаратора?

Както казваше другарят Ш. Холмс — това е елементарно! Никой не гарантира, че след включването на вашето устройство, то ще се свърже с MQTT брокера. А влажността трябва да се измерва. И вентилаторът трябва да се включва. Но без информация за праговото ниво на влажност, това е невъзможно! Затова нашето устройство при включването извлича предварително запомнено прагово ниво на влажност от енергонезависимата памет и го използва за вземане на решения. А когато се установи връзка с MQTT брокера и някой публикува нова стойност /room/trigHset, тогава ще се използва тази нова стойност.

След това можете да измисляте каквото искате. Например, освен влажността, да въведете и наблюдение на температурата. Или да добавите „умно“ управление на осветлението (имаме още неупотребени две реле и два входа). Всичко е в ръцете ви!

Заключение

Ето, прегледахме няколко примера за реализация на най-простия по същество контролер на базата на ShIoTiny. Може би това ще бъде полезно на някого.

Както винаги, предложения, пожелания, въпроси, печатни грешки и т.н. — на имейл: shiotiny@yandex.ru

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster