Измерить
температуру в проектах ARDUINO можно несколькими
способами. Самые распространенные:
·
Термистор (аналог)
·
LM35 (аналог)
·
DHT11 (цифра)
·
18B20 (цифра)
Рассмотрим
цифровой датчик DHT11. Для подключения требуется три провода. Выдает цифровое значение температуры и влажности
·
Питание от 3 до 5.5 В. Есть
возможность запитать от дата линии (подключение по двум проводам)
·
Диапазон от –55°C до +125°C
(–67°F to +257°F )
·
Точность ±0.5°C
от –10°C до +85°C
Продается как
отдельно так и в виде модуля. Первый вариант в разы дешевле (всего 100 руб). Во
втором варианте уже есть резистор 4,7 кОм, нужный для подключения.
Подключаем по
схеме. Обратите внимание, выход датчика подключен ко второму пину ARDUINO. В двух последних примерах он будет подключен к 6 пину, т.к второй используется для подключения дисплея.
Рассмотрим
примеры работы.
1.
Вывод результатов на serial monitor
Тут все просто. Подключаем датчик, открываем serial monitorи каждые две секунды видим показания
влажности и температуры
// DHT11 (С)2013 ALEN Studio by Little_Red_Rat
// Измерение температуры
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2
void setup()
{
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (oC): ");
Serial.println((float)DHT11.temperature, 2);
delay(2000);
}
2.
Вывод результатов на дисплей 1602
Немного помучимся зато напишем слова ТЕМПЕРАТУРА и ВЛАЖНОСТЬ по русски. Для этого
добавим символы П,У,Л,Ж,Ь.
// DHT11 (С)2013 ALEN Studio by Little_Red_Rat
// Измерение температуры
#include <LiquidCrystal.h>
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 6
byte PE_lit[8] =
{
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000,
};
byte EL_lit[8] =
{
B00111,
B01001,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000,
};
byte ZH_lit[8] =
{
B10001,
B10101,
B10101,
B01110,
B10101,
B10101,
B10001,
B00000,
};
byte MZ_lit[8] =
{
B10000,
B10000,
B10000,
B11110,
B10001,
B10001,
B11110,
B00000,
};
byte U_lit[8] =
{
B10001,
B10001,
B10001,
B01111,
B00001,
B00001,
B11110,
B00000,
};
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.createChar(1, PE_lit);
lcd.createChar(2, U_lit);
lcd.createChar(3, EL_lit);
lcd.createChar(4, ZH_lit);
lcd.createChar(5, MZ_lit);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("TEM\1EPAT\2PA");
lcd.setCursor(1, 1);
lcd.print("B\3A\4HOCT\5");
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
lcd.setCursor(12, 0);
lcd.print((float)DHT11.temperature, 1);
lcd.setCursor(12, 1);
lcd.print((float)DHT11.humidity, 1);
delay(2000);
}
3. Вывод результатов на дисплей NOKIA 5110
Для большей
наглядности выведем показания крупными цифрами, благо что этот шрифт уже есть в
библиотеке. Красиво, но теперь для одновременного вывода обеих значений не хватает места. Выход найден, будем выводить влажность и температуру
поочередно.
// DHT11 (С)2013 ALEN Studio by Little_Red_Rat
// Измерение температуры
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 6
#include <LCD5110_Graph.h>
LCD5110 myGLCD(8,9,10,12,11);
extern uint8_t BigNumbers[];
extern uint8_t SmallFont[];
void setup()
{
myGLCD.InitLCD(); // в качестве параметра можно указать контрастность (0-127), по умолчанию 79
myGLCD.setFont(SmallFont);
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.print("Temperature: ", CENTER, 5);
myGLCD.setFont(BigNumbers);
myGLCD.printNumI(DHT11.temperature, CENTER, 20);
myGLCD.update();
delay(2000);
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.print("Humidity: ",CENTER, 5);
myGLCD.setFont(BigNumbers);
myGLCD.printNumI(DHT11.humidity, CENTER, 20);
myGLCD.update();
delay(2000);
}
// DHT11 (С)2013 ALEN Studio by Little_Red_Rat
// Измерение температуры
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 6
#include <LCD5110_Graph.h>
LCD5110 myGLCD(8,9,10,12,11);
extern uint8_t BigNumbers[];
extern uint8_t SmallFont[];
void setup()
{
myGLCD.InitLCD(); // в качестве параметра можно указать контрастность (0-127), по умолчанию 79
myGLCD.setFont(SmallFont);
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.print("Temperature: ", CENTER, 5);
myGLCD.setFont(BigNumbers);
myGLCD.printNumI(DHT11.temperature, CENTER, 20);
myGLCD.update();
delay(2000);
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.print("Humidity: ",CENTER, 5);
myGLCD.setFont(BigNumbers);
myGLCD.printNumI(DHT11.humidity, CENTER, 20);
myGLCD.update();
delay(2000);
}
А работаете ли вы с ктс-б? Можно ли применять все это к этим комплектам? В Теплоком можно посмотреть на ктс-б цена на сайте плюс характеристики.
ОтветитьУдалитьктс-б цена
да, еще у меня вопрос - какое ваше мнение об расходомерам ПРЭМ: energoteplolider.ru. Что о них скажете???
ОтветитьУдалить