22

Вывод показаний датчика DHT11 на четырехразрядный семисегментный дисплей

Озадачился постоянным мониторингом значения температуры и влажности в комнате. Смотреть на серийном порту показания датчика DHT11 любопытно но не информативно. Циферки нужно показывать красиво.

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

В данном макете это и реализовано.

Сам скетч тут

Также можно выводить показания других датчиков. В данном конкретном примере DHT11 можно заменить на DHT22 без переписывания кода нужно только поменять тип на "DHT22" в третьей строчке скетча.

Arduino & Pi

1.5K постов20.8K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

1
Автор поста оценил этот комментарий

Если правильно помню - там не ересь, а старший бит.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

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

Если в дополнительном коде с разрешением 0,1 градус, на что намекает этот кусок - то ошибка здесь:

return (_t16bits & 0x7FFF)/-10.0;
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Датчик выдаёт 40 бит информации в таком виде:

0000000110101010 0000000100001111 10111011


первые 16 бит - влажность, следующие 16 бит - температура, последние 8 бит - контрольная сумма, где
- первый бит температуры это её знак («0» значит «+», «1» значит «-»);
- значения влажности в %, значения температуры в °C.


Когда значение температуры переходит ниже ноля первый бит значения температуры изменяется с 0 на 1, и на выходе соответственно при прямом переводе их двоичной системы в

десятичную первого градуса отрицательного значения температуры вместо 1 (0000000000000001) получаем 32769 (1000000000000001) что и вижу в выводе.


Мне кажется что приведённый выше кусок кода из библиотеки никак не обрабатывает этот первый бит температуры, отвечающий за знак.

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

Может просто переписать кусочек кода?

показать ответы
2
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Пробовал получать температуру с DHT22 при помощи вот этой библиотеки https://github.com/dvarrel/DHT22
Пока положительная, все нормально до 0 градусов, потом ересь выдает.
В программировании я не очень но, насколько я понял вот этот кусок кода

float DHT22::getTemperature(){
if (readSensor() != OK) return -273;
if (bitRead(_t16bits,15)) return (_t16bits & 0x7FFF)/-10.0;
else return _t16bits/10.0;
}

из https://github.com/dvarrel/DHT22/blob/main/DHT22.cpp как раз и отвечает за чтение и интерпретацию температуры.
Если не затруднит, можете растолковать неучу?
показать ответы
1
Автор поста оценил этот комментарий
я вот делал на 11 показометр, если температура еще ничего, то по влажности он совсем фигню показывал
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Плюс-минус лапоть при 25 градусах по Цельсию, но это в данном конкретном случае не сильно важно.

У меня в другом проекте другая грабля. Хочу мерить отрицательную температуру за бортом. DHT22 после нуля показывает ересь, ответа пока не нагуглил.

показать ответы