Проект на Arduino

Умный полив
для ваших растений

Автоматическая система определяет уровень влажности почвы и поливает растение только когда это необходимо. Забудьте о пересохших или залитых цветах навсегда.

10+
Компонентов
24/7
Мониторинг
SMS
Уведомления
🌱

Статус растения

Влажность почвы

Сухо 75% Влажно
Полив Авто
Питание 100%
Связь GSM

Почему это удобно?

Автоматизация полива экономит время и заботится о растениях лучше человека

Умный датчик влажности

Система постоянно мониторит уровень влаги в почве и реагирует только когда полив действительно нужен.

SMS-уведомления

GSM-модуль отправляет сообщения о состоянии системы прямо на ваш телефон, где бы вы ни находились.

Автономная работа

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

Экономия воды

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

Простая сборка

Все компоненты легко соединяются по схеме. Не требуется глубоких знаний электроники для сборки.

Открытый код

Исходный код программы доступен для изучения и модификации под ваши конкретные потребности.

Как это работает?

Простой цикл работы автоматической системы полива

1

Измерение

Датчик измеряет текущий уровень влажности почвы

2

Анализ

Arduino сравнивает показания с заданным порогом

3

Полив

При сухой почве включается насос для полива

4

Уведомление

GSM-модуль отправляет SMS о выполненном поливе

Компоненты системы

Все необходимые элементы для сборки умной системы полива

Главный Arduino Nano
Arduino Nano

Микроконтроллер

GSM модуль
GSM-модуль

Отправка SMS

Насос
Насос

Подача воды

Ключевой Датчик влажности
Датчик влажности

Измерение влаги

Модуль заряда
Модуль заряда

Зарядка батареи

Транзистор
Транзистор

Управление

MOSFET транзистор
MOSFET

Силовой ключ

Аккумулятор
Аккумулятор

Питание

Светодиод
Светодиод

Индикация

Резистор
Резистор

Ограничение тока

Трубка
Трубка

Подача воды

Схема подключения

Принципиальная схема соединения всех компонентов системы

Схема подключения

Исходный код

Простая и понятная программа для Arduino, которую легко настроить под ваши нужды. Измените порог влажности или добавьте свои функции.

Автоматический полив
Настраиваемый порог
LED-индикация
Мониторинг через Serial
smart_watering.ino
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;
}

}

Демонстрация работы

Посмотрите, как работает система умного полива в реальных условиях