Измерить
температуру в проектах 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);
}








