Терморегулятор на базе DCCduino Nano
- 350.00грн
-
Данный терморегулятор является логичным продолжением проекта "Термометр + гигрометр на базе Arduino Nano с графическим дисплеем" с добавлением возможности управления двумя реле и использованием символьного дисплея вместо графического.
Устройство отображает на дисплее текущую температуру и влажность, а в случае выхода значений температуры за установленные пределы включает одно из двух реле (в нашем примере Реле 1 включается при падении температуры ниже 16 градусов, а Реле 2 - при подъеме выше 30).
Набор для сборки терморегулятора состоит из платы DCCduino Nano v3.0, датчика температуры и влажности DHT11, символьного дисплея 1602, 2-канального реле HL-52S V1.0 и набора необходимых проводов. Диапазон измерения: температура - 0-50"С, влажность - 20-90%.
Комплектация:
- DCCduino Nano в антистатической упаковке
- датчика температуры и влажности DHT11
- дисплей 1602
- модуль реле HL-52S V1.0
- 11 проводников для соединения модулей
- USB кабель
Инструкция по сборке:
1) Скачайте и установите последнюю Arduino IDE версии 1.0.4. На указанном сайте также можно найти информацию по первичной настройке и работе с IDE, а также ответы на основные вопросы по работе с ней.
2) Подключите к компьтеру плату DCCduino Nano и загрузите в нее следующий скетч:
#include <LiquidCrystal.h> // подключение LCD библиотеки #define dht11_pin 14 // определение номера порта #define relay_1 9 // определение номера порта #define relay_2 10 // определение номера порта LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // инициализация библиотеки с // указанием пинов подключения к Arduino byte read_dht11_dat() //далее функция считывания одного байта данных с датчика { byte i = 0; byte result=0; for(i=0; i< 8; i++) { while (!digitalRead(dht11_pin)); // ожидание получения "1" с датчика delayMicroseconds(30); if (digitalRead(dht11_pin) != 0 ) // если значение осталось "1" через 30 мксек bitSet(result, 7-i); // запись бита в результат while (digitalRead(dht11_pin)); // ожидание окончания "1" } return result; } void setup() { lcd.begin(16, 2); // установка количества символов и строк дисплея pinMode(dht11_pin, OUTPUT); //установка порта dht11_pin в режим выхода digitalWrite(dht11_pin, HIGH); //установка на нем высокого уровня pinMode(relay_1, OUTPUT); //установка порта relay_1 в режим выхода digitalWrite(relay_1, HIGH); // установка высокого уровня pinMode(relay_2, OUTPUT); //установка порта relay_1 в режим выхода digitalWrite(relay_2, HIGH); // установка высокого уровня } void loop() { byte dht11_dat[5]; byte dht11_in; byte i; int curr_temp, curr_hum; //------------------------------------------------------------------------- digitalWrite(dht11_pin, LOW); // установка низкого уровня delay(18); // задержка 18 мс digitalWrite(dht11_pin, HIGH); // установка высокого уровня delayMicroseconds(1); // задержка 1 мкс pinMode(dht11_pin, INPUT); //установка порта dht11_pin в режим входа delayMicroseconds(40); // задержка 40 мкс if (digitalRead(dht11_pin)) // далее проверка получения сигналов готовности датчика { lcd.setCursor(0, 0); // установка курсора lcd.print("cond. 1 not met"); // вывод текста на дисплей delay(1000); return; } delayMicroseconds(80); if (!digitalRead(dht11_pin)) { lcd.setCursor(0, 0); // установка курсора lcd.print("cond. 2 not met"); // вывод текста на дисплей return; } delayMicroseconds(80); // задержка 80 мкс for (i=0; i<5; i++) // прием 5 байт данных { dht11_dat[i] = read_dht11_dat();} // с помощью функции read_dht11_dat pinMode(dht11_pin, OUTPUT); //установка порта dht11_pin в режим выхода digitalWrite(dht11_pin, HIGH); // установка высокого уровня byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// проверка контрольной суммы if(dht11_dat[4]!= dht11_check_sum) // если она не совпадает: { lcd.setCursor(0, 0); // установка курсора lcd.print("Checksum error"); // вывод текста ошибки } curr_temp=int(dht11_dat[2]); // запись значения температуры в переменную curr_hum=int(dht11_dat[0]); // запись значения влажности в переменную //------------------------------------------------------------- lcd.clear(); lcd.setCursor(0, 0); // установка курсора lcd.print("Temp:"); // вывод текста на дисплей lcd.setCursor(5, 0); // установка курсора lcd.print(curr_temp); // вывод теммературы на дисплей lcd.setCursor(8, 0); // установка курсора lcd.print("Hum:"); // вывод текста на дисплей lcd.setCursor(12, 0); // установка курсора lcd.print(curr_hum); // вывод теммературы на дисплей \ //--------------------------------------------------------------- if (curr_temp<16) // если температура ниже 16 градусов: {digitalWrite(relay_1, LOW);} // включаем реле 1 else // если нет: {digitalWrite(relay_1, HIGH);} // выключаем реле 1 //---------------------------------------------------------------- if (curr_temp>30) // если температура выше 30 градусов: {digitalWrite(relay_2, LOW);} // включаем реле 2 else // если нет: {digitalWrite(relay_2, HIGH);} // выключаем реле 2 //---------------------------------------------------------------- delay(2000); // задержка 2 с }
3) Если после загрузки скетча Вы получили сообщение "Done uploading.", значит все сделано правильно и можна приступать к следующему этапу - соединению модулей. Их необходимо соединить с помощью идущих в комплекте проводников по следующей схеме:
Выводы Arduino | Выводы LCD | Выводы DHT11 | Выводы реле |
5v | Vdd | + | Vcc |
GND | Vss | - | GND |
D2 | D7 | ||
D3 | D6 | ||
D4 | D5 | ||
D5 | D4 | ||
D9 | In1 | ||
D10 | In2 | ||
D11 | E | ||
D12 | RS | ||
A0 | out |
Примечание для тех кто будет собирать схему на базе своих комплектующих: необходимо дополнительно соединить перемычкой выводы Vss и RW дисплея, а также через потенциометр или обычный резистор подать нужное напряжение для установки уровня контрастности (в нашем случае - резистор на 2 кОм между Vss и V0). Если будет использоваться дисплей подобный нашему (требующий подсветки) - также нужно подать на входы дисплея A и K напряжение для питания подсветки. Если же вы покупаете набор у нас, то все необходимые соединения на дисплее 1602 уже сделаны.
4) После сборки еще раз проверьте правильность подключения, если все правильно - на устройство можно подавать питание.
5) Через пару секунд после подачи питания на дисплее появятся показания текущей температуры и влажности. В случае выхода значений температуры за установленные пределы будут включатся соответствующие реле.