4.01.6. Лабораторная работа №4.1.6.md


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

Тема работы

До сих пор мы работали с простыми сигналами: «включено/выключено». Но как быть, если нужно передать более сложную информацию, например, точное значение температуры? В этой лабораторной работе мы подключим популярный датчик температуры и влажности DHT11 и научимся считывать с него данные. Мы разберёмся, как микроконтроллер и датчик «договариваются» об обмене информацией по одному-единственному проводу, и используем для этого специальную библиотеку.

Цель

  • Научиться подключать и использовать датчик DHT11.
  • Понять, что такое библиотека в программировании и как она упрощает работу со сложными устройствами.
  • Познакомиться с концепцией однопроводного протокола и bit-banging.
  • Вывести данные о температуре и влажности в монитор порта.

Оборудование и материалы

  • Отладочная плата Рудирон.
  • Макетная плата.
  • Датчик DHT11.
  • Резистор номиналом 10 кОм.
  • Соединительные провода.
  • USB-кабель для подключения Рудирона к компьютеру.
  • Компьютер с Arduino IDE и установленной библиотекой Rudiron_DHT11.

Ход работы

  1. Как работает DHT11? Bit-banging

    DHT11 — это цифровой датчик, но он не просто выдаёт HIGH или LOW. Он передаёт 40 бит информации (5 байт), в которых закодированы влажность, температура и контрольная сумма для проверки ошибок. Для этого используется специальный однопроводной протокол.

    Bit-banging (дословно «дрыгоножество») — это программная техника, при которой микроконтроллер вручную управляет пином, быстро переключая его между HIGH и LOW с точными временными задержками, чтобы сымитировать стандартный протокол связи.

    Процесс общения выглядит так:

    1. Микроконтроллер «будит» датчик, отправляя ему стартовый сигнал.
    2. Датчик «отвечает», подтверждая свою готовность.
    3. Датчик последовательно отправляет 40 бит данных, кодируя нули и единицы разной длительностью импульсов.
    4. Микроконтроллер «слушает» пин, измеряет длительность каждого импульса и расшифровывает биты.

    Делать это вручную сложно. К счастью, за нас это сделает библиотека.

  2. Установка библиотеки Rudiron_DHT11

    Библиотека — это готовый набор функций и классов, который прячет всю сложность работы с устройством. Вам не нужно знать про bit-banging, достаточно вызвать простые команды.

    • Скачайте архив с библиотекой из нашего репозитория Rudiron Libraries.
    • В Arduino IDE перейдите в меню Sketch → Include Library → Add .ZIP Library…
    • Выберите скачанный архив. IDE автоматически установит библиотеку.
  3. Сборка схемы

    • Вставьте датчик DHT11 в макетную плату.
    • Подключите к Рудирону:
      • Вывод VCC (или +) датчика соедините с пином 5V.
      • Вывод GND (или ) датчика соедините с GND.
      • Вывод DATA (данные) соедините с пином 2.
    • Добавьте подтягивающий резистор. Соедините вывод DATA (пин 2) с выводом VCC (пин 5V) через резистор 10 кОм. Это необходимо для стабильной работы протокола.
  4. Написание и загрузка кода

    • Убедитесь, что перемычка 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», чтобы загрузить код на плату.
  5. Проверка работы

    • Откройте Монитор последовательного порта (Tools → Serial Monitor), установив скорость 9600 бод.
    • Каждые две секунды в окне будут появляться актуальные данные о температуре и влажности в вашей комнате.
    • Попробуйте подышать на датчик — вы увидите, как показания влажности резко вырастут!

Результаты

Вы создали простую, но функциональную метеостанцию! Вы научились использовать внешнюю библиотеку для работы со сложным датчиком, что значительно упростило код и позволило быстро получить результат.

Анализ результатов

Вся сложность работы с протоколом DHT11 спрятана внутри библиотеки Rudiron_DHT11. Наш код получился очень простым и читаемым:

  • dht.attach(2); — мы инициализируем датчик на пине 2.
  • dht.read() — запускает процесс обмена данными и возвращает true в случае успеха.
  • dht.getTemperature() и dht.getHumidity() — возвращают уже обработанные и готовые к использованию значения.

Выводы

В этой лабораторной работе вы сделали важный шаг в сторону создания реальных проектов. Вы научились подключать и использовать сложные цифровые датчики с помощью библиотек. Вы поняли, что библиотеки — это мощный инструмент, который экономит время и позволяет сосредоточиться на логике вашего проекта, а не на низкоуровневых деталях протоколов.

Вопросы для самопроверки

  1. Что такое библиотека в контексте Arduino?
  2. Зачем в схеме с DHT11 нужен подтягивающий резистор?
  3. Какую информацию и в каком формате передаёт датчик DHT11?
  4. Что такое bit-banging?
  5. Как часто, согласно коду, мы опрашиваем датчик и почему?

Поздравляем! Вы научились работать с цифровыми датчиками и библиотеками. В следующем параграфе мы перейдём к изучению аналоговых сигналов и научим Рудирон плавно управлять яркостью и скоростью.