Автоматика для пивоварни BeerDuino на базе arduino mega


Последнее обновление 2 января 2022

Сегодня наблюдается рост интереса пользователей к внедрению в домах и квартирах если не полноценных систем «умного дома», то некоторых элементов Home Automation (домашней автоматизации).

В связи с этим производители ведут разработки и наращивают выпуск систем различной сложности – от полноценных коробочных решений с использованием ИИ, до комплектов на базе микроконтроллеров, позволяющих быстро решать прикладные задачи различной сложности.

Что такое Arduino

Arduino — это платформа для добавления и программирования электронных устройств, с типами управления: ручной, полуавтоматический и автоматический. Платформа представляет собой некий конструктор, с прописанными правилами взаимодействия элементов между собой. Система открытая, поэтому каждый заинтересованный производитель вносит лепту в развитие Arduino.

Функции стандартного умного дома:

  • сбор информации с помощью датчиков;
  • анализ данных и принятие решения, посредством программируемого микроконтроллера;
  • реализация принятых решений с помощью подаваемых команд, на различные подключенные в систему устройства.

Конструктор Arduino хорош тем, что в его системе можно использовать любые элементы умного дома, от разных производителей. Эта возможность позволяет платформе не быть ограниченной лишь одной экосистемой умного дома, а подбирать любые компоненты электроники, для реализации решения собственных задач.

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

Полезная информация! Arduino – итальянская компания, производящая и разрабатывающая компоненты ПО, для реальных и не сложных систем Smart Home, которые ориентированы на любого человека, заинтересовавшегося в этом вопросе. Архитектура полностью открыта, поэтому сторонние разработчики (преимущественно из Китая) уже успели полностью скопировать, и выпускают собственные альтернативные элементы системы, и ПО для них.

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


Набор умного дома Arduino

Составление проекта на Arduino

Процесс создания и настройки «умного дома» Arduino покажем на примере системы, в которую будут заложены следующие функции:

  • мониторинг температуры на улице и в помещении;
  • отслеживание состояния окна (открыто/закрыто);
  • мониторинг погодных условий (ясно/дождь);
  • генерация звукового сигнала при срабатывании датчика движения, если активирована функция сигнализации.

Систему настроим таким образом, чтобы данные можно было просматривать посредством специального приложения, а также веб-браузера, то есть пользователь сможет сделать это из любого места, где есть доступ в интернет.

Используемые сокращения:

  1. «GND» — заземление.
  2. «VCC» — питание.
  3. «PIR» — датчик движения.

Необходимые компоненты для изготовления системы «умного дома»

Для системы «умного дома» Arduino потребуется следующее:

  • микропроцессорная плата Arduino;
  • модуль Ethernet ENC28J60;
  • два температурных датчика марки DS18B20;
  • микрофон;
  • датчик дождя и снега;
  • датчик движения;
  • переключатель язычковый;
  • реле;
  • резистор сопротивлением 4,7 кОм;
  • кабель «витая пара»;
  • кабель Ethernet.

Стоимость всех компонентов составляет примерно 90 долларов.


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

Проектирование умного дома Arduino

Умного дома «на все случаи жизни» не существует. Поэтому, его проектирование начинается с определения поставленных задач, выбора и размещения основного узла Arduino, а затем и остальных элементов. На конечном этапе связывается и дорабатывается функционал, с помощью программирования.

На базе Ардуино можно создать множество проектов, а затем скомпоновать их в единую систему. Среди таких:

  1. Контроль влажности в цоколе.
  2. Автоматическое включение конвекторов, при падении температуры в доме ниже допустимой в двух возможных вариантах – при наличии и отсутствии человека в комнате.
  3. Включение освещения на улице в сумерки.
  4. Отправка сообщений об изменениях каждого детектируемого состояния.

В качестве примера можно рассмотреть проектирование автоматики одноэтажного дома с двумя комнатами, подвальным помещением под хранение овощей. В комплекс входит семь зон: прихожая, душевая комната, кухня, крыльцо, спальня, столовая, подвал.

При составлении пошагового плана проектирования учитываем следующее:

  1. Крыльцо. При приближении владельца к дому ночью, включится освещение. Также следует учесть обратное – выходя из дома ночью, тоже надо включать освещение.
  2. Прихожая. При детектировании движения и в сумерки включать свет. В темное время необходимо, чтобы загорался приглушенный свет лампочки.
  3. Подвал на улице. При приближении хозяина, в темное время суток, должна загораться лампа возле дверцы подвала. Открывая дверь, загорается свет внутри, и выключается в том случае, когда человек покидает здание. При выходе, включается освещение на крыльце, а по мере отхождения от подвального помещения, выключается возле дверцы. В подвале установлен контроль влажности и при достижении критической температуры, включаются несколько вентиляторов для улучшения циркуляции воздуха.
  4. Душевая комната. В ней установлен бойлер. Если человек присутствует в доме, бойлер включает нагрев воды. Автоматика выключается, когда максимальная температура нагрева достигнута. При входе в туалет, включается вытяжка и свет.
  5. Кухня. Включение основного освещения ручное. При длительном отсутствии хозяина дома на кухне, свет выключается автоматически. Во время приготовления еды автоматически включается вытяжка.
  6. Столовая. Управление светом происходит по аналогии с кухней. Присутствуя на кухне, есть возможность дать голосовую команду ассистенту умной колонки, чтобы тот запустил музыку.
  7. Спальная комната. Включение освещение происходит вручную. Но есть автоматическое выключение, если в комнате долгое время отсутствует человек. Дополнительно, нужно выключать освещение по хлопку.

По всему дому расставлены конвекторы. Необходим автоматический контроль поддерживаемой температуры в доме в двух режимах: когда человек есть в доме и вовремя его отсутствия. В первом варианте, температура должна опускаться не ниже 20 градусов и подниматься не выше 22. Во втором, температура дома должна опускаться не ниже 12 градусов.

Проект готов, осталось заняться его реализацией.

Плюсы и минусы системы

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

Преимущества умного дома Arduino:

  1. Использование компонентов других производителей с контроллером Arduino.
  2. Создание собственных программ умного дома, так как исходных код проекта открыт.
  3. Язык программирования простой, мануалов в сети для него много, разобраться сможет даже начинающий.
  4. Простой проект делается за один час практики с помощью дефолтных библиотек, разработанных для: считывания сигналов кнопок, вывода информации на ЖК-дисплеи или семи сегментные индикаторы и так далее.
  5. Запитать, посылать команды и сообщения, программировать, или перенести готовые программные решения в Arduino, можно с помощью USB-кабеля.

Недостатки:

  1. Среда разработки Arduino IDE – это построенная на Java ппрограма, в которую входит: редактор кода, компилятор, передача прошивки в плату. По сравнению с современными решениями на 2022 год – это худшая среда разработки (в том виде, в котором она подается). Даже когда вы перейдете в другую среду разработки, IDE вам придется оставить для прошивки.
  2. Малое количество флэш-памяти для создания программ.
  3. Загрузчик нужно прошивать для каждого шилда микроконтроллера, чтобы закончить проект. Его размер – 2 Кб.
  4. Пустой проект занимает 466 байт на Arduino UNO и 666 байт в постоянной памяти платы Mega.
  5. Низкая частота процессора.

Питание Arduino Mega 2560

Arduino Mega может получать питание от USB-порта или внешнего источника. Источник питания выбирается автоматически.

Внешнее питание (не по USB) может подаваться от блока питания или батареи. Блок питания подключается к 2.1 мм разъему на плате, который имеет центральный плюсовой вывод. Батарейное питание можно подключать к выводам GND и VIN разъема питания POWER.

Плата может работать от внешнего источника напряжения в диапазоне от 6 до 20 вольт. При напряжении источника питания менее 7 В, на 5 вольтовом выводе может быть меньше 5 В и плата может работать нестабильно. Если напряжение внешнего источника превышает 12 В, регулятор напряжения может перегреться и вывести плату из строя. Рекомендованный диапазон напряжения питания 7-12 вольт.

Модули и решения «умного дома» на Ардуино

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

Существует три основных микроконтроллера в системе:

  • Arduino UNO – средних размеров плата с собственным процессором и памятью. Основа — микроконтроллер ATmega328. В наличии 14 цифровых входов/выходов (6 из них можно использовать как ШИМ выводы), 6 аналоговых входов, кварцевый резонатор 16 МГц, USB-порт (на некоторых платах USB-B), разъем для внутрисхемного программирования, кнопка RESET. Флэш-память – 32 Кб, оперативная память (SRAM) – 2 Кб, энергонезависимая память (EEPROM) – 1 Кб.


Arduino UNO

  • Arduino NANO – плата минимальных габаритов с микроконтроллером ATmega328. Отличие от UNO – компактность, за счет используемого типа контактных площадок – так называемого «гребня из ножек».


Arduino Nano

  • Arduino MEGA – больших размеров плата с микроконтроллером ATMega 2560. Тактовая частота 16 МГц (как и в UNO), цифровых пинов 54 вместо 14, а аналоговых 16, вместо 6. Флэш-память – 256 Кб, SRAM – 8 Кб, EEPROM – 4.


Arduino Mega

Arduino UNO – самая распространённая плата, так как с ней проще работать в плане монтажных работ. Плата NANO меньше в размерах и компактнее – это позволяет разместить ее в любом уголке умного дома. MEGA используется для сложных задач.

Сейчас на рынке представлено 3 поколение плат (R3) Ардуино. Обычно, при покупке платы, в комплект входит обучающий набор для собирания StarterKit, содержащий:

  1. Шаговый двигатель.
  2. Манипулятор управления.
  3. Электросхематическое реле SRD-05VDC-SL-C 5 В.
  4. Беспаечная плата для макета MB-102.
  5. Модуль с картой доступа и и двумя метками.
  6. Звуковой датчик LM393.
  7. Датчик с замером уровня жидкости.
  8. Два простейших устройства отображения цифровой информации.
  9. LCD-дисплей для вывода множества символов.
  10. LED-матрица ТС15-11GWA.
  11. Трехцветный RGB-модуль.
  12. Температурный датчик и измеритель влажности DHT11.
  13. Модуль риал тайм DS1302.
  14. Сервопривод SG-90.
  15. ИК-Пульт ДУ.
  16. Матрица клавиатуры на 16 кнопок.
  17. Микросхема 74HC595N сдвиговый регистр для получения дополнительных выходов.
  18. Основные небольшие компоненты электроники для составления схемы.

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

Сенсоры и датчики

Чтобы контролировать температуру и влажность в доме и в подвальном помещении, потребуется датчик измерения температуры и влажности. В конструкторе умного дома это плата, соединяющая в себе датчики температуры, влажности и LCD дисплей для вывода данных.

Плата дополняется совместимыми датчиками движения или иными PIR-сенсорами, которые определяют присутствие или отсутствие человека в зоне действия, и привязывается через реле к освещению.


Датчик Arduino

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


Газовый датчик Arduino

Реле

Компонент схемы «Реле» соединяет друг с другом электрические цепи с разными параметрами. Реле включает и выключает внешние устройства с помощью размыкания и замыкания электрической цепи, в которой они находятся. С помощью данного модуля, управление освещением происходит также, если бы человек стоял и самостоятельно переключал тумблер.

Реле Arduino

Светодиоды могут указывать состояние, в котором реле находится в данным момент времени. Например, красный – освещение выключено, зеленый – освещение есть. Схема подключение к лампе выглядит так.

Для более крупного проекта лучше применять шину реле, например, восьмиканальный модуль реле 5V.

Контроллер

В качестве контроллера выступает плата Arduino UNO. Для монтажа необходимо знать:

  • описание элементов;

  • распиновку платы;

  • принципиальную схему работы платы;

  • распиновку микроконтролеера ATMega 328.

Программная настройка

Программирование подключенных элементов Ардуино происходит в редакторе IDE. Скачать его можно с официального сайта. Для программирования можно использовать готовые библиотеки.

Или воспользоваться готовым скетч решением Ardublock – графический язык программирования, встраиваемый в IDE. По сути, вам нужно только скачать и установить ПО, а затем использовать блоки для создания схемы.

Arduino Mega 2560 CH340G


Данная плата обладает всеми свойствами классической платы Arduino Mega 2560 Rev3. Основные отличия от оригинала связаны с тем, что для уменьшения стоимости платы применяется USB мост выполнен на бюджетной микросхеме CH340G. Все элементы внешних подключений, в том числе имена портов, на этой плате полностью соответствуют принципиальной схеме оригинальной платы.


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

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

Дистанционное управление «умным» домом

Для подключения платы к интернету, понадобится:

  • Wi-Fi-адаптер, настроенный на прием и передачу сигнала через маршрутизатор;
  • или подключенный через Ethernet кабель Wi-Fi роутер.

Также, есть вариант дистанционного управления по блютуз. Соответственно, к плате должен быть подключен Bluetooth модуль.

Есть несколько вариантов управления умным домом Arduino: с помощью приложения для смартфона или через веб. Рассмотрим каждое подробнее.

Приложения управления

Так как данная система-конструктор – не закрытая экосистема, то и приложений, реализованных для нее очень много. Они отличаются друг от друга не только интерфейсом, но и выполнением различных задач.

