Терморегулятор на базе DCCduino Nano

Код товара: Termit v1.0
Доступность: На складе
Артикул: 1008-1106

  • 250.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) Через пару секунд после подачи питания на дисплее появятся показания текущей температуры и влажности. В случае выхода значений температуры за установленные пределы будут включатся соответствующие реле.

Внимание: HTML не поддерживается! Используйте обычный текст!