Вивод температури і вологи DTH11 на смартфон через сеть
Для реалізації проекту вам знадобиться:
- контролер Arduino UNO;
- Ethernet W5100 шильди;
- Датчик DTH11.
Ethernet W5100 шильд з'єднується з Arduino, розмістивши їх одну над іншою. Необхідно забезпечити підключення Ethernet шильда до локальної мережі.

Вихід датчика підключений до контакту 2 плати Arduino. Живлення датчика здійснюється від плати Arduino. Схема підключення датчика наведено малюнку.

За допомогою сервісу RemoteXY розробляється графічний інтерфейс, на якому розміщені індикатори температури та вологості. Кожен індикатор представлений у вигляді текстового поля та лінійного індикатора. У текстовому полі відображатиметься числове подання температури у градусах Цельсія та вологості у відсотках. Лінійний індикатор доповнюватиме числове значення.
Лінійний індикатор температури складається із двох індикаторів, окремо для позитивної температури червоного кольору та негативної температури синього кольору. Для індикатора негативної температури встановлена ознака центру шкали з правого боку, це дозволить заповнювати індикатор починаючи праворуч зі збільшенням негативної температури.
Шкала вологості має зелений колір.
Для зручності можна перевизначити імена елементів інтерфейсу. Ці імена будуть призначені змінним у вихідному коді інтерфейсу. На малюнку зображено приклад графічного інтерфейсу.


Для опитування датчика DTH-11 використовується бібліотека DHT.h. Завантажити актуальну версію бібліотеки можна за посиланням. До коду проекту додаємо підключення цієї бібліотеки. Підключаємо і налаштовуємо датчик на контакт 2 Arduino тим самим способом, яким рекомендує це робити бібліотека.
Опитування датчиків та перетворенняданих для відображення у графічному інтерфейсі виконується у кожному циклі функції loop(). Нижче наведено код опитування датчика.
Перетворення даних з датчика на текстовий рядок для відображення в графічному інтерфейсі виконується за допомогою функції dtostrf зі стандартної бібліотеки.
Наступний код перетворює дані датчика для відображення лінійного індикатора вологості.
Код для відображення температури на двох лінійних індикаторах виглядає трохи складнішим. Залежно від знака виміряної температури задіюється один із індикаторів, тоді як на інший подається 0. Якщо температура дорівнює нулю, тоді на обидва індикатори подаємо 0.
Нижче наведено повний код скетчу. Ви можете скопіювати його в IDE Arduino, скомпілювати та завантажити в контролер. Не забудьте встановити бібліотеку RemoteXY для Arduino IDE.
/* RemoteXY select connection mode and include library */ #define REMOTEXY_MODE__W5100_SPI #include /* Ethernet shield used pins: 10(SS) */ #include /* SPI used pins: 11(MOSI), 12(MISO), 13(SCK) */
/* RemoteXY connection settings */ #define REMOTEXY_ETHERNET_MAC "DE:AD:BE:EF:EF:ED" #define REMOTEXY_SERVER_PORT 6377
/* RemoteXY configurate */ unsigned char RemoteXY_CONF[] = < 0,25,88,0,4,5,67,4,53,14 ,30,6,0,11,67,4,53,34,30,6 ,0,11, 66,193,15,21,34,4,6,66 ,129,49,21,34,4,1,66,129,15,41 ,68,4,4,129,0,14,14, 38,6,0 ,84,101,109,112,101,114,97,116,117,114 ,101,58,0,129,0,15,34,28,6,0 ,72,117,101,101 10>,129,0, 44,25,10,6,0,48,194,176 ,67,0 >;
/* ця структура defines all the variables of your control interface */ struct
/* output variable */ char text_temp[11]; /* string end zero UNICODE*/ char text_hum[11]; /* кінець рядка нуль UNICODE */ signed char level_temp_down; /* =0..100 позиція рівня */ signed char level_temp_up; /* =0..100 позиція рівня */ signed char level_hum; /* =0..100 позиція рівня */
/* інша змінна */ unsigned char connect_flag; /* =1, якщо дріт підключено, інакше =0 */
#include "DHT.h" #define DHTPIN 2 DHT dht(DHTPIN, DHT11);
void setup() < RemoteXY_Init ();
// TODO ваш код налаштування
void loop() < RemoteXY_Handler ();
// TODO ви циклюєте код // використовуєте структуру RemoteXY для передачі даних float temp = dht.readTemperature(); float hum = dht.readHumidity(); dtostrf(temp, 0, 1, RemoteXY.text_temp); dtostrf(гуд, 0, 1, RemoteXY.text_hum);
якщо (temp 0) < RemoteXY.level_temp_up = min(temp*2,100); RemoteXY.level_temp_down = 0; > інше < RemoteXY.level_temp_up = 0; RemoteXY.level_temp_down = 0; > RemoteXY.level_hum = гудіння; >