BASIC4MCU | 질문게시판 | 온도센서 센서값 필터링 관련해서 질문드립니다.
페이지 정보
작성자 metanoia 작성일2023-11-09 16:33 조회903회 댓글2건본문
안녕하십니까, 저는 현재 온도 센서(ntc 100K)로 카트리지 히터의 온도를 측정하고 있습니다. 온도센서를 활용하여 센서 값을 받아올 때 아날로그 값이기 때문에 노이즈가 심하여 로우 패스 필터를 적용하여 코드를 작성하였습니다. 보드에 업로드 후 시리얼 통신을 통해 확인해보니 필터 적용된 값이 초반에 높게 나타나고 시간이 지나면서 점차 안정화되었습니다.. 코드를 수정해도 초반 값(필터 적용)이 높게 측정되는 것이 해결되지 않아서 코드에서 잘못된 부분이 있을까 하여 질문드립니다. 코드는 아래와 같습니다.
int ThermistorPin = A0; //써미스터 아날로그 핀 float sensorValue; float filteredValue; float R1 = 10000; float logR2, R2, T, Tc; float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07; float sensitivity = 0.1; void setup() { sensorValue = analogRead(ThermistorPin); filteredValue = sensorValue; pinMode(heater,OUTPUT); digitalWrite(heater,HIGH); Serial.begin(9600); } void loop() { sensorValue = analogRead(ThermistorPin); R2 = R1 * (1023.0 / (float)sensorValue - 1.0); logR2 = log(R2); T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); Tc = T - 273.15; filteredValue = filteredValue * ( 1 - sensitivity ) + Tc * sensitivity; delay(100); Serial.print("TEMP = "); Serial.print(Tc); // 온도 값 출력 Serial.print(","); Serial.print(filteredValue); //로우패스필터 값 출력 Serial.println(" C"); } }
댓글 2
조회수 903master님의 댓글
master 작성일
왜 괄호가 안 맞을까요?
마지막에 } 괄호가 하나만 있어야 하는 것 같은데요?
master님의 댓글
master 작성일
setup() 함수에서 온도값을 읽었지만 연산 없이 filteredValue에 대입해서 엉뚱한 값이 들어갔기 때문에 초기결과가 엉뚱하게 나오는 것입니다.
int ThermistorPin=A0; //써미스터 아날로그 핀
//
float sensorValue,filteredValue,R1=10000,logR2,R2,T,Tc;
float c1=1.009249522e-03,c2=2.378405444e-04,c3=2.019202697e-07;
float sensitivity=0.1;
//
void temp_read(){
sensorValue=analogRead(ThermistorPin);
R2=R1*(1023.0/(float)sensorValue-1.0);
logR2=log(R2);
T=(1.0/(c1+c2*logR2+c3*logR2*logR2*logR2));
Tc=T-273.15;
filteredValue=filteredValue *(1-sensitivity )+Tc*sensitivity;
}
//
void setup(){
temp_read();
pinMode(heater,OUTPUT);
digitalWrite(heater,HIGH);
Serial.begin(9600);
}
//
void loop(){
temp_read();
delay(100);
Serial.print("TEMP="); Serial.print(Tc); Serial.print(","); // 온도 값 출력
Serial.print(filteredValue); Serial.println(" C"); //로우패스필터 값 출력
}