Датчики температуры и влажности чрезвычайно полезны при построении систем контроля климата. В данном случае мы просто подключим данный датчик к плате Arduino UNO, и понаблюдаем за значениями.
Вместо DHT-22 можно взять DHT-11, но у используемого в данном случае датчика шире диапазон измерения температуры (от -40°C до +80°C) и влажности (от 0 до 100%). Также он имеет цифровой выход (Single-bus), что увеличивает точность считывания.
Распиновка датчика DHT22:
Схема подключения датчика DHT22 и вентилятора к Arduino:
Скетч
Для работы скетча понадобится установить библиотеку DHT, распаковать в папку library.
#include "DHT.h" #define DHTPIN 2 // вывод, к которому подключается датчик #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(250); // считывание температуры или влажности занимает примерно 250 мс! // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик) float h = dht.readHumidity(); // Считывание температуры в цельсиях float t = dht.readTemperature(); // проверяем, были ли ошибки при считывании и, если были, начинаем заново if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } //выводим информацию в Монитор последовательного порта Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); }
void DHT::begin(void) {
// set up the pins!
pinMode(_pin, INPUT);
digitalWrite(_pin, HIGH);
_lastreadtime = 0;
}
Если конфигурируем пин на вход, то зачем в него писать единицу? Что это дает?
// now pull it low for ~20 milliseconds
pinMode(_pin, OUTPUT);
digitalWrite(_pin, LOW);
delay(20);
cli();
digitalWrite(_pin, HIGH);
delayMicroseconds(40);
pinMode(_pin, INPUT);
Спецификации чипа не читал, но то, что там сейчас накодировано, для меня выглядит странно.
Внутренний?
Там же внешний pull-up нарисован на 10кОм.