- Плата Arduino. x1
- Компьютер(для написания и загрузке кода, а так же мы будем брать с него электричество и общаться с ним). x1
- Провод для соединения компьютера и платы. x1
- Датчик температуры и влажности DTH11.
- Провода. x3
- Есть схемы с внешним источником питания, но можно взять питание и с платы.
Схема:
Рассмотрим скетч подключения датчика DTH11 используя подключение сторонней библиотеки от некоего «Tony DiCola».
Для этого нам надо загрузить её либо скачав с github.com https://github.com/adafruit/DHT-sensor-library либо воспользоваться зеркалом.
После этого подключим библиотеку, можно воспользоваться для этого механизмом подключения библиотеки из IDE arduino:
В пункте Скетч->Подключить библиотеку->Добавить .ZIP библиоткеу…
далее указываем путь до библиотеки зажатой в .zip
Второй способ подключить библеотеку, положить её в папку libraries находящуюся в папке с проектами по умолчанию.
Что сейчас у вас является папкой по умолчанию можно посмотреть по следующему пути:
Файл->Настройки
И в поле «Размещение папки скетчей» будет нужный путь.
Разархивируем туда папку с библиотекой.
Перезагружаем ArduinoIDE
После этого в примерах, должен появится скетч DHTtester, путь до него следующий:
Файл->Примеры->DHT sensor library->DHTtester
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain #include "DHT.h" #define DHTPIN 2 // what digital pin we're connected to // Uncomment whatever type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 // to 3.3V instead of 5V! // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 4 (on the right) of the sensor to GROUND // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor // Initialize DHT sensor. // Note that older versions of this library took an optional third parameter to // tweak the timings for faster processors. This parameter is no longer needed // as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); } |
Убирём комментарии и посмотрим на данный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } float hif = dht.computeHeatIndex(f, h); float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); } |
Сначала мы подключаем библиотеку:
1 |
#include "DHT.h" |
Следующая строчка:
1 |
#define DHTPIN 2 |
Инструкция компилятору заменить сочетание символов «DHTPIN» на символ «2». Данный метод удобен тем, что на самой плате не будет резервироваться место под переменную.
Дальше ещё одна инструкция компилятору:
1 2 3 |
#define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) |
В зависимости от того какой тип вашего сенсора разкомментируем нужную строчку и удаляем другие. В нашем случае нам нужна строчка
1 |
#define DHTTYPE DHT11 // DHT 11 |
И соответственно все символы «DHTTYPE» будут заменятся на «DHT11».
Далее мы объявляем переменную dht c типом DHT.
1 |
DHT dht(DHTPIN, DHTTYPE); |
При этом передаются изначальные параметры номер штырька DHTPIN и тип сенсора DHTTYPE.
после идёт блок setup
1 2 3 4 |
Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); |
определяем скорость взаимодействия компьютера с платой:
1 |
Serial.begin(9600); |
Далее выводится сообщение, означающее, что работа с наброском началась.
1 |
Serial.println("DHTxx test!"); |
далее используется функция:
1 |
dht.begin(); |
она назначает указанный выше пин как выходной параметр, и обнуляет счётчик времени между запросами температуры.
далее идёт описание основного цикла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } float hif = dht.computeHeatIndex(f, h); float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); |
Производится задержка в 2с.
1 |
delay(2000); |
Далее берутся значения с сенсора и помещаются в соответствующие переменные вещественного типа:
1 2 3 |
float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); |
в h помещается влажность,
1 |
float h = dht.readHumidity(); |
в t температура в градусах
1 |
float t = dht.readTemperature(); |
в f температура во фрингейтах
1 |
float f = dht.readTemperature(true); |
если что нибудь из этого получить не удалось выводим сообщение, что считать значение с сенсора не удалось:
1 2 3 4 |
if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } |
Высчитываются индексы теплопроводности:
1 2 |
float hif = dht.computeHeatIndex(f, h); float hic = dht.computeHeatIndex(t, h, false); |
Отдаём все значения на компьютер:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); |
Скетч закончился.
Другие статьи по программированию плат Arduino можно посмотреть здесь.
Комментарии: