Датчики температуры и влажности для Arduino

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

Сегодня Вы узнаете что такое:

Датчик температуры LM35

Датчик температуры LM35 позволяет очень просто получать значения температуры.

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

У датчика три вывода: питание и земля по краям и средний для вывода данных.

Датчик температуры LM35

Точность составляет почти 0.75 — 1 градус, а интервал показаний от -55 до +150. Но, в большинстве случаев, используются показания от 0 до 105.

Поэтому, если Вам нужны отрицательные температуры, то лучше использовать датчик TMP36.

Схема подключения

Схема подключения LM35

Скетч для работы с датчиком.

int raw = 0;
float temp = 0;

void setup() {
    Serial.begin(9600);
    pinMode( A0, INPUT );
}

void loop() {
    raw = analogRead(A0);
    temp = ( raw/1023.0 ) * 5.0 * 1000 / 10;
    Serial.println(temp);
    delay(1000); 
}

Датчик температуры и влажности DHT11

Существует целое семейство датчиков влажности и температуры DHT, их часто используют для создания домашних метеостанций.

Одновременное измерение температуры и относительной влажности в этих датчиках выглядит оправданным, поскольку второе напрямую зависит от первого. Так, повышение температуры батарей центрального отопления приводит к уменьшению относительной влажности воздуха.

Считается, что оптимальное значение влажности около 50% — именно при такой влажности растения, люди и животные чувствуют себя максимально комфортно.

Сам датчик представляет собой синий прямоугольник с решёткой и имеет четыре ножки, одна из которых (третья) не используется. Ножки имеют стандартное расстояние между собой и прибор легко устанавливается на макетную плату.

Датчики температуры и влажности для Arduino. DHT11

Ножки датчика

  1. VCC — Питание от 3 до 5 В
  2. DATA (OUT) — Вывод данных
  3. NC — Не подключается
  4. GND — Земля

Хотя DHT11 и является дешёвым датчиком, однако, его удобно использовать в домашних условиях и в учебных целях. Он не обеспечивает точные показания и имеет ограниченный диапазон измерений, но он очень популярен из-за своей простоты. Существуют и более дорогие аналоги, в частности его старший брат DHT22.

Датчики DHT состоят из двух основных частей: ёмкостный датчик влажности и термистор. Также в корпусе установлен простенький чип для преобразования аналогового сигнала в цифровой. Считывать цифровой сигнал на выходе достаточно просто, можно использовать любой контроллер, не только Arduino.

DHT11 в разрезе

Технические характеристики

  • Питание от 3 до 5В
  • Максимально потребляемый ток — 2.5мА при преобразовании (при запросе данных)
  • Рассчитан на измерение уровня влажности в диапазоне от 20% до 80%. Точность измерений в диапазоне 5%
  • Измеряет температуру в диапазоне от 0 до +50 градусов с точностью ±2°C
  • Частота измерений не более 1 Гц (одно измерение в секунду)
  • Размер корпуса: 15.5 мм x 12 мм x 5.5 мм

Схема подключения

Датчики температуры и влажности для Arduino. Схема подключения DHT11

Скетч для работы с датчиком

Воспользуемся библиотекой DHT.h, созданной специально для датчиков DHT. Ее можно скачать здесь. Для использования нужно поместить скачанную папку в папку /libraries.

#include "DHT.h"
#define DHTPIN 2 // номер пина, к которому подсоединен датчик

// Инициируем датчик
// Нужно выбрать тип датчика DHT22 или DHT11

DHT dht(DHTPIN, DHT11);
// DHT dht(DHTPIN, DHT22);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  // Задержка 2 секунды между измерениями
  delay(2000);

  //Считываем влажность
  float h = dht.readHumidity();

  // Считываем температуру
  float t = dht.readTemperature();

  // Проверка удачно прошло ли считывание.
  if (isnan(h) || isnan(t)) {
    Serial.println("Не удается считать показания");
    return;
  }

  // Выводим значения
  Serial.print("Влажность: "+h+" %\t"+"Температура: "+t+" *C ");
}

Модуль KY-015 с датчиком DHT11

Датчики температуры и влажности для Arduino. KY-015

Хороший вариант — готовая плата с уже установленными резистором и конденсатором. Она имеет три вывода, которые можно удобно разместить в макетной плате.

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

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

Схема подключения

Схема подключения KY-015

Скетч для работы с модулем

int DHpin = 8;
byte dat [5];
byte read_data () {
  byte data;
  for (int i = 0; i < 8; i ++) {
    if (digitalRead (DHpin) == LOW) {
      while (digitalRead (DHpin) == LOW); 
      delayMicroseconds (30); 
      if (digitalRead (DHpin) == HIGH)
        data |= (1 << (7-i)); 
      while (digitalRead (DHpin) == HIGH); 
     }
  }
return data;
}
 
void start_test () {
  digitalWrite (DHpin, LOW); 
  delay (30); 
 
  digitalWrite (DHpin, HIGH);
  delayMicroseconds (40); 
 
  pinMode (DHpin, INPUT);
  while (digitalRead (DHpin) == HIGH);
  delayMicroseconds (80);
  if (digitalRead (DHpin) == LOW);
  delayMicroseconds (80); 
 
  for (int i = 0; i < 4; i ++) // Получаем данные температуры и влажности
    dat[i] = read_data ();
 
  pinMode (DHpin, OUTPUT);
  digitalWrite (DHpin, HIGH); 
}
 
void setup () {
  Serial.begin (9600);
  pinMode (DHpin, OUTPUT);
}
 
void loop () {
  start_test ();
  Serial.print ("Vlazhnost = ");
  Serial.print (dat [0], DEC); // Выводим влажность

  Serial.print ('%');
  Serial.print ("  Temperatura = ");
  Serial.print (dat [2], DEC); // Выводим температуру 

  Serial.println ('C');
  delay (700);
}

Датчик температуры и влажности DHT22

Датчики температуры и влажности для Arduino. DHT22

По форм-фактору датчик похож на своего собрата. Может встречаться название Aosong AM2302.

DHT22 является более точным датчиком, по сравнению с DHT11.

Технические характеристики

  • Диапазон температур от -40° до +80° (у DHT11 этот показатель 0°..+50°).
  • Точность измерений температуры в диапазоне ±0.5°
  • Уровень влажности 0-99.9%.
  • Точность измерений влажности в диапазоне 2-4%.

Учитывая широкие диапазоны, датчик можно применять в сложных системах: вентиляция, кондиционирование, метеорологические станции.

Диапазон питания датчика составляет от 3.3В до 5.5В, поэтому его можно использовать в платах Arduino с пониженными напряжениями. Рекомендуемая длина кабеля, соединяющего DHT22 с MCU при питании от 3.3В не должна превышать 100 см.

Рекомендуемая частота чтения данных — не чаще, чем один раз в 2 секунды.

Схема подключения

Датчики температуры и влажности для Arduino. Схема подключения DHT22

Модуль датчика температуры KY-001

Датчики температуры и влажности для Arduino. KY-001

Модуль состоит из датчика температуры воздуха с цифровым представлением данных. Основной компонент – микросхема DS18B20, преобразующая температуру корпуса в информацию передаваемую по последовательной двухпроводной шине данных 1-Wire. На шину данных можно установить несколько датчиков.

Модуль можно применять для измерения температуры воздуха в помещении и на открытом воздухе.

Также на модуле установлен резистор сопротивлением 4,7 кОм и светодиодный индикатор включения питания.

Технические характеристики

  • Питание: напряжение 3…5,5 В, ток 10 мА
  • Диапазон измерения температуры -55…125 °С/-57°F to 257°F
  • Разрешающая способность: 9…12 бит
  • Точность ±0,5 °С в диапазоне -10…+85 °С
  • Время измерения при разрешающей способности 12 бит составляет 0,75 с

Схема подключения

Датчики температуры и влажности для Arduino. Схема подключения KY-001

Скетч для работы с модулем

Для работы с модулем нам понадобятся две дополнительные библиотеки.


#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");
  // IC Default 9 bit
  // If you have troubles consider upping it 12.
  // Ups the delay giving the IC more time to process the temperature measurement
  sensors.begin(); 
}

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  Serial.print("Temperature for Device 1 is: ");
  // You can have more than one IC on the same bus. 0 refers to the first IC on the wire
  Serial.print(sensors.getTempCByIndex(0)); 
}

Модуль датчика температуры KY-013

Датчики температуры и влажности для Arduino. KY-013

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

В целом использовать датчик температуры KY-013 как термометр проблематично. Он больше подходит для случаев, когда нужно включить прибор при определённой температуре и выключить при другой. Прежде всего нужно выяснить какое напряжение подаётся на аналоговый вход при нужной вам температуре, а затем написать код на основе полученных значений.

Схема подключения

Датчики температуры и влажности для Arduino. Схема подключения KY-013

Скетч для работы с модулем


void setup() {
  Serial.begin(9600);
}

void loop() {
  double U = analogRead(A0); // напряжение
  double R = (10230000 / U) - 10000; // сопротивление
  Serial.print("R = ");
  Serial.print(R);
  Serial.print(" U = ");
  Serial.println(U);
  delay(500);
}

Модуль датчика температуры KY-028

Датчики температуры и влажности для Arduino. KY-028

Датчик применяется для контроля температуры воздуха в помещении, например для автоматизации систем отопления или вентиляции.

Датчик грубо оценивает величину температуры, но умеет точно определять превышение порогового значения.

У датчика имеется аналоговый и цифровой выводы. Аналоговый позволяет получить температуру, а цифровой — превышение установленного порога.

Технические характеристики

  • Напряжение питания: 3,3 – 5,5 В
  • Рабочая температура: 0 – 70°C

Первичная настройка модуля

Если температура превысит установленный порог, то на цифровом выходе D0 будет высокий уровень напряжения. Если температура мала, то на выходе D0 будет низкий уровень.

Датчик содержит два светодиодных индикатора. Индикатор L1 сообщает о подаче питания. Светодиод L2 включается при превышении температурой окружающего воздуха установленного порога. С его помощью удобно проводить настройку модуля.

При включении на выходе A0 присутствует напряжение соответствующее температуре в комнате. Эта температура известна лишь приблизительно. Для повышения точности можно использовать температуру тела (например сожмите терморезистор пальцами), в этом случае вы узнаете напряжение аналогового выхода при температуре 36,6°C. На эти данные можно опираться в дальнейшем. Другой вариант — температура таяния льда 0°C. Используйте пакетик с таящим льдом или снегом из холодильника, чтобы получить новое значение напряжения, которому можно верить.

Схема подключения

Датчики температуры и влажности для Arduino. Схема подключения KY-028

Скетч для работы с модулем


int led = 13; // Пин светодиода на ардуино
int digitalPin = 2; // Цифровой пин на ардуино
int analogPin = A0; // Аналоговый пин на ардуино
int digitalVal; // Цифровые показатели
int analogVal; // Аналоговые показатели

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(digitalPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  digitalVal = digitalRead(digitalPin); 
  if(digitalVal == HIGH) // Достигнут предел по температуре
  {
    digitalWrite(led, HIGH); // Включили светодиод
  }
  else
  {
    digitalWrite(led, LOW); // Выключили светодиод
  }

  // Read the analog pin
  analogVal = analogRead(analogPin); 
  Serial.println(analogVal);

  delay(100);
}

Кроме описанных выше датчиков ходовыми моделями являются: TMP36, MAX6675, MAX31855, DS18B20.

На сегодня это все, надеемся, что Вы узнали много нового и интересного!

Если Вы нашли ошибки в тексте или просто негодуете от безграмотности автора, напишите нам. Мы будем рады любым советам и уточнениям.

Информацию о других сенсорах и датчиках вы можете найти в этом разделе нашего блога.