Автоматическая система определяет уровень влажности почвы и поливает растение только когда это необходимо. Забудьте о пересохших или залитых цветах навсегда.
Влажность почвы
Автоматизация полива экономит время и заботится о растениях лучше человека
Система постоянно мониторит уровень влаги в почве и реагирует только когда полив действительно нужен.
GSM-модуль отправляет сообщения о состоянии системы прямо на ваш телефон, где бы вы ни находились.
Встроенный аккумулятор с модулем заряда обеспечивает бесперебойную работу без подключения к сети.
Полив происходит только при необходимости, что снижает расход воды до 60% по сравнению с ручным поливом.
Все компоненты легко соединяются по схеме. Не требуется глубоких знаний электроники для сборки.
Исходный код программы доступен для изучения и модификации под ваши конкретные потребности.
Простой цикл работы автоматической системы полива
Датчик измеряет текущий уровень влажности почвы
Arduino сравнивает показания с заданным порогом
При сухой почве включается насос для полива
GSM-модуль отправляет SMS о выполненном поливе
Все необходимые элементы для сборки умной системы полива
Микроконтроллер
Отправка SMS
Подача воды
Измерение влаги
Зарядка батареи
Управление
Силовой ключ
Питание
Индикация
Ограничение тока
Подача воды
Принципиальная схема соединения всех компонентов системы
Простая и понятная программа для Arduino, которую легко настроить под ваши нужды. Измените порог влажности или добавьте свои функции.
const int LED = 9;
#include
#include
SoftwareSerial SIM800(1, 0);
const int LED_RED = 9;
const int LED_BLUE = 8;
const int LED_GREEN = 7;
#define solPin A0 // порт для подключения датчика
int minsol = 200; // минимальное значение влажности почвы
int sol;
void setup() {
Serial.begin(9600); // Скорость обмена данными с компьютером
Serial.println("Start!");
//SIM800.begin(9600); // Скорость обмена данными с модемом
//SIM800.println("AT");
pinMode(solPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
pinMode(LED_RED, OUTPUT);
//digitalWrite(LED_RED, HIGH);
pinMode(LED_BLUE, OUTPUT);
//digitalWrite(LED_BLUE, HIGH);
pinMode(LED_GREEN, OUTPUT);
//digitalWrite(LED_GREEN, HIGH);
}
void loop() {
//if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема...
// Serial.write(SIM800.read()); // ...и выводим их в Serial
// if (Serial.available()) // Ожидаем команды по Serial...
//SIM800.write(Serial.read()); // ...и отправляем полученную команду модему
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_BLUE, LOW);
Serial.println("sleep for 8 seconds");
LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Serial.println("I Woke up");
sol = analogRead(solPin);
Serial.print("sol = ");
Serial.println(sol);
int res = getSoilMoisture(sol);
// Serial.println(res);
if (res >= 80) {
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_BLUE, LOW);
} else if (res >= 30) {
digitalWrite(LED_BLUE, HIGH);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, LOW);
} else {
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
}
if Serial.println("Sending SMS...");
return res
/*
for (int i=100; i<=1000; i=i+100)
{
digitalWrite(LED_RED, HIGH);
delay(i);
digitalWrite(LED_RED, LOW);
delay(i);
}
*/
delay(1000);
}
int getSoilMoisture(int current) {
if (current <= 400) {
return 100;
}
int minn = 400;
int maxx = 1023;
long range = maxx - minn;
long value = current - minn;
/**
Serial.print("Range:");
Serial.println(range);
Serial.print("Value:");
Serial.println(value);
Serial.print("Value * 100:");
Serial.println((long)value*100);
Serial.print("Left:");
Serial.println((long)value*100 + range/2);
*/
long res = ((long)(value * 100) + (long)(range / 2)) / range;
return (res - 100) * -1;
}
}
Посмотрите, как работает система умного полива в реальных условиях