Инструменты пользователя

Перевод этой страницы:

Инструменты сайта


Боковая панель

Для чего нужен ОрбиКрафт

Подсистемы конструктора

Инструкции по работе с ОрбиКрафт

Уроки

Лабораторная оснастка

Знакомство с Arduino

Полезная нагрузка на базе Arduino

Обратная связь

Новости

arduino_s_08

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

8.1 Устройство и принцип работы

Внутри корпуса на стороне датчиков находятся датчик влажности и датчик температуры NTC (термистор). С другой стороны имеется небольшая печатная плата с 8-разрядной микросхемой в корпусе SOIC-14. Эта микросхема измеряет и обрабатывает аналоговый сигнал с сохраненными калибровочными коэффициентами, выполняет аналого-цифровое преобразование и выдает цифровой сигнал с данными о температуре и влажности.

Чувствительный к влажности компонент, который используется, разумеется, для измерения влажности, имеет два электрода с влагоудерживающей подложкой (обычно соль или проводящий пластиковый полимер), зажатой между ними. По мере поглощения водяного пара подложка высвобождает ионы, что, в свою очередь, увеличивает проводимость между электродами. Изменение сопротивления между двумя электродами пропорционально относительной влажности. Более высокая относительная влажность уменьшает сопротивление между электродами, в то время как более низкая относительная влажность увеличивает это сопротивление.

Кроме того, в этих датчиках для измерения температуры имеется датчик температуры NTC (термистор). Термистор – это терморезистор – резистор, который меняет свое сопротивление в зависимости от температуры. Технически все резисторы являются термисторами – их сопротивление слегка изменяется в зависимости от температуры, но обычно это изменение очень мало и его трудно измерить.

Термисторы сделаны так, чтобы их сопротивление резко изменялось при изменении температуры, и изменение на один градус может составлять 100 Ом или более! Термин «NTC» означает «Negative Temperature Coefficient» (отрицательный температурный коэффициент), что означает, что с ростом температуры сопротивление уменьшается.

8.2 Устройство и принцип работы

8.2.1 Подключение датчика DHT11

8.2.2 Работа с библиотекой dht11-master

Напишем программу для считывания показаний температуры и влажности с датчика. Объявляем датчик, указываем куда подключен out. Считываем информацию с датчика и выводим в монитор порта. Добавим конечно же дополнительную информацию - слова - что же мы выводим в монитор порта и укажем единицы измерения температуры и влажности.

#include <dht11.h>    	//подключаем библиотеку
#define dht11pin 2    	//создаем переменную для пина датчика 
dht11 DHT;            	//объявляем датчик температуры и влажности
 
void setup(){
  pinMode(dht11pin, INPUT);	//настраиваем пин датчика как вход
  Serial.begin(9600);      	//настраиваем работу с монитором порта
}
 
void loop(){
  DHT.read(dht11pin);            	//считываем показания датчика
  //выводим в монитор порта показания температуры
  Serial.print("Temperature = ");
  Serial.print(DHT.temperature);
  Serial.print(" C");
  //выводим в монитор порта показания влажности
  Serial.print(", Humidity = ");
  Serial.print(DHT.humidity);
  Serial.println(" %");
  delay(1000);             	//ждем 1 секунду
}

8.2.2 Работа с библиотекой SimpleDHT

#include <SimpleDHT.h>       	//подключаем библиотеку
SimpleDHT11 dht11(2);         	//объявляем датчик температуры и влажности
 
void setup() {
  Serial.begin(9600);        	//настраиваем работу с монитором порта
}
 
void loop() {
  byte temperature = 0;     //создаем переменные типа byte для хранения показаний датчика
  byte humidity = 0;
  dht11.read(&temperature, &humidity, NULL); //считываем показания датчика
  Serial.print("Temperature = ");            //выводим в монитор порта показания температуры
  Serial.print(temperature); 
  Serial.print(" C, ");
  Serial.print("Humidity = ");               //выводим в монитор порта показания влажности
  Serial.print(humidity); 
  Serial.println(" %");
  delay(1000);                               //ждем 1 секунду
}

8.2.3 Работа с библиотекой DHT sensor library

#include "DHT.h"            	//подключаем библиотеку
#define DHTpin 2            	//переменная для пина датчика
#define DHTtype DHT11       	//переменная для типа датчика
DHT dht(DHTpin, DHTtype);   	//инициализируем датчик
 
void setup() {
  Serial.begin(9600);       	//настраиваем работу с монитором порта
  dht.begin();              	//запускаем работу датчика
}
 
void loop() {
  float hum = dht.readHumidity();           //считываем показания влажности	 
  float temp = dht.readTemperature();       //считываем показания температуры в градусах Цельсия
  float tempF = dht.readTemperature(true);  //считываем показания температуры в градусах Фаренгейта
  Serial.print("Temperature: ");            //выводим в монитор порта все три вида показаний датчика
  Serial.print(temp);
  Serial.print(" C, ");
  Serial.print(tempF);
  Serial.print(" F; ");
  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.println(" %;");
  delay(1000);             	//ждем 1 секунду
}

8.2.4 Работа с библиотекой DHT sensor library

#include "DHT.h"           	//подключаем библиотеку
#define DHTpin 2           	//переменная для пина датчика
#define DHTtype DHT11      	//переменная для типа датчика
DHT dht(DHTpin, DHTtype);  	//инициализируем датчик
//создаем переменные для каждого из пинов RGB светодиода
int redLed = 11;
int greenLed = 10;
int blueLed = 9;
//создаем переменные для значения яркости каждого из цветов RGB светодиода
int red;
int green;
int blue;
 
void setup() {
  Serial.begin(9600);     	//настраиваем работу с монитором порта
  dht.begin();            	//запускаем работу датчика
  pinMode(redLed, OUTPUT);     //настраиваем пины RGB светодиода как выходы
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
}
 
void loop() {
  //считываем показания влажности
  float hum = dht.readHumidity();
  //считываем показания температуры в градусах Цельсия
  float temp = dht.readTemperature();
  //считываем показания температуры в градусах Фаренгейта
  float tempF = dht.readTemperature(true);
  //выводим в монитор порта все три вида показаний датчика
  Serial.print("Temperature: ");
  Serial.print(temp);
  Serial.print(" C, ");
  Serial.print(tempF);
  Serial.print(" F; ");
  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.println(" %;");
  delay(1000);
  //если температура меньше 25 градусов
  //цвет RGB светодиода - зеленый
  if(temp<25){
    setRGB(0, 255, 0);
  }
  //если температура от 25 до 30 градусов
  //цвет RGB светодиода - желтый
  else if(temp>=25 && temp<30){
    setRGB(255, 255, 0);
  }
  //иначе цвет RGB светодиода красный
  else{
    setRGB(255, 0, 0);
  }
}
 
//Подпрограмма, которая устанавливает цвет свечения RGB светодиода
//Данная функция имеет 3 параметра
//r - яркость свечения красного цвета
//g - яркость свечения зеленого цвета
//b - яркость свечения синего цвета
 
void setRGB(int r,int g,int b){
  analogWrite(redLed,r);
  analogWrite(greenLed,g);
  analogWrite(blueLed,b);
}

Задания

1. Соберите схему с датчиком DHT11 и сервомотором. Создайте программу, которая будет поворачивать вал сервомотора на 90 градусов (открывать окно в теплицу) при превышении температуры значения в 35 градусов, и возвращать вал сервомотора в исходное положение при изменении температуры ниже 33 градусов.

2. Соберите схему с датчиком DHT11 и сервомотором. Создайте программу, которая будет включать реле управляющее «подогревом» при изменении температуры ниже 10 градусов, и отключении при изменении выше 12 градусов. При повышении температуры выше 28 градусов должно срабатывать реле, включающее «кондиционер», и отключатся, когда температура ниже 26 градусов.

arduino_s_08.txt · Последние изменения: 2020/05/27 15:55 — golikov

Инструменты страницы