После того как у меня сдох очередной цветок, я понял, что неплохо было бы как-то автоматизировать процесс полива.
Не мудрствуя лукаво, я решил собрать конструкцию, которая бы поливала цветок вместо меня. В итоге у меня получился вот такой аппарат, который вполне справляется со своими обязанностями:
При помощи двух регуляторов можно настроить объём поливаемой за раз воды, а также период между поливами. Кому интересно — далее подробная инструкция, как сделать такое устройство.
Для сборки поливалки вам понадобится некоторое количество компонентов и не более чем 30 минут свободного времени.
Используемые компоненты:
- Arduino Mega (она просто была под рукой, но любая другая подойдёт)
- Насос и силиконовая трубка (подойдёт насос омывателя автомобильных стёкол — можно купить в любых автозапчастях или можно купить маленький погружной насос на ebay)
- Блок питания
- Два переменных резистора для регулировки (любые)
- Транзистор IRL3705N
- Два резистора (100 Ом и 100 кОм)
- Диод (любой)
- Резервуар для воды (в моем случае пластиковая коробочка из Ikea)
- Макетка
Собираем всё по такой схеме:
Или нагляднее:
Вот что получилось у меня:
Сначала протестим насос. Подадим на него 5В. Если он зажужжал, всё в порядке, двигаемся дальше.
Теперь подключим насос к Arduino. Сделаем для управления насоса с ардуино небольшую обвязку на макетке.
Попробуем поуправлять насосом с Ардуино. Зальём такой код
int pumpPin = 5;
void setup() {
pinMode(pumpPin, OUTPUT);
digitalWrite(pumpPin, LOW);
}
void loop() {
digitalWrite(pumpPin, HIGH);
delay(1000);
digitalWrite(pumpPin, LOW);
delay(1000);
}
Если он периодически жужжит, значит, снова всё в порядке.
Теперь нам осталось добавить два регулятора. Подцепим к нашему устройству переменные резисторы, и проверим их работоспособность.
Зальём такой код на Ардуино
int volumePin = A0;
void setup() {
pinMode(volumePin, INPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(volumePin));
delay(100);
}
Зайдём в Serial Monitor и убедимся, что есть реакция на поворот регулятора. Он должен меняться примерно от 0 до 1024
Теперь осталось заставить заработать всё это вместе.
Вот непосредственно код поливалки:
// Первый регулятор управляет временем, которое будет литься вода (от 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();
}
Вот так выглядит конечный результат в работе:
- youtu.be/qHmjWkZ_seM — цветок
- youtu.be/3VdgH9uwMCY — устройство
В ближайшем будущем думаю сюда добавить сенсор уровня воды в резервуаре и датчик влажности почвы.
Автор: varkasha