Страницы

пятница, 28 июня 2013 г.

Сенсор температуры и влажности на DHT11 и выводом на LCD 1602A V1.0

Технические параметры:

   Cенсор DHT11:
• Напряжение питания: 3-5 В
• Определяемая влажность: 20-80% ± 5%
• Определяемая температура: 0-60º ± 2%
• Частота опроса: ≤ 1 Гц
• Размеры: 15.5 x 12 x 5.5 мм
Библиотека dht (Установка: скопируйте директорию lib/dht в директорию libraries своего Arduino IDE.)

   Экран LCD 1602A V1.0:
• Напряжение питания: 3-5В
• Разрешение: 16 символов х 2 строки
• Количество контактов: 16
• Язык: Английский  
 Входные данные: 4-бит или 8 бит интерфейс

Подключение:


Экран LCD 1602A V1.0:
Вывод Обозначение Назначение вывода
1 GND Общий вывод (0В)
2 UCC Напряжение питания (5В/3В)
3 Uо Управление контрастностью
4 A0 Адресный сигнал — выбор между передачей данных и команд управления
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8 ми битный режим)(младший бит в 8 ми битном режиме)
8 DB1 Шина данных (8 ми битный режим)
9 DB2 Шина данных (8 ми битный режим)
10 DB3 Шина данных (8 ми битный режим)
11 DB4 Шина данных (8 ми и 4 х битные режимы)(младший бит в 4 х битном режиме)
12 DB5 Шина данных (8 ми и 4 х битные режимы)
13 DB6 Шина данных (8 ми и 4 х битные режимы)
14 DB7 Шина данных (8 ми и 4 х битные режимы) (старший бит)
15 +LED + питания подсветки
16 –LED – питания подсветки

Моё подключение к Arduino:
LCD 1 - Земля
LCD 2 - Питание +5В 
LCD 3 - Земля
LCD 4 - Arduino 4
LCD 5 - Земля(Режим записи)
LCD 6 - Arduino 5
LCD 11 - Arduino 10
LCD 12 - Arduino 11
LCD 13 - Arduino 12
LCD 14 - Arduino 13
LCD 15 - Питание +5В
LCD 16 - Земля

 Датчик DHT11:
Подключается к любом аналоговому порту. (A0, Питание +5В, Земля)
1. Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1
2. Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1
3. После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, во третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания
Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет очень небольшой ток.

Скетч загружаемый на Arduino:

#include <LiquidCrystal.h> //Загрузка  библиотеки для LCD экрана
#include <dht.h> //Загрузка библиотеки для DHT11/DHT22 датчика
DHT sensor = DHT(); //Создаём объект-сенсор
/*
Инициализирует объект-экран, передаём использованные
для подключения контакты на Arduino порядке:
RS, E, DB5, DB6, DB7, DB8
**/
LiquidCrystal lcd(4,5,10,11,12,13);
void setup(){
  lcd.begin(16,2); //Устанавливаем размер экрана(символов, строк)
  sensor.attach(A0); //методом attach объявляем к какому контакту подключен сенсор.
  lcd.print("Loading..."); //Вывод сообщения на экран
  delay(5000); // Ждем 5 секунд до готовности сенсора к работе
  lcd.clear(); // Отчищаем экран
}
void loop(){
 sensor.update(); // метод update заставляет сенсор выдать текущие измерения
    switch (sensor.getLastError())
    {
        case DHT_ERROR_OK:
            char msg[128];
            lcd.clear(); //Отчистка экрана для новых показаний
            lcd.print("HUM:"); //Вывод надписи
            lcd.setCursor(5, 0); // Установка курсора в 6 клетку 1 строки
            lcd.print(sensor.getHumidityInt()); //Считывание и вывод влажности
            lcd.print("%");
            lcd.setCursor(0, 1);
            lcd.print("TEMP:");
            lcd.setCursor(5, 1);
            lcd.print(sensor.getTemperatureInt());//Считывание и вывод температуры
            lcd.print("C");
            break;
        case DHT_ERROR_START_FAILED_1:
             lcd.clear();
             lcd.print("start failed  1");//Возникает когда нет соединения с сенсором 
            break;
        case DHT_ERROR_START_FAILED_2:
             lcd.clear();
             lcd.print("start failed  2");//Возникает когда не может связаться с сенсором(не загруженна библиотека dht)
            break;
        case DHT_ERROR_READ_TIMEOUT:
             /*
             Периодически возникающая ошибка чтения с датчика (Error: read timeout),
             как я понял, возникает она у всех по разному и с разными интервалами
             скорей всего это зависит от самого датчика.
             **/
             lcd.setCursor(15,0); // Отображает в верхнем углу дисплея Х, чтобы  
             lcd.print("X");      // на экране сохранялись предыдущие показания
            break;                
        case DHT_ERROR_CHECKSUM_FAILURE:
             lcd.clear();
             lcd.print("checksum error");// Неверная контрольная сумма.
            break;
    }
 delay(4000); //Время обновления показаний (ниже 2-3сек сенсор работает с ошибками)
 }

Комментариев нет:

Отправить комментарий

SQRT(-1) love you!