Четверг, 22.11.2018, 14:16
Приветствую Вас Гость

Пайки.NET

Главное меню
Категории раздела
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Инструкции к конструкторам » Термометр DHT11

Arduino конструктор выпуск #1. Цифровой термометр и измеритель влажности воздуха DHT11

Данный радиоконструктор представляет собой простую модель измерителя температуры и относительной влажности воздуха с выводом информации на двустрочный дисплей.  
Диапазон измерений: температура – 0-500С; относительная влажность – 20-90%. 
Погрешность измерений: температура – 20С; относительная влажность – 5%

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



Состав конструктора:

1.Плата RobotDyn UNO R3 (1 шт.)

2.Макетная плата на 400 точек (1 шт.)

3.LCD дисплей формата 1602 (1 шт.)

4.I2C адаптер для LCD дисплея (1 шт.)

Для удобства модули могут быть уже соединены 

5.Модуль влажности и температуры RobotDyn на базе датчика DHT11 (1 шт.)

6.Соединительные провода «штекер-штекер» (2 шт.)

7.Соединительные провода «штекер-гнездо» (10 шт.)

Для удобства данные провода разделены на 3 шлейфа: один из четырех проводов - для I2C адаптера, два из трех проводов - для модуля датчика DHT11

8.Кабель MicroUSB (1 шт.)

9.Инструкция (1 шт.)


Схема сборки:


Порядок сборки:

1.Извлеките элементы конструктора из упаковки.

2.Расположите макетную плату перед собой таким образом, чтобы верхняя горизонтальная дорожка была отмечена как «+» (красной полосой).

3.Расположите на макетной плате LCD дисплей (1) и I2C адаптер (2) как показано на схеме.

4.Соедините контакты на плате RobotDyn UNO GND (3) и 5V (4) с дорожками «-» и «+» соответственно.

5.Соедините выход GND на I2C адаптере c дорожкой, отмеченной как «-» (5), а выход VCC с дорожкой, отмеченной как «+» (6).

               

6.Соедините выход GND на модуле с датчиком DHT11 c дорожкой, отмеченной как «-» (7), а выход VCC с дорожкой, отмеченной как «+» (8).

              

7.Соедините выход SDA на I2C адаптере c аналоговым выходом A4 на плате RobotDyn UNO (9), а выход SCL с аналоговым выходом A5 (10).

8.Соедините выход OUT на модуле с датчиком DHT11 c цифровым выходом 2 на плате RobotDyn UNO (11).

9.Подключите плату RobotDyn UNO к сети с помощью Micro USB кабеля.

10.Настройте контрастность дисплея с помощью потенциометра, установленного на I2C адаптере.

 


Используемые библиотеки:

I2C LCDDHT.


Определение I2C адреса подключенных устройств


Код скетча для конструктора:

//РАДИОПРОФИЛЬ Конструктор #1
//Цифровой термометр и измеритель влажности воздуха DHT11
//http://bezpaiki.ucoz.net/
//http://radioprofile.ru/ 
//Автор скетча tisha

//****************************************************************************************

//подключаем библиотеки для работы с I2C переходником и датчиком DHT                           
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

//Задаем параметры дисплея: I2C адрес, число столбцов, число строк
//Более подробно про I2C адрес:http://bezpaiki.ucoz.net/publ/matchast/chto_takoe_arduino/opredelenie_i2c_adresa_podkljuchennykh_ustrojstv/3-1-0-6
LiquidCrystal_I2C lcd(0x3F,16,2);

//Задаем параметры датчика DHT: тип датчика и цифровой вход, к которому подключен датчик
#define DHTTYPE DHT11
int tempPin = 2;
DHT dht(tempPin, DHTTYPE);

//Задаем переменные для значений температуры и влажности
int temp;
int hum;

//Так как наш дисплей не поддерживает русский алфавит, создаем вручную недостающие символы
//Память генератора знаков допускает создания до 8 пользовательских символов
//В нашем случае это "м","п","т","л","ж","н","ь" и символ градуса
//Для удобства можно воспользоваться сервисом https://omerk.github.io/lcdchargen/

//Буква м
byte m[8] = {
  0b00000,
  0b00000,
  0b10001,
  0b11011,
  0b10101,
  0b10001,
  0b10001,
  0b00000
};

//Буква п
byte p[8] = {
  0b00000,
  0b00000,
  0b11111,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b00000
};

