Raspberry pi, python и полив комнатных растений

Как это собрать?

  1. Установите Troyka Shield на Arduino Uno

  2. Подключите датчик влажности почвы через Troyka Shield к аналоговому пину

  3. Подключите дисплей к управляющей плате через Troyka Shiled:
    1. Пин к пину Toyka Shield.
    2. Пины дисплея к разъёму на Troyka Shiled

  4. Подключите силовой ключ к контакту

  5. Подведите коммутирующее напряжение к силовому ключу в разъём и

  6. Подключите помпу к силовому ключу через клеммник с разъёмами и . В итоге должна получится схема.

  7. Воткните сенсор влажности почвы в землю.
  8. Другой конец шланга вставьте с водой в землю. Если горшок с землёй весит менее 2 кг, рекомендуется отдельно закрепить трубку, чтобы она не перевернула растение.
  9. Опустите помпу в ёмкость с водой.

  10. Подключите питание.

Цифровой режим

Для подключения датчика влажности почвы FC-28 в цифровом режиме мы подключим цифровой выход датчика к цифровому контакту Arduino.

Модуль датчика содержит потенциометр, который использован для того чтобы установить пороговое значение. Пороговое значение после этого сравнивается со значением выхода датчика используя компаратор LM393, который помещен на модуле датчика FC-28. Компаратор LM393 сравнивает значение выхода датчика и пороговое значение, и после этого дает нам выходное значение через цифровой вывод.

Когда значение датчика больше чем пороговое значение, цифровой выход передаст нам 5В, и загорится светодиод датчика. В противном случае, когда значение датчика будет меньше чем это пороговое значение на цифровой вывод передастся 0В и светодиод не загорится.

Электрическая схема

Соединения для датчика влажности почвы FC-28 и Ардуино в цифровом режиме следующие:

  • VCC FC-28 → 5V Arduino
  • GND FC-28 → GND Arduino
  • D0 FC-28 → Пин 12 Arduino
  • Светодиод положительный → Вывод 13 Ардуино
  • Светодиод минус → GND Ардуино

Код для цифрового режима

Код для цифрового режима ниже:

int led_pin =13;
int sensor_pin =8;
void setup() {
pinMode(led_pin, OUTPUT);
pinMode(sensor_pin, INPUT);
}
void loop() {
if(digitalRead(sensor_pin) == HIGH){
digitalWrite(led_pin, HIGH);
} else {
digitalWrite(led_pin, LOW);
delay(1000);
}
}

Объяснение кода

Прежде всего, мы инициализировали 2 переменные для соединения вывода светодиода и цифрового вывода датчика.

int led_pin = 13;
int sensor_pin = 8;

В функции setup мы объявляем пин светодиода как пин выхода, потому что мы включим светодиод через него. Мы объявили пин датчика как входной пин, потому как Ардуино будет принимать значения от датчика через этот вывод.

void setup() {
pinMode(led_pin, OUTPUT);
pinMode(sensor_pin, INPUT);
}

В функции цикла, мы считываем с вывода датчика. Если значение более высокое чем пороговое значение, то включится светодиод. Если значение датчика будет ниже порогового значения, то индикатор погаснет.

void loop() {
if(digitalRead(sensor_pin) == HIGH){
digitalWrite(led_pin, HIGH);
} else {
digitalWrite(led_pin, LOW);
delay(1000);
}
}

На этом вводный урок по работе с датчиком FC-28 для Ардуино мы завершаем. Успешных вам проектов.

Шаг 3. Код системы полива

Для этого шага вам нужно скачать прикрепленный ниже файл и открыть код в редакторе Arduino IDE. Наряду с кодом вы найдете комментарии, которые разъясняют каждую часть кода. Например: вы можете легко изменить текст на ЖК-дисплее на свой собственный текст. Также в разделе Библиотеки нужно скачать и установить библиотеку , это нужно сделать до начала работы с кодом.

#include <LiquidCrystal.h> // импорт LCD библиотеки

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // LCD соединения

byte heart = { 0b00000, 0b01010, 
                  0b11111, 0b11111, 
                  0b11111, 0b01110, 
                  0b00100, 0b00000 
                 };                 // Специальный символ сердца для дисплея

int sensorPin = A0; // датчик почвы
int sensorValue = 0;
int percentValue = 0;
int TouchSensor = 13; // сенсорный датчик
int pomp = 12; // 5В водяной насос

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2); // LCD 
  lcd.createChar(1, heart); // Специальный символ для дисплея
  pinMode(pomp, OUTPUT);
  pinMode(TouchSensor, INPUT);
}

void loop() {
  if(digitalRead(TouchSensor)==HIGH)       //Считать сигнал сенсорного датчика
   { 
    digitalWrite(pomp, HIGH);   // если сенсорный датчик HIGH (ВЫСОКИЙ), то включить помпу
    Serial.println("Pomp ON"); // Это для проверки показаний элемента
    lcd.clear();
    lcd.setCursor(4, 0); // курсор 1-я строка вверху слева
    lcd.print("WATERING"); //Печать на ЖК-дисплее при нажатии сенсорного датчика (растение получает воду)
    lcd.setCursor(4, 1); // курсор 2-я строка слева 
    lcd.write(1); // Специальный значок сердца для ЖК-дисплея
    lcd.print("SERGE"); //Печать на ЖК-дисплее при нажатии сенсорного датчика (растение получает воду)
    lcd.write(1); // Специальный значок сердца для ЖК-дисплея
    delay(100); 
    lcd.clear(); // После того, как сенсор запущен, очистить текст на ЖК-дисплее
   }
  else
   {
    digitalWrite(pomp, LOW);    // если сенсорный датчик LOW (НИЗКИЙ, не нажат), помпа выключена
    Serial.println("Pomp OFF"); // Это для проверки показаний элемента
    sensorValue = analogRead(sensorPin); // прочитать датчик почвы
    Serial.print("\n\nAnalog Value: "); // Это для проверки показаний элемента
    Serial.print(sensorValue); // Это для проверки показаний элемента
    percentValue = map(sensorValue, 1023, 200, 0, 100); // Калибровка датчика почвы
    Serial.print("\nPercentValue: "); // Это для проверки показаний элемента
    Serial.print(percentValue); // выводить Значение влажности в %
    Serial.print("%"); //Это для проверки показаний элемента
    lcd.setCursor(0, 0); // курсор установлен на первой строке
    lcd.print("Serge's grond"); // Вывод на ЖК-дисплей LCD
    lcd.setCursor(0, 1); // курсор установлен на второй строке
    lcd.print("bevat:"); // Вывод на ЖК-дисплей LCD
    lcd.print(percentValue); // Вывод на ЖК-дисплей LCD значение влажности в %
    lcd.print("%"); // Вывод на ЖК-дисплей LCD
    lcd.print(" water"); // Вывод на ЖК-дисплей LCD
    delay(500); //задержка перед началом цикла
    lcd.clear(); // в конце цикла очистить текст на LCD
   }
  
}

Необходимые инструменты и периферия для реализации проекта «Автополив» на базе микроконтроллера Arduino

Ирригатор – устройство, контролирующее влажность почвы. Приспособление передает данные на датчик влажности, который укажет сконструированному автополиву на начало работы. Для составления программы используется язык программирования С++.

Таблица с требуемыми материалами:

Компонент Описание
Микроконтроллер Arduino Uno Платформа соединяет периферийные устройства и состоит из 2 частей: программная и аппаратная. Код для создания бытовых приборов программируется на бесплатной среде – Arduino IDE.

Чтобы составить и внедрить программу на микроконтроллер, необходимо приобрести usb-кабель. Для автономной работы следует купить блок питания на 10 В.

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

USB-кабель Обязателен в конструировании системы «автополив на ардуино» для переноски кода.
Плата для подключения сенсора – Troyka Shield С помощью платы подключается сенсорная периферия посредством обычных кабелей. По краям располагаются контакты по 3 пина — S + V + G.
Нажимной клеммник Служит фиксатором для пучковых проводов. Конструкция фиксируется с помощью кнопки на пружине.
Блок питания, оснащенный usb-входом

Анализатор влажности почвы

Идеальное средство для подключения платформ. В конструкции предусмотрен фонарик, который говорит о начале работы.

Приспособление подает сигналы, если почва чрезмерно или недостаточно увлажнена. Подключение к плате производится с помощью 3 проводков.

●      MAX глубины для погружения в землю – 4 см;

●      MAX потребление электроэнергии – 50 мА;

●      Напряжения для питания – до 4 В.

Помпа с трубкой для погружения в воду Управление осуществляется с помощью коммутатора. Длина кабеля достигает 2 метров.
Силовой ключ Создан для замыкания и размыкания электрической цепи. Если использовать приспособление при конструировании автополива ардуино, не потребуется дополнительных спаек. Подключение к основной панели осуществляется также 3 проводами.
Соединительный провод – «отец-отец» Несколько проводов соединяют периферийные устройства.
Соединительный провод – «мать-отец» Проводки также соединяют устройства периферии.
Комнатный цветок Система пригодна для разного типа комнатных растений.

Объяснение работы проекта

Спроектированная нами система автоматического полива растений не требует никакого участия человека в своей работе, весь процесс управляется платой Arduino, а GSM модуль используется для передачи сообщений на ваш сотовый телефон. Внешний вид собранной системы показан на следующем рисунке.

Если влага присутствует в почве, то тогда сопротивление между двумя контактами зонда для измерения влажности мало, транзистор Q2 остается в открытом состоянии и на контакт D7 платы Arduino подается напряжение низкого уровня. И когда на контакте D7 напряжение низкого уровня плата Arduino передает пользователю SMS “Soil Moisture is Normal. Motor turned OFF” (уровень влаги в норме, насос выключен), водяной насос при этом остается в выключенном состоянии.

А когда влаги в почве становится очень мало, то транзистор Q2 запирается и на контакт D7 платы Arduino подается напряжение высокого уровня. Как только плата Arduino обнаруживает это, она включает водяной насос и передает пользователю сообщение “Low Soil Moisture detected. Motor turned ON” (низкий уровень влаги, насос включен). Насос автоматически выключится как только уровень влаги в почве достигнет требуемой величины. Более подробно все эти процессы показаны в видео в конце статьи.

На следующем рисунке приведена структурная схема работы нашего проекта.

Процесс сборки

Чтобы получить в распоряжение готовый для настройки ирригатор, потребуется выполнить следующие действия:

  • Первоначально установить плату Troyka Shield на Arduino Uno.
  • К пину A0 через Troyka Shield подключается сенсор определения влажности;
  • Также посредством Troyka Shiled к основной платке подключается дисплей. Здесь пин CS нужно соединить с 9-ым пином Troyka Shield, а к соответствующему выходу на Troyka Shield цепляем SPI пины дисплея.
  • Силовой ключ присоединяем к четвертому контакту.
  • Затем к силовому ключу подводим коммутирующее напряжение через разъем с подписями P+ и P–.
  • Водяной насос подключается к силовому ключе через пины L+ и L−.
    В результате наша небольшая схема готова и должна выглядеть так:
  • Теперь щуп датчика влажности втыкаем в почву с уже посаженным в нем растением.
  • Конец шланга тоже помещается в почву. Если вес горшка меньше 2 кг, желательно дополнительно трубку укрепить. Это исключит риск опрокинуть горшок с нашим растением.
  • Последним шагом опускаем насос в резервуар с водой и запитываем нашу схему.

Теперь ирригатор собран и потребуется провести его дополнительную настройку.

Что понадобится для работы

Для сборки конструкции потребуются следующие элементы:

  1. Плата Arduino (например, модель UNO или Мега).
  2. Датчик уровня влажности почвы.
  3. Насос для воды.
  4. Шланг для прокачки жидкости (подводится напрямую в горшок или на грядку).
  5. Емкость для забора воды.
  6. Контактные кабели.
  7. Блок питания электронных компонентов.

Система не будет напрямую подключаться к водопроводу, а будет забирать воду из резервной емкости, которую требуется наполнять самостоятельно. Это повысит надежность конструкции, т.к. поможет избежать непредвиденных ситуаций, связанных с неисправной работой водопровода.

Пример кода для Arduino для проекта «Автополив»

Переходим к программированию кода:

//Скачиваем библиотеку для работы дисплея и подключаем к программе
#include "QuadDisplay2.h";
//Создаем константу, обозначающую контакт, к которому подключена водяная //помпа
#define VODPOMPA_PIN 4;
// Создаем константу, обозначающую контакт, к которому подключили //анализатор влаги земли
#define HUM_PIN A0;
//Min по влажности
#define HUM_MIN 200;
// Max по влажности
#define HUM_MAX 700;
//Время между проверками полива
#define INTER 60000 * 3;
//Объявляем переменную, в которой будет храниться значение влажности
unsigned int hum = 0;
//В этой переменной будем хранить временной промежуток
unsigned long Time = 0;
// Объявляем объект из класса QuadDisplay, затем передаем номерной знак //контакта CS
QuadDisplay dis(9);
//Создаем метод, отвечающий за работу дисплея
void setup(void)
{
//Запуск метода
  begin();
  // Объявляем функцию, которая будет отвечать за выход водяной помпы из      //контакта
  pinMode(VODPOMPA_PIN, OUTPUT);
  //На дисплее загорается число - 0
  dis.displayInt(0);
}
//Создаем метод, отвечающий за показатель влажности на данный момент void loop(void)
{
  //Рассчитываем показатель увлажнения на данный момент
  int humNow = analogRead(HUM_PIN);
  // Если значение показателя не равно предыдущему, то...
  if(humNow != hum) {
    //Сохраняем полученные сейчас значение
    hum= humNow;
    //Вывод значения на экран
    displayInt(humNow);
  }
//Задаем условия: если прошел заданный пользователь промежуток времени и //статус влаги в почве меньше необходимого, то...
  if ((Time == 0 || millis() - Time > INTER) && hum < HUM_MIN ) {
    // Даем сигнал о начале работы водяной помпы
    digitalWrite(VODPOMPA_PIN, HIGH);
    //Объявляем потом, длящийся 2 секунды
    delay(2000);
    // Завершаем работу помпы
    digitalWrite(POMP_PIN, LOW);
    // Ставим в значение переменной Time текущее время и добавляем 3 минуты 
    Time = millis();
  }
}

Дополнительно вы можете посмотреть пару интересных видео от наших коллег:

How to build an Automatic Watering System For Plants  Arduino Uno  DIY  TUTORIALHow to build an Automatic Watering System For Plants Arduino Uno DIY TUTORIAL

Automatic Watering System for Plants using ArduinoAutomatic Watering System for Plants using Arduino

На этом на сегодня всё. Отличных вам проектов!

Основные параметры и схема подключения

Датчик влажности состоит из щупа и компаратора. Сигнал может измеряться как в аналоговой форме (0 — максимум влажности, 1023 — минимум), так и в цифровой (0 — влажно, 1 — сухо). Для повышения точности лучше использовать аналоговую форму. Оптимально выбрать следующие параметры: 200 — нормальная влажность, 600 — предельная сухость. Эти показатели можно изменить в загружаемой в плату прошивке.

1 вывод датчика подключается к аналоговому пину «Ардуино», 2 — к питанию (Vcc, GND), а оставшиеся 4 не соединяются ни с чем, т.к. цифровой сигнал не используется.

Вода из резервуара в систему будет подаваться при помощи насоса. Достаточно устройства на 12 В. Помпа должна работать в соответствии с выбранным типом полива растений. Оптимальный вариант — капельный.

Схема насосной станции состоит из:

  • мотора;
  • драйвера «двигатель-плата»;

Драйвер подключается 1 выводом к информационному контакту «Ардуино», а 2 другими — к питанию (Vcc, GND).

Шаг 4: Код

Когда все подключено, пришло время погрузиться в код. Библиотека для 7-сегментного дисплея находится здесь.

