01. 아두이노의 세계로: 하드웨어의 눈을 뜨다

우리가 작성한 C언어 코드가 모니터를 벗어나 현실 세계의 전구를 켜는 마법 같은 순간입니다.

1. 아두이노(Arduino)란 무엇인가요?

아두이노는 센서나 모터 같은 하드웨어를 쉽게 제어할 수 있도록 만들어진 초소형 컴퓨터(마이크로컨트롤러)입니다. 이탈리아에서 학생들이 저렴하고 쉽게 프로그래밍을 배울 수 있도록 개발한 오픈소스 하드웨어 프로젝트죠.

C/C++ 언어를 기반으로 작동하기 때문에, 여러분이 앞서 배운 변수, 조건문, 반복문, 함수 등의 지식을 아두이노에서 100% 그대로 활용할 수 있습니다.

USB 전원 ATmega328P DIGITAL PINS (0~13) ANALOG IN
▲ 아두이노 우노(Uno) 보드의 구조 (코드로 직접 그린 도식도)

💡 보드의 핵심 구성 요소

명칭 역할
디지털 핀 (0~13) 전기를 켜고(ON) 끄는(OFF) 신호를 주고받는 통로입니다. LED나 버튼을 연결합니다.
아날로그 핀 (A0~A5) 온도, 빛의 밝기처럼 연속적으로 변하는 미세한 값을 읽어들이는 통로입니다.
전원부 (5V, GND) 부품들에 전기를 공급(5V)하고, 전기가 빠져나가는 하수구(GND, 접지) 역할을 합니다.

2. 대장간 준비: 아두이노 IDE 설치 및 연결

아두이노에게 명령을 내리려면 C언어의 Dev-C++처럼 코드를 작성하고 번역해 줄 전용 프로그램이 필요합니다. 이를 Arduino IDE라고 부릅니다.

Arduino IDE 2.0 void setup() { pinMode(13, OUTPUT); }
▲ 아두이노 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를 깜빡이게 만들어 봅시다.

... 11 12 13 GND AREF L ← 내장 LED
▲ 아두이노 우노의 내장 LED (L). 13번 핀과 직접 연결되어 있습니다.

아래 코드를 아두이노 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초) 동안 기다려라
}

🔍 코드 완벽 분석

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 반복문을 사용했습니다. 프로그래밍 기초가 탄탄하면 하드웨어 제어 코드가 훨씬 간결하고 스마트해집니다!