Arduino WordClock 한글시계(feat. chatGPT) #2.소프트웨어파트

XENO(제노)
6 min readMay 4, 2024

--

Arduino WordClock 한글시계(with.chatGPT) #1.하드웨어파트 에 이어서…

하드웨어 제작이 어느정도 마무리 될 때쯤, 이제 구동할 소프트웨어를 다뤄야 할 때가 되었다.

나. 소프트웨어 파트(Software)

— 부제 : chatGPT예찬

미리 고백(?)하자면, 난 개발을 전혀 할 줄 모른다.
좀 더 자세히 말하자면 코드의 흐름은 대략 읽을 수 있지만, 직접 코딩은 전혀 할 줄 모른다. 마치 문법이 안되어 영작은 못하지만 독해는 어설프게나마 되는 상황 이랄까?

이 프로젝트는 처음에 Github에 공개된 한글시계 코드만을 믿고 용기 내어 시작했었다. 그런데 막상 코드를 열어 확인해보니 이 코드만으로는 준비한 부품제어가 어려웠고, 구상했던 저-전력 기능 구현은 코드에 아예 없었다.
오픈소스로 제작이 어려운 상황이되니 머리가 복잡해졌다. 다른 코드를 찾아볼까? 아니면 여기서 포기할까?

그러다 문득 chatGPT를 떠올렸다.
요즘 핫 하기도 하고 업무에서도 종종 사용하고 있어서 한 번 도전해 보기로 했다. chatGPT 4.0 프롬프트를 열고 문장을 입력했다.

“아두이노와 LED, RTC를 이용해서 5 X 5 배열의 LED에 5분마다 시간과 분을 표시해주는 스케치 코드를 작성해줘”

과연 잘 될까? 의문도 잠시… 우리의 chatGPT는 막힘없이 코드를 쏟아냈다.
그렇게 쏟아낸 코드의 독해(?)를 마친 다음, 아두이노에 업로드하여 LED를 연결하니 일단 불이 들어왔다! 오!!

“그래! 뭔가 가능성이 있어!”
이후로 코드작성은 물론 코드에러와 추가기능, 하드웨어의 궁금한점까지 chatGPT에 물어보기 시작했다. “SK6812 LED의 제어하기 위한 코드는?”, “아두이노를 저-전력 슬립모드로 전환하고 싶어", “RTC에서 어떻게 시간을 불러오지?”, “Interrupt 제어를 위해서는 어떤 핀에 연결해야 하지?” 등 코드작성에서 부터 사소한 궁금증까지 모두 chatGPT로 해결했다.
예전 같았으면 구글검색으로 몇날 몇일이 걸려도 해결하지 못했을 난관들인데, chatGPT에서 거의 대부분을 해결하였고 마침내 매우 정상적으로 작동하는 코드를 완성했다. OMG!

chatGPT와 질문을, 때로는 토론을 하면서 코드를 작성해 나가는 과정이 재미있었다.
막막했던 코드라인이 chatGPT와의 도움으로 무려 162라인의 코드를 완성했다!

chatGPT의 도움으로 코드에 구현된 기능들은 다음과 같다.

1) 아두이노, DS3231 RTC, SK6812 LED를 연결해 5분단위로 시간 표시
2) 보조배터리 전원을 고려하여, 저-전력 시스템을 위해 아두이노가 LED에 시간 표시 후, 5분간 슬립모드로 전환. 슬립모드로 전환한 아두이노를 5분마다 알람으로 깨우기 위해 RTC의 Interrupt 신호 제어
3) 5분 간격의 슬립모드 전환 작동에 있어, 최초 전원이 들어갔을 때 시간이 5분단위가 아닐 경우(e.g 1시 13분) 발생하는 시차동안 슬립모드 전환을 보류하는 보정코드 추가
4) 21:00 ~ 6:00 야간 시간대에는 LED 밝기를 30%이하로 낮춰 조도 조절
5) 다른 한글배치에도 코드를 쉽게 수정해 사용할 수 있도록 시간/분 배치를 5X5배열식으로 정의

단, 하드웨어 제어부분에 있어 chatGPT3.5의 AI 환각현상(AI Hallucination)은 주의해야 한다. 슬립모드로 전환된 아두이노를 깨우기위한 인터럽트 구현 과정에서 chatGPT 3.5가 잘못된 정보를 계속 제공한 탓에 수십 시간을 삽질했다. 결국 해결이 안되다가 chatGPT4.0에 물어보니 동료의 잘못(?)을 실토하고 대안을 알려주었다. (이렇지 않았으면 계속된 삽질 끝에 해당 기능을 포기 했었을지도)

다른 GPT인 Claude 에서도 해당 인터럽트 제어 이슈를 물어봤는데 제대로 대답을 한 것으로 보아 최신 학습데이터 유무로 생각된다.

GPT4.0은 동료인 GPT3.5의 잘못을 지적하고 대안코드까지 제공했다.
Claude 역시 기특하게도 올바른 답변과 코드를 제시했다.

소프트웨어가 준비되니 이제 각 부품을 납땜으로 연결하여 마무리…

각 부품을 연결하고 전원을 넣었는데 다행이도 한번에 불이 들어왔다.
이제 조립을 위해 보드 뒷판에 부착, 추후 A/S를 위해 부품들은 양면테이프로 고정

그리고, 이 기능들이 구현된 완성된 한글시계의 작동모습.
멋지다!

다음에는 요즘 핫 한 ESP32 모듈을 이용한 제작 프로젝트를 진행해 볼까싶다. 아~! 1편에서 언급한 앱 프로그래밍도 해야 하는데… :)

그럼 커밍 순!

완성된 코드는 Github에서 확인할 수 있다.
(작동방식을 이해할 수 있도록, 코드에 모드부분에 주석을 최대한 달았다.)

https://github.com/xeno-xeno/hangul_wordclock

참고)

  1. 인상깊었던 해외 WordClock 작품 (언젠간 이 타입으로 다시 도전을…)

2. 아두이노 저-전력 모드에서의 전력소비
- Arduino UNO : Awake(30~40mA), Asleep(19mA)
- Arduino Pro Mini : Awake(25mA), Asleep(0.57mA)

- 아두이노의 전원LED를 제거하면 전력소비가 더욱 더 낮아진다!

--

--