온도센서 관련 오류 수정...

by 이희철 | 2016-12-23 13:37
온도센서의 동작이 의심이 들자...

온도센서를 뜯어보았다...



뺀치와 니퍼를 사용해서 분해...




내부 밥통 밑면과 닺는면에 위치한 온도센서도 있고...




전기밥솥의 내부 밥통을 넣으면 센싱하는 스위치도 보인다...

내부밥통이 들어 있지 않을 때에는 스위치가 On이 되어 있다가... 



스위치가 눌리면 접점이 떨어지도록 설계되어 있다...


밥솥 내부 스위치가 접촉불량을 일으켜서 온도 값이 0으로 읽히는 것은 아닐까?

하지만...

내부 밥통을 들었다 놨다 해서 스위치가 On Off를 반복하도록 해도 변화가 없는 것을 봐서는 스위치 문제는 아닐 것으로 단정...

다시 미궁에 빠졌다...

갑자기 H/W경험이 많은 김광준후배(도움줘서 고마워 !!!)가 생각이 나서...

답답한 마음에 넉두리 삼아 전화를 걸어 조언을 구했는데...


프로그램소스를 이메일로 보내달라고 해서 보냈더니...


전화상으로 바로 확인해서 오류를 잡아 주었다...



문제는...


노이즈를 감소시키기 위해 잡아 놓은 100개의 배열 때문...


A/D컨버터는 10비트이기 때문에 최대 1024까지 값을 가질 수 있는데...


int로 선언한 값의 최대크기는 65536이 되면 A/D 컨버전한 값을 100개를 더하면 오버플로우가 나서...


음수값을 가지면서  정상적인 값을 가지지 못하는 것을 몰랐던 것이다...


10개만 더해서 평균을 취해도 충분한 효과가 있다며 배열을 100개에서 10개로 줄일 것을 권유받아...


그대도 해 보니...


정상 동작...


온도는 0도에서 100도까지라서 100도를 100개 더해봐야 10,000 밖에 안 될 거라 생각했지만...


실제로는 A/D컨버터 값은 한개의 데이터가 0~1024까지 표현되기 때문에 1024가 100개가 더해지면 102,400로 int의 표현 범위를 넘어가게 된다...


int average_temp [10]

100을 10으로 숫자를 바꾸었고...





평균치를 구하기 위한 데이터도 10개만 합계를 구해 평균을 구했다...




 알고보니 너무 간단한 소프트웨어 버그...

아무것도 도 아닌 것이지만...


찾아내기 매우 어려운 오류였고...


정말 많은 시간을 허비했다...


동작을 아예 안 했으면 쉽게 찾았으련만...


정상 동작을 하다가 값자기 동작을 하지 않아서 하드웨어 (센서) 불량인 줄 알았다...


역시...


우리나라에서는...


오픈프로젝트에서의 도움 보다...


인맥에 의한 도움을 받는 것이 훨씬 효율적인 듯...


광준아...




도와줘서 고마워...


댓글 2

MADE BY

이희철

요리, 전자회로설계