바로 직전의 글(링크)에서 감히 '완성 단계'라는 말을 했었다. 납땜은 이것으로 다 되었으니 앞으로는 코드를 작성하면서 단계별로 테스트를 진행해 나가면 최종 목표에 도달할 것이라는 허황된 생각을 했던 것이다. 주말 작업을 하면서 정말 많은 실수를 발견하였다. 금요일까지만 해도 앞으로 기판 고정용 나사를 풀 일이 없으리라 여겼으니 얼마나 가소로운 생각이란 말인가!
정말 운이 좋았다면 문제 자체가 발생하지 않았을 수도 있다(예: 절연 불량). 그러나 초심자의 행운이 항상 좋은 것만은 아니다. 경험하지 못한 실수를 나의 실력으로 착각하고 있다가 언젠가는 나를 다시 찾아올 것이고, 그때에는 원인을 몰라서 더욱 헤맬 수도 있다. 비교적 초기 단계에 실수를 발견하여 바로잡게 됨을 다행으로 여겨야 할 것이다.
첫 번째 실수는 전원 공급 방식의 몰이해가 빚은 것이었다. 5V가 나오는 외부 전원 어댑터로 아두이노 나노를 작동할 때에는 Vin 핀이 아니라 5V 핀으로 넣어야 한다. Vin로 들어오는 직류전원은 아두이노 나노에 내장된 레귤레이터로 안정화를 거치면서 낮아지므로, 최소 7V는 되어야 한다.
USB 케이블을 연결하여 테스트하면서 LCD 밝기를 적당하게 맞춰 놓은 뒤 USB 접속을 끊고 외부 전원 어댑터를 연결하면 표시가 너무 밝아 알아볼 수 없는 상태가 되어 LCD 모듈 뒤의 가변저항을 돌려서 조정하였다. 여기에서 뭔가 눈치를 챘어야 했다. LCD 등 외부 모듈을 위한 전원은 아두이노 나노의 Vin에서 뽑았다. 이게 중대한 실수였다. Vin은 전원 입력을 위한 곳이지, 출력을 위한 곳은 아니기 때문이다. 여기에서 전압이 나올 수는 있지만 5V보다는 낮고, 충분한 전류를 공급하지도 못한다.
이보다 더 큰 실수는 어댑터에서 공급되는 5V를 Vin에 찔러 넣었다는 것이다. 앞서 언급했듯이 Vin에는 7~12V를 넣어 주어야 한다. 올바른 전원 연결 요령은 별도의 문서(링크)로 정리하였다. 5V 핀의 성격이 다면적임을 잘 이해해야 한다. USB 연결 시에는 외부 모듈을 위한 5V 공급선이 될 수 있고, 어댑터 사용 시에는 외부 전원이 들어오는 입구가 된다.
두 번째 실수는 Burnley 솔더링 페이스트의 전류 누설 부작용을 가볍게 여겼던 것. USB 연결을 통한 시리얼 통신 시 RX/TX 단자가 다른 회로와 이어져 있으면 문제를 일으키므로 배선을 끊고 점퍼를 삽입하여 용도에 맞게 닫거나 열 수 있게 해 두었다. 그런데 이를 연결하지 않는 상태에서 아무리 기다려도 스케치 업로드가 완료되지 않는 것을 발견하였다. 아두이노 나노를 소켓에서 뽑으면 업로드가 잘 된다. 이렇게 불편하게 일을 할 수는 없지 않은가.
점퍼를 꽂도록 만든 핀 양단을 멀티미터로 찍어보니 개방 상태가 아니라 수백 옴 정도로 측정이 되었다. 이것은 절대로 있을 수 없는 일이다. TX 핀을 납땜한 패드와 한 패드 건너 곁을 지나는 그라운드 레일 사이의 저항을 측정하니 비슷한 값이 나왔다. 페이스트 잔류물에 의한 전류 누설임에 틀림이 없었다. 패드 사이를 잘 긁어내고 물에 적신 칫솔로 문질러서 무한대 저항으로 만들었더니 비로소 스케치 업로드가 잘 되었다.
세 번째는 실수인지 오해인지 아직 잘 모르겠다. 테스트용 스케치를 업로드한 상태에서 로터리 인코더를 돌리면서 LCD 화면에 나타나는 숫자를 관찰하면 갑자기 값이 튀는 것으로 보였다. 이를 개선하라면 바이패스 커패시터와 '강한' 풀업 저항이 필요하다고 하였다. 어떤 글에서는 바이패서 커패시터만으로 개선이 되었다고 하여 이를 따라서 해 보았다.
103 세라믹 커패시터(10nF = 0.01uF) 두 개를 업어서 인코더 모듈 핀에 직접 납땜을 하였다. |
그래도 특정 값에서 튀는 현상이 발견되었다. 항상 같은 값에서 튄다는 것은 좀 이상하다. LCD의 동작을 제대로 이해하지 못한 다른 오해가 그 원인이 아닐까? 숫자를 표시할 때 자릿수를 채우는 방식이나, 이전에 표시된 숫자를 지우는 방식에 대하여 이해가 부족하여 인코더 수치가 튄다고 생각했는지도 모른다. 어쨌든 ChatGPT와 대화하면서 코드를 계속 최적화하였더니 최종적으로는 문제가 사라졌다. 이렇게 하여 LCD와 버튼(짧게 누름 및 길게 누름까지 전부 포함하여)의 동작은 전부 원활하게 되고 있음을 어제의 작업으로 모두 확인하였고, 그 영상을 유튜브에 올렸다.
어제 작업으로 단계별 코딩 로드맵의 단계 2-로터리 인코더 & 버튼 입력을 통과하였다. 순탄하지는 않았으나 값진 경험이었다. 다음부터는 본격적으로 MIDI 신호 처리에 들어가게 될 것이다.
댓글 없음:
댓글 쓰기