에어컨 리모컨을 잘 봐보자. 에어컨에서 보내는 온도, 습도 등 데이터를 몇 m 떨어진 리모컨에서 잘 받아준다. 그리고 리모컨에서 "온도를 몇 도 낮춰줘" 하는 귀찮은 일을 시켜도 에어컨은 바로 바로 대답도 잘 해준다. 예전에는 "으응 그렇네" 하고 넘어갔지만, 이제는 다르다. 생각보다 대단한 녀석이었다.
리모컨에서 에어컨으로 온도 제어 명령을 내리는 경우를 생각해보자. 몇 m 떨어진 거리에서는 통신이 끊길 이유가 너무나도 많다. 단순히 거리에 의한 노이즈 증가 이외에도, 통신 자체적으로 가지는 노이즈가 다수 포함되어 있다.
그렇기에, 리모컨에서 통신이 끊기는 경우는 단순히 "명령이 잘 전달되지 않았습니다" 하는 것으로 끝나지 않을 수 있다. "온도를 100도 올려줘" 같은 익스트림한 명령으로 전달할 수 있는 것이다.
상업용으로 쓰이는 센서들과 통신 모듈들은 퀄리티가 상당히 발전하여 그런 걱정들을 하면서 에어컨을 쓸 필요는 없다. 하지만 제품을 개발하는 단계에서는 충분히 할 법한 고민들이다. 특히나 아두이노처럼 간단한 모듈들을 사용할 경우에는 더더욱. "아두이노 그렇게 조그마한데, 인간의 두뇌보다 계산 속도는 비교도 안되게 빠르대!" 하는 호들갑을 떨던 적도 있지만, 아두이노는 아두이노일 뿐이다. 절대 믿으면 안된다.
아두이노 I2C 으로 고통받기를 수차례 반복하다가, 어제 아침에 결국 I2C Extender를 활용해서 5m 이상의 배선으로 센서값을 디스플레이로 전송하는 업무를 성공했다. 에어컨은 무선으로도 잘 통신하는데 이렇게 호들갑 떨 일인가 싶기도 하지만, 그래도 기분 좋은 일이다. 나도 놀랐다. 아침에 연구실에 도착하여 살짝 만져봤더니 실패하길래, 음 안되는 건가 하고 살짝 고쳐봤더니 잘 작동해버리는게 아니겠는가.
두 가지 이슈가 있었다. 첫 번째는 아두이노 내 void setup() 함수 안에서 디스플레이를 오래 제어하면 에러가 생긴다는 것이었다. void loop 함수에서는 디스플레이를 썼다가 지우는 과정을 반복하는데(형광등이 깜박이는 것과 비슷하다), 그렇게 제어해야 에러가 생기지 않는 것 같다.
두 번째는 I2C Extender - Display - Arduino 간 Ground가 공유되어야 하는 것이다. I2C Extender의 원리는 사실, 단거리에 적합한 SCL/SDA 형식 데이터를 장거리 통신에 적합한 데이터로 변환한 뒤에, 다시금 SCL/SDA로 바꿔주는 것이기에 테스트 결과 아두이노간 통신에서는 Ground를 공유해줄 필요가 없었다. 하지만 Display는 또 그런 작업이 필요했다.
이제 필요 기능이 모두 구비가 되었으니, 위 사진처럼 일일이 납땜해줬던 보드를 (관련 글) PCB 보드로 진화시켜줘야 한다. 이건 바로바로 디버깅을 할 수 없는 영역인지라(외주업체를 통해야 한다) 한 번에 실패없이 보드를 설계하는 것이 중요한데, 내가 한번에 뭔가를 이뤄낸다는 것이 잘 상상되지 않는다.
보드까지 만들어놓고 "아 잘못 만들었네" 하는 말 따위 나오지 않게끔 설계를 잘 해봐야겠다.
추가 관련글
1) 거리전기 에어컨 관련
2) I2C 통신
3) 납땜 보드
'트렌드 한눈에 보기 > 학계 트렌드' 카테고리의 다른 글
여섯 시간에 걸친 미팅 2탄 - 어떻게 하면 줄일 수 있을까? (0) | 2021.04.19 |
---|---|
소프트 로봇에서 머신러닝의 활약상 (0) | 2021.04.14 |
납땜으로만 세 번 실패한 뒤 고치는 외양간 - 납땜의 정석 (0) | 2021.04.08 |
디버깅의 예술 - 무작정 시행착오를 겪지 않는 방법 (0) | 2021.04.05 |
진짜 똑똑한 사람의 사고 방법 - 견갑상완리듬(Scapulohumeral Rhythm) (0) | 2021.04.04 |