민선생의 전자공방 ・ 11시간 전
URL 복사 통계
본문 기타 기능
📌 예비 엔지니어를 위한 아두이노 3축 로봇 프로젝트 피지컬 코딩 실무능력 향상 프로젝트 [3/7] — 3일 · 21시간 집중 과정 전 과정 공개 1일차 (7시간) — 아두이노 기초 + 자작 아두이노 부트로더 2일차 (7시간) — PCB 설계 (Altium Designer) 3일차 (7시간) — PCB 제작 + SMD 납땜 + 3축 로봇 완성 이 글은 그 중 3번째 / 7편 입니다. |
피지컬 컴퓨팅 기본기 · 민선생의 전자공방 [피지컬 코딩 실무능력 향상 프로젝트 3/7] 🔧 나만의 아두이노 만들기 ATmega328P에 부트로더를 직접 굽다 |
| 🔧 1일차 오후 : 3부 — ATmega328P에 부트로더 올려 자작 아두이노 만들기 |
1편에서 아두이노란 무엇인가를 배웠고, 2편에서 LED와 서보모터 코딩 실습을 마쳤습니다. 이번 3편에서는 이 강의의 가장 핵심적인 내용 — 단돈 2,000원짜리 ATmega328P 칩 하나로 나만의 아두이노를 직접 만드는 실습을 합니다.
아두이노 우노 보드 없이도, 마이크로컨트롤러 칩과 브레드보드만으로 동일하게 동작하는 나만의 아두이노를 만들 수 있습니다. 이것이 바로 다음 4·5편에서 진행할 PCB 설계와 SMD 납땜 실습의 출발점입니다.
이번 실습 목표 아두이노 우노를 ISP(In-System Programmer) 장치로 활용해 ATmega328P 칩에 부트로더를 굽고, 브레드보드에서 LED를 깜빡이게 만들기! → 이 칩 하나가 나중에 우리가 만드는 3축 로봇의 두뇌가 됩니다. |
아두이노 우노의 핵심은 ATmega328P 마이크로컨트롤러입니다. 아두이노 우노 보드에서 이 칩만 빼서 브레드보드에 꽂아도 동일하게 동작합니다. 보드 가격의 대부분은 USB 통신칩, 전원 회로, 커넥터 등 주변 부품 값입니다.
ATmega328P DIP-28 핀배치도 (Pin Map)
| 항목 | 내용 |
| 칩 이름 | ATmega328P (Atmel / Microchip Technology) |
| 가격 | 약 2,000원 (DIP 28핀 패키지) |
| 플래시 메모리 | 32KB — 프로그램 저장 (부트로더 0.5KB 사용) |
| SRAM | 2KB — 실행 중 변수 저장 |
| EEPROM | 1KB — 전원 꺼져도 유지되는 데이터 |
| 동작 전압 | 1.8~5.5V (아두이노에서는 5V 사용) |
| 클록 | 최대 20MHz (아두이노 우노: 16MHz 외부 크리스탈) |
| I/O 핀 | 23개 (디지털 14 + 아날로그 6 + 기타) |
| 패키지 | DIP-28 (브레드보드 직접 꽂기 가능!) |
💡 DIP 패키지란? Dual In-line Package — 양쪽에 핀이 일렬로 나열된 형태입니다. 브레드보드 가운데에 바로 꽂을 수 있어 실습에 가장 편리합니다. 나중에 PCB 설계에서는 SMD(표면실장) 패키지를 사용하게 됩니다. |
가장쉬운 방법은 아두이노 우노를 이용해 ATmega328에 부트로더를 굽는 과정은 크게 4단계로 이루어집니다. 아두이노 우노를 ISP 장치로 설정한 뒤, ATmega328P를 브레드보드에 연결하고 부트로더를 굽는 방식입니다.
| 💾 부트로더(Bootloader)란 무엇인가? |
ATmega328P 칩을 처음 구입하면 아무런 프로그램이 없는 빈 상태입니다. 이 칩에 아두이노 IDE로 스케치를 업로드하려면 먼저 부트로더(Bootloader)를 구워야 합니다.
부트로더(Bootloader)란? 컴퓨터의 윈도우 운영체제와 유사한 역할을 합니다. 전원이 켜지면 마이크로컨트롤러가 처리해야 할 동작 과정을 내장된 메모리에 미리 저장해 놓은 프로그램입니다. 아두이노에서 부트로더는 USB(시리얼) 통신을 통해 작성된 스케치를 마이크로컨트롤러의 플래시 메모리에 저장하고 실행하는 역할을 합니다. |
| 구분 | 부트로더 없는 칩 | 부트로더 있는 칩 |
| 프로그램 업로드 | ISP 장치 필요 (별도 장비) | USB 케이블만으로 가능! |
| 아두이노 IDE 사용 | 불가능 | 가능 |
| 메모리 사용 | 32KB 전체 사용 가능 | 약 0.5KB 부트로더 사용 |
| 가격 | 동일 (ATmega328P 약 2,000원) | 아두이노 우노 약 35,000원 |
💡 핵심 포인트! 부트로더를 굽고 나면 이 2,000원짜리 칩이 35,000원짜리 아두이노 우노와 동일하게 동작합니다! 바로 이것이 이 강의에서 자작 아두이노를 만드는 이유입니다. |
| 항목 | 내용 |
| 마이크로컨트롤러 | ATmega328P (DIP-28핀) × 1개 |
| 아두이노 | 아두이노 우노 R3 × 1개 (ISP 장치로 사용) |
| 레조네이터 | 16MHz 레조네이터(공진기) × 1개 — 클록 공급용 |
| 브레드보드 | 브레드보드 × 1개 |
| 점퍼와이어 | 배선용 점퍼와이어 (수-수) 여러 개 |
| LED·저항 | LED × 1개, 330Ω 저항 × 1개 (동작 확인용) |
| USB 케이블 | 아두이노 우노용 USB-B 케이블 |
ATmega328P 브레드보드 배선도 (아두이노 우노 → ATmega328P ISP 연결해서 부트로더 만드는 방법)
아두이노로 아두이노 자자하는 회로
😊 자작한 ATmega328에 붙여 사용하시면 배선시 아두이노 핀 확인하시기 편리합니다.
첨부파일
아두이노메이커라벨.hwp
파일 다운로드
STEP 1 : 아두이노를 부트로더로 사용하기위한 사전 준비작업
부트로더를 업로드 하기전 아두이노우노 R3에 ISP Upload 프로그램 전송하기
아두이노 설정 확인
• 툴 – 보드 – Arduino Uno 선택
• 툴 – 포트 선택(포트번호는 컴퓨터마다 다름)
파일 - 예제 – 11.ArduinoISP – ArduinoISP 열기
존재하지 않는 이미지입니다. (Upload) 클릭
STEP 1 두이노 우노를 ISP 장치로 설정하기 아두이노 IDE를 열고 예제 스케치를 업로드합니다. 메뉴: 파일 → 예제 → 11.ArduinoISP → ArduinoISP 아두이노 우노를 컴퓨터에 연결하고 이 스케치를 업로드합니다. 이제 아두이노 우노가 ISP(프로그래머) 역할을 하게 됩니다. |
STEP1. 아두이노에 예제 11. ArduionISP.ino 업로드하기
STEP 2 브레드보드에 ATmega328P 회로 구성하기 ATmega328P를 브레드보드 중앙에 꽂습니다. 16MHz 레조네이터를 9번·10번 핀(XTAL1·XTAL2)에 연결합니다. 아두이노 우노의 5V → ATmega328P VCC(7번핀)에 연결 아두이노 우노의 GND → ATmega328P GND(8번핀)에 연결 SPI 통신선 4개를 연결합니다 (아래 배선표 참조) |
| 아두이노 우노 핀 | ATmega328P 핀 | 신호 |
| D10 | 1번핀 (Reset) | RESET — 칩 초기화 |
| D11 (MOSI) | 17번핀 (MOSI) | 데이터 출력 |
| D12 (MISO) | 18번핀 (MISO) | 데이터 입력 |
| D13 (SCK) | 19번핀 (SCK) | 클록 신호 |
| 5V | 7번핀 (VCC) | 전원 공급 |
| GND | 8번핀 (GND) | 접지 |
STEP 3 아두이노 IDE에서 부트로더 굽기 아두이노 IDE에서 다음과 같이 설정합니다. 툴 → 보드: 'Arduino Uno' 선택 툴 → 프로그래머: 'Arduino as ISP' 선택 툴 → 부트로더 굽기 클릭! 약 1~2분 후 '부트로더 굽기 완료' 메시지가 뜨면 성공입니다. ⚠ '보드로 업로드'가 아니라 반드시 '부트로더 굽기'를 선택해야 합니다! |
아두이노 IDE 부트로더 굽기 메뉴 (툴 → 부트로더 굽기)
STEP 4 동작 확인 — LED 깜빡이기 부트로더 굽기가 완료되면 아두이노 우노와 ATmega328P의 연결을 그대로 유지합니다. ATmega328P의 19번핀(D13)에 330Ω 저항과 LED를 연결합니다. 아두이노 IDE에서 예제 → 01.Basics → Blink 스케치를 엽니다. 툴 → 포트: 아두이노 우노 포트 선택 → 업로드! LED가 1초 간격으로 깜빡이면 자작 아두이노 완성! |
부트로더 업로드
※ 정상적으로 부트로더 굽기가 완료되면 D9에 연결된 HeartbeatLED가 Fade 동작을 반복
| 💡 레조네이터 vs 크리스탈 — 클록 공급 방법 |
ATmega328P가 동작하려면 정확한 클록(시간 기준)이 필요합니다. 아두이노 우노 보드에는 16MHz 크리스탈이 사용되지만, 브레드보드 실습에서는 레조네이터가 더 편리합니다.
| 구분 | 레조네이터 (공진기) | 크리스탈 (수정 발진자) |
| 핀 수 | 3핀 (VCC·GND·출력) | 2핀 (양쪽에 콘덴서 추가 필요) |
| 정확도 | ±0.5% 수준 | ±30ppm 이상 정확 |
| 사용 편의 | 브레드보드에 바로 꽂기 편함 | 콘덴서 2개 추가 배선 필요 |
| 실습 추천 | 브레드보드 실습 ← 추천! | PCB 설계 시 사용 |
💡 내부 오실레이터 사용도 가능합니다 ATmega328P는 8MHz 내부 오실레이터를 내장하고 있습니다. 외부 클록 없이도 동작하지만, 정확도가 낮아 UART(시리얼) 통신에 문제가 생길 수 있습니다. 아두이노 IDE에서 '8MHz 보드'로 설정하면 내부 오실레이터로도 업로드 가능합니다. |
💡 심화 실습 — USB FTDI UART로 방금 자작한 아두이노에 프로그램 업로드하기
부트로더가 올라간 자작 아두이노(ATmega328P)에 앞으로는 USB FTDI UART 모듈을 이용해 편리하게 프로그램을 업로드할 수 있습니다.
USB FTDI UART 모듈의 DTR 단자와 ATmega328P의 RESET 단자 사이에 0.22uF 콘덴서를 연결합니다. (콘덴서에 극성이 있다면 — 단자를 USB DTR에 연결)
USB FTDI를 이용해 아두이노에 프로그램 업로드 회로
아두이노 설정 순서
툴 → 보드 → Arduino Uno 선택
툴 → 포트 선택 (포트 번호는 컴퓨터마다 다름)
툴 → 프로그래머 → AVR ISP 선택
프로그램 작성 후 업로드(→) 클릭
| 서보모터 선 | ATmega328P 핀 | 아두이노 핀 번호 |
| 빨간색 (VCC) | 7번핀 (VCC) | 5V |
| 검은색 (GND) | 8번핀 (GND) | GND |
| 노란색 (제어) | 15번핀 (PB1) | D9 (PWM핀) |
// 자작 아두이노(ATmega328P)로 서보모터 Sweep 동작 #include <Servo.h> Servo myservo; int pos = 0;
void setup() { myservo.attach(9); // D9핀 = ATmega328P 15번핀(PB1) }
void loop() { for (pos = 0; pos <= 180; pos += 1) { myservo.write(pos); delay(15); } for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); } } |
오늘 배운 핵심 내용 ① ATmega328P = 아두이노 우노의 심장 — 단돈 2,000원! ② 부트로더 = 마이크로컨트롤러의 운영체제 역할 — USB 업로드를 가능하게 함 ③ 아두이노 우노를 ISP 장치로 활용해 부트로더를 굽는 방법 ④ 배선 4선: Reset(D10) · MOSI(D11) · MISO(D12) · SCK(D13) ⑤ 레조네이터: 브레드보드 실습에 편리한 3핀 클록 공급 소자 ⑥ 자작 아두이노로 서보모터까지 완벽하게 제어 가능! |
1일차를 마치며 아두이노 기초(1편) → LED·서보모터 코딩(2편) → 자작 아두이노 제작(3편) 이제 여러분은 2,000원짜리 칩 하나로 아두이노를 만들 수 있습니다. 내일은 이 자작 아두이노가 들어갈 3축 로봇의 PCB를 직접 설계합니다! |
📌 다음 편 예고 — 4/7 PCB란 무엇인가 — 전자제품의 뼈대이자 혈관 ▸ PCB의 종류와 역할 — 단면·양면·다층 기판 ▸ SMT 표면실장기술과 전자제품 생산공정 이해 ▸ Altium Designer 소개 및 설치 준비 |
민선생의 전자공방 · blog.naver.com/hansikmin
자작아두이노, ATmega328P, 부트로더굽기, ArduinoISP, 마이크로컨트롤러, 피지컬코딩, 브레드보드, 레조네이터, 민선생전자공방