Оглавление:

Тестирование датчиков температуры - какой из них для меня ?: 15 шагов (с изображениями)
Тестирование датчиков температуры - какой из них для меня ?: 15 шагов (с изображениями)

Видео: Тестирование датчиков температуры - какой из них для меня ?: 15 шагов (с изображениями)

Видео: Тестирование датчиков температуры - какой из них для меня ?: 15 шагов (с изображениями)
Видео: Датчик температуры, влажности и давления Aqara [ умный дом Xiaomi ] 2024, Ноябрь
Anonim
Тестирование датчиков температуры - какой из них для меня?
Тестирование датчиков температуры - какой из них для меня?

Один из первых датчиков, который хотят опробовать новички в области физических вычислений, - это датчик для измерения температуры. Четыре самых популярных датчика - это TMP36, который имеет аналоговый выход и требует аналого-цифрового преобразователя, DS18B20, который использует однопроводное соединение, DHT22 или немного более дешевый DHT11, которому нужен только цифровой вывод, но также обеспечивает показания влажности, и, наконец, BME680, который использует I2C (с SPI также на некоторых коммутационных платах) и выдает температуру, влажность, газ (VOC) и атмосферное давление, но стоит немного дороже.

Я хочу увидеть, насколько они точны, и узнать о преимуществах и недостатках. У меня уже есть точный ртутный термометр, оставшийся от цветной фотопечати еще во времена химической обработки, чтобы сравнить его. (Никогда ничего не выбрасывайте - вам это понадобится позже!)

Я собираюсь использовать CircuitPython и плату разработки Adafruit Itsybitsy M4 для этих тестов. Подходящие драйверы доступны для всех устройств.

Запасы

Мой первоначальный список:

  • Микроконтроллер Itsybitsy M4 Express
  • кабель micro USB - для программирования
  • TMP36
  • DS18B20
  • Резистор 4,7 кОм
  • DHT22
  • BME680
  • Мультиметр
  • Макетная или стрип-плата
  • Соединительный провод

Шаг 1: схемы

Схемы
Схемы

Оранжевые провода - 3,3 В

Черные провода - GND

Внизу платы расположены контрольные точки для измерения напряжений. (3,3 В, аналоговый выход GND и TMP36)

Центральные розетки слева направо:

  • TMP36: 3,3 В, аналоговый сигнал, GND
  • DS18B20: GND, выход цифрового сигнала, 3,3 В
  • DHT22: 3,3 В, выход сигнала, пустой, GND
  • BME680: 3,3 В, SDA, SCL, пустой, GND

Задний разъем, для подключения к плате IB M4E, слева направо

  • 3,3 В
  • TMP36 - аналоговый выход на вывод A2
  • GND
  • Цифровой выход DS18B20 на контакт D3 - зеленый
  • Цифровой выход DHT22 на контакт D2 - желтый
  • ПДД - белый
  • SCL - розовый

Резистор 4,7 кОм - это подтяжка от сигнала до 3,3 В для однопроводного подключения на DS18B20.

На обратной стороне доски есть 2 вырезанные дорожки:

Ниже левого конца розового и белого проводов. (Под желтым проводом.)

Шаг 2: Метод

Метод
Метод

Для каждого датчика я напишу короткий сценарий, чтобы несколько раз считывать температуру (и другие данные, если они есть) и проверять температуру по моему ртутному (Hg) термометру. Я буду следить за тем, насколько близка температура к показаниям ртути и стабильны ли показания.

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

Шаг 3: TMP36 - Начальное испытание

TMP36 - Начальное испытание
TMP36 - Начальное испытание
TMP36 - Начальное испытание
TMP36 - Начальное испытание

Левая нога - 3,3 В, правая нога - GND, а центральная нога - аналоговое напряжение, представляющее температуру по следующей формуле. TempC = (милливольт - 500) / 10

Итак, 750 милливольт дают температуру 25 C

Похоже, здесь есть пара проблем. Температура на «нормальном» ртутном термометре намного ниже, чем на TMP36, и показания не очень согласованы - есть некоторый «дрожание» или шум.