Blynk

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

Virtuino

Крутое бесплатное приложение на Android, позволяющее совмещать проекты в одно целое и управлять с помощью Wi-Fi или Bluetooth сразу несколькими платами.

Разрешает создавать визуальные интерфейсы для светодиодов, переключателей, счетчиков, приборов аналоговой схематехники. В нем есть учебные материалы и библиотека знаний о процессе работы с системой.

Bluino Loader – Arduino IDE

Приложение для телефона, представляет собой программную среду для кодирования Arduino. С его помощью можно быстро и легко скомпилировать код в файл, а затем отправить по OTG-переходнику на плату.

Arduino Bluetooth Control

Приложение контролирует контакты Arduino и управляет основными функциями по Блютузу. Но, программа не направлена на удаленное управление, только мониторинг.

RemoteXY: Arduino Control

С помощью приложения пользователь может создать свой собственный интерфейс управления платой. Подключение происходит с помощью Wi-Fi, Блютуз или интернет, через облачный сервер.

Bluetooth Controller 8 Lamp

Созданное с помощью Bluetooth-модулей HC-05, HC-06 и HC-07 приложение, обеспечивает восьмиканальный контроль. Таким способом достигается контроль и регулирование работы Ардуино, в соответствии с каждым из 8 светодиодов.

BT Voice Control for Arduino

Приложение специально заточено под дистанционное управление данными с ультразвукового датчика, подключенного по блютуз через Arduino. Реализуется подключения через модуль HC-05.

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

IoT Wi-Fi контроллер

Приложение с интерфейсом, информирующем о конфигурации каждого входа/выхода в плате Arduino. В утилите можно переключать в реальном времени GPIO и показывать значение АЦП.

Веб-клиент

Управлять удаленно платой умного дома можно, разместив получение и обработку данных умного дома на веб-сервере. Естественно, сервер для умного дома Ардуино нужно создавать самостоятельно.

Для этих целей понадобится Arduino Ethernet Shield – сетевое расширение для пинов Ардуино Уно, позволяющее добавить разъем RJ-45 для подключения к сети.

При удаленном подключении, необходимо обеспечить внешнее питание платы не от USB.

Затем, подключите по USB плату к компьютеру, а по Ethernet плату к роутеру, которой раздает интернет компьютеру. При правильном установлении соединения, вы увидите зеленый свечение на порту.

После этого, нужно использовать библиотеки шилдов Ethernet и в среде разработки IDE написать код для создания сервера и отправки данных на сервер. Пример самодельного сервера неплохо описан в данной инструкции.

Уведомления по SMS

С помощью подключаемой библиотеки GSM в Arduino IDE можно:

  1. Работать с голосовыми вызовами.
  2. Получать и отправлять СМС.
  3. Подключаться к Интернету через GPRS.

Работает схема через специальную плату расширения GSM, содержащую специальный модем.

О создании универсальной сигнализации на Arduino, с отправкой СМС уведомления на смартфон можно узнать из соответствующей видеоинструкции.

Порты ввода/вывода

  • Цифровые входы/выходы: пины 0–53 Логический уровень единицы — 5 В, нуля — 0 В. Максимальный ток выхода — 40 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.
  • ШИМ: пины 2-13 и 44-46 Позволяют выводить 8-битные аналоговые значения в виде ШИМ-сигнала.
  • АЦП: пины A0–A16 16 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 значений). Разрядность АЦП — 10 бит.
  • TWI/I²C: пины 20(SDA) и 21(SCL) Для общения с периферией по синхронному протоколу, через 2 провода. Для работы используйте библиотеку Wire.
  • SPI: пины 50(MISO), 51(MOSI), 52(SCK) и 53(SS). Пины коммутации по интерфейсу SPI (используйте библиотеку SPI).
  • UART:
  • Serial: пины 0(RX) и 1(TX);
  • Serial1: пины 19(RX) и 18(TX);

  • Serial2: пины 17(RX) и 16(TX);
  • Serial3: пины 15(RX) и 14(TX).

Эти выводы используются для получения (RX) и передачи (TX) данных по последовательному интерфейсу. Выводы 0(RX) и 1(TX) соединены с соответствующими выводами микросхемы ATmega16U2, выполняющей роль преобразователя USB-UART.

Обучение азов Arduino

С помощью приложения «Справочник по Arduino 2» можно в течении двух недель освоить материал. Приложение полностью автономно и не требует подключение к интернету. В нем описана такая информация: функции, данные, операторы, библиотеки Arduino.

После освоения азов, можно посетить ресурс Habrahabr, на котором собраны 100 уроков по программированию на Arduino.

Тем, кто привык черпать знания из книг, станет замечательным пособием для теории и практики «Джереми Блум: изучаем Arduino».


Самый популярный учебник по Arduino

В книге приведены основные сведения об аппаратном и программном обеспечении Ардуино. Рассказаны принципы программирования в среде Arduino IDE. Автор книги учит анализу электрических схем и чтению технических заданий. Информация из книги поможет в дальнейшем определится с выбором подходящих деталей для создания умного дома.

Автор приводит примеры работы электродвигателей, датчиков, индикаторов, сервоприводов, всевозможных интерфейсов передачи данных. Книга содержит иллюстрированные комплектующие, монтажные схемы и листинги программ. Самое главное, комплектующие для практики, с которыми работает автор – не дорогой, не сложный и популярный материал для экспериментальных сборок в домашних условиях.

Описание пинов Arduino Mega 2560

Цифровые пины платы Mega

Пины с номерами от 0 до 53 являются цифровыми. Это означает, что вы можете считывать и подавать на них только два вида сигналов: HIGH и LOW. С помощью ШИМ также можно использовать цифровые порты для управления мощностью подключенных устройств.

ПинАдресацияСпециальное назначениеШИМ
00RX (Serial)
11TX (Serial)
22Вход для прерываний 0ШИМ
33Вход для прерываний 1ШИМ
44ШИМ
55ШИМ
66ШИМ
77ШИМ
88ШИМ
99ШИМ
1010ШИМ
1111ШИМ
1212ШИМ
1313Встроенный светодиодШИМ
1414TX (Serial3)
1515RX (Serial3)
1616TX (Serial2)
1717RX (Serial2)
1818TX (Serial1) Вход для прерываний 5
1919RX(Serial1) Вход для прерываний 4
2020I2C SDA Вход для прерываний 3
2121I2C SCL Вход для прерываний 2
22-4322-43
4444ШИМ
4545ШИМ
4646ШИМ
4747
4848
4949
5050MISO
5151MOSI
5252SCK
5353SCL

