Цей терморегулятор є логічним продовженням проекту "Термометр + гігрометр на базі Arduino Nano з графічним дисплеєм" з додаванням можливості керування двома реле та використанням символьного дисплея замість графічного.
Пристрій відображає на дисплеї поточну температуру та вологість, а у разі виходу значень температури за встановлені межі включає одне з двох реле (у нашому прикладі Реле 1 включається при падінні температури нижче 16 градусів, а Реле 2 - підйом вище 30).
Набір для складання терморегулятора складається із плати DCC duino Nano v3. 0 , датчика температури та вологостіDHT11 , символьного дисплея1602, 2-канального релеHL-52S V1.0 та набору необхідних проводів. Діапазон вимірювання: температура – 0-50”С, вологість – 20-90%.
Комплектація:
- DCC duino 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, 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_datdigitalWrite (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) Через кілька секунд після подачі живлення на дисплеї з'являться показання поточної температури та вологості. У разі виходу значень температури за встановлені межі включатимуться відповідні реле.
