Долго ли, коротко ли, решено было сделать шайтан-машину для полива растений, которая будет “сама” выращивать представителей флоры. Кавычки тут подразумеваются уместными в силу, на первый (а может и более) взгляд, необъятности задачи автономности подобных устройств (впрочем, любых роботов, начиная от пылесосов, заканчивая андроидами, которые, как известно, неизвестно, думают ли об электроовцах). Вобщем, для первой итерации было задумано дать растниям воду по расписанию, да не из бака куда её предусмотрительно налил пользователь, а прямо из водопровода (следует заметить, это требование, само по себе оказалось, по сложности реализации, сопоставимым с остальными функциями. Но об этом позже). Чтобы присматривать и корректировать поведение машины, был задуман интерфейс. Сначала локальный (дисплей 16х2, да кнопки), а затем удалённый, в браузере (интернет, локальная сеть).   В этой статье рассмотрена история развития материальной части комплекса - исполнительные устройства, аппаратное обеспечение. Были приобретены компоненты в виде ардуины, твердотельных реле, монтажной коробки, розеток, шарового клапана для полива с таймером (таковой оказался первым, в доступе из местного строительного магазина) и прочей мелочёвки, вроде отладочной плашки и проводков. Был приобретён шуруповёрт, которым достаточно быстро, в ходе сборки начинки в монтажной коробке, был засверлен недешевый стол в арендованой квартире. Это, во всехх смыслах, ознаменовало переход от работы головой к работе руками. Было решено, что полностью уходить от работы мозгами не следует и лучше бы думать заранее, да использовать жертвенные подкладки и прочие средства защиты, когда используется ручной инструмент и вообще. Спустя несколько дней от твердотельного реле заработал (по расписанию) фен для сушки волос. Не то, чтобы это был оглушительный успех, но шум от фена присутствовал и я был доволен результатом. Встал вопрос о том, как теперь подключить тот клапан, что уже имелся. Разобравшись с его устройством (шаровый клапан с актуатором, приводящим шар в движение, и микропереключателем, сменяющим состояние в момент полного открытия или закрытия клапана) я вынул из него всю штатную электронику и подключил к своему контроллеру через полевой транзистор. Примерно тут случился поворот судьбы, в ходе которого, помимо прочего, был утерян компьютер с исходниками прошивки. Этого показалось достаточным, чтобы перейти с ардуины на STM32. Была приобретена STM32VL-Discovery и уже на ней был запущен тот шаровый клапан. Это был ещё один момент ликования. Работает мотор, щёлкает микрик, мотор останавливается, вода идёт. После годов работы в офисе с монитором, мышкой, да клавиатурой, эти новые звуки мотора, воды были настоящей музыкой. Потом прошло ещё немало времени, чтобы вновь написать то, что было ранее написано для ардуины, только уже на STM32. По завершению такого портирования наступил новый виток развития. К моменту разработки удалённого интерфейса устройство уже было оформлено в виде печатной платы. Последняя была отрисована в Eagle и был получен первый опыт производства своих плат на заводе. Это был тот ещё опыт. Одним из запомнившихся моментов стал лак паяльной маски, "внезапно" оказавшийся в местах пайки. Пришлось его скоблить ножом, чтобы припаять компоненты. В целом, плата была – без слёз не взглянешь (если понимать в этом деле хоть каплю). Для реализации удалённого управления было решено использовать Raspberry Pi. А связать Pi с STM32 через UART. Писать простенькие сайтики к тому моменту я уже умел, опыт PHP и JS небольшой был. Задачей посложней оказалось работать с последовательным портом как под Linux, так и на STM32. Под Linux для начала были использованы какие-то стандартные средства (типа, cat /dev/tty > dumpfile и echo -e "data" > /dev/tty), плюс на PHP написан парсер самодельных пакетов, идущих с STM32. Так появился первый протокол устройства. Одновременно с этим я узнал, что PHP годится не только для разовой отрисовки сайтов, но и для работы в бесконечном цикле, в стиле демона. Позже для решения этой задачи был написан демон на C. Разумеется, последний работает на порядки быстрей, прямей и весит меньше. Поскольку опыт написания сайтов уже какой-то был, смастерить простейший интерфейс для управления железкой на STM32 теперь было не сложней версии с дисплейчиком 16x2. В этом интерфейсе появились кнопки ВКЛ/ВЫКЛ для ряда твердотельных реле, кнопки Открыть/Закрыть для четырёх клапанов и формочки для четырёх дозаторов удобрений, с длительностью работы оных и кнопкой запуска дозирования. Для визуального контроля результатов работы контроллера была использована веб-камера, подключенная в USB порт Raspberry Pi. Картинки выводились в тот же интерфейс Первыми были опробованы самые дешевые перильстатические насосы из Китая. Два вида. В ходе испытаний они показали себя с не лучшей стороны. Их клинило, дозирование было неравномерным. Следом за ними были опробованы дозаторы японского производителя Welco. Эти устройства оказались значительно более качественными. Настолько, что используются и по сегодняшний день. Меняются только трубки, как расходный материал. Тот шаровый клапан с мотором-актуатором со временем достаточно плотно сросся с контроллером STM32 и в итоге, вкупе с дальномером HC-SR04 получилось устройство, которое стало исправно поставлять чистую воду в систему полива. Клапан открывал подачу воды из водопровода в фильтр обратного осмоса, наполняя буферный (накопительный) бак. Затем, система полива брала воду уже из накопительного бака. Тем временем, в деле были опробованы клапаны соленоидного типа. Самые дешёвые, китайские. Такие, которые повсеместно используются в стиральных машинах. Главными отличительными особенностями клапанов-соленоидов от шаровых стали более высокое потребление электричества (около 0.4А при 12В, пока открыт) и необходимость создавать на входе повышенное давление воды, чтобы происходило их открывание. Вместе с этими клапанами были найдены более дорогие (тоже соленоидные, тоже пластик, нейлон), не менее китайские, так называемые чёрные клапаны.  Они потребляли ещё больше тока (до 2А, 12В), но открывались уже без внешнего давления. Чёрные клапаны ставились, к примеру, на входе из накопительного бака в систему полива. Чтобы получить питательный раствор, системе полива потребовался промежуточный бак, куда сначала наливалась вода, в которую, затем, при помощи дозаторов, примешивались удобрения. Назовём этот бак - микстанк. Таким образом, система полива обзавелась штатным входом из микстанка и штатным выходом в него же. Сначала система полива набирала воду в микстанк, открыв клапан забора воды из буферного бака и клапан возврата воды в микстанк. Затем, клапан забора воды закрывался и открывался клапан забора воды из микстанка и, вода, прокачиваемая насосом через магистраль смешивания удобрений, обогащалась удобрениями, которые дозировались перистальтическими насосами. Первые прототипы включали в себя гибкие шланги, выполняющие функции проводников воды. С появлением дозаторов шланги были заменены на жесткие трубки из ПВХ. Так появилась первая зафиксированная сначала на бумаге, а затем и в первом корпусе система трубопроводов. В этой системе трубопроводов одной из частей оказалась магистраль смешивания удобрений. Это был кусок ПВХ трубки диаметром 20мм, в котором были насверлены отверстия около 5мм и с усилием вставлены соединители для ирригационных трубочек 4/6мм. В месте стыка трубы и переходника была применена эпоксидная смола для герметизации стыка. Вода, подаваемая насосом из микстанка в него же, по замкнутому контуру, проходила через магистраль смешивания. Дозаторы, подключенные в торчащие концы соединителей, подавали в этот поток воды удобрения. Так происходило насыщение раствора жидкими удобрениями. Насос, который использовался на начальных стадиях развития системы полива был самый простой, дешёвый, обязательным было только условие – вход и выход имеют резьбу в пол-дюйма. Он выдавал в лучшем случае 0.3 атмосферы давления на выходе. В ходе экспериментов с поливами выяснилось, что подводить трубочки из системы полива и поливать растения таким образом, без обратной связи по влажности почвы получается не очень качественно. Малейшее засорение, изгиб или различная длина трубок от системы полива к растению приводили к неравномерности полива. Один горшок получал больше воды, чем другой, за равное количество времени работы полива. Было найдено решение в виде компенсированных капельниц, которые используются в системах капельного полива. Это такие устройства, которые пропускают через себя фиксированный объём воды, при условии подачи последней под давлением в заданном диапазоне (типичный диапазон рабочих давлений составляет от 1 до 4 атмосфер). Для обеспечения такого давления используются принципиально иные насосы, нежели тот, который имелся. Потому был приобретён мембранный насос высокого давления. Сначала, тоже самый дешёвый, китайский. Он работал от 12В и потреблял до 5 ампер и при работе шумел и вибрировал так, что невольно, система полива, в числе прочих тестов, стала проходить вибрационные тесты, а соседи - тесты терпимости. Тем не менее, тот насос дал требуемое давление и даже с лихвой – до 5 атмосфер до срабатывания механической отсечки. Отсечка, к слову, регулируемая винтом, но на тот момент я дополнительно взял датчик давления воды и сделал отсечку программную. Не сразу нашлись подходящие. Сначала был датчик из нержавейки, с метрической резьбой, в сантехнику никак не подходящий (сейчас, имея опыт работы с токарным станком, это вообще не выглядит проблемой, а тогда стало серьёзным препятствием). Такие используются в автомобилях. Он был, с применением силы, вкручен в высверленное отверстие сантехнического переходника из мягкого полипропилена и на десятой попытке даже не подтекал. После стального был хромированный, с резьбой на четверть дюйма. Этот ожидаемо стал ржаветь (соли в растворах не жалеют обычное железо). И уже после него, спустя часы поисков вариантов на алиэкспрессе, был найден пластиковый датчик с резьбой на четверть дюйма. Они оказались долговечными. Самый дешевый мембранный насос в плане производительности был слабоват. В виду этого, входы и выходы доступных его вариантов имели максимальный размер резьбы – 3/8 дюйма. Из которых, полезное сечение для прохода воды и того меньше. А трубки ПВХ и детали к ним имели диаметр 20мм и резьбы в пол-дюйма. Насос был однозначно слабоват. В результате были найдены варианты насосов покрупней и среди них выбран с минимальными шумами, тоже мембранный. Стоил он уже в несколько раз дороже. Такие используются, к примеру, в водопроводе домиков на колёсах, или в лодках для откачивания морской воды. Сам насос покрупней, потяжелей и, в соответствии с ценой, выглядит тоже внушительно. Прокачиваемый поток воды с прежних 4-5 поднялся до 10-12 литров в минуту. И насос, действительно, стал работать гораздо тише, с меньшими вибрациями. Уже на первых порах, при работе с шаровыми клапанами, иногда случались проблемы в виде зависаний контроллера. С внедрением мембранного насоса стало наглядным влияние наводок от мощных нагрузок на работу логики. Тогда у меня ещё не было осциллографа, чтобы увидеть это воочию. Но частота зависаний и сбоев стала невыносимой. То о чём я только читал, подозревал и предполагал, стало закономерным. Итак, было решено сделать отдельно контроллер, где будет работать логика устройства вкупе с частью измерительных приборов и, отдельно, систему управления силовой частью – насосами, дозаторами удобрений, клапанами. Силовую систему предполагалось сделать модульной, расширяемой. Чтобы если понадобится изменить количество исполнительных компонентов в аппарате, можно было бы их добавлять/убавлять без переделки схемотехники. Дабы исключить проникновение электрических помех из силовой части в логику, была задумана гальваническая изоляция. Покумекав над требованиями, набросал первую версию силового модуля и новый контроллер.   В первой версии силового модуля для управления нагрузками была неудачно выбрана микросхема L293. Неудачной она оказалась потому, что в её составе использованы биполярные ключи. Это даёт немалое собственное потребление (и, соответственно, тепловыделение) микросхемы в моменты работы нагрузок. Радиаторы, установленные на микросхемах работали на пределе. В следующем варианте схемы были выбраны драйверы L6205PD. Они выполнены на полевых транзисторах и грелись уже существенно меньше. При этом, позволяли нагружать на каждый канал значительно больше тока.  Кроме того, корпус микросхем с окончанием PD в названии микросхемы имеет хорошее теплоотводящее основание, которое позволяет отводить тепло прямо в плату. В результате, в дизайн платы были заложены приличные площади меди как раз для этой функции. Испытания показали удовлетворительные результаты, без использования дополнительных радиаторов, в условиях пассивного охлаждения. Следует заметить, что крепилась плата управления нагрузками внутри пластикового короба, вместе с основным контроллером и Raspberry Pi. Последняя, справедливости ради, в таких условиях, в жаркие дни, в теплице, перегревалась до состояния зависания, в отличие от остальной электроники. Поскольку разделение силовой и логической частей делалось ради снижения влияния помех от мощных нагрузок на логику, то здесь была применена гальваническая развязка. Выполнена она была на ADUM1250. Соответственно, на плате силового драйвера был поставлен I2C-декодер (экспандер) – MCP23017. Рядом с ADUM разместилась сдвоенная оптопара, которая одним каналом делала декодеру сброс и вторым каналом включала/выключала питание на микросхемы драйверов через мощный полевой транзистор. Для питания MCP23017 изначально использовался MINI360, который впоследствии был заменен на LM317. Схема драйвера может работать начиная с около 10 вольт и выше. Потолок не проверял, но оценочно можно смело утверждать 24В, может 36В (теоретически, это разумный предел для LM317). Для L6205 заявлены вообще 50В. На практике вся система проверялась в работе на 12В. На 4 микросхемы L6205, установленных на одной плате, получается 16 каналов управления для исполнительны устройств. Модульность позволяет подключать несколько плат. Для этого необходимо задать разные I2C адреса для MCP23017 при помощи трёх резисторов, предусмотренных на плате. Одиночные L6205 каналы можно сдваивать (согласно аппноту), чтобы получить больше пропускной способности. Именно так и были запитаны чёрные клапаны (наиболее прожорливые), на минимальной конфигурации системы полива, где одной платы управления нагрузками хватает в самый раз.  Что касается основного контроллера, то его крепежные отверстия были расположены так, чтобы можно было механически и электрически соединить его сразу с силовым драйвером, расположив один над другим, с расстоянием между плат в пару сантиметров. Были сомнения, относительно электромагнитных наводок с одной платы на другую, по воздуху. Но на практике они не оправдались (или просто не были зафиксированы в течение нескольких циклов тестов с однолетними растениями). На основной, системный насос, поскольку он имеет приличную инерцию и мощность, в паре-другой сантиметров от мотора был поставлен ультрабыстрый диод в обратной полярности, чтобы гасить обратное напряжение (fly back diode). Насос, ввиду хорошего потребляемого тока, был запитан не напрямую в силовой драйвер, а через полевой транзистор, затвор которого уже подключен к силовому драйверу. На клапанах и дозаторах, подключенных напрямую к L6205PD силового драйвера проводились эксперименты с быстрым (десятки раз в секунду) включением и выключением, без обратных диодов. Ничего не погорело, несмотря на опасения (особенно по части соленоидов клапанов). Поскольку аппарат сам готовит растворы, то одним из самых важных (после датчика уровня воды) приборов для измерений стал кондуктометр (он же, EC-метр, он же TDS-метр). В список измерительной техники так же попал измеритель кислотности (он же pH-метр), датчик давления воды и термометр. Таким был первоначальный и основной список сенсоров, поддерживаемых логикой основного контроллера. Не мудрствуя лукаво, был опробован ряд схем, найденных в поисковике. Самая первая страдала недостаточной повторяемостью (половина собранных модулей почему-то не работала). Вторая схема не заработала в железе вообще. Третья заработала, четвертая была дорогая. Выбор пал на третий вариант, которым стал модуль на таймере 555. Суть проста – измеряем частоту меандра, которая задаётся парой конденсатор плюс сопротивление. Сопротивление – раствор воды с удобрениями. Датчики электропроводности поначалу были сделаны самопальные. Чтобы снизить коррозию электродов, последние были сделаны из позолоченных пинов. Весь датчик был сделан из эпоксидной смолы, что позволило залить сразу в него термодатчик. В роли последнего был выбран DS18B20. Впоследствии эта конструкция заливалась в деталь из ПВХ - переход с трубы 20мм на резьбу пол-дюйма. Это позволяет вкручивать его в остальную гидросистему аппарата. Чтобы снизить скорость налипание ионов удобрений на электрод, была сделана схема управления питанием модуля измерения. Включение производилось программно, перед самим измерением. После чего модуль уходил в спячку. Тут, поначалу, пробовалась схема на CA3420, которая в ходе экспериментов зарекомендовала себя как весьма надёжная и легко повторяемая. На первые аппараты она ставилась весьма уверенно. Причиной отказа от неё стала сложность с экранированием. В итоге, была найдена микросхема LMP91200. Этот кандидат требовал минимальной обвязки, в виде того же АЦП и развязки, что и в варианте выше. В качестве ADC был поставлен ADS1110, для развязки - ADUM1250 и всё сразу заработало. Показания с модуля, при свежем (свежий — имеется в виду новый и не полежавший пару лет на полке. Как  известно, pH сенсоры, которые просто лежат без дела, приходят в  негодность со временем. Возможно, чуть медленней, чем те, которые используются, но всё же становятся непригодными) сенсоре кислотности обладали завидной стабильностью. Питание модуля гальванически развязал недорогими (около доллара за штуку) DC-DC преобразователями, типа 0505, на 1 ватт. Отсутствие развязки по EC модулю на таймере 555 не давали спать спокойно. Кроме того, вода проникала в под эпоксидку и иногда достигала встроенного датчика DS18B20. Это приводило к печальным последствиям в виде ржавчины и почернения проводов датчика температуры. Иногда металл позолоченных пинов съедался вовсе. Помогала их лакировка. Тем не менее, к тому времени в загашниках уже имелся модуль EVAL-0349.  В испытаниях он неплохо себя зарекомендовал. Присутствует изоляция питания и сигнала, достаточная точность измерений, помимо входа для сенсора EC есть и вход для резистивного термодатчика. Но не очень нравилось то, что он в виде отдельного модуля. В очередной итерации схемы и платы контроллера был заменен блок измерения EC со старого (с таймером 555) на примерно тот, который предлагался в EVAL-0349. Добавлена та же ADUM1250 для изоляции сигнала, 0505 по питанию и показания электропроводности воды вместе с её температурой стали электрически отделены от контроллера. Вместе с этим были испробованы относительно дешевые сенсоры EC из Китая. За два цикла испытаний нареканий не обнаружено. По ходу дела был также обнаружен весьма экзотический способ измерения солей в воде - индуктивный. Это когда наматывается катушка, изолированная от воды, а в роли сердечника выступает измеряемая вода. Индуктивность получившейся системы, очевидно, зависит от электропроводности воды-сердечника. Таким образом осуществляется измерение. Такие сенсоры обладают повышенной (в сравнении с традиционными, контактными) долговечностью. На али был обнаружен карманный экземпляр за 70 долларов, однако пределы измерений и точность годятся для морской воды, нежели слабых растворов, применяемых в растениеводстве. Мои мимолётные эксперименты намотать катушку на трубу с водой пока не дали положительных результатов. Скорость, с которой растения потребляют залитый под корень объём жидкости, кроме прочего, зависит от погодных условий (температура, влажность, количество света на листьях). Влажность почвы (или иного субстрата) влияет на состояние корней и, следовательно, также влияет на скорость потребления раствора растением. Перелив – плохо, недолив тоже не очень. Чтобы учитывать этот фактор, было решено добавить датчиков. Чтобы минимизировать переделки платы контроллера и оставить её размеры в разумных пределах, было решено использовать беспроводные датчики влажности. Поначалу были интегрированы Bluetooth датчики Xiaomi. Спустя некоторое время по почте пришла ещё пара этих датчиков, с иной прошивкой. Шаманства с версиями прошивок не оставили равнодушным – было решено сделать самодельные датчики. В очередной версии платы контроллера был добавлен беспроводной трансивер NRF24.  Беспроводные датчики, которые подключались далее, в гальванической изоляции, разумеется, уже не нуждаются. Питание NRF24 и измерительных модулей сделано через полевые транзисторы, чтобы иметь возможность программно отключать измерительную технику. Полезно иметь возможность измерений кислотности при выключенном измерителе солей и наоборот, дабы не происходило влияния одного на другой. Подглядев, как китайцы делают за доллар датчики, в которых сенсором является часть платы (Capacitive soil moisture sensor на алиэкспресс), покрытой лаком, сделал аналогичный сенсор. В качестве контроллера был взят уже знакомый STM32, на 20 пинов, только серия уже F0. В качестве измерителя был взят уже знакомый таймер 555. И теперь сенсор стал не сопротивлением (как в EC измерителе), а ёмкостью. На практике изучая вопрос скорости опустошения получившимся датчиком батарейки CR2032, узнал, что есть версия таймера 555, построенная на полевых транзисторах, что означает меньшее энергопотребление (привет L293 и L6205). Называется LMC555. Помимо этого на плате датчика был добавлен TMP100 – I2C термодатчик. Он был запланирован, чтобы узнавать температуру воздуха вокруг датчика. По правде, в STM32 уже встроен термодатчик. Но я решил, что на испытательных образцах, второй датчик лишним не будет. Также добавлен светодиод, для индикации работы и, возможно, определения освещённости датчика. Первые испытания таких датчиков показали, что генерируемая таймером 555 частота (которая расценивается как влажность субстрата) сильно зависит от температуры почвы/датчика. Справедливости ради, аналогичная ситуация и с датчиками кислотности и электропроводности, где для более корректных считываний значений аналогично применяются алгоритмы температурной компенсации показаний. Именно поэтому, подавляющее большинство датчиков EC уже снабжены термодатчиком. В датчиках от Xiaomi показания выдаются как по влажности субстрата, так и по его насыщенности солями. Подозреваю, что соли измеряются двумя стальными пиптиками на концах лепестков, позволяя скорректировать ёмкостные измерения с лепестков. Но это неточно. Следует также упомянуть, что существуют датчики влажности почвы, выполненные на принципе поверхностного натяжения воды - тензиометры. В керамический конус (типа, blumat) помещается датчик давления. С него и берутся показания, переводимые позже в показания влажности. Такой способ считается более точным, нежели способ измерения ёмкости. В качестве датчиков давления здесь можно применить достаточно чувствительные датчики измерения кровяного давления. На этом, думаю, хватит. Ежели будут вопросы - отвечу в комментариях или допишу ещё часть.