Niezawodność czujników temperatury DS18x20

11

Korzystam z DS18x20 Maxima (właściwie mam więcej niż jeden wariant) 1-przewodowych czujników temperatury do rejestrowania temperatur w różnych pokojach w domu raz na minutę. Około jednego czytania na tysiąc otrzymuję z powrotem coś całkowicie fałszywego. W środku sekwencji, która stopniowo rośnie z 65F do 70F, otrzymuję coś w rodzaju -32.1F lub 15.64F.

Czy ktoś jeszcze miał taki problem, czy jest to coś złego w mojej konfiguracji? Jeśli jest to po prostu znany problem z tymi rzeczami, będę musiał zrobić coś takiego, jak trzy czytania i wyrzucenie wartości odstającej.

Kilka stwierdzeń o mojej konfiguracji:

  • Pracuję na 3,3 V.
  • Sprawdzam sumę kontrolną odczytu, gdy wraca do arduino, i pasuje (lub myślę, że tak - zawsze może być błąd w tym kodzie).
  • Uciekają one z normalnej mocy, a nie mocy pasożyta.
  • Mam na miejscu rezystor pullup 4,7K.
  • Używam tylko jednego czujnika na każdej platformie czujnikowej.
  • Czujnik znajduje się na płytce drukowanej przymocowanej do czytnika arduino.
  • Widzę ten sam problem z czytaniem z wielu różnych arduinos (diecimilla, pro-mini, domowe zamówienie)
Edebill
źródło

Odpowiedzi:

5

Widzę to od czasu do czasu z DS18B20. Dla mojej aplikacji było wystarczająco proste, aby odfiltrować fałszywe wyniki za pomocą kodu.

użytkownik274
źródło
Dobrze jest słyszeć, że ktoś inny wyglądał na coś podobnego. Jaki był twój algorytm filtrowania?
edebill,
Sugerowałbym, abyś zrobił to, co powiedziałeś, weź 3 czytanie, 5 byłoby lepiej, 7 lepiej niż to, ale jeśli wystąpi błąd około 1/1000, potrzebujesz tylko 3. Weź medianę. Problem zostanie rozwiązany. jeśli weźmiesz 5, wystąpi dziwaczny problem.
Kortuk,
Teraz robię 5. Próbowałem wziąć wyższą z 2, ale wczoraj wieczorem wciąż pojawiał się błąd (mam 3 czujniki czytające co minutę, więc dostaję tysiące punktów danych dziennie).
edebill,
3

Jeśli nie możesz znaleźć źródła błędnych odczytów, powinno być łatwo je odfiltrować i ekstrapolować z poprzednich odczytów lub interpolować między odczytami, jeśli ważna jest perspektywa. Ponieważ próbkujesz raz na minutę, możesz nawet skopiować ostatni odczyt; temperatura w pomieszczeniu prawie się nie zmieni w ciągu jednej minuty.

stevenvh
źródło
3

Może to być spowodowane błędnym odczytem przez sterownik jednego lub więcej bitów odpowiedzi temperaturowej w pewnych warunkach dużego obciążenia lub interferencją elektryczną powodującą uszkodzenie jednego lub więcej bitów.

Dokładnie zapoznaj się z arkuszem danych tutaj http://www.rentron.com/Files/ds18b20.pdf

Na stronie 5 pokazuje, że dokładna sekwencja binarna dla 85C to:

+85°C 0000 0101 0101 0000

Podobnie dla 25C jest to:

+25.0625°C 0000 0001 1001 0001

W niektórych przypadkach, jeśli sterownik trochę nie trafi, otrzymasz wartość, która jest rzeczywistą temperaturą, wyrażoną w postaci binarnej i przesuniętej w bitach. Często jest to 1 / 2x wartość docelowa w C.

Czasami można uzyskać zakłócenia elektryczne na linii, a kontroler odczytuje cały ciąg 1s. W takim przypadku otrzymasz liczbę taką jak 15,64, która wyrażona binarnie jest w rzeczywistości bardzo zbliżona do liczb między 65 a 70F, z wyjątkiem kilka pierwszych na początku.

gbronner
źródło
2

Za to, co jest warte, kilka miesięcy temu wykonałem trochę pracy z DS18B20. Nakręciłem krótki film i napisałem na moim blogu, który zawiera linki do przykładów i przykładowego kodu. Mam nadzieję, że to może trochę pomóc! http://dailyduino.com/archives/552

Morgellon
źródło
2

Mam ich 13 w moim domu od około czterech lat. Baza danych jest trudna do obsługi (śledziłem wszystkie próbki). Ale nie widziałem tego rodzaju zachowania. Zamiast tego co jakiś czas jeden czujnik zamarza i blokuje wszystkie pozostałe, jedynym wyjściem z tego (które znalazłem) było wyłączenie napięcia zasilającego na kilka sekund. Dodałem więc mały przekaźnik do mojej płyty i ilekroć mikro wyczuje to zachowanie, resetuje cały łańcuch czujników. To się zdarza kilka razy w tygodniu.


źródło
Hmm Może powinienem je wzmocnić tylko wtedy, gdy mam zamiar przeczytać.
edebill,