| DHT22 завышает температуру | 
|  | 
| 
|  | Сообщение # 1 | | Nik9900 
   
    
Постов: 11  
 
ОК  | Всегда использовал отдельные датчики для измерения температуры/влажности/давление. Решил попробовать DHT22 (влажность + температура), подключил к одному МК DTH22 и DS18B20 и вот что получаем на выходе:
 Packet: 6321
 ReportID: 0
 Size: 10
 Data: 01 01 26 01 A8 D0 EB 01 EA 00
 Result: DHT22_OK
 CRC: D0
 DHT22 Temp: 29,40 C
 DHT22 RH: 42,40 %
 DS1820 Temp: 24,50 C
 
 Показывает температуру на 5 градусов больше чем Dallas, контрольная сумма проходит проверку, т.е. данные с датчика считаны корректно. По отзывам в сети этот датчик имеет неплохие (по сравнению с DHT11) параметры, из - за чего может быть такое расхождение ?
 |  | 
| 
|  | Сообщение # 2 | | msmmmm 
   
    
Постов: 891  
 
Друзья  | В ответе должно быть 40 бит (5 байт), а тут целый поток. Если продолжение после CRC - данные от того же датчика, то там уже 49,1% 23,4 С. Показания прибора неправильные, но стабильны? Питание датчика в порядке?
 Добавлено (20.06.2017, 19:46)
 ---------------------------------------------
 Да, и по даташиту первой идет влажность, затем температура, затем контрольная сумма. В данных наоборот.
 |  | 
| 
|  | Сообщение # 3 | | Nik9900 
   
    
Постов: 11  
 
ОК  | Извиняюсь за путанницу, Data: 01 01 26 01 A8 D0 EB 01 EA 00 это пакет данных не только от датчика, в этом пакете данные от датчика: 01 26 01 A8 D0, 5 байт, контрольная сумма D0, далее идут данные не относящиеся к датчику. Датчик опрашивается 1 раз в 2 секунды, контрольная сумма всегда верная, подтяжка 4.7к на шину данных есть.
 
 Цитата  Да, и по даташиту первым идет влажность, затем температура, затем контрольная сумма. В данных наоборот.
 Всё верно, читаю данные именно так:
 
 Код AData^.RH_Byte1 := ReadData();
 AData^.RH_Byte2 := ReadData();
 AData^.T_Byte1   := ReadData();
 AData^.T_Byte2   := ReadData();
 AData^.CRC         := ReadData();
 
 Это просто уже в протоколе передачи данных на ПК местами поменял, ну и соответственно на ПК при выводе температуры и влажности это учтено.
 |  | 
| 
|  | Сообщение # 4 | | msmmmm 
   
    
Постов: 891  
 
Друзья  | От руки температура растет? От дыхания влажность увеличивается? Напряжение питания выше 3,3В? |  | 
| 
|  | Сообщение # 5 | | Nik9900 
   
    
Постов: 11  
 
ОК  | От руки температура растёт и влажность немного растёт, если дыхнуть на датчик то под 90% влажность подскакивает, потом постепенно спадает. На данный момент питается от АКБ на 3.7В, но подавал и 5В, разницы никакой.Добавлено (20.06.2017, 20:06)---------------------------------------------
 вот несколько часов макетка с датчиком лежит на балконе, сейчас данные такие:
 ********************
 Packet: 209
 ReportID: 0
 Size: 10
 Data: 01 00 DA 01 E1 BC 62 01 28 0F
 Result: DHT22_OK
 CRC: BC
 DHT22 Temp: 21,80 C
 DHT22 RH: 48,10 %
 DS1820 Temp: 17,70 C
 ********************
 Показания от DS1820 совпадают с .....метеоданными на данный момент ) но DHT22 опять уполз вперёд на 4 градуса.
 |  | 
| 
|  | Сообщение # 6 | | msmmmm 
   
    
Постов: 891  
 
Друзья  | Если датчик врет, то есть 2 способа проверить:1. Подкинуть другой такой же, сразу все будет понятно.
 2. Если датчика под рукой нет, собрать схему в протеусе, проверить прошивку. Если с прошивкой порядок, значит с датчиком не повезло.
 Вариант бракованного датчика здесь, по-моему, самый вероятный.
 |  | 
| 
|  | Сообщение # 7 | | Nik9900 
   
    
Постов: 11  
 
ОК  | Другого такого же нет, этот то взял на пробу, ездил на другой конец города. Попробую в Протеусе собрать, просто дело в том, что на нескольких форумах встречал подобные жалобы, и расхождения были примерно в этом же диапазоне, но решений так и не было, темы просто заглохли. Попробую его ещё к Ардуине поцепить и стандартной библиотекой прочитать. |  | 
| 
|  | Сообщение # 8 | | msmmmm 
   
    
Постов: 891  
 
Друзья  | Почитал свое предыдущее сообщение - данные читает, КС каждый раз совпадает, данные изменяются согласно внешнему воздействию, программная конвертация совпадает с расчетной - программа, скорее всего, ни при чем. |  | 
| 
|  | Сообщение # 9 | | Nik9900 
   
    
Постов: 11  
 
ОК  | Сам датчик покупал у местного барыги, в магазинах у нас не нашёл, но думаю приехал он с Али, где тогда лучше заказывать эти датчики более приемлемого качества ? Сейчас заказал еще Si7021 с Али, мне нужно добиться точности хотя бы в 0.5 - 1 градус по температуре. Если ни тот ни другой не допинаю до нужных значений, придётся ставить отдельный датчик на влажность и старый добрый Dallas на температуру. |  | 
| 
|  | Сообщение # 10 | | msmmmm 
   
    
Постов: 891  
 
Друзья  | Как вариант - откалибровать то, что есть. Нужен образцовый датчик и возможность задавать температуру в возможно широком диапазоне. Погрешность, судя по всему мультипликативная, легко исправляется изменением тангенса наклона номинальной статической характеристики преобразователя температуры. Знать бы еще - погрешность линейная или нет. Мороки не много, но прописывать константы для серийного прибора как-то не комильфо. А вот для единичного экземпляра можно и повозиться.  Есть правда "но": в формуле есть умножение, которое в контроллерах выполняется довольно медленно. t`=a*t+b, a и b - коэффициенты полинома (находятся линейной аппроксимацией), t - температура, которую выдал датчик, t`- скорректированная температура.
 Кстати, все промышленные цифровые преобразователи имеют возможность подстройки.
 Для этого датчика по ранее выложенным данным
 a=0,894736842
 b=-1,80526316
 |  |