4.01.6. Лабораторная работа №4.1.6.md
Датчик температуры и влажности DHT11
Тема работы
До сих пор мы работали с простыми сигналами: «включено/выключено». Но как быть, если нужно передать более сложную информацию, например, точное значение температуры? В этой лабораторной работе мы подключим популярный датчик температуры и влажности DHT11
и научимся считывать с него данные. Мы разберёмся, как микроконтроллер и датчик «договариваются» об обмене информацией по одному-единственному проводу, и используем для этого специальную библиотеку.
Цель
- Научиться подключать и использовать датчик
DHT11
. - Понять, что такое библиотека в программировании и как она упрощает работу со сложными устройствами.
- Познакомиться с концепцией однопроводного протокола и bit-banging.
- Вывести данные о температуре и влажности в монитор порта.
Оборудование и материалы
- Отладочная плата
Рудирон
. - Макетная плата.
- Датчик
DHT11
. - Резистор номиналом 10 кОм.
- Соединительные провода.
- USB-кабель для подключения
Рудирона
к компьютеру. - Компьютер с
Arduino IDE
и установленной библиотекойRudiron_DHT11
.
Ход работы
-
Как работает DHT11? Bit-banging
DHT11
— это цифровой датчик, но он не просто выдаётHIGH
илиLOW
. Он передаёт 40 бит информации (5 байт), в которых закодированы влажность, температура и контрольная сумма для проверки ошибок. Для этого используется специальный однопроводной протокол.Bit-banging (дословно «дрыгоножество») — это программная техника, при которой микроконтроллер вручную управляет пином, быстро переключая его между
HIGH
иLOW
с точными временными задержками, чтобы сымитировать стандартный протокол связи.Процесс общения выглядит так:
- Микроконтроллер «будит» датчик, отправляя ему стартовый сигнал.
- Датчик «отвечает», подтверждая свою готовность.
- Датчик последовательно отправляет 40 бит данных, кодируя нули и единицы разной длительностью импульсов.
- Микроконтроллер «слушает» пин, измеряет длительность каждого импульса и расшифровывает биты.
Делать это вручную сложно. К счастью, за нас это сделает библиотека.
-
Установка библиотеки
Rudiron_DHT11
Библиотека — это готовый набор функций и классов, который прячет всю сложность работы с устройством. Вам не нужно знать про
bit-banging
, достаточно вызвать простые команды.- Скачайте архив с библиотекой из нашего репозитория Rudiron Libraries.
- В
Arduino IDE
перейдите в меню Sketch → Include Library → Add .ZIP Library… - Выберите скачанный архив. IDE автоматически установит библиотеку.
-
Сборка схемы
- Вставьте датчик
DHT11
в макетную плату. - Подключите к
Рудирону
:- Вывод VCC (или
+
) датчика соедините с пином 5V. - Вывод GND (или
−
) датчика соедините сGND
. - Вывод DATA (данные) соедините с пином 2.
- Вывод VCC (или
- Добавьте подтягивающий резистор. Соедините вывод DATA (пин 2) с выводом VCC (пин 5V) через резистор 10 кОм. Это необходимо для стабильной работы протокола.
- Вставьте датчик
-
Написание и загрузка кода
- Убедитесь, что перемычка
PRG | RUN
стоит в положенииPRG
. -
Откройте
Arduino IDE
и введите следующий код:// 1. Подключаем нашу новую библиотеку #include "Rudiron_DHT11.h" // 2. Создаём объект для работы с датчиком Rudiron_DHT11 dht; void setup() { Serial.begin(9600); Serial.println("Инициализация датчика DHT11..."); // 3. Указываем библиотеке, к какому пину подключён датчик dht.attach(2); } void loop() { // 4. Пытаемся считать данные с датчика if (dht.read()) { // Если чтение успешно, получаем температуру и влажность float temperature = dht.getTemperature(); float humidity = dht.getHumidity(); // Выводим данные в монитор порта Serial.print("Температура: "); Serial.print(temperature); Serial.print(" °C, "); Serial.print("Влажность: "); Serial.print(humidity); Serial.println(" %"); } else { // Если произошла ошибка чтения Serial.println("Ошибка чтения данных с DHT11!"); } // Ждём 2 секунды перед следующим чтением (DHT11 нельзя опрашивать слишком часто) delay(2000); }
- Нажмите кнопку «Upload», чтобы загрузить код на плату.
- Убедитесь, что перемычка
-
Проверка работы
- Откройте Монитор последовательного порта (
Tools → Serial Monitor
), установив скорость 9600 бод. - Каждые две секунды в окне будут появляться актуальные данные о температуре и влажности в вашей комнате.
- Попробуйте подышать на датчик — вы увидите, как показания влажности резко вырастут!
- Откройте Монитор последовательного порта (
Результаты
Вы создали простую, но функциональную метеостанцию! Вы научились использовать внешнюю библиотеку для работы со сложным датчиком, что значительно упростило код и позволило быстро получить результат.
Анализ результатов
Вся сложность работы с протоколом DHT11
спрятана внутри библиотеки Rudiron_DHT11
. Наш код получился очень простым и читаемым:
dht.attach(2);
— мы инициализируем датчик на пине 2.dht.read()
— запускает процесс обмена данными и возвращаетtrue
в случае успеха.dht.getTemperature()
иdht.getHumidity()
— возвращают уже обработанные и готовые к использованию значения.
Выводы
В этой лабораторной работе вы сделали важный шаг в сторону создания реальных проектов. Вы научились подключать и использовать сложные цифровые датчики с помощью библиотек. Вы поняли, что библиотеки — это мощный инструмент, который экономит время и позволяет сосредоточиться на логике вашего проекта, а не на низкоуровневых деталях протоколов.
Вопросы для самопроверки
- Что такое библиотека в контексте
Arduino
? - Зачем в схеме с
DHT11
нужен подтягивающий резистор? - Какую информацию и в каком формате передаёт датчик
DHT11
? - Что такое
bit-banging
? - Как часто, согласно коду, мы опрашиваем датчик и почему?
Поздравляем! Вы научились работать с цифровыми датчиками и библиотеками. В следующем параграфе мы перейдём к изучению аналоговых сигналов и научим Рудирон
плавно управлять яркостью и скоростью.
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home