Делаем автополив комнатного цветка на Arduino за 15 минут

от автора

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

image

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

Для сборки поливалки вам понадобится некоторое количество компонентов и не более чем 30 минут свободного времени.

Используемые компоненты:

  • Arduino Mega (она просто была под рукой, но любая другая подойдёт)
  • Насос и силиконовая трубка (подойдёт насос омывателя автомобильных стёкол — можно купить в любых автозапчастях или можно купить маленький погружной насос на ebay)
  • Блок питания
  • Два переменных резистора для регулировки (любые)
  • Транзистор IRL3705N
  • Два резистора (100 Ом и 100 кОм)
  • Диод (любой)
  • Резервуар для воды (в моем случае пластиковая коробочка из Ikea)
  • Макетка

image

Собираем всё по такой схеме:
image

Или нагляднее:
image

Вот что получилось у меня:
image

Сначала протестим насос. Подадим на него 5В. Если он зажужжал, всё в порядке, двигаемся дальше.

Теперь подключим насос к Arduino. Сделаем для управления насоса с ардуино небольшую обвязку на макетке.
image

Попробуем поуправлять насосом с Ардуино. Зальём такой код

int pumpPin = 5;  void setup() {   pinMode(pumpPin, OUTPUT);   digitalWrite(pumpPin, LOW);  }  void loop() {   digitalWrite(pumpPin, HIGH);   delay(1000);   digitalWrite(pumpPin, LOW);   delay(1000); } 

Если он периодически жужжит, значит, снова всё в порядке.

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

Зальём такой код на Ардуино

int volumePin = A0;  void setup() {   pinMode(volumePin, INPUT);   Serial.begin(9600); }  void loop() {   Serial.println(analogRead(volumePin));   delay(100);   } 

Зайдём в Serial Monitor и убедимся, что есть реакция на поворот регулятора. Он должен меняться примерно от 0 до 1024

image

Теперь осталось заставить заработать всё это вместе.

Вот непосредственно код поливалки:

// Первый регулятор управляет временем, которое будет литься вода (от 4 до 15 секунд) #define MAX_FLOWTIME 15 // seconds #define MIN_FLOWTIME 4 // seconds  // Второй регулятор управляет частотой полива от раза в день до раза в неделю #define MAX_PERIOD 7 // days #define MIN_PERIOD 1 // days  #define MAX 1015 #define MIN 0  int volumePin = A0; // Пин, к которому подцеплен регулятор, отвечающий за объём поливаемой воды int periodPin = A1; // Пин, к которому подцепелн регулятор, отвечающий за период между поливами int pumpPin = 5; // Пин, к которому подсоединено управление насосом  int volume; int period;  // Процедура, включающая насос на время, заданное в volume void water() {   digitalWrite(pumpPin, HIGH); // включаем насос   delay(volume);   digitalWrite(pumpPin, LOW); // выключаем насос   delay(period);   }   void setup() {   pinMode(pumpPin, OUTPUT);   digitalWrite(pumpPin, LOW);  }  void loop() {   // Считываем значения регуляторов (переменных резисторов) и приводим их к заданным пределам   volume = map(analogRead(volumePin), MIN, MAX, MIN_FLOWTIME, MAX_FLOWTIME) * 1000;    period = map(analogRead(periodPin), MIN, MAX, MIN_PERIOD, MAX_PERIOD) * 1000 * 60 * 60 * 24;      water(); } 

Вот так выглядит конечный результат в работе:

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

ссылка на оригинал статьи http://habrahabr.ru/post/210814/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *