Система управления микроклиматом теплицы

от автора


Начало пути

Одним солнечным деньком, придя в универ, я узнал, что в этом семестре у меня курсовой по схемотехнике. Преподаватель предлагал сделать только пояснительную записку «как реализовать проект» или же познать темную сторону инженерии и создать реальное устройство. А так, как я был уже на 4ом курсе, и вспомнив, что единственный раз когда я применял на практике свои навыки инженера был на первом курсе (прикрутил к стене книжную полку), я решил «поработать ручками». После недолгих размышлений, мною была выбрана тема «Система управления микроклиматом теплицы». Скорее всего на выбор повлияла моя любовь к автоматизации процессов, или же то, что я и сам занимался разведением огурцов в теплицах. Но не будем долго тянуть — начинаем.

Поиски материалов

От друзей и преподавателя услышал о платформе Arduino. Немного почитав про ардуинку и посмотрев пару реализованных проектов, желание создать что-нибудь свое стало еще больше. Для реализации проекта решил использовать Arduino Nano v3. Оригинал стоил чуть больше 20$, за копию отдал 10. Конечно дешевле было бы заказать на Aliexpress, но у меня не было ни времени, ни желания ждать целый месяц — хотелось начать немедленно.

C платой микроконтроллера определился и самое время решить, какие мне нужны датчики. Немного поразмышляв, решил в первый раз не делать что-то масштабное (как я люблю говорить «краткость — сестра таланта») и ограничиться тремя основными составляющими микроклимата теплицы — температура, освещенность и влажность почвы. Разберем все по порядку:

  1. Датчик температуры

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

    image

    Датчик имеет следующую распиновку:

    1. 5V
    2. Чтение данных
    3. Не используется
    4. Земля

    Диапазон измерений:

    • Температуры — 0 — 50°C ± 2°C
    • Влажности воздуха — 20 — 95% ± 5%

    Подключаем по следующей схеме:

    image

    // подключаем библиотеку #include <dht.h>   // создаём объект-сенсор DHT sensor = DHT();   void setup() {     Serial.begin(9600);       // методом attach объявляем к какому контакту подключен     // сенсор. В нашем примере это нулевой аналоговый контакт     sensor.attach(A1);     //     // после подачи питания ждём секунду до готовности сенсора к работе     delay(1000); }   void loop() {     // метод update заставляет сенсор выдать текущие измерения     sensor.update();       switch (sensor.getLastError())     {         case DHT_ERROR_OK:             char msg[128];             // данные последнего измерения можно считать соответствующими             // методами             sprintf(msg, "Temperature = %dC, Humidity = %d%%",                      sensor.getTemperatureInt(), sensor.getHumidityInt());             Serial.println(msg);             break;         case DHT_ERROR_START_FAILED_1:             Serial.println("Error: start failed (stage 1)");             break;         case DHT_ERROR_START_FAILED_2:             Serial.println("Error: start failed (stage 2)");             break;         case DHT_ERROR_READ_TIMEOUT:             Serial.println("Error: read timeout");             break;         case DHT_ERROR_CHECKSUM_FAILURE:             Serial.println("Error: checksum error");             break;     }       delay(2000); } 

  2. Датчик освещенности

    image

    Очень простой датчик, состоящий из компаратора LM393 и фоторезистора. Все пины подписаны, и не нуждаются в разъяснении.

    int sensorPin = A0;            // устанавливаем входную ногу для АЦП unsigned int sensorValue = 0;  // цифровое значение фоторезистора   void setup() {   pinMode(13, OUTPUT);   Serial.begin(9600);        // старт последовательного вывода данных (для тестирования) }   void loop() {   sensorValue = analogRead(sensorPin);  // считываем значение с фоторезистора   if(sensorValue<500) digitalWrite(13, HIGH);   // включаем   else digitalWrite(13, LOW);   // выключаем       // Для отладки раскомментируйте нижеследующие строки   //Serial.print(sensorValue, DEC);     // вывод данных с фоторезистора (0-1024)   //Serial.println("");                 // возврат каретки     //delay(500);   } 


  3. Датчик влажности почвы


    image

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

     Value = analogRead(A2);  // считываем значение с датчика влажности почвы 

С датчиками определился. Самое время подумать о красивом корпусе. Пошарив по волнам интернета нашел вот этого красавца и решил: мой курсач будет в нем.

image

Но т.к. в нем есть отверстие под дисплей, у меня не осталось выбора как «добавить» в курсовую индикацию с помощью дисплея. Мною было принято решение использовать простой в обращении lcd 1602:

image

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

В качестве источника питания использую крону на 9В. С материалами покончено. Приступаем к разработке.

Разработка

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

image

image

Датчики сделал отдельно от основного корпуса:

image

image

Буду рад любой критике.

ссылка на оригинал статьи http://geektimes.ru/post/268798/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *