Arduino для початківців
Arduino для початківців. Урок 9. Підключення датчика температури та вологості DHT11 та DHT22

Продовжуємо серію уроків "Arduino для початківців". Сьогодні ми розберемо підключення до Arduino датчиків температури і вологості DHT11 і DHT22.
Датчики DHT11 і DHT22 не мають високу швидкодію і точність, зате прості, недорогі і відмінно підходять для навчання. Вони виконані з двох частин - ємнісного датчика вологості та термістора. Чіп, що знаходиться всередині, виконує аналого-цифрове перетворення та видає цифровий сигнал, який можна вважати за допомогою будь-якого мікроконтролера.
Список деталей для збирання моделі
Для складання проекту, описаного в цьому уроці, знадобляться такі деталі:
- плата Arduino (докладніше про те, як вибрати Arduino тут);
- датчик DHT11 або DHT22 (можна купити, наприклад, тут чи тут);
- Breadboard;
- резистор на 10 ком;
- програма Arduino IDE, яку можна завантажити із сайту Arduino.

Датчики DHT11 та DHT22
Чим відрізняються датчики DHT11 та DHT22?
Дві версії сенсорів DHT схожі одна на одну і мають однакову розпинування. Їх відмінності у характеристиках. Специфікації:
- визначення вологості у діапазоні 20-80%
- визначення температури від 0°C до +50°C
- частота опитування 1 раз на секунду
- визначення вологості в діапазоні 0-100%
- визначення температури від -40°C до +125°C
- частота опитування 1 раз на 2 секунди
Таким чином, характеристики датчика DHT22 кращі в порівнянні з DHT11, і тому він трохи дорожчий. Знімати показання частіше, ніж раз на 1-2 секунди не вийде, але,можливо, для вашого проекту більш висока швидкодія і не потрібна.
Підключення сенсорів DHT до Arduino
Датчики DHT мають стандартні висновки та їх просто встановити на breadboard.
Датчики DHT мають 4 висновки:
- живлення.
- виведення даних
- не використовується.
- GND (земля).
Між висновками живлення та виведення даних потрібно розмістити резистор номіналом 10 кОм.
Датчик DHT часто продається як готового модуля. І тут він має три висновки і підключається без резистора, т.к. резистор вже є на платі.
Схема підключення датчика з резистором:

Схема підключення датчика DHT до Arduino
Arduino скетч
Скористайтеся бібліотекою DHT.h, створеною спеціально для датчиків DHT. Її можна завантажити тут. Для використання потрібно помістити скачану папку в папку /libraries.

Показання температури та вологості (Монітор порту)
Ви повинні побачити температуру та вологість. Зміни можна побачити, наприклад, видихаючи на датчик (як для розмивання вікна). Дихання підвищує вологість.
Пости з уроків:
Усі пости сайту “Цікава робототехніка” за теґом Arduino.
Автор Олександр Гагарін. У статті використано матеріали learn.adafruit.com.
Читайте також
При компіляції видало: Arduino: 1.6.5 (Windows 7), Плата Arduino Uno
Змінено опцію збирання, перезбираємо все
sketch_jul16a.ino: In function 'void loop()': sketch_jul16a:45: помилка: неправильні оператори typів 'const char [21]' і 'float' для binary 'operator+' invalid operands types ' const char [21]' і 'float' to binary 'operator+' і рожевим кольором виділено рядок Serial.print(«Вологість: «+h+»%\t»+»Температура: «+t+» *C «); Цей рядок якось неправильно написано? Дякую всім, хто підкаже
В Ардуїні нормально рядок не формується. Все, що потрібно вивести, потрібно написати окремо Serial.print
Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);
Для DHT11 із вбудованим резистором на платі робоча програма буде такою. Висновок з (правий) від датчика підключаємо до GND Arduino, середній висновок (це +) підключаємо на роз'єм 5V, лівий висновок (це сигнал) підключаємо до цифрового піну з цифрою 2.
#define DHTPIN 2 // номер піна, до якого підключено датчик
// DHT dht (DHTPIN, DHT22);
DHT dht(DHTPIN, DHT11);
// Затримка 2 секунди між вимірами
float h = dht.readHumidity();
float t = dht.readTemperature();
// Перевірка успішно пройшло чи зчитування.
if (isnan(h) isnan(t))
Serial.println(«Не вдається рахувати показання»);
Serial.print("Hum:"); Serial.print(h); Serial.print(" Temp: "); Serial.print(t); Serial.println("C");
Serial.print((String)"Вологість: "+h+" %\t"+"Температура: "+t+" * C ");
Serial.println((String)»Вологість: » + h + (String)» %\t» + (String)»Температура: » + t + (String)» * C «);
У мене датчик DHT11 у вигляді готового модуля із трьома висновками. УВАГА: лівий пін – дані, середній – живлення, правий – земля. У завантаженій бібліотеці DHT є скетч з прикладом використання датчика — працює без змін. Порівняно з іншим приладом, температуру DHT11 показує +/- один градус, а вологість завищує на 6 %.
Андрію, можна скетч на такий датчик? Підлога інтернету перерила, не знайшла, у всіх без вбудованих резисторів.
Ось тут більш ніж доступноcodius.ru/articles/187, ще й що відбувається в бібліотеці описано. І приклад до речі на модулі з резистором.
Спасибі тобі величезне!
Під час перевірки видає таке повідомлення: E:\Arduino\Dht11\Dht11\examples\TempHumidity\TempHumidity.ino:3:17: fatal error: DHT.h.
exit status 1 Помилка компіляції. що робити?
E:\Arduino\Dht11\Dht11\examples\TempHumidity\TempHumidity.ino:3:17: fatal error: DHT.h.
exit status 1 Помилка компіляції. Що робити?
ця помилка коли не підключив бібліотеку, або кострубато скачалося, у мене все працює на китайському ардуїно uno
все дуже зрозуміло написано. а буде продовження?
Скетч не вірний! З прикладу до бібліотеки працює. У наведеному прикладі немає.
#include «DHT.h» //#include «iostream» #define DHTPIN 10 int ledtest = 6; DHT dht(DHTPIN, DHT11);
pinMode(led, OUTPUT); pinMode(ledtest, OUTPUT); Serial.begin(9600); dht.begin();
delay(1000); //setlocale(LC_ALL,"RUS"); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) isnan(t)) Serial.println(«no info»); digitalWrite(ledtest, LOW); return; > else digitalWrite(ledtest, HIGH); //****** НЕФОРМОВАНА РЯДКА ВИСНОВКУ довелося писати її окремо. Serial.print(«Humidity: «); Serial.print(h); Serial.print(«%»); Serial.print(«Temp:«); Serial.print(t); Serial.println(«*C»); > >
ось цілком робочий варіант. у мене там ще діод як індикатор стоїть, частину з ledset можна вирізати.
у тексті програми помилки. pinMode(led, OUTPUT) не описана як змінна, ви, напевно, мали на увазі ledtest замість led
знайти та замінити все «на». ledtest замість led
Як зробити коли вище 25 градусів включався контакт 4 вентилятора. Допоможіть будь ласка.
Kirill, приблизно так:
t – температура, звичайно. ledPin = висновок для керуючого сигналу (у мене світиться світлодіод, наприклад) Ну і для контролю вставляючи додаткові написи в порт, їх можна прибрати.
if (t > 25) analogWrite(ledPin, 255); Serial.println(«Warning. »); > else analogWrite(ledPin, 0); Serial.println(«NO Warning. »); >
підкажіть пліс, як вивести дані з датчика на LCD Keypad Shield
Просто на екран, зрозуміло.
Цей повідомлення повинен мати більше інформації з «Show verbose output during compilation» enabled in File > Preferences. Arduino: 1.0.6 (Windows XP), Board: «Arduino Uno» sketch_sep23a.ino: У function 'void loop()': sketch_sep23a:46: error: invalid operands of types 'const char [21]' і 'float' to binary 'operator+'
Скопіював. Перевірку не відбувається.
Натисніть на спеціальний форум якнайти, де на запитання чайників відповідають оперативно, за невеликим донатом не заіржавіє.
Всім добраніч, ніяк не можу завести dht11, весь час не вдається вважати показання. Пробував міняти місцями піни 5В та виведення іноформації, як радили вище – не допомогло. Датчик температури працює добре. Дохлий dht 11 попався?
похоче на те. Що взагалі виводить у змінній вологості?
Підключав датчик через дашборд, видавав нульові значення в моніторі порту, підключив прямо дроти (від ардуїно відразу до датчика), все запрацювало.
Розібрався з дашбордом, я новачок, тому не знав, що доріжки плюс і мінус на ній працюють тільки до половини, а далі розрив, датчик встановив надругу половину, а підключив до + та GND першу половину.
Що за помилка у бібліотеці? Під час перевірки вискакує. На Ардуїно IDE
У файлі міститься від G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master\DHT_U.cpp:22:0:
G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h.
Використовуємо бібліотеку DHT-sensor-library-master версії 1.3.0 з папки: G: Arduino Arduino Sketch libraries DHT sensor library master exit status 1 Помилка компіляції для плати Arduino Nano.
У кого є помилка при компіляції як у Сергія, встановіть бібліотеку версії 1.2.3 . І рядок виводу: Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»); як писав koa73
У кого є помилка як у Сергія, встановіть версію бібліотеки 1.2.3.
Serial.print("Hum:"); Serial.print(h); Serial.print("%\t"); Serial.print(" Temp: "); Serial.print(t); Serial.println("*C"); //Serial.println("Humidity : "+String(h, 1)+"%\t Temperature : "+String(t, 1)+" *C"); //Serial.println("Вологість: "+h+" %\t"+"Температура: "+t+" *C ");
у мене так вийшло, щоправда з українськими крякозябрами. заробила.
Adafruit_Sensor.h: No such file or directory #include скачайте бібліотеку
Доброго дня, підключив датчик і дисплей, все ок, підкажіть будь ласка як зробити припустимо якщо температура дорівнює х значенню то зумер буде їсти 1раз на 1 хвилину?
640.00 *C температури та 921.6 % вологості – це нормальні показання? О_О
якщо ви в пеклі, то так.
Терміново! Як придбати електроніку з Китаю в Томську або в Україні з безкоштовною доставкою кур'єром? Допоможіть терміново не можу самому знайти інтернет-магазин. Не знаю як вибрати магазин що б не кинули рятуйте!
Не зовсім згоден,
Здрастуйте, підкажіть, що взагалі означає // Ініціюємо датчик DHT dht(DHTPIN, DHT22); //DHT dht(DHTPIN, DHT11); І навіщо це потрібно.
Говоримо ардуїн з яким датчиком потрібно працювати.
Ніт чорта не працює, як не гойдав бібліотеку за інструкцією без користі — не одного нормального прикладу з цим датчиком поки не знайшов