Pull to refresh

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

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

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();
}


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


В ближайшем будущем думаю сюда добавить сенсор уровня воды в резервуаре и датчик влажности почвы.
Tags:
Hubs:
Total votes 106: ↑85 and ↓21 +64
Views 119K
Comments Comments 118