Индикация показаний при проектировании Умной теплицы на Ардуино
В прошлой статье «Умная теплица на Arduino делаем первые шаги» мы реализовали функции мониторинга данных для нашей Умной теплицы – проект «Домашний цветок».
Все данные с датчиков (давления, температуры, освещенности) мы отправляли в монитор последовательного порта. Смотреть показания датчиков через последовательный порт не совсем удобно, сегодня мы рассмотрим более удобную индикацию показаний. Во-первых, мы реализуем вывод данных с датчиков на дисплей, во-вторых, мы подключим светодиоды, которые будут сигнализировать о наступлении неблагоприятных климатических условий, требующих нашего вмешательства (например, пониженная увлажненность почвы, слишком высокая температура, недостаточная освещенность).
Дополнительно к деталям, использовавшимся в первой части нам понадобятся следующие детали:
- Светодиод красный – 3шт;
- Резистор 220 Ом – 3 шт;
- ЖК-экран (Nokia 5110);
Светодиоды и резисторы имеются в каждом из наборов «Дерзай» («Базовый», «Изучаем Arduino» и «Умный дом»). Выбор двухцветного графического ЖК-дисплея Nokia 5110 (рисунок 1) обусловлен его дешевизной и пониженным энергопотреблением, позволяющим подключать его к плате Arduino без дополнительного питания. Вы можете выбрать другой – например WH1602 с интерфейсом I2C, позволяющим максимально экономить контакты Arduino (всего 2, к которым можно подключать и другие устройства I2C).
Теперь соберем на макетной плате схему, представленную на рисунке 2 (схема из первой части с добавлением светодиодов и дисплея Nokia 5110).
Рисунок 2. Схема соединения для мониторинга параметров для проекта на Arduino «Домашний цветок».
Приступим к написанию скетча. Составим условия, когда необходимо сигнализировать светодиодами о наступлении неблагоприятных климатических условий. Это следующие:
- температура воздуха > TEMP_DETECT;
- увлажненность почвы < MOISTURE_DETECT;
- освещенность < LIGHT_DETECT.
Значения для констант TEMP_DETECT, MOISTURE_DETECT, LIGHT_DETECT необходимо определить самостоятельно. При наступлении неблагоприятного параметра будет загораться соответствующий светодиод, он будет сигнализировать нам, что необходимо предпринять какие-то действия:
- включить полив почвы;
- включить лампу освещения;
- включить вентилятор.
Пины Arduino для подключения светодиодов определены константами LED_TEMP, LED_MOISTURE, LED_LIGHT.
Текущие значения температуры и влажности воздуха, увлажненности почвы и освещенности будем выводить на дисплей Nokia 5110. Для работы с дисплеем будем использовать Arduino библиотеки Adafruit_GFX и Adafruit_PCD8544.
Создадим в 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 // создание экземпляра объекта DHT DHT dht(pinDHT11, DHTTYPE); // Nokia 5110 // pin 13 - Serial clock out (SCLK) // pin 12 - Serial data out (DIN) // pin 11 - Data/Command select (D/C) // pin 10 - LCD chip select (CS) // pin 8 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(13, 12, 11, 10, 8); 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() { 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(); //// проверка условий // увлажненность почвы 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(); delay(5000); }
После загрузки скетча на плату, открываем монитор последовательного порта и наблюдаем вывод значений с показаниями наших датчиков (рисунок 3).
Рисунок3. Вывод значений с показаниями наших датчиков в монитор последовательного порта Arduino.
А вот и наш выращиваемый цветок (рисунок 4,5). Вывод значений на ЖК-дисплей и светодиоды, сигнализирующие о наступлении неблагоприятных климатических условий.
Рисунок 4,5. Проект «Домашний цветок»
В следующих уроках нам необходимо будет организовать полив цветка, обдув, освещение. Т.е. добавить нашей Умной теплице функции управления.
8 комментариев
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Хотелось бы увидеть дельнейшее написание статей по оборудованию умной теплицы. Когда и где можно будет их прочитать? Скоро начало сезона и хочется оборудовать свою теплицу. Константин.
9 или 10 декабря будет новая статья(3 часть)
Спасибо!
Когда появится продолжение статей про умную теплицу?
Вот 3 часть: http://playarduino.ru/uroki-arduino/organizatsiya-poliva-arduino/
Плохая программа. Датчик влажности почвы работает непрерывно и быстро выходит из строя по причине постоянного электролитического процесса. Замерять влажность достаточно два раза в день, остальное время датчик влажности почвы должен быть обесточен.
Нигде (включая даташит) не нашел подобных рекомендаций по обесточиванию датчика
У меня стоит на улице уже 2 года — и нормально
Конечно измерения для этого датчика можно производить гораздо реже раз в 10 мин — раз в 1 час
это можно изменить
Спасибо!
Очень хорошии у вас статьи!