Проект датчика температуры и влажности Arduino DHT11

Линейка датчиков DHT (DHT11/22) является одной из наиболее часто используемых во многих электронных PCBA проектов, начиная от домашних метеостанций и заканчивая системами автоматизации предприятий, благодаря своей простоте и компактности в качестве датчика температуры/влажности. Хотя более точный и дорогой DHT22 может быть заменен (с некоторыми изменениями в коде), в данном проекте будет использоваться модуль датчика DHT11. Имея базовый 3-контактный интерфейс, датчик DHT11, который будет использоваться в данном проекте, не является отдельной версией 4-контактного датчика, а представляет собой 3-контактный модуль, имеющий встроенный конденсатор и подтягивающий резистор, что устраняет необходимость в дополнительных компонентах при создании данной схемы. Поэтому при сопряжении с платой Arduino модуль датчика DHT11 может быть напрямую подключен к цифровому выводу, который обрабатывает и передает последовательные данные с датчика на микроконтроллер для считывания. В этом проекте данные о температуре и влажности с датчика DHT11 будут отображаться на OLED-дисплее (органический светодиод) размером 0,96″ 128×64 для наглядного считывания. Преимущество использования i2c OLED-дисплея по сравнению с другими типами дисплеев заключается в том, что он требует только 4-проводного подключения к плате Arduino, а благодаря широкому выбору библиотек его можно легко запрограммировать. Заметной особенностью OLED-дисплея является четкость, резкость и визуальное качество текстов, цифр и изображений, которые он может отображать. В целом, это довольно простой проект, который подходит для абсолютных новичков, поскольку для его реализации требуется всего несколько компонентов и некоторые базовые навыки кодирования. Однако для тех, кто более продвинут, этот проект можно улучшить и усовершенствовать, добавив дополнительные функции, такие как беспроводная связь (RF, LoRa, Печатная плата Bluetooth, WiFi и т.д.), данные RTC (часы реального времени), данные дополнительных датчиков (высота над уровнем моря, атмосферное давление, концентрация газов и т.д.) и многие другие функции. Вот компоненты, необходимые для этого проекта:
- Arduino Nano (подойдут и другие совместимые с Arduino платы)
- USB-кабель (совместимый с платой Arduino)
- Хлебная доска
- Провода-перемычки "мужчина-мужчина" (7)
- 0,96″ 128×64 i2c OLED дисплей
- Модуль датчика DHT11
Проводка
В зависимости от вашей платы Arduino, вам может потребоваться или не потребоваться макетная плата для подключения платы. В данном примере используется Arduino Nano, поэтому требуется макетная плата, но если вы используете, например, Arduino Uno, то провода-перемычки можно подключить от компонентов на макетной плате непосредственно к контактам платы. Однако провода от модуля датчика DHT11 и OLED к плате Arduino остаются прежними. Принципиальная схема также приведена ниже.
- Модуль датчика DHT11: Подключите сигнальный (S) контакт датчика к D2, положительный (+) контакт к +5 В, а отрицательный (-) контакт к GND.
- OLED: Подключите SDA (последовательные данные) к A4, SCL/SCK (последовательный тактовый генератор) к A5, VDD/VCC (напряжение питания) к +5v и GND к GND.
- Теперь вы можете подключить плату Arduino через USB-кабель к компьютеру.

Код проекта
1TP5Включить <Wire.h>
1TP5Включить <Adafruit_GFX.h>
1TP5Включить <Adafruit_SSD1306.h>
#define ширина_экрана 128
#define высота_экрана 64
#define OLED_RESET 4
Adafruit_SSD1306 дисплей(ширина_экрана, высота_экрана);
1TP5Включить "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void настройка() {
dht.начать();
дисплей.начать(SSD1306_SWITCHCAPVCC, 0x3C);
дисплей.clearDisplay();
}
void петля() {
дисплей.clearDisplay();
дисплей.setTextSize(1);
дисплей.setTextColor(SSD1306_WHITE);
дисплей.setCursor(0, 15);
дисплей.вывести("Температура:");
дисплей.setCursor(80, 15);
дисплей.вывести(dht.readTemperature());
дисплей.setCursor(110, 15);
дисплей.вывести(" C");
дисплей.setCursor(0, 35);
дисплей.вывести("Влажность:");
дисплей.setCursor(80, 35);
дисплей.вывести(dht.readHumidity());
дисплей.setCursor(110, 35);
дисплей.вывести(“%”);
дисплей.дисплей();
задержка(2000);
О коде
- Одним из преимуществ работы с i2c OLED дисплеем является невероятное количество поддержки, доступной в Интернете в виде библиотек с открытым исходным кодом, которые могут значительно помочь в программировании дисплея из среды Arduino IDE. В этом проекте библиотеки Adafruit SSD1306 и GFX являются основными двумя библиотеками, которые используются для взаимодействия OLED-дисплея с Arduino. Поскольку вся информация о настройке уже настроена в файлах библиотеки, основные команды используются в IDE, что упрощает использование дисплея. Если у вас нет этих библиотек, загруженных и установленных в IDE, вы можете столкнуться с ошибками компиляции, поэтому убедитесь, что у вас установлены последние версии библиотек в Arduino IDE.
- Код начинается с определения библиотек, необходимых для настройки OLED-дисплея: Wire, Adafruit SSD1306 и Adafruit GFX. Они необходимы для работы OLED-дисплея с Arduino.
- Во втором блоке определяются несколько параметров, относящихся к OLED-дисплею, которые включают ширину и высоту экрана (128 x 64 пикселей) и контакт сброса OLED (A4).
- Далее определяются библиотеки, необходимые для взаимодействия датчика DHT11 с Arduino, в частности, библиотека 'DHT'. Цифровой вывод, к которому подключается датчик DHT на плате Arduino (цифровой вывод 2 - D2), также определяется вместе с конкретной моделью датчика DHT, которую мы используем, - датчиком DHT11.
- Теперь вводится секция void setup, одна из двух важнейших функций в каждом коде Arduino. Здесь мы запускаем датчик DHT11 (dht.begin()), а также OLED-дисплей, и прежде чем перейти к разделу void loop, OLED-дисплей очищается от всех предыдущих визуальных эффектов (display.clearDisplay()).
- Что касается секции void loop, основной части кода, которая постоянно повторяется (в цикле), пока есть питание на плате Arduino, она в основном состоит из функций, специфичных для OLED, которые сначала устанавливают размер текста, цвет текста и курсор (где мы хотим, чтобы текст печатался на OLED). Впоследствии мы даем команду OLED печатать строки текста в различных местах дисплея, которые в основном представляют собой информацию о температуре (в градусах Цельсия) и влажности (%), считываемую датчиком DHT11. С помощью этих простых команд, созданных на основе определенных библиотек, мы можем легко выводить любую информацию на дисплей.
- Функция задержки в самом конце кода настроена на обновление OLED-дисплея каждые 2000 миллисекунд последними данными, считанными с датчика. Однако вы можете изменить это время в зависимости от того, как часто вы хотели бы получать актуальную информацию непосредственно от датчика.
Резюмируйте
Имея фундаментальное понимание этого проекта и основных принципов взаимодействия датчика с OLED-дисплеем, несомненно, существует множество способов, которыми этот проект может быть усовершенствован и улучшен. Чаще всего, подобная установка может быть интегрирована в более крупный проект метеостанции путем добавления дополнительных датчиков, большего дисплея, беспроводных возможностей, корпуса и т.д. Как показал этот проект, просто ознакомившись с некоторыми библиотеками Arduino, которые доступны для использования, можно без особых усилий создать свою собственную метеостанцию. Будущий проект может включать беспроводную передачу таких погодных данных с одной платы микроконтроллера на другую для мониторинга удаленной среды или централизованного управления автономной системой. Тем не менее, подобные проекты отлично подходят для ознакомления с электроникой абсолютных новичков, а также могут быть ориентированы на более опытных мастеров, которые, возможно, захотят изучить другие аспекты электроники.