2011-01-01 2 views
2

firstsensor는 내 lm335z 출력입니다.arduino가있는 LM335Z에서 Celsius를 출력하는 방법은 무엇입니까?

int firstSensor = 0; 
int secondSensor = 0; 
int thirdSensor = 0; 
int inByte = 0; 

void setup() 
{ 
    Serial.begin(9600); 
    establishContact(); // send a byte to establish contact until receiver responds 
} 


void loop() 
{ 
    if (Serial.available() > 0) { 
    inByte = Serial.read(); 
    firstSensor = analogRead(0); 
    delay(10); 
    secondSensor = analogRead(1); 
    thirdSensor = analogRead(2); 
    Serial.print(firstSensor, DEC); 
    Serial.print(","); 
    Serial.print(secondSensor, DEC); 
    Serial.print(","); 
    Serial.println(thirdSensor, DEC); 
    } 
} 

void establishContact() { 

} 

답변

6

datasheet에 따르면 온도 출력은 10mV/K로 다양합니다. 그래서 전압이 25도 C 또는 298.15에서 2.982V라고

V_out = V_ref * T_out/T_refT_out = T_ref * (V_out/V_ref)

에 해당합니다 : 당신이 알고있는 기준 온도에서 기준 전압을 찾아내는 경우에, 당신은 데이터 시트에서이 도움이 식을 사용할 수 있습니다 켈빈 (이 데이터 시트에 제안)에 당신이 당신의 방정식을 설정할 수 있습니다

T_out = (298.15 Kelvin)(V_out/2.982V)-273.15

그래서 전압 *로 읽는 아날로그로 변환 할 수 있습니다 이미 가정, 단지 측정 된 전압에 연결하고이해야 너에게 줄께. 섭씨 온도 (℃)

* Arduino에는 내장 된 10 비트 ADC가 있으며 읽을 수있는 최대 전압은 5v입니다. 따라서 ADC 단계 당 5V/1024 ADC 단계 = 0.00488V를 고려할 수 있습니다. (즉, V_out = firstSensor*0.00488). 따라서 V_out을 연결하면 방정식은 다음과 같습니다.

T_out = (298.15)(firstSensor*0.001637)-273.15 여기서 0.001637 = 0.00488/2.982입니다.

+0

작은 부동 소수점 상수로 곱하면 절대로 값을 얻지 못합니다. 부동 소수점은 부정확하며 종종 정확한 상수 인 5/1024 = 0.048828125를 입력하지 않습니다. 마찬가지로 계산 된 범위가 아니므로 A/DC 변환에 매우주의하십시오. ATmega328 (Arduino의 경우 uMC)에서 1023의 A/DC 값은 1024가 아니라 Vcc (공급 전압)와 같습니다. 즉, A0 핀이 Vcc 일 때 analogRead (A0)는 1023을 반환합니다. 값으로 0.00488을 사용하면 4.88mv (또는 그 이상 - 이전 참조)만큼 벗어납니다. 확인하려면 1023 * 0.00488 = 4.99224 또는 1 * K가 너무 낮습니다. –

관련 문제