Độ tin cậy của cảm biến nhiệt độ DS18x20


11

Tôi đang sử dụng DS18x20 của Maxim (Tôi thực sự có nhiều hơn một biến thể) Cảm biến nhiệt độ 1 dây để ghi lại nhiệt độ trong các phòng khác nhau trong nhà tôi mỗi phút một lần. Khoảng một lần đọc trong một ngàn, tôi nhận được một cái gì đó hoàn toàn không có thật. Ở giữa một chuỗi tăng dần từ 65F lên 70F, tôi nhận được một cái gì đó như -32.1F hoặc 15.64F.

Có ai khác có loại vấn đề đó, hoặc điều này có gì đó không đúng với thiết lập của tôi? Nếu đây chỉ là một vấn đề được biết đến với những điều này, tôi sẽ phải làm một cái gì đó như lấy ba bài đọc và ném ra ngoài.

Chỉ cần một vài tuyên bố về thiết lập của tôi:

  • Tôi đang chạy ở 3,3V
  • Tôi đang kiểm tra tổng kiểm tra của việc đọc khi nó quay trở lại arduino và nó khớp (hoặc tôi nghĩ là vậy - luôn có thể có một lỗi trong mã đó).
  • Đây là chạy ra khỏi sức mạnh bình thường, không phải sức mạnh ký sinh.
  • Tôi có điện trở pullup 4,7K tại chỗ.
  • Tôi chỉ sử dụng một cảm biến duy nhất trên mỗi nền tảng cảm biến.
  • Cảm biến trên PCB được gắn vào arduino đang đọc nó.
  • Tôi thấy cùng một vấn đề đọc từ nhiều loại arduinos khác nhau (diecimilla, pro-mini, tùy chỉnh tự chế)

Câu trả lời:


5

Thỉnh thoảng tôi thấy điều này với DS18B20. Đối với ứng dụng của tôi, nó đủ đơn giản để lọc các kết quả giả bằng mã.


Thật tốt khi biết rằng người khác có vẻ giống như vậy. Thuật toán lọc của bạn là gì?
edebill

Tôi sẽ đề nghị bạn làm những gì bạn nói, hãy đọc 3 lần, 5 sẽ tốt hơn, 7 tốt hơn thế, nhưng nếu có lỗi gì đó vào khoảng 1/1000 thì bạn chỉ cần 3. Lấy trung bình. Vấn đề sẽ được giải quyết. nếu bạn lấy 5 thì sẽ có một sự cố kỳ lạ xảy ra.
Kortuk

Tôi đang làm 5 giờ. Tôi đã cố gắng chỉ lấy mức cao hơn 2, nhưng một lỗi vẫn xuất hiện trong đêm qua (tôi đã có 3 cảm biến đọc mỗi phút, vì vậy tôi nhận được hàng ngàn điểm dữ liệu mỗi ngày).
edebill

3

Nếu bạn không thể tìm thấy nguồn gốc của các bài đọc sai, bạn có thể dễ dàng lọc chúng ra và ngoại suy từ các bài đọc trước hoặc nội suy giữa các bài đọc nếu tầm nhìn xa là quan trọng. Vì bạn đang lấy mẫu một lần mỗi phút, bạn thậm chí có thể sao chép lần đọc cuối cùng; nhiệt độ phòng sẽ khó thay đổi trong một phút


3

Điều này có thể là do bộ điều khiển đọc sai một hoặc nhiều bit của phản ứng nhiệt độ trong một số điều kiện tải cao nhất định hoặc do nhiễu điện làm hỏng một hoặc nhiều bit.

Hãy xem kỹ bảng dữ liệu tại đây http://www.rentron.com/Files/ds18b20.pdf

Trên trang 5, nó cho thấy chuỗi nhị phân chính xác cho 85C là:

+85°C 0000 0101 0101 0000

Tương tự, đối với 25C, đó là:

+25.0625°C 0000 0001 1001 0001

Trong một số trường hợp, nếu bộ điều khiển bỏ lỡ một chút, bạn sẽ nhận được một giá trị là nhiệt độ thực tế, được biểu thị bằng nhị phân và dịch chuyển bit. Thường thì đây là 1 / 2x giá trị đích trong C.

Đôi khi bạn có thể bị nhiễu điện trên đường dây và bộ điều khiển đọc toàn bộ 1 giây, trong trường hợp đó, bạn sẽ nhận được một số như 15,64, được biểu thị bằng nhị phân thực sự rất gần với các số từ 65 đến 70F, ngoại trừ một bó 1s lúc đầu.


2

Để biết giá trị của nó, tôi đã làm một chút với DS18B20 vài tháng trước. Tôi đã quay một đoạn video ngắn và viết lên blog của mình, có liên kết đến các ví dụ và mã mẫu. Hy vọng điều này có thể giúp một chút! http://dailyduino.com/archives/552


2

Tôi có 13 người trong số họ chạy trong nhà của tôi kể từ khoảng bốn năm nay. Cơ sở dữ liệu khó xử lý nữa (tôi theo dõi tất cả các mẫu). Nhưng, tôi đã không thấy hành vi này. Thay vào đó, cứ sau một và một cảm biến đóng băng và chặn tất cả các cảm biến khác, cách duy nhất để thoát khỏi điều này (mà tôi tìm thấy) là tắt điện áp cung cấp trong vài giây. Vì vậy, tôi đã thêm một rơle nhỏ vào bảng của mình và bất cứ khi nào vi cảm nhận được hành vi này, nó sẽ đặt lại toàn bộ chuỗi cảm biến. Điều đó xảy ra một vài lần một tuần.


Hừm. Có lẽ tôi chỉ nên cấp nguồn cho chúng khi tôi chuẩn bị đọc.
edebill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.