Аналоговые пины платы

На платформе Mega2560 имеется 16 аналоговых входов, каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В относительно земли, тем не менее имеется возможность изменить верхний предел посредством вывода AREF и функции analogReference().

ПинАдресацияСпециальное назначение
A0A0 или 54
A1A1 или 55
A2A2 или 56
A3A3 или 57
A4A4 или 58TCK
A5A5 или 59TMS
A6A6 или 60TDO
A7A7 или 61TDI
A8A8 или 62PCINT16
A9A9 или 63PCINT17
A10A10 или 64PCINT18
A11A11 или 65PCINT19
A12A12 или 66PCINT20
A13A13 или 67PCINT21
A14A14 или 68PCINT22
A15A15 или 69PCINT23

Дополнительные пины на плате

  • AREF — Опорное напряжение для аналоговых входов. Используется с функцией analogReference().
  • Reset — Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino.

Выводы питания

  • Vin: Входное напряжение платы Arduino при использовании внешнего источника (если отсутствует напряжение 5 вольт на USB-соединении или от другого источника питания). Можно подавать питание на этот вывод, или же, если питание подается на 2.1 мм разъем, то можно с этого вывода получить к питающему входному напряжению.
  • 5V: Напряжение на этих выводах регулируется встроенным в плату регулятором напряжения. Плата может быть запитана либо через 2.1 мм разъем питания (7-12 В), через USB-подключение (5 В), или же через вывод VIN (7-12 В) на плате. Подача питания через выводы 5 В или 3.3 В обходит регулятор и может привести к выходу платы из строя. Так делать не рекомендуется.
  • 3.3V: Напряжение 3.3 вольта формируется при помощи встроенного в плату регулятора. Максимальный ток потребления не должен превышать 50 мА.
  • GND: Выводы земли.
  • IOREF: Этот вывод обеспечивает опорное напряжение, с которым работает микроконтроллер. Для правильной конфигурации внешних плат, можно считывать напряжение с этого вывода и выбирать соответсвующий источник питания или включать преобразователи напряжений для работы с 5 В или 3.3 В.

Поливайте свой сад и оранжерею с Arduino

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

Решением является автоматизация, а ключ Arduino, названный в этом видео Garduino, является ключевым.

Используя специализированные датчики влажности и температуры почвы, Arduino может определить, когда растения нуждаются в поливе, и дозировать воду. Отлично!

GUI для управления с компа