//Буква т
byte t[8] = {
  0b00000,
  0b00000,
  0b11111,
  0b00100,
  0b00100,
  0b00100,
  0b00100,
  0b00000
};

//Буква л
byte l[8] = {
  0b00000,
  0b00000,
  0b00111,
  0b01001,
  0b01001,
  0b01001,
  0b11001,
  0b00000
};

//Буква ж
byte j[8] = {
  0b00000,
  0b00000,
  0b10101,
  0b10101,
  0b01110,
  0b10101,
  0b10101,
  0b00000
};

//Буква н
byte n[8] = {
  0b00000,
  0b00000,
  0b10001,
  0b10001,
  0b11111,
  0b10001,
  0b10001,
  0b00000
};

//Буква ь
byte mz[8] = {
  0b00000,
  0b00000,
  0b10000,
  0b10000,
  0b11110,
  0b10001,
  0b11110,
  0b00000
};

//Символ градуса
byte grad[8] = {
 0b01100,
  0b10010,
  0b10010,
  0b01100,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

//Метод setup выполняет первичную настройку, обьявляет переменные, инициализирует устройства
void setup() {
  
  //Инициализация дисплея и включение подсветки
  lcd.init();
  lcd.backlight();

  //Инициализация датчика DHT11
  dht.begin();

  //Дадим датчику немного времени, чтобы произвести самодиагностику и считать данные
  //Время задержки передается в метод delay в миллисекундах
  delay(3000);

  //Добавляем в память знакосинтезатора дисплея созданные буквы
  //Индексы символов могут иметь значения от 0 до 7, всего 8
  //Так как вывод символа с индексом 0 имеет свои особенности, а нам необходимо создать 7 букв, то используем индексы 1-7
  //В метод lcd.createChar передаются два параметра: индекс и имя байтового массива для создаваемой буквы
  lcd.createChar(1, m);
  lcd.createChar(2, p);
  lcd.createChar(3, t);
  lcd.createChar(4, l);
  lcd.createChar(5, j);
  lcd.createChar(6, n);
  lcd.createChar(7, mz);

  //Поскольку символ градуса исползуется отдельно от слов, присвоим индекс 0 ему
  lcd.createChar(0, grad);

  //Установим курсор на первую позицию первой строки дисплея и выведем слово "Температура", используя подобные латинские символы и созданные русские
  //Так как нумерация строк и столбцов в массиве символов дисплея начинается с нуля, для первой строки индексы будут 0,0
  lcd.setCursor(0,0);

  //Печатаем текст. Созданные символы выводим через \index: Для "м"-\1, "п"-\2, "т"-\3 и так далее
  lcd.print("Te\1\2epa\3ypa");

  //Переходим на вторую строку и печатаем "Влажность"
  lcd.setCursor(0,1);
  lcd.print("B\4a\5\6oc\3\7");  
}

//Метод loop выполняется в бесконечном цикле после работы метода setup
//Именно в этом методе происходят все главные действия программы
void loop() {

  //Получаем значения температуры и влажности с датчика DHT11
  //По умолчанию датчики возвращат значения в виде дробных значений (float)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  //Приведем, для удобства, эти значения к целым (int)
  hum = (int) h;
  temp = (int) t;

  //Затем выведем их на дисплей
  //Установим курсор для вывода значения температуры и напечатаем его
  lcd.setCursor(12, 0);
  lcd.print(temp);

  //Установим курсор для вывода символа градуса
  //Обратите внимание, что символ с индексом 0 выводится командой lcd.write(0)
  lcd.setCursor(14, 0);
  lcd.write(0); 

  //Далее напечатаем, что температура измерена в цельсиях
  lcd.setCursor(15, 0);
  lcd.print("C");

  //Установим курсор для вывода значения влажности и напечатаем его
  lcd.setCursor(12, 1);
  lcd.print(hum);

  //Напечатаем символ "%" после значения влажности
  lcd.setCursor(14, 1);
  lcd.print("%");

  //Далее, чтобы избежать чрезмерного мерцания экрана, будем выводить измеренные параметры каждые 2 секунды
  delay(2000);

  //После выполнения команды "delay(2000);", программа перейдет в самое начало метода loop и будет бесконечно повторять все команды, пока к устройству подается питание
  }


 

Категория: Термометр DHT11 | Добавил: tisha (05.09.2016)
Просмотров: 1268
Всего комментариев: 0
Вход на сайт
Поиск
Полезные ссылки