Đo nhiệt độ chính xác với Arduino


10

Tôi đang cố gắng xây dựng bộ điều nhiệt với Arduino. Tôi muốn cấp nguồn cho nó bằng pin / bộ sạc điện thoại di động khiến điện áp hệ thống khá thay đổi. Ngay bây giờ tôi sử dụng Arduino Uno, nhưng một khi nó hoàn thành, tôi sẽ chuyển nó sang Lilypad.

Đầu tiên tôi thử sử dụng cảm biến nhiệt độ TMP36 . Cho đến nay nó đã hoàn toàn thất bại. Mặc dù cảm biến có vẻ rất ổn định, tôi không thể tìm ra cách đo chính xác điện áp của nó.

Sử dụng tham chiếu 5v tích hợp cho các cảm biến tương tự hoàn toàn không hoạt động - thậm chí được cấp nguồn từ USB + 5V của arduino thực sự là + 4,8V (làm thay đổi nhiệt độ đo được vài độ). Khi bo mạch được cấp nguồn từ pin, điện áp giảm xuống khoảng 4V và đo được tên lửa bầu trời nhiệt độ. Tôi cũng đã thử sử dụng + 3,3V từ bảng làm tài liệu tham khảo. Nó có vẻ ổn định hơn khi bo mạch được cấp nguồn từ USB, nhưng điện áp của nó giảm khi hết pin.

Có cách nào khác để đo điện áp đầu ra cảm biến một cách đáng tin cậy không?

Đối với giai đoạn thứ hai, tôi dự định sử dụng nhiệt điện trở. Chỉ cần đặt mua một vài trong số các nhiệt điện 20K .

Theo những gì tôi hiểu, những điều này sẽ dễ dàng hơn để đo chính xác nếu tôi xây dựng bộ chia điện áp và sử dụng V_in làm điện áp tham chiếu cho ADC.

Một vài câu hỏi về họ:

  • Liệu nó có ý nghĩa để sử dụng một vài bộ chia điện áp với điện trở cố định khác nhau để tăng độ chính xác?
  • Tôi có thể sử dụng pin lập trình như V_in và đo nhiệt độ bằng cách sử dụng một vài mức điện áp khác nhau. Mặc dù tôi không rõ liệu điều này có thực sự làm tăng độ chính xác hay không.

Xin vui lòng gửi mã chuyển đổi nhiệt độ của bạn.
geometrikal

Vui lòng xác định những gì bạn có nghĩa là "chính xác". Loại độ phân giải nhiệt độ và độ chính xác tuyệt đối mà bạn đang cố gắng để đạt được?
Joe Hass

Tôi hy vọng sẽ có được độ phân giải khoảng 1-2 độ. Lỗi hiệu chuẩn tuyệt đối 1-2 độ cũng sẽ ổn. Từ những gì tôi hiểu tương đối dễ dàng để có được điểm tham chiếu ở 0C và tôi đoán tôi có thể có được điểm thứ hai (thô hơn nhiều) ở nhiệt độ phòng bằng các cảm biến hiệu chỉnh chéo.
Usov

1-2 độ cho nhiệt độ trong phạm vi 5-25C.
Usov

@geometrikal Tôi không có nó ngay bây giờ, nhưng về cơ bản nó giống như mọi người khác: bỏ mẫu đầu tiên, đợi vài mili, lấy mẫu thêm vài lần và mẫu trung bình. Sau đó, bán lại bởi những gì bạn tin rằng điện áp tham chiếu của bạn là.
Usov

Câu trả lời:


2

Có vẻ như bạn nhận thức được vấn đề với việc thay đổi điện áp tham chiếu và nếu bạn sử dụng một thiết bị như TMP36 (cố định 10mV / degC), bạn không thể làm gì ngoài việc sử dụng tham chiếu điện áp từ chip để ổn định mọi thứ.

Tuy nhiên, nếu bạn đang sử dụng RTD hoặc nhiệt điện trở thì vấn đề sẽ không phát sinh. ADC của bạn đang thực hiện phép đo bằng phép đo - nó so sánh đầu vào ADC với điện áp tham chiếu BUT, nếu bạn cấp nguồn cho RTD hoặc nhiệt điện trở (thông qua một điện trở phù hợp) từ cùng một điện áp ref, nó sẽ ảnh hưởng đến số đọc. Nếu ref tăng 10% thì điện áp vào ADC cũng vậy.


4

Tôi nghĩ bạn nên cân nhắc sử dụng cảm biến nhiệt độ kỹ thuật số như DS18B20 / DS18S20 vì nó không phụ thuộc vào độ chính xác của ATmega ADC của bạn để đo tín hiệu anaolg, nó sử dụng giao thức kỹ thuật số 1 dây để báo cáo nhiệt độ.

Tham khảo các hướng dẫn sau đây
http://playground.arduino.cc/Learning/OneWire
http://www.hulktronics.co.uk/ds18b20-arduino


2
Câu trả lời này không hữu ích trừ khi bạn giải thích tại sao OP nên chuyển sang một cảm biến khác và bạn không đưa ra lời biện minh nào cho điều đó. Chỉ cung cấp các liên kết trong một câu trả lời không phải là một ý tưởng tốt bởi vì chúng thường bị chết và nội dung của câu trả lời bị mất.
Joe Hass

Thay vì viết câu trả lời của riêng tôi dọc theo cùng một dòng, tôi đã chỉnh sửa A này để giải quyết mối quan tâm của Joe.
RedGrittyBrick

@JoeHass Cách thay thế duy nhất so với việc liên kết với các bài viết bên ngoài là đính kèm mã trong thư trả lời nhưng tôi không có mã riêng để đính kèm và sẽ không công bằng khi đính kèm mã của ai đó mà không có sự đồng ý của họ. Ngay cả khi các liên kết bị chết, một thư viện cho Arduino có thể dễ dàng tìm thấy bằng cách sử dụng google và DS18B20 làm từ khóa. Về lời giải thích, đó là sai lầm của tôi, tôi nghĩ rằng việc đề cập rằng cảm biến là kỹ thuật số sẽ giải thích quan điểm của tôi.
alexan_e

Cảm ơn các bình luận. Đối với một số lý do cảm biến kỹ thuật số là khá khó tìm. Cả những nhà cung cấp địa phương (Maplin) cũng không phải những người bán hàng trực tuyến (tôi đã sử dụng công nghệ xoắn ốc) đều không bán. £ 3 một pop + giao hàng vẫn làm cho nó tùy chọn tương đối tốn kém.
Usov

@Usov Đánh giá từ các liên kết bạn đã cung cấp Tôi giả sử bạn sống ở Vương quốc Anh. Tôi thường mua những linh kiện này với giá rẻ từ Trung Quốc nhưng tôi cũng tìm thấy chúng ở ebay.uk với giá £ 1,49, có thể chúng phù hợp với bạn
alexan_e

3

Đo lường của bạn sẽ tốt như điện áp tham chiếu cho ADC là tốt. Arduino theo mặc định sử dụng điện áp cung cấp làm điện áp tham chiếu, nhưng trong trường hợp của bạn, cách đúng đắn để làm điều đó là sử dụng chân Aref của arduino. Bạn phải lấy một con chip đặc biệt gọi là "Tham chiếu điện áp" và kết nối nó với chân Aref, sau đó đặt ADC để sử dụng tham chiếu ngoài trong mã Arduino ( analogReference(EXTERNAL))

Điện áp của tham chiếu phải được chọn sao cho toàn bộ cảm biến nhiệt độ của bạn sẽ phù hợp với điện áp giới thiệu. TMP36 sẽ xuất ~ 1,5V @ 100C, vì vậy bạn sẽ phải sử dụng tham chiếu trên 1,5V để đo nhiệt độ lên tới 100C. Bạn muốn tham chiếu của bạn càng gần với điện áp tối đa đo được càng tốt để có được độ phân giải càng nhiều càng tốt.

Atmega328p có hai tài liệu tham khảo nội bộ có thể được sử dụng mà không cần bất kỳ thành phần bên ngoài nào. Một là 1.1V, 2.56V khác. Chúng thường có độ chính xác kém hơn một chút so với những gì bạn sẽ nhận được bằng cách sử dụng thành phần chuyên dụng bên ngoài. Kiểm tra tài liệu Arduino về dữ liệu analogReference và Atmega328p để biết độ chính xác tham chiếu nội bộ.

Nếu bạn thực sự muốn nhận các loại hạt với các phạm vi khác nhau, bạn có thể sử dụng một số tham chiếu bên ngoài và chuyển đổi chúng bằng cách sử dụng một công tắc tương tự như 74hc4051. Hoặc bạn có thể chuyển đổi giữa hai tài liệu tham khảo nội bộ.

Với nhiệt điện trở, bạn sẽ có kết quả tốt hơn nếu bạn thiết lập một nguồn dòng không đổi thay vì sử dụng điện trở câm. Mặt khác - một điện trở câm được cung cấp từ tham chiếu điện áp ổn định sẽ hoạt động tốt.

Khi chọn một tham chiếu bên ngoài, hãy đảm bảo rằng bạn có đủ điện áp để chứa cho điện áp rơi ra khi cấp nguồn từ pin và pin bị xẹp. Vref + Voutout <Vbat-min.


