5 декабря 2015 г.

Автополиватор

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

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

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

В ТЗ я себе поставил следующие задачи:
  • часы реального времени
  • контроль уровня воды в баке
  • контроль температуры воздуха
  • контроль влажности грунта
  • управление внешней подсветкой для увеличения светового интервала в задаваемый промежуток времени
  • настраиваемый интервал времени суток для полива
  • продвинутый алгоритм анализа влажности земли: летом полив вечером, зимой полив утром. При температуре воздуха больше +30С - полив не зависит от вермени дня, но в заданный разрешенный промежуток времени. Настраиваемая продолжительность отсрочки перед поливом, для исключения переувлажнения грунта
  • ручной режим полива: активируется в меню на 3 минуты, после чего система вновь переводится в автоматический режим
  • отображение информации в режиме ожидания: температура воздуха, влажность грунта, текущее время, время оставшееся до проверки датчика влажности или до начала полива, уровень заряда резервного аккумулятора, контроль воды в резервуаре
  • резервное питание от аккумулятора 7А/ч
  • встроенный блок зарядки аккумулятора
  • на будущее: использование Wi-Fi для передачи данных на сервер и управления настройками по сети
За основу я взял демо плату STM32 DISCOVERY, т.к. если сравнивать подходящие для моей задачи микропроцессоры STM32, AVR, PIC. То STM32 безоговорочно выигрывает по своим возможностям и цене.

В процессе разработки научился работать в среде CooCox IDE, изучил как инициализировать периферию микроконтроллера, как работать с датчиком температуры DS18B20 через DMA - т.е. без использования ресурсов кристалла МК, как считывать значения напряжения с АЦП, как выводить информацию, в том числе кириллицей, на 16-ти символьный двухстрочный LCD экран, как выводить нестандартные пользовательские символы на этот экран.

В ходе разработки пришлось разбираться в принципах работы MOSFET (полевых) транзисторов для управления подсветкой и электродвигателем насоса.

Изучая возможность заказа изготовления плат для устройства на производстве в Китае (Российские производители проигрывают или в качестве или в цене), познакомился с сервисами по моделированию плат в 3D или формата Garber (об этом напишу подробнее отдельно).


Правда в итоге все же отказался от идеи заказа плат и в Китае, потому что начался очередной кризис и приходится экономить средства. Решил разводить платы ЛУТом и травить раствором по новому рецепту на основе перекиси водорода, купленной в аптеке, и лимонной кислоты, купленной в продуктовом магазине.

Для управления параметрами полива и для настройки основных параметров системы нужна была какая-то панель с кнопками и экраном. В качестве такой панели почти идеально подошла панель от Xerox PE120, которых у меня имелось несколько штук от не выдержавших офисной жизни МФУ. Кстати, как показала практика использования этих МФУ - очень не надежная модель. В течении года у 10 из 12 устройств сгорел блок питания.

Из этой панели была безжалостно вырезана средняя часть с экраном, кнопками навигации по меню и кнопками START, STOP. В программе SprintLayout развел плату для панели управления, на которой развел дорожки под кнопки и сделал выводы на LCD экран (на фото выше 3D вид этой платы).

В качестве корпуса под руку подвернулся ИБП АРС 500.

Он удовлетворял большинству требований:
  • возможность размещения в корпусе аккумулытора
  • достаточного места для импульсного БП, блока зарядки аккумулятора, платы с МК и платы с обвязкой
  • местом для установки панели управления
  • наличием разъема для питания 220В
  • наличием разъемов для подключения насоса, подсветки и датчиков
По хорошему, конечно, можно было бы сделать отдельную плату с импульсным блоком питания и схемой зарядки аккумулятора. Все для этого у меня было, но решил при наличии отдельных исправных блоков от старой техники не тратить время и средства на их разработку, а использовать готовые.

В качестве блока питания использовал блок от какого-то принтера hp на 20В и 2.5А, напряжение с которого подается на плату автомата заряда аккумулятора, взятую из промышленного ИБП для сигнализаций БПП-20. С этой платы пришлось выпаять фильтрующий конденсатор 4000х50В, т.к. из-за него плата не влазила в удобное для установки место и кроме того в блоке питания от принтера уже есть большой электролитический кондер.
Блок питания от принтера hp
Плата из БПП-20
В БПП-20 удачно вынесен силовой транзистор и плата с индикаторами на проводах.
Можно разместить в удобном месте на подходящем радиаторе.
В этом БПП-20 в качестве индикации использовались хитрые светодиоды: сдвоеные в одном корпусе красно-зеленые включенные встречно-параллельно и имеющие соответственно только два вывода. Решил вывести их на переднюю панель корпуса и использовать имеющиеся там светодиоды. Правда при этом немного не в тему стали надписи под индикаторами: On battary в АРС показывает режим работы от батареи, а с платой от БПП-20 он показывает в принципе исправность батареи и горит при этом вместе с индикатором сети On Line. Индикатор Overload в АРС показывает что слишком мощная нагрузка подключена к ИБП, а с новой платой стал показывать исправность нагрузочного предохранителя номиналом 3.5А (штатный был на 2А, но я поставил побольше, схема позволяет). Индикатор Replace Battary теперь показывает что батарея вышла из строя или ее отсутствие в корпусе - что в принципе совпадает с функционалом индикатора в АРС.

Продолжение следует...