Гигрометры будут корродировать довольно быстро, если они будут постоянно подключены к 5V, поэтому их нужно питать током только когда нам действительно нужно измерить влажность. По этой причине они не подключены к шине питания.

const int hygrometer1 = A0;  //Hygrometer sensor at pin A0
const int hygrometer2 = A1;  //Hygrometer sensor at pin A
int Pump1_1 = 11;  // Pump 1, cable 1
int Pump1_2 = 2;  // Pump 1, cable 2
int Pump2_1 = 3;  // Pump 2, cable 1
int Pump2_2 = 4;  // Pump 2, cable 2
int Hygro1 = 9;  // VCC Hygrometer 1
int Hygro2 = 10  ;  // VCC Hygrometer 2
int value1;
int value2;
int runs1 = 0; // counts how many times the pumps have been turned on
int runs2 = 0;

#include "SevenSegmentTM1637.h" 
const byte PIN_CLK = 8;   // define CLK pin (any digital pin)
const byte PIN_DIO = 7;   // define DIO pin (any digital pin)
int inPin = 6; // input of the push button
int val = 0; 
int push_count = 0; // counts how many times the button was pushed
int buttonState = 0; // saves the state of the button, low or high
SevenSegmentTM1637    display(PIN_CLK, PIN_DIO);
unsigned long previousMillis = 0; // taken from the blink with delay example
const long interval = 1800000; // only measure every 30 minutes

void setup() {
  display.begin(); // init the display
  display.setBacklight(20);  // set the brightness of the display to 20 %
  Serial.begin(9600);
 
  // set all the pin modes accordingly
  pinMode(Pump1_1, OUTPUT); 
  pinMode(Pump1_2, OUTPUT);
  pinMode(Pump2_1, OUTPUT);
  pinMode(Pump2_2, OUTPUT);
  pinMode(Hygro1, OUTPUT);
  pinMode(Hygro2, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(inPin, INPUT);

  // set all the pins to their initial states
  digitalWrite(8, LOW);
  digitalWrite(Pump1_1, LOW);
  digitalWrite(Pump1_2, LOW);
  digitalWrite(Pump2_1, LOW);
  digitalWrite(Pump2_2, LOW);
  digitalWrite(Hygro1, LOW);
  digitalWrite(Hygro2, LOW);
  // display that the system is booting
  display.clear();
  display.print("INIT");      
  delay(2000);               
  display.clear();
 
}

void loop() {
  // we are counting how many milli seconds have passed since the system booted, if we completed a 30 min intervall, run measure(), else run buttons()
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval || previousMillis == 0) { // note the || previousMillis == 0, we also want to measure on bootup, it's easier to identify mistakes
    // save the last time we measured the moisture
    previousMillis = currentMillis;
    
  measure();
  }
  buttons();
}

void measure() {
  display.clear();
  display.print("read");
  digitalWrite(Hygro1, HIGH); // supply the hygrometer with voltage
  digitalWrite(Hygro2, HIGH); // supply the hygrometer with voltage
  delay(2000);
  value1 = analogRead(hygrometer1); // read the value (0-1023)
  value2 = analogRead(hygrometer2); // read the value (0-1023)
  delay(2000);  
  digitalWrite(Hygro1, LOW); // turn off the hygrometer
  digitalWrite(Hygro2, LOW); // turn off the hygrometer
  display.clear();
  
  if (value1 <= 550) // check if the plant is well watered (lower values mean well watered)
{
  display.clear();
  display.print("1 OK");
  delay(2000);
  display.clear();
}
else
{
  digitalWrite(Pump1_1, HIGH);
  digitalWrite(Pump1_2, HIGH);

  delay(20000); // time in ms how long the pump is turned on, 20 s here

  digitalWrite(Pump1_1, LOW);
  digitalWrite(Pump1_2, LOW);
  runs1++; // increment the number of times pump 1 has run
}

  if (value2 <= 450)
{
  display.clear();
  display.print("2 OK");
  delay(2000);
  display.clear();
}
else
{
  digitalWrite(Pump2_1, HIGH);
  digitalWrite(Pump2_2, HIGH);

  delay(20000); // time in ms how long the pump is turned on, 20 s here

  digitalWrite(Pump2_1, LOW);
  digitalWrite(Pump2_2, LOW);
  runs2++; // increment the number of times pump 2 has run
}  
  }

// the script to print the values and cycle through the display
void buttons() {
  val = digitalRead(inPin); // read state of the button
  if (val != buttonState && val == HIGH){ // make sure we detect a change from LOW to HIGH
    push_count++; // count that the button has been pushed
  }
      else {
      // do nothing
    }

  buttonState = val; // save the current state
  
  switch (push_count) {
    case 0:    
      display.clear();  
      display.print("sns1");
      delay(2000);
      display.clear();
      push_count++;
      break;              
    case 1:    
      display.print(value1);  
      break;
    case 2:   
      display.clear();  
      display.print("sns2");
      delay(2000);
      display.clear();
      push_count++;
      break;
    case 3:   
      display.print(value2);  
      break;
    case 4:   
      display.clear();  
      display.print("no 1");
      delay(2000);
      display.clear();
      push_count++;
      break;
    case 5:   
      display.print(runs1);  
      break;
    case 6:   
      display.clear();  
      display.print("no 2");
      delay(2000);
      display.clear();
      push_count++;
      break;
    case 7:   
      display.print(runs2);  
      break;      
    default:
      push_count=0;  
  }
}

Проведение калибровки

На датчике будут отображаться значения, которые напрямую связаны с кислотностью земли. Соответственно, перед запуском автополивщика необходимо выполнить простую калибровку. Она проводится таким образом:

  • Сначала записываются цифры, полученные после того, как датчик воткнут с сухую почву. Это минимальная влажность.
  • Затем нужно полить растение и подождать момента, когда вода впитается в землю. Показатели должны оставаться на стабильном уровне, зачастую это в районе 60%, но все растения разные, поэтому предварительно узнайте, насколько ваш зеленый друг требователен к этому параметру. Их также следует сохранить, поскольку это максимальная влажность.
  • С готовыми результатами следует отредактировать наш скетч (код в среде Arduino IDE), изменяем значение минимальной влажности, в нашем коде это — MIN _HUM и MAX_HUM на параметр нормальной влажности.
  • Остается перепрошить Arduino Uno, для этого подключает через кабель к пк, выбираем порт, плату, жмем в правом углу кнопку загрузить.
  • Расширение функциональности автополивщика

Выше была предложена система для одного горшка. На практике, автополив на Адруино эффективнее применять для нескольких растений. Для этого к Адруино можно подключить дополнительные насосы и сенсоры влажности. Однако можно поступить намного проще. В поставляемом с насосом шланге можно сделать дырочки с учетом расстояния, на котором расположены растения. В полученные отверстия можно воткнуть стержни простых ручек. Результат получится примерно такого вида:

Часто в помещениях растения в горшках располагают на подоконнике одним рядом. Это облегчает задачу, поскольку трубка крепится к горшкам таким образом, чтобы распределить выводы с водой по одному на растение. Единственное — с таким решением, настройка автоматического полива выполняется с учетом одного растения. Если горшки более-менее одинаковые по габаритам, скорость высыхания в них почвы должна быть равной. Как вариант, можно совместить оба способа масштабирования, что позволит поделить всю растительность на примерно одинаковые по габаритам горшки.

Чего бы хотелось

Наибольшее желание любого огородника — получать максимальный урожай при минимальных затратах труда. Одним из вариантов решения этой проблемы становятся теплицы. Но и в таком случае хочется, чтобы в ней самостоятельно грядки поливались, освещались, и обогревались, когда нужно. Ну и конечно, была организована автоматическая система вентиляции, для минимизации усилий по открыванию и закрыванию форточек.

Мониторинг и настройка

Конечно, в первую очередь, требуется система управления всем этим высокоинтеллектуальным хозяйством. Кроме того, желательно получение информации о текущем состоянии напрямую или на домашний компьютер, или на смартфон. С этой целью будет использоваться контроллер для теплицы на Arduino.