Датчик TMP36 выдает напряжение, пропорциональное температуре. Это должно быть считано аналого-цифровым преобразователем перед вычислением температуры. Давайте посчитаем напряжение непосредственно со средней ножки датчика с помощью мультиметра и сравним его с результатом аналого-цифрового преобразования. Показание на центральной ножке моего мультиметра составляет 722 милливольта, что намного ниже и очень стабильное показание.

Мы можем попробовать две вещи. Замените TMP36 потенциометром и отрегулируйте напряжение в расчете на фактическое напряжение микроконтроллера. Затем мы посмотрим, приблизится ли расчетное напряжение и уменьшится ли шум / джиттер.

Давайте измерим фактическое напряжение, используемое моим микроконтроллером и аналого-цифровым преобразователем. Предполагалось, что это 3,3 В, но на самом деле это всего 3,275 В.

Шаг 4: Результаты замены потенциометра

Результаты замены потенциометра
Результаты замены потенциометра

Это намного лучше. Показания находятся в пределах пары милливольт с гораздо меньшим шумом. Это говорит о том, что шум исходит от TMP36, а не от A / D. Показания измерителя всегда стабильны - нет дрожания. (Возможно, измеритель «сглаживает» нестабильный выходной сигнал.)

Одним из способов улучшения ситуации может быть среднее значение. Быстро сделайте десять измерений и используйте среднее значение. Я также буду рассчитывать стандартное отклонение при изменении программы, чтобы указать на разброс результатов. Я также буду подсчитывать количество показаний в пределах 1 стандартного отклонения от среднего - чем больше, тем лучше.

Шаг 5: Средние значения и результат

Средние показания и результат
Средние показания и результат

По-прежнему очень много шума, и показания TMP36 все еще выше, чем показания ртутного термометра. Чтобы уменьшить шум, я включил конденсатор 100 НФ между сигналом и землей.

Затем я поискал другие решения в Интернете и нашел их: https://www.doctormonk.com/2015/02/accurate-and-re… Доктор Монк предлагает включить резистор 47 кОм между сигналом и заземлением.

www.desert-home.com/2015/03/battery-operate… В то время как этот парень предлагает отсортировать 15 показаний по порядку и усреднить центр 5.

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

Наконец! Теперь у нас стабильные показания в пределах точности описания устройства.

Потребовалось довольно много усилий, чтобы заставить работать датчик, точность производителя которого составляет:

Точность - самая высокая (самая низкая): ± 3 ° C (± 4 ° C) Они стоят всего около 1,50 доллара США (2 фунта стерлингов)

Шаг 6: DS18B20 - начальное тестирование

DS18B20 - Начальное тестирование
DS18B20 - Начальное тестирование

Будь очень осторожен. Этот пакет очень похож на TMP36, но ноги расположены наоборот: 3,3 В справа и GND слева. Выходной сигнал находится в центре. Чтобы это устройство заработало, нам понадобится резистор 4,7 кОм между сигналом и 3,3 В. Это устройство использует однопроводный протокол, и нам нужно загрузить пару драйверов в папку lib в Itsybitsy M4 Express.

Это стоит около 4 долларов США / 4 фунта стерлингов.

  • Рабочий диапазон температур: от -55 до 125 ° C (от -67 ° F до + 257 ° F)
  • Выбираемое разрешение от 9 до 12 бит
  • Использует интерфейс 1-Wire - для связи требуется только один цифровой вывод
  • Уникальный 64-битный идентификатор, записанный в чип
  • Несколько датчиков могут использовать один контакт
  • ± 0,5 ° C Точность от -10 ° C до + 85 ° C
  • Система аварийной сигнализации ограничения температуры
  • Время запроса менее 750 мс
  • Работает с питанием от 3,0 В до 5,5 В

Основная проблема с этим датчиком заключается в том, что он использует интерфейс Dallas 1-Wire, и не все микроконтроллеры имеют подходящий драйвер. Нам повезло, есть драйвер на Itsybitsy M4 Express.

Шаг 7: DS18B20 работает хорошо

DS18B20 работает хорошо
DS18B20 работает хорошо

Это показывает отличный результат.

Стабильный набор показаний без лишней работы и накладных расходов на вычисления. Показания находятся в пределах ожидаемого диапазона точности ± 0,5 ° C по сравнению с моим ртутным термометром.

Существует также водонепроницаемая версия примерно за 10 долларов, которую я использовал в прошлом с таким же успехом.

Шаг 8: DHT22 и DHT11

DHT22 и DHT11
DHT22 и DHT11

DHT22 использует термистор для измерения температуры и стоит около 10 долларов / 10 фунтов стерлингов и является более точным и дорогим братом меньшего DHT11. Он также использует однопроводный интерфейс, но НЕ совместим с протоколом Dallas, используемым с DS18B20. Он определяет влажность, а также температуру. Этим устройствам иногда требуется подтягивающий резистор между 3,3 В и сигнальным контактом. В этом пакете он уже установлен.

  • Бюджетный
  • Питание от 3 до 5 В и ввод / вывод
  • Максимальный потребляемый ток 2,5 мА во время преобразования (при запросе данных)
  • Подходит для показаний влажности 0-100% с точностью 2-5%
  • Подходит для измерения температуры от -40 до 80 ° C с точностью ± 0,5 ° C
  • Частота дискретизации не более 0,5 Гц (один раз в 2 секунды)
  • Размер корпуса 27 мм x 59 мм x 13,5 мм (1,05 дюйма x 2,32 дюйма x 0,53 дюйма)
  • 4 контакта с шагом 0,1 дюйма
  • Вес (только DHT22): 2,4 г

По сравнению с DHT11 этот датчик более точный, более точный и работает в большем диапазоне температуры / влажности, но он больше и дороже.

Шаг 9: результаты DHT22

Результаты DHT22
Результаты DHT22

Это отличные результаты при минимальных усилиях. Показания довольно стабильны и находятся в пределах ожидаемого допуска. Показания влажности - это бонус.

Вы можете снимать показания только каждую секунду.

Шаг 10: Тест DTH11

Тест DTH11
Тест DTH11

Мой ртутный термометр показал 21,9 ° C. Это довольно старый DHT11, который я извлек из старого проекта, и значение влажности сильно отличается от показаний DHT22 несколько минут назад. Это стоит около 5 долларов / 5 фунтов стерлингов.

В его описание входят:

  • Подходит для измерения влажности 20-80% с точностью 5%
  • Подходит для измерения температуры 0-50 ° C с точностью ± 2 ° C - меньше, чем у DTH22

Температура, похоже, все еще находится в диапазоне точности, но я не доверяю показаниям влажности этого старого устройства.

Шаг 11: BME680

BME680
BME680

Этот датчик содержит в одном корпусе возможности измерения температуры, влажности, барометрического давления и летучих органических соединений, но он является самым дорогим из тестируемых датчиков. Это стоит около 18,50 фунтов стерлингов / 22 доллара США. Есть аналогичный продукт без датчика газа, который немного дешевле.

Это золотой стандарт сенсора из пятерки. Датчик температуры точный и с подходящими драйверами очень прост в использовании. Эта версия использует I2C, но коммутационная плата Adafruit также может использовать SPI.

Как и BME280 и BMP280, этот прецизионный датчик от Bosch может измерять влажность с точностью ± 3%, атмосферное давление с абсолютной точностью ± 1 гПа и температуру с точностью ± 1,0 ° C. Поскольку давление меняется с высотой, а измерения давления настолько хороши, вы также можете использовать его как высотомер с точностью ± 1 метр или выше!

В документации говорится, что требуется некоторое время на приработку газового датчика.

Шаг 12: что мне использовать?

Какой мне использовать?
Какой мне использовать?
  • TMP36 очень дешевый, маленький и популярный, но довольно сложный в использовании и может быть неточным.
  • DS18B20 - маленький, точный, дешевый, очень простой в использовании и водонепроницаемый вариант.
  • DTH22 также указывает на влажность, имеет умеренную цену и прост в использовании, но может работать слишком медленно.
  • BME680 делает гораздо больше, чем другие, но стоит дорого.

Если мне просто нужна температура, я бы использовал DS18B20 с точностью ± 0,5 ° C, но мне больше всего нравится BME680, потому что он делает гораздо больше и может использоваться в большом количестве различных проектов.

Последняя мысль. Убедитесь, что вы держите датчик температуры подальше от микропроцессора. Некоторые шляпы Raspberry Pi позволяют теплу от основной платы нагревать датчик, давая ложные показания.

Шаг 13: Дальнейшие размышления и эксперименты

Дальнейшие мысли и эксперименты
Дальнейшие мысли и эксперименты

Спасибо gulliverrr, ChristianC231 и pgagen за ваши комментарии о том, что я сделал до сих пор. Прошу прощения за задержку, но я был в отпуске в Ирландии без доступа к своему электронному комплекту в течение нескольких недель.

Это первая попытка показать, как датчики работают вместе.

Я написал сценарий, который по очереди считывает датчики и распечатывает значения температуры каждые 20 секунд или около того.

Ставлю набор на час в холодильник, чтобы все остыло. Я подключил его к компьютеру и заставил Му распечатать результаты. Затем результат был скопирован, преобразован в файл.csv (переменные, разделенные запятыми), и из результатов были построены графики в Excel.

После извлечения набора из холодильника до регистрации результатов потребовалось около трех минут, поэтому в этот промежуток времени произошло некоторое повышение температуры. Я подозреваю, что четыре датчика имеют разную теплоемкость и поэтому нагреваются с разной скоростью. Ожидается, что скорость потепления будет уменьшаться по мере приближения датчиков к комнатной температуре. Я записал это как 24,4 ° C своим ртутным термометром.

Значительные различия в температуре в начале кривых могут быть связаны с различной теплоемкостью датчиков. Мне приятно видеть, что линии сходятся к концу по мере приближения к комнатной температуре. Меня беспокоит, что TMP36 всегда намного выше, чем другие датчики.

Я просмотрел таблицы данных, чтобы еще раз проверить описанную точность этих устройств.

TMP36

  • Погрешность ± 2 ° C по температуре (тип.)
  • Линейность ± 0,5 ° C (тип.)

DS18B20

± 0,5 ° C Точность от -10 ° C до + 85 ° C

DHT22

температура ± 0,5 ° C

BME680

температура с точностью ± 1,0 ° C

Шаг 14: Полный график

Полный график
Полный график

Теперь вы можете видеть, что датчики в конечном итоге выровнялись и согласовали температуру более или менее в пределах описанной точности. Если отклонить 1,7 градуса от значений TMP36 (ожидается ± 2 ° C), будет хорошее согласие между всеми датчиками.

Когда я впервые провел этот эксперимент, датчик DHT22 вызвал проблему:

Вывод main.py:

14.9, 13.5, 10.3, 13.7

15.7, 14.6, 10.5, 14.0

16.6, 15.6, 12.0, 14.4

18.2, 16.7, 13.0, 15.0

18.8, 17.6, 14.0, 15.6

19.8, 18.4, 14.8, 16.2

21.1, 18.7, 15.5, 16.9

21.7, 19.6, 16.0, 17.5

22.4, 20.2, 16.5, 18.1

23.0, 20.7, 17.1, 18.7

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

Отслеживание (последний вызов последний):

Файл "main.py", строка 64, в

Файл "main.py", строка 59, в get_dht22

NameError: ссылка на локальную переменную перед назначением

Поэтому я изменил сценарий, чтобы справиться с этой проблемой, и перезапустил запись:

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

25.9, 22.6, -999.0, 22.6

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

25.9, 22.8, -999.0, 22.7

25.9, 22.9, 22.1, 22.8

25.9, 22.9, 22.2, 22.9

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

27.1, 23.0, -999.0, 23.0

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

27.2, 23.0, -999.0, 23.1

25.9, 23.3, 22.6, 23.2

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

28.4, 23.2, -999.0, 23.3

Ошибка чтения DHT: («Датчик DHT не найден, проверьте проводку»,)

26.8, 23.1, -999.0, 23.3

26.5, 23.2, 23.0, 23.4

26.4, 23.3, 23.0, 23.5

26.4, 23.4, 23.1, 23.5

26.2, 23.3, 23.1, 23.6

Со вторым запуском проблем не было. Документация Adafruit действительно предупреждает, что иногда датчики DHT пропускают показания.

Шаг 15: выводы

Выводы
Выводы

Эта кривая ясно показывает, что более высокая теплоемкость некоторых датчиков увеличивает время их реакции.

Все датчики фиксируют повышение и понижение температуры.

Они не очень быстро достигают новой температуры.

Они не очень точны. (Достаточно ли они хороши для метеостанции?)

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

Рекомендуемые: