Arduino로 온도를 정확하게 측정


10

Arduino로 서모 스탯을 구축하려고합니다. 시스템 전압을 매우 가변적으로 만드는 휴대 전화 배터리 / 충전기를 사용하여 전원을 공급하고 싶습니다. 지금은 Arduino Uno를 사용하지만 일단 완료되면 Lilypad로 포팅합니다.

먼저 TMP36 온도 센서 를 사용하려고했습니다 . 지금까지는 완전히 실패했습니다. 센서 자체가 매우 안정적인 것처럼 보이지만 전압을 정확하게 측정하는 방법을 알 수는 없습니다.

아날로그 센서에 내장 5V 기준을 사용하는 것은 전혀 작동하지 않습니다. USB arduino의 + 5V 전원도 실제로 + 4.8V (측정 온도를 몇도 씩 이동시킵니다)입니다. 보드에서 배터리로 전원을 공급하면 전압이 약 4V로 떨어지고 온도 급등을 측정합니다. 또한 보드에서 + 3.3V를 참조로 사용하려고했습니다. 보드에서 USB로 전원을 공급할 때 더 안정적인 것처럼 보이지만 배터리를 방전하면 전압이 떨어집니다.

센서 출력 전압을 안정적으로 측정하는 다른 방법이 있습니까?

두 번째 단계에서는 서미스터를 사용할 계획입니다. 이 20K 서미스터를 주문했습니다 .

내가 이해 한 바에 따르면, 전압 분배기를 구축하고 V_in을 ADC의 기준 전압으로 사용하면 정확하게 측정하기가 쉬워야합니다.

그들에 대한 몇 가지 질문 :

  • 정확도를 높이기 위해 고정 저항이 다른 전압 분배기를 거의 사용하지 않는 것이 합리적입니까?
  • 프로그래밍 가능한 핀을 V_in으로 사용하고 몇 가지 전압 레벨을 사용하여 온도를 측정 할 수 있습니다. 이것이 실제로 정확도를 높일 지 여부는 분명하지 않습니다.

온도 변환 코드를 게시하십시오.
geometrikal

"정확하게"의 의미를 정의하십시오. 어떤 종류의 온도 분해능과 절대 정확도를 달성하려고합니까?
Joe Hass

약 1-2 도의 해상도를 얻으려고합니다. 1-2 도의 절대 교정 오류도 괜찮습니다. 내가 0C에서 기준점을 얻기가 상대적으로 쉽다는 것을 이해하면서 교차 교정 센서를 사용하여 실온에서 두 번째 (훨씬 거친) 지점을 얻을 수 있다고 생각합니다.
Usov

5-25C 범위의 온도에서 1-2도.
Usov

@geometrikal 지금 당장은 없지만 기본적으로 다른 모든 것과 동일합니다. 첫 번째 샘플을 삭제하고 몇 밀리 초를 기다린 다음 몇 번 더 샘플을 보내 평균 샘플. 그런 다음 기준 전압이 무엇이라고 생각하는지에 따라 크기를 조정하십시오.
Usov

답변:


2

기준 전압 변경 문제를 알고있는 것으로 보이며 TMP36 (고정 10mV / degC)과 같은 장치를 사용하는 경우 칩에서 전압 기준을 사용하여 사물을 안정화하는 것 외에는 할 수있는 것이 없습니다.

그러나 RTD 또는 서미스터를 사용하는 경우 문제가 발생하지 않습니다. ADC는 비율 측정을 수행합니다. 동일한 기준 전압에서 RTD 또는 서미스터에 전원을 공급하면 판독 값에 영향을 미치지 않으면 서 ADC 입력을 기준 전압 BUT과 비교합니다. ref가 10 % 상승하면 ADC의 전압도 상승합니다.


4

아 나올 신호를 측정하기 위해 ATmega ADC의 정확도에 의존하지 않고 온도를보고하기 위해 1-wire 디지털 프로토콜을 사용하기 때문에 DS18B20 / DS18S20과 같은 디지털 온도 센서를 사용하는 것이 좋습니다.

다음 자습서를 참조하십시오
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino


2
OP가 다른 센서로 전환해야하는 이유 를 설명하지 않으면이 답변은 큰 도움이되지 않습니다 . 답변에 링크를 제공하는 것은 링크가 자주 사라지고 답변 내용이 손실되기 때문에 좋은 생각이 아닙니다.
Joe Hass

같은 줄에 나만의 답을 쓰지 않고 Joe가 제기 한 문제를 해결하기 위해이 A를 편집했습니다.
RedGrittyBrick

@JoeHass 외부 기사에 연결하는 것의 유일한 대안은 회신에 코드를 첨부하는 것이지만 첨부 할 고유 코드가 없으며 다른 사람의 코드를 동의없이 첨부하는 것은 공정하지 않습니다. 링크가 작동하지 않더라도 키워드로 google 및 DS18B20을 사용하여 Arduino 용 라이브러리를 쉽게 찾을 수 있습니다. 설명과 관련하여, 나는 실수였다. 나는 센서가 디지털이라고 언급하면 ​​내 요점을 설명했을 것이라고 생각했다.
alexan_e

의견 주셔서 감사합니다. 어떤 이유로 디지털 센서를 찾기가 매우 어렵습니다. 현지 공급 업체 (Maplin) 나 저렴한 온라인 사용자 (Spiraltronics 사용)는 판매하지 않습니다. 3 파운드 + 배송은 여전히 ​​상대적으로 비용이 많이 드는 옵션입니다.
Usov

@Usov 당신이 제공 한 링크에서 판단하면 영국에 살고 있다고 가정합니다. 나는 보통이 부품들을 중국에서 싸게 사지 만, 또한 ebay.uk 에서 £ 1.49 에 나왔을 것입니다 . 아마 그들은 당신에게 맞을 것입니다
alexan_e

3

ADC의 기준 전압만큼 양호합니다. Arduino는 기본적으로 공급 전압을 기준 전압으로 사용하지만 귀하의 경우 올바른 방법은 arduino의 Aref 핀을 사용하는 것입니다. "Voltage reference"라는 특수 칩을 얻어서 Aref 핀에 연결 한 다음 Arduino 코드 ( analogReference(EXTERNAL)) 에서 외부 참조를 사용하도록 ADC를 설정해야합니다.

온도 센서의 전체 스윙이 기준 전압에 맞도록 기준 전압을 선택해야합니다. TMP36은 100C에서 ~ 1.5V를 출력하므로 최대 100C의 온도를 측정하려면 1.5V 이상의 기준을 사용해야합니다. 가능한 한 많은 분해능을 얻기 위해 가능한 한 측정 된 최대 전압에 가까운 기준을 원합니다.

Atmega328p에는 외부 구성 요소없이 사용할 수있는 두 개의 내부 참조가 있습니다. 하나는 1.1V이고 다른 하나는 2.56V입니다. 일반적으로 외부 전용 구성 요소를 사용하는 것보다 정확도가 약간 떨어집니다. 내부 참조 정확도 는 analogReference 및 Atmega328p 데이터 시트에 대해서는 Arduino 문서를 확인하십시오 .

다른 범위의 너트를 실제로 얻으려면 여러 외부 참조를 사용하고 74hc4051과 같은 아날로그 스위치를 사용하여 전환하십시오. 또는 두 개의 내부 참조간에 전환 할 수 있습니다.

서미스터를 사용하면 멍청한 저항을 사용하는 대신 정전류 소스를 설정하면 더 나은 결과를 얻을 수 있습니다. 반면에 안정적인 전압 레퍼런스로 전원을 공급하는 벙어리 저항은 정상적으로 작동합니다.

외부 기준을 선택할 때 배터리 전원을 공급할 때 전압이 떨어지고 배터리가 평평 할 때 전압이 떨어질 수있을만큼 충분한 전압이 있는지 확인하십시오. Vref + Vdropout <Vbat- 분


귀하의 의견에 감사드립니다. 이것은 기본적으로 오늘 내가 얻은 의견과 동일합니다. 제너 다이오드에 내 고유의 기준 전압을 구축하거나 AREF 전용 저전압 조정기를 얻으십시오.
Usov

정전류와 서미스터로 더 나은 결과를 얻을 수있는 이유는 무엇입니까?
geometrikal

2

안정적인 ADC 레퍼런스가없는 것은 실제로 회로의 또 다른 문제의 증상입니다. 보드에 충분한 전압을 공급하지 않습니다. 이것은 5V 전원이 4V로 떨어지고 3.3V로 떨어짐으로 나타납니다.

Arduino 보드의 전압 조정기 (MC33269D-5.0 IIRC)의 드롭 아웃 전압은 ~ 1.0V이므로 안정적인 5V 출력을 얻으려면 최소 6V를 공급해야합니다. AA 배터리는 1.5-1.6V에서 시작하고 1.1V에서 거의 죽었으므로 전체 배터리 수명 동안 안정적인 출력을 위해 최소 6 개의 AA 배터리로 보드에 전원을 공급해야합니다.

전원이 올바르게 공급되면 내부 ADC 레퍼런스 또는 5V 또는 3.3V 라인을 사용할 수 있습니다. 온도 센서는 섭씨 온도 당 약 10mV 씩 변하기 때문에 분압기를 사용하여 최대 예상 센서 출력 전압과 같은 기준 전압을 설정할 수 있습니다 (예 : 50도 C). 보다 정확한 측정이 가능합니다.

6 개 미만의 AA 배터리를 사용하려면 DC-DC 부스트 컨버터 (예 : https://www.sparkfun.com/products/10968)를 사용해보십시오 . 연결된 예제는 1V-4V를 취하고 5V를 만듭니다. 출력은 레귤레이터를 우회하여 Arduino의 5V 핀으로 직접 공급됩니다.

보드에서 배터리를 더 오래 사용하려면 센서 판독 값 사이에서 MCU를 대기 상태로 두십시오. rocketscream 저전력 라이브러리는 이 목적을 위해 중대하다. 그러나 표준 Arduino 레귤레이터는 10mA 만 사용하므로 효율적인 레귤레이터 / DC-DC 컨버터를 사용할 때만 유용합니다!


1

질문에 대한 답변 센서 출력 전압을 안정적으로 측정하는 다른 방법이 있습니까?

ADC는 아날로그에서 디지털로의 변환에 기준 전압을 사용합니다. 따라서 기준 전압에 변화가 있으면 변환 된 값 (예 : 디지털 값)이 변경됩니다. 기준 전압이 변경되면 동일한 아날로그 입력에 대해 디지털 값이 달라집니다.

쉬운 옵션 중 하나는 Arduino 내부의 내부 기준 전압 (예 : Atmega 컨트롤러)을 사용하는 것입니다.

내부 ADC를 사용하기 위해 샘플 코드가 제공되는 아래 링크를 참조하십시오 (Arduino 함수 이름-analogReference (DEFAULT)).

http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/

이것이 문제를 해결하고 서미스터로 전환 할 필요가 없다고 생각합니다.


"Hacking Wifi finder"가 어떤 관련이 있는지 잘 모르겠습니다. 관련성이 없습니다. 내부 ADC 참조와 관련하여 나는 그것에 대해 썼습니다. Arduino에 USB 전원이 공급 되어도 작동하지 않습니다. 그리고 보드가 휴대 전화 배터리 (3.7-4.5V)에서 전원을 공급 받으면 더욱 악화됩니다.
Usov

복사 / 붙여 넣기 실수로 죄송합니다. 곧 링크를 수정합니다!
robomon

@Usov 링크가 수정되었습니다!
robomon

atmega328 사양에 따르면 1.1V 내부는 10 % 이상 플로팅 될 수 있습니다. 이것은 신뢰할만한 참조가 아닌 것 같습니다.
Usov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.