안녕하세요.
이번 포스팅에서는 지금까지 직접 브레드보드에 만들고 부트로더도 올린 자작 아두이노 보드를 실제 활용해 보겠습니다.
이글을 처음으로 보시는 분들은 이전 포스팅 참고해 주세요.
이전 포스팅 꼭 참고해주세요
이번 포스팅에서 "[ 아두이노 보드 만들기 ] 자작 아두이노 만들기 (브레드 보드) (1)"에서 준비물이였지만 사용하지 않았던 마일러 콘덴서와 USB to TTL 모듈을 사용합니다. 이런 부품들은 PC와 자작 아두이노와 통신하는 과정에서 사용됩니다. PC와 통신을 통해 코드를 올리고 프로그래밍한 코드대로 동작하는지 확인해 보겠습니다.
※1. 업로드 통신 ( UART 통신 )
아두이노에서 활용되는 통신방법에는 UART, I2C, SPI의 3가지 방법이 있습니다. 이중 UART 통신은 흔히 시리얼 통신이라고 하는데 이 UART 통신을 통해 이전에 만들 우리의 아두이노 보드에 펌웨어를 올려보겠습니다.
3가지 통신에 대한 자세한 내용은 아래 링크 참조해보세요!
※2. Wiring ( 연결 )
UART통신은 아두이노의 RX핀과 TX핀, PCB의 USB 포트에 연결한 USB to TTL 모듈의 RX핀과 RX핀을 통해 데이터는 주고 받게 됩니다.
▶1. USB to TTL 모듈
다음과 같이 핀은 GND / +5V(3V3) / TXD / RXD / DTR 5개가 있습니다.
USB to TTL의 모듈은 다양한 제품이 구매 가능한데 차이는 핀이 4개(GND / 5V(3V3) / TXD / RXD)인 것과 5개( GND / 5V(3V3) / TXD / RXD / DTR )인것인 핀개수의 차이입니다.
즉 DTR핀의 유무의 차이인데 DTR는 통신과정중 펌웨어 업로드 과정에서 리셋작업이 요구되는데 DTR핀은 해당 과정을 자동으로 이뤄지도록 합니다. 만약 DTR가 없는 4핀짜리 모듈을 사용할 경우 수작업으로 리셋 버튼을 눌러야 하는데 타이밍 맞추기도 난해하고 번거롭기에 반드시 프로그램 업로드를 위해서라면 DTR핀이 존재하는 USB TO TTL 모듈을 사용하세요.
▶2. 커패시터
앞서 말한 DTR핀을 사용하기 위해서는 전류를 저장하는 용도로 커패시터가 필요합니다. 정확히 특정 크기의 커패시터로 정해진 것은 아니지만 일반적으로 100nF을 많이 사용합니다. 커패시터의 종류로 세라믹, 필름, 전해 등 상관없지만 본 포스팅에서는 필름 커패시터를 사용했습니다.
(커패시터의 종류는 아래 링크를 참조해주세요.)
▶3. 연결하기
RX<->RX TX<->TX 끼리 동일하게 연결하는 것이 아닌 RX<->TX TX<->RX로 교차해서 연결해야 한다는 부분 주의해주세요. Rx는 주고 Tx는 받는것이기에 PC와 아두이노 보드 사이에 서로 주고 받기 위해서는 교차해야 합니다
아래 영상을 통해 실제 연결 상태 확인해보세요.
※3. 코드 업로드 하기
PC와 "USB to TTL을 케이블을 통해 연결하고 다음 과정을 진행하니다.
▶1. Arduino IDE 연결
포트 선택하는 과정에서 원래 아두이노 공식 제품을 사용하면 COM@(Arduino Uno)와 같이 표시되나 해당 경우는 아두이노 공식 보드는 연결한 것이 아니기에 COM@정도로 나오니다. 혹시나 뭔가 이상하다 생각드시더라도 분명히 정상입니다.
▶2. 코드 업로드
시간에 따라 LED의 On/Off 속도가 바뀌면서 점/소등 되는 코드를 실행 해보겠습니다. LED는 이전에 보드에 2개의 LED중 하나는 Power가 연결되면 점등되도록 연결되어 있고(빨간색 LED), 하나가 GPIO 13번과 연결되어 13번 GPIO에 High신호를 인가하면 점등됩니다(노란색 LED). 해당 13번 핀에 연결된 LED를 사용하겠습니다.
(빨간색LED: 파워연결 LED / 노란색LED: GPIO 13번 LED)
코드는 아래 코드를 사용할 것이며 첨부파일 제공해드리겠습니다.
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(500); digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(200); // wait for a second digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(100); } |
※4. 동작 상태확인
작성한 코드에 대한 펌웨어가 잘들어가 원하는 동작을 적절하게 수행하고 있습니다.
이상으로 4편에 걸친 자작(DIY)아두이노에 만들기에 대한 설명을 마치겠습니다.
어떠한 질문도 환영하며 이후 실제 PCB로 지금까지 하였던 작업을 다시 진행해 보는 포스팅을 게시하겠습니다.
감사합니다.
'Digital Circuit' 카테고리의 다른 글
MCU, MPU, CPU: 차이를 명확히 이해하자 (3) | 2024.11.30 |
---|---|
MCU와 FPGA의 차이점 비교 (1) | 2024.11.29 |
[ 아두이노 보드 만들기 ] 자작 아두이노 부트로더 올리기 (2) (0) | 2024.07.09 |
[ 아두이노 보드 만들기 ] 자작 아두이노 만들기 (브레드 보드) (1) (1) | 2024.07.09 |
[ 아두이노 보드 만들기 ] 아두이노 보드 회로 구성 이해하기 (0) (0) | 2024.07.08 |