-
ADI2CAN 개선 - Open Source 공개hardware 2025. 7. 19. 15:46

adi2can을 오픈 소스로 공개합니다. 사용하실 때 저작권자 표시만 해주시면 됩니다. PICODE( PICODE – Automotive testing solution)에 의해 창작된 adi2can을 만드는데 필요한 PCB 거버 파일과 회로도, 3D 프린터로 케이스를 만들기 위한 파일들, 소프트웨어 소스 코드, CAN dbc 파일, 사용자 가이드는 크리에이티브 커먼즈의 CC BY 라이선스 (https://ccl.cckorea.org/reuse/method/)에 따라 이용할 수 있습니다.
adi2can_open_source.zip7.95MB시작하기 전에
디지털/ 아날로그 신호를 CAN 신호와 함께 측정하기 - ADI2CAN :: hsl's tsmaster 사용기 에서 아두이노를 이용한 아날로그, 디지털 신호를 CAN 메시지로 전송하는 ADI2CAN을 만들었다.
자동차의 이그니션 신호를 ADI2CAN의 입력으로 받을 일이 있다. 이그니션 신호는 12V이다. (내연 기관 자동차의 발전기가 전지를 충전할 때 전압은 13.5 ~ 14.5V이다.) 아두이노의 디지털 입력은 0 ~ 5V 범위여야 한다. 그래서 12V를 5V로 낮춰주는 장치가 필요하다.
이런 간단한 회로를 만들려던 시도가 하다보니 아래 사진과 같은 장치 개발로 이어졌다. 그 과정을 이야기한다.

ADI2CAN이 12V 디지털 입력을 받을 수 있도록 하는 회로를 PCB로 만들고 케이스도 만들었다. 개요
- Voltage Divider Shield 개발
- PCB 만들기
- 3D 프린터로 케이스 만들기
- 소프트웨어 수정
- adi2can 사용자 설명서
- ADI2CAN
- 사용법: 1. 설정, 2. 측정
- aMsg
- dMsg
- sMsg
- cMsg
- cMsg - change_msg_id
- cMsg - change_msg_tx_period
- cMsg - debug output to serial monitor
- cMsg - apply filter
- cMsg - get status
- 결론
전압 분배기 쉴드 (Voltage Divider Shield) 개발
- 내 처음 생각은 (중고등학교 때 배운 전기에 관한 저항들을 직렬 연결하면 전압이 저항값에 따라 배분된다는 지식을 이용하여) 아래와 같은 아주 간단한 전압 분배 회로를 만들어 아두이노에 붙이는 것이었다.

- 그래서 아래 그림의 노란색으로 표시한 아두이노 프로토타입 쉴드에 저항으로 회로를 구성했다.

아두이노 프로토타입 쉴드 위에 저항으로 전압 분배 회로를 만들었다. 
프로토타입 쉴드는 기존 adi2can에 위 그림처럼 조립된다. - 이 방식은 잘 작동하나 아래의 문제점들이 있다. 모두 내 손재주의 부족함이 원인이다.
- 조잡해 보인다. (특히 마음이 쓰인다.)
- 입력 채널이 3개가 최대 한계다.
- PCB로 제대로 만들어 보고 싶어졌다. 회로가 간단하니까. 그런데 나는 PCB 설계 경험은 커녕 회로 설계 경험도 없다. '어려우면 얼마나 어렵겠나? 해보고 못하면 못하는 거다.'라고 생각하고 도전한다.
PCB 만들기
- 어쨌든 회로는 위에서 이야기한 회로가 이미 있는 거니까 ... PCB 만드는 법을 배워야겠다고 생각했다.
- YouTube에서 'PCB 설계'로 여러 비디오를 봤다. 설계용 툴이 필요하다. KiCad와 Fritzing이라는 두 툴이 도전할만 하게 보였다. 둘다 설치하여 조금씩 사용해봤다. 나는 매우 간단한 작업이면 된다. 간단한 작업에는 Fritzing이 더 편리해 보였다. Fritzing으로 정하였다. 그리고 유튜브에서 Fritzing 튜토리얼 비디오들을 봤다. 작업 과정을 머리 속에서 그릴 수 있을 때까지.
- 한JC 상무님과 대화 중에 전압 배분 회로가 칩으로 있다는 것을 알았다. 74HC4050이라는 칩을 찾았다. 칩 가격이 충분히 저렴하다. 칩을 이용해서 PCB를 설계하기로 한다.

Fritzing 라이브러리에서 아두이노 프로토타입 쉽드 등 부품들을 가져와서 전압 분배기 쉴드를 설계하였다. - 12V 디지털 입력 터미널 블록으로 연결된 선들은 74HC4050으로 입력되고, 5V로 변환된 출력이 아두이노의 디지털 입력 핀들에 연결된다.
- 5V 디지털 입력 터미널 블록으로 연결된 선들은 아두이노의 디지털 입력 핀들에 연결된다.
- 5V 아날로그 입력 터미널 블록으로 연결된 선들은 아두이노의 아날로그 입력 핀들에 연결된다.
- 전기전자 전문가이신 박H 이사님께 위 그림을 보여드렸다. '동작은 하겠으나 너무 아마추어 작업물로 보인다'는 평을 받았다. 잠깐 수정하신 것 같은데, 프로페셔널 하게 보이는 작품으로 설계가 변경되었다. jlcpcb.com에 제작 의뢰를 했다.
- PCB를 받았다. 작동하지 않는다. 내가 손으로 전선을 연결하여 실험을 할 때, D3 ~ D9번 사이의 핀들을 사용했다. PCB를 그리다보니 '전기전자 간섭'을 고려하여, 인접한 핀들을 사용하지 말고 띄엄띄엄 떨어진 핀들을 사용하면 좋겠다는 생각이 들었다. 그러다가 SPI 통신의 클락 핀을 디지털 입력 핀으로 사용하는 실수를 저질렀다.
- PCB를 설계를 수정하였다. 위 문제의 원인을 찾는 중에 74HC4050에 5V 신호를 입력해도 된다는 사실을 알았다. 5V, 12V 구분 없이 디지털 입력은 모두 74HC4050을 통과하도록 설계를 변경하였다. 사용자가 12V 입력을 5V에 잘못 연결하는 실수를 했을 때 adi2can이 손상되는 일을 막을 수 있다. 단점은 74HC4050에 입력을 최대 6개까지 받을 수 있다. 좋은 트레이드 오프다.

전문가의 터치 후 PCB 도면. tsmater.tistory.com 도 실크스크린 인쇄했다. 
완성된 아두이노 전압 분배기 쉴드 3D 프린터로 케이스 만들기
- 나는 당초 아크릴 판을 재단하여 Legare 가구처럼 못, 볼트, 스크류 갖은 체결구 없이 판의 홈과 돌출부들을 연결하여 조립하는 방식으로 케이스를 만들려고 했다.

Legare 책상 조림 과정 중 장면. 홈, 돌출부를 연결하여 조립하면 튼튼한 책상이 된다. 분해도 가능하다. - 내가 마지막으로 CAD 툴을 잡아 본 것은 한 세대 전이다. 김JW 부장님에게 내 아이디어를 이야기하며 설계를 부탁했다. 김부장님은 철판을 접어서 간단하게 만들라고 했다. 전HJ 대표님이 이런 작업은 김EJ 이사님이 전문이시라며 나를 김이사님께 데려갔다. 김이사님은 내 구상을 채 1분도 듣기 전에 3D 프린터로 이렇게 저렇게 만들어주시겠다고 했다. 타당했다. OK.

내 개떡같은 요구를 찰떡같이 알아들으시고 이렇게 멋진 케이스를 만들어주셨다. :-) 소프트웨어 개발
- claude.ai에게 기존 소프트웨어에서 개선하고 싶은 점들을 이야기했다. 그리고 그대(클로드.ai)가 개선하고 싶은 것은 없는지 물었다.
- 클로드가 다짜고짜 코딩을 하는 것을 말렸다. (클로드는 다짜고짜 코딩을 하는 경향이 있다. 그러면 시간과 토큰 소모에 비해 성과가 만족스럽지 않다.) '우리 둘이 요구 항목들을 모두 나열하고, 각 요구 항목에 관한 대응 방법에 관해 동일한 이해를 확인하기 전까지 요청하지 않으면 코딩을 하지 말라'고 요구한다. 온전히 요구 항목 정리에 대화를 집중할 수 있다.
- 클로드에게 중간중간 대화와 요구 사항 요약 정리를 요청한다. 클로드는 대화가 길어지면 헛소리(Hallucination)이 심해지는 것 같다. 그래서 나는 대화가 길어진다 싶으면, 새 대화를 만든다. 요약 정리를 바탕으로 새 대화를 시작한다.
- 기존 코드는
- aMsg (아날로그 신호 전송용 CAN 메시지), dMsg (디지털 신호 전송용 CAN 메시지)의 아이디와 전송 주기를 설정할 수 있으나, aMsg 설정용 메시지와 dMsg 설정용 메시지가 각각 있고, 설정용 메시지의 아이디를 변경할 수 없다는 약점을 갖고 있다.
- adi2can 내부 동작을 모니터링 하기 위해서 시리얼 통신을 연결하도록 했다. 시리얼 통신 연결을 부팅 직후에 한다. 그런데 시리얼 통신이 연결되지 않으면 다음 단계로 진행하지 않는 치명적인 오류가 있다. adi2can을 아두이노 IDE(Integrated Development Environment)에 연결하지 않고 충전기 전원으로 작동할 때 adi2can은 아무 CAN 메시지도 전송하지 않는다.
- 이 두가지 단점에 클로드가 제안한 편의 기능들을 추가하여 코드를 작성했다. 코드가 길어서 클로드가 한 번에 코드를 만들지 못했다. 그러다보니 코드에 오류가 있다. 컴파일이 안 되는 경우도 있다. 나는 에러 메시지를 클로드에게 전달하고 수정을 요청해다. 이런 일이 2~3 차례 반복되었다. 이런 일을 방지할 수 없을까 생각하다가, 클로드에게 '코드를 내게 주기 전에 스스로 먼저 지난 번에 했던 오류들을 (간단한 문법 오류, 괄호를 닫지 않는 것, 함수 안에 함수를 선언하다가 마는 것) 다시 하지않도록 점검하라'고 요구했다. 실제 점검을 했는지 모르겠는데, 점검했다고 오류가 없다고 했다. 실제로 컴파일 에러가 발생하지 않았다.
- 소프트웨어를 adi2can에 프로그램하고, 기능을 점검하고, 점검 중에 개선 아이디어가 생각나면 클로드에서 코드 개선을 요청하고를 반복했다. 첨부는 현재 단계에서 완성한 코드이다.
adi2can 사용자 설명서 :: hsl's tsmaster 사용기
결론
- off-the-shelf로 구매한 아두이노와 CAN 쉴드로 만든 adi2can가 12V 입력을 받을 수 있도록 전압 분배 쉴드를 만들었다.
- 3D 프린터로 adi2can의 케이스를 만들었다.
- 기존 adi2can 소프트웨어의 단점을 보완하였다.
- 본문에서 소개하지 않았지만 ai로 회로도 작성과 PCB 설계를 시도했다. 아직 ai의 역량이 부족하다. 내년에는 내가 쓰는 용도로는 충분한 성능을 보이지 않을까 기대한다.
- 인터넷의 오픈 소스 자료들과 ai가 기술 진입 장벽을 극적으로 낮췄다고 생각한다. 이번 일은 지난 해의 나는 도전할 엄두도 내지 못할 일이다. 이 일을 하고나니 더 큰 프로젝트도 할 수 있을 것 같다. (이미 더 큰 개발을 시작했다. ai와 대화를 하다보면 이건 이렇게 저건 저렇게 하면 되겠다는 요량이 선다.)
- 오픈 소스와 ai가 앞으로 우리 세상을 얼마나 바꿔놓을까?
adi2can 사용자 설명서 :: hsl's tsmaster 사용기
'hardware' 카테고리의 다른 글
adi2can 사용자 설명서 (3) 2025.07.21 CAN과 CAN-FD를 혼합 사용하면 ...? (3) 2025.06.13 timestamp, ACK와 ACK error (0) 2025.06.11 디지털/ 아날로그 신호를 CAN 신호와 함께 측정하기 - ADI2CAN (1) 2025.06.07 Q&A: 옵션에 없는 CAN(-FD) baud rate 설정하는 방법 (0) 2024.12.06