#! /usr/bin/python3 # coding: utf-8 import time import serial import os from tkinter import * from tkinter import ttk from tkinter.ttk import Combobox import glob class Box_create(): def __init__(self, text_lable, list_add, col, row): self.text_lable = text_lable self.list_add = list_add self.col = col self.row = row lbl = Label(window, text=self.text_lable) lbl.grid(column=self.col — 1, row=self.row) self.combo = Combobox(window) self.combo[‘values’] = (self.list_add) self.combo.current(0) self.combo.grid(column=self.col, row=self.row) @property def print_get(self): return self.combo.get() class Button_create(): def __init__(self, text_lable, command, col, row): self.text_lable = text_lable self.command = command self.col = col self.row = row self.button = Button(window) self.button[‘text’] = (self.text_lable) self.button[‘command’] = (self.command) self.button.grid(column=self.col, row=self.row) @property def print_get(self): print(self.button.get()) return self.button.get() ###class lable start class Lable_create(): def __init__(self, text_lable, col, row): self.text_lable = text_lable self.col = col self.row = row self.lable = Label(window) self.lable[‘text’] = (self.text_lable) self.lable.grid(column=self.col, row=self.row) def label_text_configure(self, text_lable): self.text_lable = text_lable self.lable[‘text’] = (self.text_lable) @property def print_get(self): print(self.lable.get()) return self.lable.get() def port_search(): ports = [] if sys.platform.startswith(‘win’): ports = [‘COM%s’ % (i + 1) for i in range(25)] elif sys.platform.startswith(‘linux’): ports = glob.glob(‘/dev/tty[A-Za-z]*’) else: raise EnvironmentError(‘Unsupported platform’) return ports def serial_port_select(): global serial_port_name global serial_port_speed serial_port_name = port_search_box.print_get serial_port_speed = 9600 port_select_label.label_text_configure(serial_port_name) os.system(‘sudo chmod 0666 ‘ + serial_port_name) send_data_to_arduino() def send_data_to_arduino(symb=0): out_label.label_text_configure(‘FAIL’) # symb = str(re.sub(r'[\(\)\[\]\ ,\.rbn_dictvalues;:\’\\]’, «», str(set_mode.values()))) symb = str(set_mode[‘onoff’]) + str(set_mode[‘mode’]) + str(set_mode[‘amode’]) + str(set_mode[‘temp’]) ser = serial.Serial(serial_port_name, serial_port_speed, timeout=5) print(serial_port_name, serial_port_speed) print(‘Отправили:’, symb) symb1=’:’ ser.write(symb.encode()) for i in range(5000): window.update() if str(symb1) in str(ser.readline()): out_label.label_text_configure(‘OK’) print(‘Получили:’, str(ser.readline())) resive_data_from_arduino() break else: out_label.label_text_configure(‘undefined’) def resive_data_from_arduino(): #data: #:001366; ser = serial.Serial(serial_port_name, serial_port_speed, timeout=5) print(serial_port_name, serial_port_speed) symb = str(‘:’) for i in range(50): window.update() if symb in str(ser.readline()): out_label.label_text_configure(‘OK’) print(‘Получили:’, ser.readline()) read_data = re.sub(r'[rbn;:\’\\]’, «», str(ser.readline())) #set_mode_label.label_text_configure(time.strftime(«%Y/%m/%d-%H:%M:%S») + ‘ — ‘ + read_data) read_serial_data_list.append(read_data) read_data_to_file(read_data) # read_serial_data_list_label.label_text_configure(read_serial_data_list[-1]) read_serial_data_list_label.label_text_configure(‘Вкл/Выкл: ‘ + str(read_serial_data_list[-1])[0] + ‘;\nРежим автоматики: ‘ + str(read_serial_data_list[-1])[1] + ‘;\nРежим нагрева: ‘ + str(read_serial_data_list[-1])[2] + ‘;\nТемпература отключения в кубе: ‘ + str(read_serial_data_list[-1])[3:5] + ‘,’ + str(read_serial_data_list[-1])[5]) read_serial_temp_label.label_text_configure(‘Температура в кубе: ‘ + str(read_serial_data_list[-1])[6:8] + ‘,’ + str(read_serial_data_list[-1])[8:10] + ‘;\nТемп до сухопарника: ‘ + str(read_serial_data_list[-1])[10:12] + ‘,’ + str(read_serial_data_list[-1])[12:14] + ‘;\nТемп после сухопарника: ‘ + str(read_serial_data_list[-1])[14:16] + ‘,’ + str(read_serial_data_list[-1])[16] + str(read_serial_data_list[-1])[17]) break else: out_label.label_text_configure(‘Получаем данные’) def read_data_to_file(data_string): read_data_file = open(‘data_string.txt’, ‘a’) read_data_file.write(‘\n’ + time.strftime(«%Y_%m_%d_%H_%M_%S», time.localtime()) + ‘:’ + data_string) read_data_file.close() def run_select_0(): global run run = ‘0’ run_label.label_text_configure(run) window.update() def run_select_1(): global run run = ‘1’ run_label.label_text_configure(run) window.update() def at_func_run(): global run if run == ‘1’: global flag_run if flag_run == 0: flag_run = 1 global time_to_run global start start = time.time() else: if time.time() > start + time_to_run: resive_data_from_arduino() flag_run = 0 from_func_run_label.label_text_configure(run) window.update() else: pass window.update() else: from_func_run_label.label_text_configure(run) window.update() window.update() def run_function_sleep(): pass def add_onoff_to_list(): set_mode.update({‘onoff’: onoff_select_box.print_get}) set_mode_label.label_text_configure(set_mode) def add_mode_to_list(): set_mode.update({‘mode’: mode_select_box.print_get}) set_mode_label.label_text_configure(set_mode) def add_amode_to_list(): set_mode.update({‘amode’: amode_select_box.print_get}) set_mode_label.label_text_configure(set_mode) def add_temp_to_list(): set_mode.update({‘temp’: temp_select_box.print_get}) set_mode_label.label_text_configure(set_mode) #всякая херня скопом global serial_port_name serial_port_name = » read_serial_data_list = [] #in resive_data_from_arduino() append set_mode = {‘onoff’: 1, ‘mode’: 2, ‘amode’: 0, ‘temp’: 987} onoff = [0, 1] mode = [0, 1, 2] temp = [] temp_select = [] run = 0 # относится к запуску по времени функции flag_run = 0 # относится к запуску по времени функции start = 0 # в этой переменной засекаем время запуска time_to_run = 3 # запуск раз в N секунд for i in range(970, 999): # здесь создаем список для выбора конечной температуры в боксе temp.append(i) temp_select.append(i/10) amode_list = [] for i in range(9): amode_list.append(i) print(temp) window = Tk() window.title(«DISTSYS.RU») window.geometry(«850×600») port_select_label = Lable_create(‘/serial/port/select’, 1, 2) out_label = Lable_create(‘output test’, 2, 2) set_mode_label = Lable_create(set_mode, 3, 2) port_search_box = Box_create(‘Serial port’, port_search(), 1, 3) port_search_btn = Button_create(‘Подключиться’, serial_port_select, 2, 3) onoff_select_box = Box_create(‘On/Off’, onoff, 1, 4) onoff_select_btn = Button_create(‘Сохранить’, add_onoff_to_list, 2, 4) mode_select_box = Box_create(‘Режим’, mode, 1, 5) mode_select_btn = Button_create(‘Сохранить’, add_mode_to_list, 2, 5) amode_select_box = Box_create(‘Нагрев’, amode_list, 1, 6) amode_select_btn = Button_create(‘Сохранить’, add_amode_to_list, 2, 6) temp_select_box = Box_create(‘Конечная\nтемпература’, temp_select, 1, 7) temp_select_btn = Button_create(‘Сохранить’, add_temp_to_list, 2, 7) temp_resive_data_btn = Button_create(‘Получить данные’, resive_data_from_arduino, 2, 8) temp_resive_data_btn = Button_create(‘Отправить данные’, send_data_to_arduino, 3, 8) read_serial_data_list_label = Lable_create(‘READ SERIAL DATA LIST’, 1, 10) read_serial_temp_label = Lable_create(‘READ SERIAL DATA LIST TEMPs’, 1, 11) run_label = Lable_create(run, 2, 12) from_func_run_label = Lable_create(run, 3, 12) run_label_info = Lable_create(‘Получение данных’, 1, 13) run_select_btn1 = Button_create(‘включить’, run_select_1, 2, 13) run_select_btn2 = Button_create(‘выключить’, run_select_0, 3, 13) n=0 while n == 0: at_func_run() window.mainloop()

Автоматика

Нужна ли автоматика для самогонного аппарата?

  • Голоса: (0%)
  • Голоса: (0%)
  • Голоса: (0%)
Всего голосов:
Первый голос:
Последний голос:

Эта статья скорей не про автоматику, а про управление ТЭНом. Развитие темы в статье новая автоматика (версия 2).

Я думал что это будет самое простое, однако время показало обратное)))… Хотя наверено даже наоборот, я все усложнил и на практике оказалось что нужно относится к этому проще. Так как это не ратификационная колонна, а просто дистилятор, то нет необходимости поддерживать постоянную температуру, управляя тэном по милисекундам. Секундными включениями тэна можно добиться постоянного, но неравномерного (что с нашем случае не принципиально) потока пара из перегонного куба. /Впоследствии, когда управление тэном осуществляется порядком 200-700 милисекунд на вкл\выкл, по струе пара в сухопарнике видно что процесс идет равномерно, не сравнимо с управлением по секундам. Температура на входе в сухопарник достаточно живо откликается на изменение режима нагрева./

Про ТЭНы — только нержавейные ТЭНы. Ни оцинковку, ни латунь с пищевым покрытием (покрытие слезет после 4-5 перегонки) использовать крайне не рекомендуется. Есть еще медные ТЭНы, но смысла именно в ТЭНах из меди не вижу.

Итак, был заказан контроллер ARDUINO UNO R3, релюхи, светодиоды, набор сопротивлений разного номинала, и датчик температуры DALLAS DS18B20 (по моему так). Всего по 2 штуки, чтобы можно было оперативно заменить. После размышлений как доставить температурный датчик в зону пара в перегонный куб, неожиданно на глаза попался стержень от ручки паркер, он идеально подходил для этой цели: тонкие стенки, с одной стороны он цельный( не надо паять, сминать и тд), подходящий по длине и диаметру. Стержень был схвачен, отпилен со стороны пера и рапотрашен. Для того чтобы избавиться от остатков чернил, стержень был замочен в ацетоне на неделю (просто забыл про него))). Потом вытащил его, протер, после чего он опять валялся неделю. Далее датчик был помещен внутрь стержня и герметизирован силиконовыми прокладками. Форма для запекания из силикона очень выручила, хватило на все не экономя и осталось 70% от нее еще. Дальше стержень был «инсталлирован» )))… Ну не внедрен же)))… в корпус от выпускного клапана через силиконовые прокладки. Можно было конечно заказать у китайцев готовый термометр в герметичном корпусе, но не заказался как то.

Все было собрано, программулина написана, собран из коробки и лампы стенд для испытаний, отработана логика /уж какая была, исходя из моего тогдашнего опыта и представления о процессе/, но опять же спешка, подходила брага, да и дел кучу никто не отменял, найти и купить градусник для измерения реальной температуры не удосужился.

Схема первого варианта автоматики (во втором варианте убрал блок из 5 светодиодов и поставил экран от нокиа5510, купленный на aliexpress, по программке можно запросто разобраться что куда подключено, схема как пример подключения элементов):

После первой же перегонки был заказан электронный градусник и было обнаружено что: 1. Разность в показании градусника и датчика примерно в 2 градуса (так и не определился чему верить), причем инертность самого датчика на остывание достаточно большая, но это не принципиально. 2. Установленный киловатный тэн, в режиме работы 4/6, 4/7 (нагрев, сек/пауза, сек) практически до конца перегонки поддерживает очень плавное повышение температуры, 0.3-0.5 градусов минут за 20-30, при этом процесс не останавливается и идет постоянно. 3. Выявлен косяк с работой китайских реле. Реле от стандартного шилда для ардуины на 10А не подойдут. Было непонятно что происходит, какой то промежуток все работало нормально, потом температура начинала быстро расти и спасало только отключение аппарата. Стало понятно что реле не справляется с возложенной на нее функцией. Контакты залипали и в один прекрасный момент контакты реле просто приварились. Срочно реле была заменена для окончания перегонки на новую, после чего начались поиски более надежного варианта.

Было решено управлять симистором с помощью реле или оптопары. Сначала был установлен небольшой симистор, в последствии он был утерян и по маркировке ничего сказать и посмотреть уже не могу, но он достаточно сильно грелся. После этого был раздобыт монстрячий симистор BTA41-800B (40А по даташиту) и прикрутил его к достаточно большому радиатору. Но и эта связка при работе ТЭНа на полной мощности нагревается, без вентилятора как то страшновато, поставил вентилятор — проблем нет.


Схема:

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

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

Вид автоматики:

Принцип модульности мне показался заманчивым, но в последствии я понял что меня ломает постоянно вытаскивать несколько компонентов, расставлять, соединять их, а после всего все действия производятся в обратном порядке, да и проводов куча — поэтому в след версии все скомпановано в одном корпусе.

Цель: насколько это возможно оптимизировать процесс и устраниться от контроля за ним (очно-визуальным по крайней мере).

Сейчас идея программки (скетча) такая:

  1. вначале цикла делаем запрос температурному датчику, засекаем время обращения по прошествии секунды получаем от него температуру. Это делаю потому что иначе с кнопками траблы получаются, если delay (1000) выставить.
  2. дальше кнопками определяем переменные, которые потом обрабатываются условиями.
  3. и собственно сами условия.

Скетч на этой странице

Строго не судить, я понимаю что можно было сделать красивее, можно было применять функции… но так как я его кучу раз допиливал и писал иногда в автобусе на планшете — так получилось. Коментарии некоторые тоже старые и неактуальные — обещаю разобраться /не сделано — не вижу смысла, новый скетч хорошо комментирован и более функционален/.

К этому моменту проведено достаточно много перегонок и опытным путем было определено, что для отбора голов оптимален режим нагрева (тем же киловатным тэном, нагрев, сек/пауза, сек) 4/7 — это и есть мощность старта перегонки после начала процесса. Далее я определился что две прегонки — это минимальное количество. Соответственно первая перегонка может быть автоматизирована от окончания отбора голов и до достижения заданной, определенной мной температуры. Вторая перегонка по определению дробная, празничная и подлежащая дегустации)))… здесь автоматика лишняя (неправильно думал, вторую перегонку тоже можно автоматизировать и прекратить по достижению 45-50%), но необходимо в ручном режиме влиять на мощность нагрева, не часто, но нужно. Также было бы неплохо оповещать звуком о наполнении очередного поллитра (а то бегай смотри как там))) — это решается достаточно просто, если есть свободные пины на контроллере. В дальнейшем есть еще мысли по модернизации — внедрение веб-сервера для контроля с дивана за процессом, но это попозже)))

Что-то переделать (модернизировать) — сложней чем сделать заново. Установленный ЖК-экран, 4 кнопки, 3 светодиода, бипер, термодатчик и реле отъели все пины на контроллере, оставив только 2 аналоговых. Все это изначально не задумывалось и не планировалось, поэтому получился такой затык… 2 пина конечно хватит для внедрения контроля за наполнением емкости, но не спасет от полной переделки, т.к. есть задумка как это все сделать более компактно и с большим функционалом и комфортом опять же)))

программка для ардуино:

#include #include #include OneWire ds(10); // D7 — Serial clock out (CLK oder SCLK) // D6 — Serial data out (DIN) // D5 — Data/Command select (DC oder D/C) // D4 — LCD chip select (CE oder CS) // D3 — LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); int ReleDevice = 2; //реле подключено ко 2му пину int LedReleDevice = A2; // светодиод индикации работы реле int Beeper = 9; // BEEPER PIN int StartShow = 0; // переменная для перебора светодиодов при старте int LedPin1 = A0; // светодиод кнопки 1 на порту A0 int ButPin1 = 8; // Кнопка 1 на пине 8 int LedPin2 = A1; // светодиод кнопки 2 на порту A1 int ButPin2 = 13; // Кнопка 2 на пине 13 int FlipButMinus = 12; // Кнопка «Качелька минус» int FlipButPlus = 11; // Кнопка «Качелька плюс» int flag_B1 = 0; // флаг состояния кнопки 1 (используется для отслеживания срабатывания кнопки) int flag_B2 = 0; // флаг состояния кнопки 2 (используется для отслеживания срабатывания кнопки) int flag_FlipButMinus = 0; // флаг состояния «Качелька минус» (используется для отслеживания срабатывания кнопки) int flag_FlipButPlus = 0; // флаг состояния «Качелька плюс» (используется для отслеживания срабатывания кнопки) int OnOff = 0; // переменная вкл и выкл режима начального нагрева до 68 град (кнопка 1) int HeadOff = 0; // переменная окончания режима отбора голов и начало нагрева до 78 град (кнопка 2) int BasicModeU = 4; // режим переключения пошагового набора температуры (с помощью качельки) int BasicModeD = 7; // режим переключения пошагового набора температуры (с помощью качельки) int TempUpSlow = 0; // переменная отслеживания режима быстрого/плавного нагрева // начальное соотношение нагрев/пауза unsigned long tD = 7000; // (time down) время отключенного реле в режиме плавного нагрева (mсек) unsigned long tU = 4000; // (time up) время включенного реле в режиме плавного нагрева (mсек) unsigned long tDr = 0; unsigned long tUr = 0; // *** unsigned long AllTime; // переменная для записи времени прошедшего со старта программы unsigned long MemTime; // переменная для записи времени начала события относительно времени прошедшего с начала программы unsigned long AllTempTime; // переменная для записи времени прошедшего со старта программы для опроса DALLAS DS18 (температуры) unsigned long MemTempTime; // переменная для записи времени начала события относительно времени прошедшего с начала программы для опроса DALLAS DS18 (температуры) int flagTemp = 0; // переменная отслеживания опроса датчика температуры int tTempTemp = 0; // временная переменная для записи расчета времени с последнего опроса датчика, не совсем верно, но по коду можно разобраться зачем)))) int Temp = 0; int data[10]; int TempBeepMode_1 = 0; // | переменные для бипера при вкл/откл реле int TempBeepMode_2 = 0; // | int TempBeepMode_3 = 0; // | int TempBeepMode_4 = 0; // | int TempBeepMode_5 = 0; // | int TempBeepMode_6 = 0; // | int TempBeepMode_7 = 0; // | int Temp1 = 87; int Temp2 = 89; int Temp3 = 91; int TempEnd = 96; unsigned long tD1 = 6000; unsigned long tD2 = 5000; unsigned long tD3 = 4000; void setup() { display.begin(); // инициализируем дисплей display.setContrast(60); // устанавливаем контраст LCD display.clearDisplay(); // очищаем экран pinMode(LedPin1, OUTPUT); pinMode(LedPin2, OUTPUT); pinMode(ReleDevice, OUTPUT); pinMode(Beeper, OUTPUT); pinMode(LedReleDevice, OUTPUT); digitalWrite(ReleDevice, 0); digitalWrite(LedReleDevice, 0); Serial.begin(9600); // analogWrite(9, 20); // значение должно находится между 0 и 255 delay(100); // analogWrite(9, 0); delay(50); // analogWrite(9, 20); // значение должно находится между 0 и 255 delay(100); // analogWrite(9, 0); delay(50); // analogWrite(9, 20); // значение должно находится между 0 и 255 delay(100); // analogWrite(9, 0); delay(50); } void BeepFunction(){ analogWrite(9, 20); // +BEEP значение должно находится между 0 и 255 delay(30); analogWrite(9, 0); // -BEEP } void loop() { // *** НАЧАЛО ТЕМПЕРАТУРА if (flagTemp == 0){ byte data[2]; // | если включили основной режим (до 78 град) | ds.reset(); // | измеряем температуру и разблокируем блок | ds.write(0xCC); // | 5ти светодиодов | ds.write(0x44); flagTemp = 1; // выставляем флаг на пропуск этого блока, пока не пройдет 1000 мс MemTempTime = millis(); // засекаем время }else{ AllTempTime = millis(); // tTempTemp = AllTempTime — MemTempTime; if (tTempTemp < 1000){ flagTemp = 1; }else{ flagTemp = 0; ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); Temp = (data[1]<<8)+data[0]; Temp = Temp>>4; } } // *** КОНЕЦ ТЕМПЕРАТУРЫ // *** НАЧИЛО КНОПКИ // кнопка 1 (OnOff) if (digitalRead(ButPin1) == HIGH && flag_B1 == 0) { digitalWrite(LedPin1, !digitalRead(LedPin1)); //изменяем состояние LED1 flag_B1 = 1; //ставим флаг нажатия кнопки BeepFunction(); if(OnOff == 0) { // OnOff = 1 — это постоянно включенное реле OnOff = 1; TempUpSlow = 0; }else if(OnOff == 1){ // OnOff = 2 — это режим плавного нагрева вкл./выкл. (tD; tU) OnOff = 2; TempUpSlow = 0; }else{ OnOff = 0; HeadOff = 0; TempUpSlow = 1; digitalWrite(LedPin1, 0); digitalWrite(LedPin2, 0); } } if(digitalRead(ButPin1) == LOW && flag_B1 == 1) { flag_B1 = 0; } // End кнопка 1 // кнопка 2 (HeadOff) if(digitalRead(ButPin2) == HIGH && flag_B2 == 0 && OnOff != 0) { digitalWrite(LedPin2, !digitalRead(LedPin2)); flag_B2 = 1; BeepFunction(); if(OnOff != 0 && HeadOff == 0){ HeadOff = 1; }else if(OnOff != 0 && HeadOff == 1){ HeadOff = 2; }else{ HeadOff = 0; } } if(digitalRead(ButPin2) == LOW && flag_B2 == 1) { flag_B2 = 0; } // End кнопка 2 // качелька ПЛЮС if(digitalRead(FlipButPlus) == HIGH && flag_FlipButPlus == 0 && OnOff != 0) { flag_FlipButPlus = 1; if(BasicModeU != 20 && HeadOff == 0){ BasicModeU = BasicModeU+1; TempUpSlow = 0; tU = (BasicModeU*1000); BeepFunction(); }else if(BasicModeU == 20 && HeadOff == 0){ BasicModeU = 20; TempUpSlow = 0; BeepFunction(); }else if(BasicModeD != 20 && HeadOff == 1){ BasicModeD = BasicModeD+1; TempUpSlow = 0; tD = (BasicModeD*1000); BeepFunction(); }else if(BasicModeD == 20 && HeadOff == 1){ BasicModeD = 20; TempUpSlow = 0; BeepFunction(); } } if(digitalRead(ButPin2) == LOW && flag_FlipButPlus == 1) { flag_FlipButPlus = 0; } // End качелька ПЛЮС // качелька МИНУС if(digitalRead(FlipButMinus) == HIGH && flag_FlipButMinus == 0 && OnOff != 0) { flag_FlipButMinus = 1; if(BasicModeU != 1 && HeadOff == 0){ BasicModeU = BasicModeU-1; TempUpSlow = 0; tU = (BasicModeU*1000); BeepFunction(); }else if(BasicModeD == 1 && HeadOff == 0){ BasicModeU = 1; TempUpSlow = 0; BeepFunction(); } if(BasicModeD != 1 && HeadOff == 1){ BasicModeD = BasicModeD-1; TempUpSlow = 0; tD = (BasicModeD*1000); BeepFunction(); }else if(BasicModeD == 1 && HeadOff == 1){ BasicModeD = 1; TempUpSlow = 0; BeepFunction(); } } if(digitalRead(ButPin2) == LOW && flag_FlipButMinus == 1) { flag_FlipButMinus = 0; } // End качелька МИНУС // BODY if(OnOff != 0 && HeadOff == 2 && Temp >= Temp1 && Temp < Temp2){ tD = tD1; }else if (OnOff != 0 && HeadOff == 2 && Temp >= Temp2 && Temp < Temp3){ tD = tD2; }else if (OnOff != 0 && HeadOff == 2 && Temp >= Temp3 && Temp < TempEnd){ tD = tD3; }else if (OnOff != 0 && HeadOff == 2 && Temp == TempEnd){ OnOff = 0; HeadOff = 0; digitalWrite(LedPin1, 0); digitalWrite(LedPin2, 0); TempUpSlow = 0; digitalWrite(ReleDevice, 0); digitalWrite(LedReleDevice, 0); } if (OnOff == 0 && Temp > Temp1){ BeepFunction(); delay(1500); } else if (OnOff == 1) { // нажимаем кнопку OnOff 1 раз — постоянный нагрев (OnOff = 1) digitalWrite(ReleDevice, 1); digitalWrite(LedReleDevice, 1); //########################################### } else if(OnOff == 2) { // нажимаем кнопку OnOff 2 раза — плавный-регулируемый нагрев (OnOff = 2) //########################################### if (HeadOff == 2){ digitalWrite(LedPin2, !digitalRead(LedPin2)); } if (TempUpSlow == 0){ //цикл вкл\выкл не начался TempUpSlow = 1; // говорим что запустили плавный режим MemTime = millis(); // засекаем время digitalWrite(ReleDevice, 0); digitalWrite(LedReleDevice, 0); //########################################### }else{ AllTime = millis(); // if(tD > AllTime-MemTime){ tUr = 0; tDr = AllTime-MemTime; digitalWrite(LedPin1, !digitalRead(LedPin1)); // моргаем светодиодом первой кнопки digitalWrite(ReleDevice, 0); // выключаем реле digitalWrite(LedReleDevice, 0); // выключаем светодиод индикации работы реле //########################################### }else if(tU > AllTime-MemTime-tD){ tDr = 0; tUr = AllTime-MemTime-tD; digitalWrite(LedPin1, !digitalRead(LedPin1)); digitalWrite(ReleDevice, 1); digitalWrite(LedReleDevice, 1); //########################################### }else{ TempUpSlow = 0; digitalWrite(ReleDevice, 0); digitalWrite(LedReleDevice, 0); } } } // END BODY display.clearDisplay(); display.setTextSize(1); display.print(«Temp = «); display.println(Temp); display.drawLine(0, 11, 84, 11, BLACK); display.println(» «); display.print(«U> «); if (tU/1000 < 10){ display.print(» «); display.print(tU/1000); display.print(» | «); display.println(tUr); }else{ display.print(tU/1000); display.print(» | «); display.println(tUr); } display.print(«D> «); if (tD/1000 < 10){ display.print(» «); display.print(tD/1000); display.print(» | «); display.println(tDr); }else{ display.print(tD/1000); display.print(» | «); display.println(tDr); } display.drawLine(0, 35, 84, 35, BLACK); display.println(» «); if (HeadOff == 0 && OnOff == 0){ display.println(» DISTSYS.RU «); }else if (OnOff != 0 && HeadOff == 0){ display.println(«EDIT UP Time»); }else if (OnOff != 0 && HeadOff == 1){ display.println(«EDIT DOWN Time»); }else if (OnOff != 0 && HeadOff == 2){ display.println(«AUTOMATIC MODE»); } display.display(); delay(100); } void set_text(int x,int y,String text,int color){ display.setTextColor(color); display.setCursor(x,y); display.println(text); display.display(); }

На этом с данной верстей закончено, собрана версия 2, о ней в другой статье, а этот » прототип» разобран.

Arduino как пульт для гаражных ворот

Нужно быстро припарковать машину, но боится дождя? Вам нужен пульт от гаражных ворот, а Arduino — это микроконтроллер, к которому можно обратиться. Для гаражных ворот Arduino с дистанционным управлением вам, конечно, понадобятся уже установленные механические компоненты… переключение стандартной гаражной двери на автоматическую — это не просто случай подключения Arduino! Доступны различные варианты, но RFID, по-видимому, является наиболее беспрепятственным предложением, когда дверь открывается, когда рядом находится правильная метка:

Между тем, вот пример, который активируется с помощью клавиатуры:

Основные принципы системы Tasmota

Tasmota – это весьма продвинутое программное обеспечение (прошивка) с открытым исходным кодом, которое может работать на любых «умных» (smart) домашних устройствах, которые используют ESP Wi-Fi чип. Оно обеспечивает локальное управление домашними устройствами с помощью таких протоколов как MQTT (пример использования данного протокола вместе с Raspberry Pi вы можете посмотреть в этой статье), HTTP, последовательный порт связи или WEB UI. Первоначально Tasmota разрабатывалось как программное обеспечение для устройств, которые можно только включать/выключать, но впоследствии ее разработчики решили расширить функционал системы до управления всеми устройствами, содержащими ESP чип.

Tasmota поставляется вместе с встроенными драйверами для управления многими популярными датчиками и чипами, такими как, например, продукты Tuya/Smart Life или Wemos D1 Mini. Если ваше устройство не относится к таковым, то Tasmota предоставляет возможность управления и другими устройствами. В Tasmota вы можете создать свою собственную конфигурацию и создать свое собственное устройство при помощи создания своего шаблона.

Кроме того, Tasmota сравнительно мало «весит» и легко устанавливается на различные устройства – сделать это можно одним из нескольких способов. К примеру, вы можете использовать Tasmotizer для загрузки прошивки Tasmota в устройство через последовательный порт или USB. Также для этой цели вы можете использовать ESPTool, который представляет собой скрипт на Python и позволяет загружать прошивку (программное обеспечение) в устройства из таких платформ как Mac, Linux и Raspberry Pi. Также вы можете загружать прошивку в устройства «по воздуху» (over the air) используя технологию OTA.

Теперь рассмотрим что полезного для нашего умного дома сможет сделать платформа Tasmota. Прежде всего, она сможет разблокировать ваши умные устройства, позволяя им взаимодействовать с системами и устройствами, для взаимодействия с которыми они не были изначально предназначены. Все это позволяет объединить все ваши умные устройства в вашем доме в единую платформу. Система Tasmota также может быть интегрирована с любыми платформами поддерживающими MQTT (например, Domoticz), Home Assistant, NodeRed, OpenHAB и т.д.

Рейтинг
( 2 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]