Организация полива, обдува и освещения в Умной теплице на Ардуино
В предыдущих статьях по Умной теплтице (проект «Домашний цветок») «Умная теплица на Arduino- делаем первые шаги» и «Индикация показаний при проектировании Умной теплицы на Ардуино» мы реализовали функции мониторинга и вывода данных на дисплей и светодиоды. Сегодня мы добавим нашей Умной теплице функции управления. Нам необходимо организовать полив цветка, обдув, освещение. Выполнять данные операции будем по нажатии соответствующих кнопок.
Дополнительно к деталям, использовавшимся в предыдущих статьях ( нам понадобятся следующие:
- Relay shield на 4 реле – 1 шт;
- Вентилятор 12В – 1 шт;
- Мембранный насос 12В – 1 шт;
- Лампа освещения – 1 шт;
- Кнопка – 3 шт;
- Резистор 10 кОм – 3 шт.
Кнопки и резисторы имеются в каждом из наборов «Дерзай» («Базовый» и «Изучаем Arduino» ).
Мембранный вакуумный насос (рисунок 1) будем использовать для полива почвы. Он предназначен для всасывания воды из емкости. Рабочее напряжение 12В, потребляемый рабочий ток 0.5 – 0.7А, расход 1.5 л/мин.
Рисунок 1. Мембранный вакуумный насос
Необходимо поменять шланг требуемой длины (рисунок 2, 3).
Рисунок 2, 3. Замена шланга мембранного вакуумного насоса
При высоких температурах воздуха будем производить обдув цветка с помощью вентилятора. Вентилятор можно взять любой, я вытащил из старого системного блока, который работает от 12В (рисунок 4).
Рисунок 4. Вентилятор
Искусственный свет для эффективного выращивания растений должен излучать спектр электромагнитного излечения аналогичный тому, который получают растения в естественной среде. Если полной аналогии достичь сложно, то освещение должно удовлетворять хотя бы минимальные потребности. Для обеспечения наиболее комфортных условий для развития подбираются специальные лампы, имеющие различное влияние. Рекомендуется использовать следующие лампы:
- светодиодные фитолампы;
- энергосберегающие лампы дневного спектра;
- люминисцентные.
Насос, вентилятор, лампу подключать напрямую к Arduino нельзя! Будем управлять ими через реле. Будем использовать Relay shield (рисунок 5), который содержит 4 реле с необходимой обвязкой.
Рисунок 5. Relay shield
Теперь соберем на макетной плате схему, представленную на рисунке 6 (схема из предыдущей части с добавлением кнопок и реле).
Рисунок 6. Схема соединения для мониторинга параметров и ручного управления проекта «Домашний цветок»
Приступим к дописанию кода скетча. Создаем переменные типа Boolean (true – включено, false – выключено) для состояния трех реле:
status_pump – насос; status_lamp – лампа; status_fun – вентилятор.
В цикле loop() отслеживаем нажатие кнопок с проверяем на дребезг (процедура debounce()) и в случае нажатия кнопки изменяем статус соответствующей переменной и отправляем команду для изменения статуса соответствующего реле на противоположное:
включение/выключение насоса (полив почвы);
включение/выключение освещения;
включить/выключение вентилятора.
Создадим в Arduino IDE новый скетч, занесем в него код из листинга 1 и загрузим скетч на на плату Arduino. Напоминаем, что в настройках Arduino IDE необходимо выбрать тип платы (Arduino UNO) и порт подключения платы.
Листинг 1.
// подключение библиотек для nokia 5110 #include #include // подключение библиотеки DHT #include "DHT.h" // тип датчика DHT #define DHTTYPE DHT11 // контакт подключения входа данных модуля DHT11 int pinDHT11=9; // контакт подключения аналогового выхода модуля влажности почвы int pinSoilMoisture=A0; // контакт подключения аналогового выхода датчика температуры TMP36 int pinTMP36=A1; // контакт подключения аналогового выхода фоторезистора int pinPhotoresistor=A2; // пины светодиодов индикации #define LED_TEMP 5 #define LED_MOISTURE 6 #define LED_LIGHT 7 // значения для условий #define TEMP_DETECT 30 #define MOISTURE_DETECT 500 #define LIGHT_DETECT 250 // кнопки #define COUNT_BUTTONS 3 int pinButtons[]={A4,A5,A6}; int lastButtons[]={0,0,0,0}; int currentButtons[]={0,0,0,0}; // реле int pinRelays[]={2,3,4}; // статусы полива, освещения, вентилятора boolean statusRelays[]={false,false,false}; // создание экземпляра объекта DHT DHT dht(pinDHT11, DHTTYPE); // Nokia 5110 // pin 3 - Serial clock out (SCLK) // pin 4 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 6 - LCD chip select (CS) // pin 7 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(13, 12, 11, 10, 8); unsigned long millisupdate=0; void setup() { // запуск последовательного порта Serial.begin(9600); // pinMode(LED_TEMP,OUTPUT);digitalWrite(LED_TEMP,LOW); pinMode(LED_MOISTURE,OUTPUT);digitalWrite(LED_MOISTURE,LOW); pinMode(LED_LIGHT,OUTPUT);digitalWrite(LED_LIGHT,LOW); // dht.begin(); // инициализация дисплея display.begin(); // установить контраст фона экрана display.setContrast(60); display.clearDisplay(); // очистить экран display.setTextSize(1); // размер шрифта display.setTextColor(BLACK); // цвет // заставка display.setCursor(15,15); display.print("Home Flower"); display.display(); delay(2000); } void loop() { // каждые 5 сек - получение показаний датчиков // и вывод на дисплей if(millis()-millisupdate>5000) { millisupdate=millis(); display.clearDisplay(); display.setCursor(5,0); display.print("Home Flower"); // получение данных с DHT11 float h = dht.readHumidity(); display.setCursor(5,10); if (isnan(h)) { Serial.println("Failed to read from DHT"); display.print("airH= error"); } else { Serial.print("HumidityDHT11= "); Serial.print(h);Serial.println(" %"); display.print("airH=");display.print(h);display.print("%"); } // получение значения с аналогового вывода модуля влажности почвы display.setCursor(5,20); int val0=analogRead(pinSoilMoisture); Serial.print("SoilMoisture= "); Serial.println(val0); display.print("soilM=");display.print(val0); // получение значения с аналогового вывода датчика температуры TMP36 display.setCursor(5,30); int val1=analogRead(pinTMP36); // перевод в мВ int mV= val1*1000/1024; // перевод в градусы цельсия int t=(mV-500)/10+75;//t=23; Serial.print("TempTMP36= "); Serial.print(t);Serial.println(" C"); display.print("airT=");display.print(t);display.print(" C"); // получение значения с аналогового вывода фоторезистора display.setCursor(5,40); int val2=analogRead(pinPhotoresistor); Serial.print("Light= "); Serial.println(val2); display.print("Light=");display.print(val2); // обновить display.display(); // вывод состояние полива, лампы, вентилятора Serial.print("pump - "); Serial.println(statusRelays[2]); Serial.print("fun - "); Serial.println(statusRelays[1]); Serial.print("lamp - "); Serial.println(statusRelays[0]); //// проверка условий // увлажненность почвы if(val0 > MOISTURE_DETECT) digitalWrite(LED_MOISTURE,HIGH); else digitalWrite(LED_MOISTURE,LOW); // температура воздуха if(t > TEMP_DETECT) digitalWrite(LED_TEMP,HIGH); else digitalWrite(LED_TEMP,LOW); // освещенность if(val2 < LIGHT_DETECT) digitalWrite(LED_LIGHT,HIGH); else digitalWrite(LED_LIGHT,LOW); // пауза 5 секунд Serial.println(); } // проверка нажатия кнопок выбора программ for(int i=0;i<COUNT_BUTTONS;i++) { currentButtons[i] = debounce(lastButtons[i],pinButtons[i]); if (lastButtons[i] == 0 && currentButtons[i] == 1) // если нажатие... { doButtons(i); } lastButtons[i] = currentButtons[i]; } } // при нажатии кнопок void doButtons(int but) { // изменить статус statusRelays[but]=!statusRelays[but]; // изменить состояние реле digitalWrite(pinRelays[but],statusRelays[but]); } /* Функция сглаживания дребезга * Принимает в качестве аргумента предыдущее состояние кнопки, * и выдает фактическое. */ int debounce(int last,int pin1) { int current = digitalRead(pin1); // Считать состояние кнопки if (last != current) // если изменилось... { delay(5); // ждем 5мс current = digitalRead(pin1); // считываем состояние кнопки return current; // возвращаем состояние кнопки } }
После загрузки скетча на плату мы можем управлять включением/выключением насоса, лампы, вентилятора с помощью кнопок. В последовательный порт выводим показания датчиков и состояние реле — полив, вентиляция, освещение, (рисунок 7), которое мы устанавливаем с помощью кнопок. На дисплее – показания датчиков.
Рисунок 7. Вывод данных в последовательный порт.
А вот и наш выращиваемый цветок (рисунок 8).
Рисунок 8, 9. Проект «Домашний цветок».
Далее модернизируем систему, в следующем уроке мы будем осуществлять функции мониторинга и управления с телефона или планшете с операционной системой Android.
4 комментария
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Спасибо! Очень интересно, особенно для новичка. Неплохо бы видео сделать под этот материал. По крайней мере мне так легче воспринимать.
здравствуйте, не совсем понятно как подключаются реле, опишите подробнее пожалуйста
Статьи классные, но, вот если бы чуть поподробней. Поэкспериментировал с первым уроком, все получилось, а вот при переходе ко второму и третьему уроку — начались проблемы. Всё собрал согласно схем, с одним только отличием — плата LCD синего цвета и каких только библиотек я ей не предлагал, но все тщетно. Разобраться не поможет уважаемый редактор.
А можно увидеть принципиальную электронну схему, а не макетную)
Если вас не затруднит, в какой программе вообще рисовали?