Cám ơn bạn đã góp ý. Về cơ bản, đây là cùng một nhận xét tôi nhận được hôm nay - xây dựng điện áp ref của riêng tôi trên diode zener hoặc nhận bộ điều chỉnh điện áp thấp chuyên dụng cho ISF.
Usov

Tại sao kết quả tốt hơn với dòng điện không đổi và một nhiệt điện trở?
geometrikal

2

Không có tham chiếu ADC ổn định thực sự là một triệu chứng của một vấn đề khác trong mạch của bạn: bạn không cung cấp điện áp đủ cao cho bo mạch. Điều này được biểu thị bằng nguồn cung cấp 5V giảm xuống 4V và giảm 3,3V.

Bộ điều chỉnh điện áp (MC33269D-5.0 IIRC) trên bo mạch Arduino có điện áp rơi ~ 1.0V, do đó bạn cần cung cấp cho nó ít nhất 6V để có đầu ra 5V ổn định. Pin AA khởi động ở mức 1,5-1,6V và gần như đã chết ở mức 1,1V, do đó bạn phải cấp nguồn cho bo mạch với ít nhất 6 pin AA để có đầu ra ổn định trong toàn bộ thời lượng pin.

Được cấp nguồn chính xác, bạn có thể sử dụng tham chiếu ADC bên trong hoặc các đường 5V hoặc 3.3V. Do cảm biến nhiệt độ thay đổi khoảng 10mV mỗi độ Celcius, bạn có thể sử dụng bộ chia điện áp để đặt điện áp tham chiếu tương đương với điện áp đầu ra cảm biến tối đa dự kiến ​​(ví dụ: 50 độ C). Điều này sẽ cho một phép đo chính xác hơn.

Nếu bạn muốn sử dụng ít hơn 6 pin AA, hãy thử bộ chuyển đổi tăng cường DC-DC, ví dụ: https://www.sparkfun.com/products/10968 . Ví dụ được liên kết mất 1V - 4V và tạo ra 5V. Đầu ra sẽ được đưa trực tiếp vào chân 5V của Arduino, bỏ qua bộ điều chỉnh của nó.

Để làm cho bo mạch chạy lâu hơn trên pin, hãy đặt MCU để ngủ giữa các lần đọc cảm biến. Các thư viện công suất thấp rocketscream là rất tốt cho mục đích này. Nhưng nó chỉ thực sự hữu ích khi sử dụng bộ điều chỉnh / bộ chuyển đổi DC-DC hiệu quả vì bộ điều chỉnh Arduino tiêu chuẩn chỉ sử dụng 10mA!


1

Trả lời cho câu hỏi Có cách nào khác để đo điện áp đầu ra cảm biến một cách đáng tin cậy không?

ADC sử dụng điện áp tham chiếu để chuyển đổi từ analog sang kỹ thuật số. Vì vậy, nếu có sự thay đổi điện áp tham chiếu, các giá trị được chuyển đổi (tức là giá trị số) sẽ thay đổi. Giá trị kỹ thuật số sẽ khác nhau cho cùng một đầu vào tương tự nếu điện áp tham chiếu thay đổi.

Một lựa chọn dễ dàng là sử dụng điện áp tham chiếu bên trong bên trong Arduino (tức là bộ điều khiển Atmega).

Xem liên kết dưới đây, nơi mã mẫu được cung cấp để sử dụng ADC bên trong (tên hàm Arduino - analogReference (DEFAULT))

http://tronix ware.com/2013/12/12/arduino-tutorials-ch CHƯƠNG-22-aref-pin /

Tôi nghĩ rằng điều này sẽ giải quyết vấn đề của bạn và không cần phải chuyển sang sử dụng nhiệt điện.


Tôi không chắc chắn "Hacking Wifi finder" có liên quan như thế nào - Tôi không thể tìm thấy bất cứ điều gì liên quan. Về tài liệu tham khảo ADC nội bộ - Tôi đã viết về nó. Nó không hoạt động ngay cả khi Arduino được cấp nguồn từ USB. Và khi bo mạch được cấp nguồn từ pin điện thoại di động (3,7 - 4,5V), nó thậm chí còn tệ hơn.
Usov

Xin lỗi đó là một lỗi sao chép / dán. Sẽ sửa liên kết sớm!
robomon

Liên kết @Usov đã sửa!
robomon

1.1V nội bộ có thể nổi hơn 10% theo thông số kỹ thuật của atmega328. Điều này dường như cũng không phải là tài liệu tham khảo rất đáng tin cậy.
Usov
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.