Управление

В соответствии с желаниями, необходимо организовать автоматическое управление отоплением пола (как основы подогрева посадок), открытия форточек, увлажнением почвы. Хороша будет система контроля освещения, которая зажигает его, если на улице темно.

Реализация в «железе»

Ничего сложного в реализации проекта нет. Достаточно применить плату Arduino, в комплексе с несколькими датчиками (влажности, температуры, освещенности, наполнения бака полива и концевых контактов окон проветривания), а также парой двигателей для вентиляции и смонтировать систему «теплый пол».

Но сначала требуется сделать саму теплицу. Для основы была создана такая модель:

Вот ее перенос в реальность:

Мониторинг и настройка

Визуализация информации, а также пункты меню настройки выводятся на LCD1602 дисплей, с конвертором в IIC/I2C UC-146 для подключения его к Arduino.

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

Кроме визуального, для удаленного контроля будет использоваться модуль WIFI связи ESP8266 LoLin NodeMCU2, с помощью которого информация с использованием UDP протокола будет передаваться на домашний компьютер с настроенным web-сервером и базой данных. Которые впоследствии, можно будет получить на любом устройстве в общей сети — смартфоне, цифровом телевизоре или планшете.

Подключаться модуль к ардуино уно будет через серийный порт (RX/TX). Причем электрический контакт производится напрямую TX(модема)-TX(Arduino) и RX аналогично

Почему это важно — зачастую рекомендуют делать соединение перекрестным RX-TX. В прилагаемой схеме это не нужно

Полив

Система полива работает на основе физических принципов и насоса, который функционирует определенное время. Периодом и началом которого управляет Ардуино. С утра бак наполняется водой, что ограничивается временем в управляющем скетче и датчиком на прилагаемом чертеже. В течение дня она прогревается воздухом в теплице. Вечером происходит кратковременное включение насоса, который слегка переполнив емкость запускает полив самотеком.

Так он выглядит в реальности (вместе с системой подачи воды на грядки):

Его схема работы:

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

Отопление

Подогрев земли сделан предварительной укладкой «теплого» пола под будущие грядки. Включение происходит через специальное реле на 30 А, так как мощности выдаваемой ардуино никогда в жизни бы не хватило для питания такого потребителя.

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

Вентиляция

Для обеспечения движения воздуха предусмотрены два поворотных окна, процесс открытия и закрытия которых выполняется двигателями от автомобильных дворников. В свою очередь, подключённых к Arduino.

Освещение

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

На приведенной ниже схеме оно подключается к выводам резерв (освещение).

WEB приложение для управления поливом через интернет

Через веб-приложение пользователь:

Главный экран управления и мониторинга состояния системы

На этом же экране пользователь может вручную включить или выключить любую из линий полива.

В нижней части экрана отображаются последние события, произошедшие на станции.

Экран управления расписанием полива в автоматическом режиме

На данном экране пользователь может создать расписание для работы системы в автоматическом режиме, чтобы сервер включал и выключал полив на станции без участия пользователя.

Журнал событий

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

Оповещение пользователя

В настройках станции пользователь может назначить некоторые события как «предупредительные» или «аварийные». При возникновении этих событий сервер будет оповещать пользователя по электронной почте и (или) СМС. Это могут быть события обрыва связи со станцией, низкий уровень воды в резервуаре или низкая температура на улице.

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

График уличной температуры

На этом экране отображается график изменения температуры в течение заданного промежутка времени (10 мин., 30 мин., час, 12 часов, сутки, неделя, месяц).

Дополнительные улучшения системы

Когда автополив для комнатных растений будет настроен и готов к работе, следует воспользоваться следующими рекомендациями:

Хотя контакты датчика влажности позолочены, по мере эксплуатации они повергаются коррозии. Наиболее интенсивное коррозирование происходит во время подключенного напряжения. Однако срок эксплуатации сенсора возможно продлить в несколько раз, подключив в нему напряжение посредством силового ключа. Если требуется снять показатели — на датчик поступает питание, затем значения сохраняются и питание сразу же выключается.
Бывают ситуации, когда ирригатор работает продолжительное время, никто за ним не присматривает, а в емкости заканчивается вода. Если насос работает вхолостую, возникает высокая вероятность его поломки. Проблему можно решить, если настроить автораспознавание отсутствия воды в емкости.
Выбирать датчик следует с учетом типа емкости. Если она не слишком глубокая, его одного будет достаточно. Если высоты оказывается недостаточно, подойдет ультразвуковой дальномер, оснастив его поплавком с прикрепленным сенсором наклона. Можно просто положить на дно резервуара 2 провода.
Безопасность автополивщика, который питается через батарейки, намного выше по сравнению с работающим от сети. В идеале будет обеспечить напряжение от батареек, однако потребление Arduino Uno даже в спящем режиме выше 0.36мА

Как вариант, стоит обратить внимание на плату Arduino Mini, которая в спящем режиме умеет снижать свое потребление энергии до нескольких сотен мкА.
При поливе комнатной растительности следует учитывать множество правил и рекомендаций. Например, их нельзя поливать зимними вечерами

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

Процесс сборки

Чтобы получить в распоряжение готовый для настройки ирригатор, потребуется выполнить следующие действия:

  • Первоначально установить плату Troyka Shield на Arduino Uno.
  • К пину A0 через Troyka Shield подключается сенсор определения влажности;
  • Также посредством Troyka Shiled к основной платке подключается дисплей. Здесь пин CS нужно соединить с 9-ым пином Troyka Shield, а к соответствующему выходу на Troyka Shield цепляем SPI пины дисплея.
  • Силовой ключ присоединяем к четвертому контакту.
  • Затем к силовому ключу подводим коммутирующее напряжение через разъем с подписями P+ и P–.
  • Водяной насос подключается к силовому ключе через пины L+ и L−.

    В результате наша небольшая схема готова и должна выглядеть так:

  • Теперь щуп датчика влажности втыкаем в почву с уже посаженным в нем растением.
  • Конец шланга тоже помещается в почву. Если вес горшка меньше 2 кг, желательно дополнительно трубку укрепить. Это исключит риск опрокинуть горшок с нашим растением.
  • Последним шагом опускаем насос в резервуар с водой и запитываем нашу схему.

Теперь ирригатор собран и потребуется провести его дополнительную настройку.

Шаг 6: Делаем разводку на макетной плате

Я решил использовать макетную плату, чтобы избавить вас и себя от паяния компонентов.

Как работает макетная плата

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

Вернёмся к нашему проекту. Упрощенная схема, находящаяся в начале статьи, поможет вам разобраться с расположением компонентов. Последовательно соедините все компоненты (макетная плата в портретной ориентации).

  1. 5В провод, идущий от платы Arduino, со концом – удлините двумя проводами такого же цвета и оставьте пока ждать своей очереди.
  2. Возьмите провод от GND разъема Arduino и тоже нарастите двумя соединительными проводами и пока оставьте так.

Шаг 5: Итоговый результат

Система орошения своими рукамиСистема орошения своими руками

Теперь вы знаете, что с помощью микроконтроллеров подобных Arduino при сильном желании можно создать всё что угодно.

Предупреждение! Мы не знаем, какие насосы или источники питания вы используете. При подключении реле обязательно отсоедините все от электропитания, прежде чем начинать отрезать или подключать любые провода и кабели. Возможно, у вас подключено сетевое напряжение! Ошибки могут привести к серьезным травмам или смерти. Если что-то сделано не правильно может возникнуть возгорание. Авторы урока не несут ответственность за любые убытки, причиненные вам, другим лицам или вашей собственности. Авторы урока не профессиональные электрики и есть вероятность, что отдельные рекомендации в уроке не верны. Если вы не знаете, что делаете и чувствуете себя некомфортно, не продолжайте проект или обратитесь к профессионалу. Вы действуете на свой страх и риск.

На этом всё, желаем вам отличных проектов.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий