Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino

Компоненты и материалы

Компонент Количество Примечание
Датчик температуры и влажности DHT11 (4 пина) 1
Raspberry Pi 2 Model B 1
Arduino UNO 1
Провода «папа-папа» (Male-to-Male Jumper Wire) 3
Беспаечная макетная плата (Breadboard) 1
Резистор 4,7 кОм 1 Подтягивающий резистор для линии данных
Набор Cobbler Breakout (для Raspberry Pi) 1 Для удобного подключения к GPIO

Программное обеспечение и онлайн-сервисы

О проекте

Введение

Проект посвящён работе с датчиком DHT11 на платформах Raspberry Pi (Windows 10 IoT Core, Raspbian) и Arduino UNO. Цель — создать библиотеку для C# в Windows 10 IoT Core, позволяющую надёжно считывать данные с датчика, используя пример от Microsoft на C++ как базу.

Основы датчика DHT11

DHT11 — 4-пиновый датчик (один пин не используется), измеряющий влажность 20–90% и температуру 0–50 °C. Питание 3–5,5 В DC. Обмен данными происходит по проприетарному протоколу OneWire, требующему очень точного тайминга. Биты кодируются длительностью высокого уровня сигнала. Полное чтение занимает до 23,4 мс (включая 18 мс задержки запуска и до 5,4 мс на передачу данных). Отдельные импульсы длятся 20–80 мкс.

При выходе Windows 10 IoT Core я попытался использовать DHT11 на C# и обнаружил, что C# в IoT Core недостаточно быстр для точного тайминга. На форуме Microsoft обсуждали эту проблему. Позже Microsoft опубликовал пример реализации OneWire для DHT11 на C++ для Windows 10 IoT Core. Этот проект адаптирует тот пример в библиотеку для C#.

Библиотека

Библиотека — простая рефакторинг кода от Microsoft, поэтому заслуга за чтение датчика принадлежит им.

Библиотека предоставляет класс Dht11 в пространстве имён Sensors.Dht. Создание объекта в C#:

using Sensors.Dht;
GpioPin pin = GpioController.GetDefault().OpenPin(4, GpioSharingMode.Exclusive);

Передаём пин в конструктор с указанием режима драйвера GPIO (позволяет решить, добавлять ли свой подтягивающий резистор):

Dht11 dht11 = new Dht11(_pin, GpioPinDriveMode.Input);

Получение показаний:

DhtReading reading = await dht11.GetReadingAsync().AsTask();

Есть перегрузка с параметром максимального числа попыток (по умолчанию 20). Структура DhtReading:

public value struct DhtReading {
    bool TimedOut;
    bool IsValid;
    double Temperature;
    double Humidity;
    int RetryCount;
};

Наблюдения

Даже в C++ датчик не всегда выдаёт показание с первой попытки, поэтому нужен механизм повторных попыток (это часть примера Microsoft). Я сравнил производительность на трёх платформах: Raspberry Pi 2 на Windows 10 IoT Core (C#), Raspberry Pi 2 на Raspbian (C) и Arduino UNO. Код для всех платформ есть в GitHub-репозитории. Видео в проекте демонстрирует и сравнивает результаты.

Начало работы

Сборка схемы для Raspberry Pi 2

Используйте схему внизу страницы (цвета проводов опциональны, выбраны для наглядности).

  1. Установите T-образный Cobbler на левом конце полуразмерной макетной платы (нумерация с 1). Два левых пина в E1 и F1, два правых — в E20 и F20.
  2. Установите резистор 4,7 кОм между A4 и 3V3.
  3. Соедините оранжевый провод между B4 и F28.
  4. Соедините красный провод между F29 и 3V3.
  5. Соедините чёрный провод между F30 и GND.
  6. Установите датчик DHT11 в J30 (-), J29 (+), J28 (сигнал).
  7. Подключите шлейф кабеля к Cobbler и Raspberry Pi.

Сборка схемы для Arduino

  1. Установите резистор 4,7 кОм между E12 и E13.
  2. Соедините белый провод между D13 и Pin 5 Arduino.
  3. Соедините красный провод между D12 и 5V Arduino.
  4. Соедините чёрный провод между D11 и GND Arduino.
  5. Установите датчик DHT11 в A11 (-), A12 (+), A13 (сигнал).
  6. Подключите USB-кабель от компьютера к Arduino.

Ниже фото собранных схем.

Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino

Запуск приложения на Raspberry Pi (Windows 10 IoT Core)

  1. Выберите конфигурацию Debug, ARM, Remote Machine.
  2. Правый клик на проекте → Properties → вкладка Debug.
  3. В поле Remote machine введите IP-адрес Raspberry Pi 2, снимите галочку Use authentication.
  4. Нажмите F5. Приложение развернётся на устройстве (первый раз может занять несколько минут).

Запуск приложения на Arduino

Скетч доступен в GitHub в файле Dht11_Speed. Откройте его в Arduino IDE, загрузите в Arduino (Ctrl+U), откройте Serial Monitor (Ctrl+Shift+M). Видео ниже показывает процесс.

Запуск приложения на Raspbian

C-код для Raspberry Pi доступен в GitHub в файле Dht11.c. Исходник нужно скопировать на Pi и скомпилировать там. Я использую WinSCP для копирования. Требуется установленный wiringPi.

Команда компиляции:

gcc -o Dht11_Speed Dht11_Speed.c -L/usr/local/lib -lwiringPi -std=c99 -lm

Запуск:

sudo ./Dht11_Speed 1000 10

Где 1000 — задержка между измерениями в мс (1 сек), 10 — количество измерений.

Видео подробно показывает копирование и компиляцию. Установка Raspbian: raspberrypi.org/downloads/raspbian/.

Видео

Демонстрация работы приложения на всех трёх платформах. Рекомендую смотреть в YouTube в режиме «Театр» для лучшего качества.

Исходный код

Visual Studio 2015 C#/C++ Source Code
https://github.com/porrey/dht.git

Схемы (Fritzing)

Dht11_RPi2.fzz — схема для Raspberry Pi 2
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Dht11_Arduino.fzz — схема для Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino
Набор датчиков температуры и влажности DHT11 и DHT22 для Raspberry Pi и Arduino

Производственный процесс

  1. Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
  2. ИК-датчик температуры TMP006 с Raspberry Pi: библиотека Python и руководство по настройке
  3. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  4. Как подключить однопроводный датчик температуры DS1820 к Raspberry Pi через GPIO
  5. Подключение цифрового термометра DS18B20 1-Wire к Raspberry Pi — пошаговое руководство
  6. Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
  7. Создайте домашний монитор температуры на Raspberry Pi с MCP9808, InfluxDB и Grafana
  8. Подключение Raspberry Pi 3 к датчику DHT11 и загрузка данных в облако ThingsIo.ai
  9. Точный датчик температуры подшипников: обнаружение и мониторинг
  10. Точное инфракрасное температурное измерение для цветозависимых процессов