Блок с датойБлок с временемБлок с возрастом сайта
Mr.ALB

    Анатолий Беляев (aka Mr.ALB). Персональный сайт

    Да пребудут с вами Силы СВЕТА!

     

    AVR ATTiny13A. Автополив

    Автополив комнатных растений

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


    Описание

    Озаботился сделать себе автомат полива цветов и прежде чем делать свою разработку, решил поискать что-то подобное в интернете. Мои поиски привели на разные проекты, но один мне очень понравился своей простотой и удобством настройки. Ещё одно преимущество, что данный автомат собран не на платформе Ардуино, а на маленьком микроконтроллере ATTiny13A. Купил как-то 5 шт. на АлиЭкспрессе, ещё по средней цене, хотел маленькие проекты попробовать сделать на этом микроконтроллере. Поэтому данный проект мой первый опыт в программировании и использовании ATTiny13A.

    Автомат для полива комнатных растений. Видео

    Продолжительность видео 12:06 [мм:сс]
    . Ссылка: #1


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

    Программировал ATTiny13A с помощью USBasp программатора, покупал его для ремонта тестера компонентов LCR-T4, через программу AVRDUDE_PROG_v3.3. Попутно замечу, что на программаторе USBasp установил перемычку JP3, тогда частота программирования программатора уменьшается и он более стабильно считывает и программирует данные на микроконтроллеры.

    USBasp программатор
    Pic 1. USBasp программатор

    ATTiny13A у меня в корпусе DIP-8, поэтому на АлиЭкспрессе купил небольшую платку с панелькой. Платка похожа на Digispark и стоит около 28...36 P, к её контактам как раз подходит колодка с 6-ю пинами программатора.

    Плата для программирования <i>ATTiny13A</i>
    Pic 2. Плата для программирования ATTiny13A

    Можно сделать свою плату, собственно нужна всего лишь панелька под DIP-8 и 6 контактный штырьковый разъём, для подключения программатора. Используются контакты 6(MISO), 7(SCK), 1(RESET), 8(VCC), 5(MOSI), 4(GND). Между контактами 1(RESET) и 8(VCC) запаять резистор на 10 кОм и между 8(VCC) и 4(GND) установить конденсатор на 10 мкФ.

    Контакты <i>ATTiny13A</i> и их назначение
    Pic 3. Контакты ATTiny13A и их назначение

    Фьюзы не менял, использовал заводские.

    Фьюзы при программировании<i>ATTiny13A</i>
    Pic 4. Фьюзы при программированииATTiny13A

    Схема

    Моя схема несколько отличается от схемы автора проекта. Отличие небольшое. Добавил RC фильтр по питанию, так как от работы мотора идут наводки на микроконтроллер. Подключение насоса и самого ATTiny13A разделены цепочкой C1, C2, R1, C3, C4. Ещё одно небольшое отличие в резисторе R7. Считаю, что этот резистор необходим.

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

    Схема электрическая принципиальная<br>Мотор насоса на питание от 3 В
    Pic 5. Схема электрическая принципиальная
    Мотор насоса на питание от 3 В

    Если мотор насоса расчитан на работу от 5...6 Вольт, как у меня, то для большей эффективности использую DC-DC преобразователь на необходимое напряжение. Иначе насос с трудом проталкивает воду по маленьким трубочкам. Преобразователь любой подходящий. У меня самодельный на базе микросхемы MT3608, есть такие же покупные. На схеме не показан модуль зарядки аккумулятора, он подключается параллельно контактам батареи.

    Ещё одно дополнение, на мой взгляд повышающее удобство использования устройства, кнопка SB2 - RESET/Ручной полив. С помощью этой кнопки происходит перезагрузка программы в начальное состояние. Если необходимо сделать настройку программы, то можно не выключать устройство и ждать когда разрядятся конденсаторы C1-C4, а можно предварительно нажать на кнопку SB1 и, удерживая её, кратковременно нажать на кнопку SB2 – программа перейдёт в режим настройки и светодиод PROG будет работать, указывая на режим выбора. Так же при необходимости ручного принудительного полива, достаточно кратковременно нажать на кнопку SB2 и произойдёт переход программы в начальное состояние и включится работа насоса по поливу растения. Можно несколько раз поливать растение до необходимой начальной влажности почвы, а дальше программа будет поливать растение уже по заданным параметрам.

    Схема электрическая принципиальная<br>Мотор насоса на питание от 5...6 В
    Pic 6. Схема электрическая принципиальная
    Мотор насоса на питание от 5...6 В

    Описание программы

    Программа имеет два режима:

    1. Установка значений интервала и продолжительности полива;
    2. Работа по поливу.

    При включении питания устройства (или при кратковременном нажатаии на кнопку SB2) удерживайте кнопку SB1, тогда программа переходит в режим 1 – настройки параметров полива. Светодиод HL1 начинает мигать один раз, два раза, три раза, что означает интервал полива в днях соответственно. Если вы выбираете, к примеру, интервал полива через два дня, то после мигания светодиода два раза отпустите кнопку. Значение интервала равное два дня будет записано в память.

    Далее светодиод HL1 гаснет и включается сигнал на подачу воды. Включаются светодиод HL2 и мотор насоса и продолжается их работа до тех пор, пока не будет снова нажата кнопка SB1. После этого подача воды прекратится и продолжительность полива будет записана в память микроконтроллера. Завершение записи в память сигнализируется многократным промаргиванием светодиода HL1.

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

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


    Перечень элементов

    • U1 – Микроконтроллер ATTiny13 / ATTiny13А
    • U2 – Мдуль DC-DC преобразователь повышающий на 5...6 В
    • U3 – Модуль заряда аккумуляторной батареи
    • C1 – Конденсатор электролитический 47...68 мкФ * 10В
    • C2 – Конденсатор керамический планарный 0,1 мкФ
    • C3 – Конденсатор электролитический 470...1000 мкФ * 10В
    • C4 – Конденсатор керамический планарный 0,1 мкФ
    • R1, R6 – Резистор 100 Ом
    • R2, R3, R7 – Резистор 10 кОм
    • R4, R5 – Резистор 5.1 кОм
    • HL1, HL2 – Светодиод красный
    • VD1 – Диод 1N4148, 1N4007
    • VT1 – IRL3803 или подобный
    • M1 – Небольшой водяний насос
    • SA1 – Выключатель (любой)
    • SB1 – Микрокнопка (любая)
    • GB1 – Литий-ионная аккумуляторная батарея +3,7В (номинал)

    Конструкция

    Начальную проверку работоспособности схемы сделал на макетной панеле. В качестве источника питания использовал литий-ионный аккумулятор формата 18650. Для воды использовал контейнер с крышкой на 3,3 литра. В воду положил маленькую таблетку серебра. Трубки и тройники куплены в магазине Живой мир в отделе для аквариумов.

    Автополив. Макет устройства
    Pic 7. Автополив. Макет устройства

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

    Автополив. Макет устройства
    Pic 8. Автополив. Макет устройства

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

    Автополив. Растения для автополива
    Pic 9. Автополив. Растения для автополива

    Появилось время и разработал печатную плату по второй схеме, с использованием преобразователя DC-DC. Вначале плату разрабатывал только с одной кнопкой SB1. Размеры этой платы 56.25 * 23.75 мм.

    Автополив. Плата первого варианта
    Pic 10. Автополив. Плата первого варианта

    Потом понял, что необходимо добавить кнопку SB2. Добавил на плату эту кнопку, но в реальном образце плата была сделана по первому варианту и добавлена небольная монтажная платка с кнопкой SB2. Равзмеры платы уже 72,5 * 23,75 мм. Изготавливал плату по методу ЛУТ. Платы разработаны с видом со стороны объёмных элементов, поэтому зеркалить при печати её не нужно, печатайте сразу как есть, тогда при ЛУТ будет всё как надо.

    Автополив. Плата второго варианта
    Pic 11. Автополив. Плата второго варианта

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

    Автополив. Плата первого варианта с добавленной кнопкой SB2
    Pic 12. Автополив. Плата первого варианта с добавленной кнопкой SB2

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

    Автополив. Плата. Вид со стороны печатных проводников и планарных компонентов
    Pic 13. Автополив. Плата. Вид со стороны печатных проводников и планарных компонентов

    Решил конструкцию сделать в стиле Ардуино – прозрачный корпус из акриловых пластин, а платы собрать в этажерку. Эта конструкция для домашних условий, а для полевых/дачных условий конечно нужно делать в закрытом, защищённом корпусе. Для моей конструкции нужно изготовить две платы-шасси из ABS-ки. Ниже шасси под плату с радиоэлементами.

    Автополив. Шасси под плату
    Pic 14. Автополив. Шасси под плату

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

    Автополив. Шасси под плату
    Pic 15. Автополив. Шасси под плату

    Изготовлены все шасси: под плату и аккумулятор. Использую аккумулятьр от сотового телефона. Удобно, что он плоский и общая конструкция получается более компактной и гармоничной. Между шасси и пластинами корпуса сделал стойки из прозрачной трубочки. Внутри трубочки нарезана резьба М3. Можно было бы напечатать стойки шестигранного сечения, кому интересен такой вариант, то в архив положу файл для FreeCAD-а со стойками. Измените их под свои размеры.

    Автополив. Перед сборкой
    Pic 16. Автополив. Перед сборкой

    Конструкция собрана в единое целое. Сверху и снизу пластины из акрила толщиной 4 мм, лучше бы было из 3 мм. Так как панель управления прозрачная, то хорошо видны светодиоды на плате. Над каждым есть соответствующая надпись. Под толкатели кнопок сделаны отверстия. Толкатели кнопок сделаны из ABS.

    Автополив. Вид на панель управления
    Pic 17. Автополив. Вид на панель управления

    Разъём под штекер насоса установлен на пластине из ABS. Выведен сбоку, так как это более удобно, чем у автора сверху панели управления, на мой взгляд.

    Автополив. Вид разъём насоса
    Pic 18. Автополив. Вид разъём насоса

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

    Автополив. Вид сбоку
    Pic 19. Автополив. Вид сбоку

    Другой вид со стороны разъёма для разядки аккумулятора. Так как нижняя пластина прозрачная, то светодиоды, сигнализирующие об этапах заряда аккумулятора, хорошо видны.

    Автополив. Вид сбоку со стороны разъёма для заряда аккумулятора
    Pic 20. Автополив. Вид сбоку со стороны разъёма для заряда аккумулятора

    Автомат автополива помещён на крышку контейнера с водой, подключен насос и включено питание – автополив в работе.

    Автополив. Автомат в работе
    Pic 21. Автополив. Автомат в работе

    Проверка и доработка

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

    Автор в программе сутки определяет в секундах. Это значение у него равно 86400 секунд, что выводится простым образом через умножение 24 * 60 * 60 секунд.

    Имеющийся систематический набег времени мне как-то не совсем нравится. Но чтобы что-то изменить, то нужны исходники. Благо автор к своему проекту все файлы приложил. Пришлось по исходникам программы, которую автор написал на С в нескольких файлах, всё пересобрать в формате Arduino IDE в файл [.ino].

    После нескольких часов работы по программированию получил следующий результат. Вся программа уложилась в 810 байтов, что просто замечательно, так как у ATTiny13A всего-то в наличии 1024 байта.

    Программирую и загружаю скетч сейчас через среду Arduino IDE. Ниже привожу свои установки. Программой AVRDUDE_PROG_v3.3 в данном случае не пользуюсь. Читал через неё только фьюзы и оставил их без изменения.

      Установки в Arduino IDE:
      
      Меню -> Инструменты:
        Плата:  "ATTiny13"
        BOD:    "BOD 2.7V"
        EEPROM: "EEPROM retained"
        Clock:  "1.2 MHz internal osc."
        Расчёт времени: "Micros desabled"
        Программатор:   "USBasp slow (MicroCore)"
        
      Вначале один раз нужно записать загрузчик
      Меню -> Инструменты -> Записать загрузчик:
        Установятся фьюзы для МК
    
      Заливаю программу:
        Меню -> Скетч -> Загрузить через программатор
        
    

    Провёл ряд измерений набега времени и с помощью Excel определил формулу. Набег идёт по линейной формуле:

    y = 12.3x - 5.3 (1)

    В чём причина этого набега точно не скажу, скорее всего из-за отсутствия кварцевого стабилизатора в данной схеме. Пробовал и от 5 В запитывать и от аккумулятора 3.98 В, набег происходит по формуле (1). Не знаю как у автора, м.б. у меня ATTiny13A какие-то особенные? Как бы там ни было, экстраполировал значения на 24 часа. В секундах получается нужно установить период 68693 вместо 86400, тогда период будет реально 24 часа c минимальным набегом времени, колебания температуры внешней среды и отсутствие кварца всё равно дают неточность в отсчёте времени.

    Если кто-то хочет повторить мою программу, то все необходимые файлы в общем архиве. Там же и лист Excel с расчётами. Здесь сам скетч публиковать не буду, и так страница большая получилась. Отмечу только, что у меня программа несколько другая. К примеру, все пины при инициализации устанавливаются в режим INPUT, а в момент когда нужно выдать управляющий сигнал – соответствующий пин переводится в режим OUTPUT. После завершения сигнала управления пин опять переводится в режим INPUT. Такой приём позволяет экономить энергию аккумулятора. Функция конфигурирования пинов используется Arduino-вская pinMode(). Для режима сна использую библиотеку #include <sleep.h>.

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



    Приложение

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

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

    Спасибо за внимание!

    Анатолий Беляев

    . Mr.ALB

    . Mr.ALB

    . Mr.ALB

    . Mr.ALB
    Предыдущая страница Страница 19 Далее