01. 아두이노의 세계로: 하드웨어의 눈을 뜨다
1. 아두이노(Arduino)란 무엇인가요?
아두이노는 센서나 모터 같은 하드웨어를 쉽게 제어할 수 있도록 만들어진 초소형 컴퓨터(마이크로컨트롤러)입니다. 이탈리아에서 학생들이 저렴하고 쉽게 프로그래밍을 배울 수 있도록 개발한 오픈소스 하드웨어 프로젝트죠.
C/C++ 언어를 기반으로 작동하기 때문에, 여러분이 앞서 배운 변수, 조건문, 반복문, 함수 등의 지식을 아두이노에서 100% 그대로 활용할 수 있습니다.
💡 보드의 핵심 구성 요소
| 명칭 | 역할 |
|---|---|
| 디지털 핀 (0~13) | 전기를 켜고(ON) 끄는(OFF) 신호를 주고받는 통로입니다. LED나 버튼을 연결합니다. |
| 아날로그 핀 (A0~A5) | 온도, 빛의 밝기처럼 연속적으로 변하는 미세한 값을 읽어들이는 통로입니다. |
| 전원부 (5V, GND) | 부품들에 전기를 공급(5V)하고, 전기가 빠져나가는 하수구(GND, 접지) 역할을 합니다. |
2. 대장간 준비: 아두이노 IDE 설치 및 연결
아두이노에게 명령을 내리려면 C언어의 Dev-C++처럼 코드를 작성하고 번역해 줄 전용 프로그램이 필요합니다. 이를 Arduino IDE라고 부릅니다.
🛠️ 환경 세팅 3단계
1 다운로드: 아두이노 공식 홈페이지에서 Arduino IDE를 다운로드하고 설치합니다.
2 컴퓨터와 연결: 파란색 USB 케이블을 이용해 아두이노 보드와 컴퓨터를 연결합니다.
3 보드 및 포트 인식: IDE 상단 메뉴에서 보드(Arduino Uno)와 연결된 포트(COM3 등)를 선택합니다.
⚠️ 자주 발생하는 오류: "포트가 안 잡혀요!"
포트 메뉴가 비활성화되어 있다면, USB 케이블이 데이터 전송용이 아닌 단순 충전용 케이블일 확률이 높습니다. 또는 호환 보드를 사용하는 경우 드라이버 설치가 필요할 수 있습니다.
3. 아두이노 코드의 해부학: setup()과 loop()
C언어에서는 무조건 main() 함수에서 코드가 시작되었죠? 아두이노는 마이크로컨트롤러의 특성상 두 개의 기본 함수를 반드시 가져야 합니다.
void setup() {
// 1. 초기화 구역: 아두이노에 전원이 켜지면 딱 한 번만 실행됩니다.
// 주로 "몇 번 핀을 사용할 거야"라고 세팅하는 코드를 넣습니다.
}
void loop() {
// 2. 무한 반복 구역: setup()이 끝나면 전원이 꺼질 때까지 계속 반복 실행됩니다.
// LED를 켜고 끄거나, 센서 값을 계속 읽어오는 메인 코드가 들어갑니다.
}
4. 💡 실습: 첫 번째 마법, LED 깜빡이기 (Blink)
보드를 자세히 보면 13번 핀 옆에 작게 L이라고 적힌 부품이 있습니다. 따로 부품을 연결할 필요 없이 이 내장 LED를 깜빡이게 만들어 봅시다.
아래 코드를 아두이노 IDE에 그대로 입력한 뒤, '업로드(화살표 ➡ 버튼)'를 클릭하세요!
void setup() {
// 13번 핀을 전기를 내보내는 '출력(OUTPUT)' 모드로 설정하겠어!
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // 13번 핀에 5V 전기를 보내라! (LED 켜짐)
delay(1000); // 1000밀리초(1초) 동안 기다려라
digitalWrite(13, LOW); // 13번 핀에 전기를 끊어라! 0V (LED 꺼짐)
delay(1000); // 1000밀리초(1초) 동안 기다려라
}
🔍 코드 완벽 분석
- pinMode(핀번호, 모드): 핀을 입력(INPUT)으로 쓸지 출력(OUTPUT)으로 쓸지 정합니다. 불을 켜는 건 에너지를 내보내는 것이니
OUTPUT입니다. - digitalWrite(핀번호, 상태): 핀에 전기를 줍니다.
HIGH는 5V 전압(켜기),LOW는 0V 전압(끄기)을 의미합니다. - delay(밀리초): 아두이노를 잠깐 멈추게 하는 함수입니다. 단위가 밀리초(ms)이므로 1000은 1초를 의미합니다.
5. 🎯 창의적 미션: SOS 모스 부호 구조 요청
단순히 깜빡이는 것을 넘어, 시간차(delay)를 조절하여 빛으로 모스 부호(Morse Code)를 보내볼까요? SOS는 짧게 3번(S), 길게 3번(O), 짧게 3번(S)으로 이루어져 있습니다.
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
// S (짧게 3번)
for(int i = 0; i < 3; i++) {
digitalWrite(13, HIGH); delay(200); // 0.2초 켜짐
digitalWrite(13, LOW); delay(200); // 0.2초 꺼짐
}
delay(300); // 글자 사이 쉬는 시간
// O (길게 3번)
for(int i = 0; i < 3; i++) {
digitalWrite(13, HIGH); delay(600); // 0.6초 켜짐
digitalWrite(13, LOW); delay(200);
}
delay(300);
// S (짧게 3번)
for(int i = 0; i < 3; i++) {
digitalWrite(13, HIGH); delay(200);
digitalWrite(13, LOW); delay(200);
}
delay(2000); // 한 단어가 끝나고 2초 대기 후 무한 반복!
}
🎉 C언어 지식의 활용!
SOS 코드를 짤 때 코드를 무식하게 길게 나열할 수도 있었지만, 우리는 C언어 과정에서 배운 for 반복문을 사용했습니다. 프로그래밍 기초가 탄탄하면 하드웨어 제어 코드가 훨씬 간결하고 스마트해집니다!