Автоматическая поливалка для растений из Arduino и одного сервопривода

16.03.2021 в 16:11
1696
+7

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

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

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

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

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

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

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

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

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

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

#include <Servo.h> 

Servo servo1;

int polivDegree = 100;

int time = 0;

void setup() 
{
  servo1.attach(11);
  servo1.write(0);

} 

void loop() 
{
  delay(5000);
  waterOn();
  delay(5000);
} 

void waterOn()
{
  for (int i = 0; i <= polivDegree; i+=1) {
    delay(50);
    servo1.write(i);
  }
}

void waterOff()
{
  for (int i = polivDegree; i >= 0; i-=1) {
    delay(30);
    servo1.write(i);
  }
}

И приделываем конструкцию с палочкой и капельницей на сервопривод.

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

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

Делаем выемки на палочках в местах соединения.

И затем, с помощью, угадайте чего, фиксируем соединение.

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

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

На эту же изоленту вешаем рядышком и ардуинку. Получается вот такая конструкция:

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

#include <Servo.h> 

Servo servo1;

int polivDegree = 100;

int time = 0;

void setup() 
{
  servo1.attach(11);
  servo1.write(0);

} 

void loop() 
{
  delay(5000);
  waterOn();
  delay(300000);//300000=5 mins
  waterOff();
  delay(43200000); //43200000=12 hours
} 

void waterOn()
{
  for (int i = 0; i <= polivDegree; i+=1) {
    delay(50);
    servo1.write(i);
  }
}

void waterOff()
{
  for (int i = polivDegree; i >= 0; i-=1) {
    delay(30);
    servo1.write(i);
  }
}

Ставим ведро на положенное место. Конструкция в деле:

В продакшене ведро было заменено на тазик, так как второй вмещал больше воды. Огурцы успешно пережили наш отпуск. Спасибо за прочтение =)

loader
16.03.2021 в 16:11
1696
+7
Читайте также
Логические задачи с собеседований