Skip to content
Published on

개발자를 위한 전자제어 입문 — 아두이노부터 AI 로봇까지

Authors
  • Name
    Twitter
Arduino Electronics

들어가며

우리는 매일 코드를 쓰지만, 그 코드가 물리적 세계와 만나는 순간을 경험해본 적 있나요? LED가 내 코드에 반응해서 켜지는 그 순간, 소프트웨어 개발의 새로운 차원이 열립니다.

이 시리즈는 소프트웨어 개발자를 위한 전자제어 입문입니다. C/C++이나 Python을 할 줄 안다면, 전자제어는 생각보다 훨씬 쉽습니다.

왜 개발자가 전자제어를 배워야 하나

  1. 풀스택의 진짜 의미 — 소프트웨어 + 하드웨어 = 완전한 시스템
  2. 로보틱스 시대 — 2026년 휴머노이드 로봇 시대 진입
  3. IoT/Edge AI — 클라우드를 넘어 디바이스로
  4. 취미가 곧 실력 — 임베디드 개발자 몸값은 계속 상승중

로드맵

[1단계] 아두이노 기초 (이 글)
    └── LED, 버튼, 센서, 서보모터
[2단계] ESP32 IoT
    └── WiFi, MQTT, 웹 대시보드
[3단계] Raspberry Pi + 카메라
    └── 컴퓨터 비전, 에지 AI
[4단계] ROS 2 로봇
    └── 자율 주행, 매니퓰레이터
[5단계] AI + 하드웨어 융합
    └── 음성 인식 로봇, 스마트홈

준비물 (5만원이면 충분!)

부품가격용도
Arduino Uno R4 WiFi~25,000원메인 보드
브레드보드 + 점퍼선~5,000원회로 연결
센서 37종 키트~15,000원다양한 실습
SG90 서보모터 x2~3,000원모터 제어

기초 개념: 3가지만 알면 된다

1. 디지털 vs 아날로그

디지털: 0 또는 1 (켜짐/꺼짐)
LED 제어, 버튼 읽기
Arduino: digitalRead(), digitalWrite()

아날로그: 0~1023 연속 값
  → 온도 센서, 조도 센서
Arduino: analogRead(), analogWrite() (PWM)

2. 전압, 전류, 저항 (옴의 법칙)

V = I × R

V(전압) = 5V (Arduino 기본)
R(저항) = 220Ω (LED 보호용)
I(전류) = 5V / 220Ω = 22.7mA  (LED 안전 범위)

개발자 비유: 전압 = API 요청, 전류 = 데이터 흐름, 저항 = Rate Limiter

3. GPIO (General Purpose Input/Output)

Arduino Uno R4:
  디지털 핀: D0~D13 (입력/출력)
  아날로그 핀: A0~A5 (입력)
  PWM : D3, D5, D6, D9, D10, D11 (유사 아날로그 출력)
  전원: 5V, 3.3V, GND

실습 1: LED 깜빡이기 (Hello World)

회로

Arduino D13 ──[220Ω]──[LED(+)]──[LED(-)]── GND

코드

// Blink — 전자제어의 Hello World
void setup() {
    pinMode(13, OUTPUT);  // D13을 출력 모드로
}

void loop() {
    digitalWrite(13, HIGH);  // LED ON
    delay(1000);             // 1초 대기
    digitalWrite(13, LOW);   // LED OFF
    delay(1000);             // 1초 대기
}

Python 개발자라면: Arduino IDE 대신 MicroPython 사용 가능!

# MicroPython (ESP32에서 실행)
from machine import Pin
import time

led = Pin(13, Pin.OUT)

while True:
    led.value(1)   # ON
    time.sleep(1)
    led.value(0)   # OFF
    time.sleep(1)

실습 2: 버튼으로 LED 제어

const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;

void setup() {
    pinMode(ledPin, OUTPUT);
    pinMode(buttonPin, INPUT_PULLUP);  // 내부 풀업 저항 사용
}

void loop() {
    buttonState = digitalRead(buttonPin);

    if (buttonState == LOW) {  // 버튼 눌림 (PULLUP이라 LOW)
        digitalWrite(ledPin, HIGH);
    } else {
        digitalWrite(ledPin, LOW);
    }
}

실습 3: 온습도 센서 (DHT11)

#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
    Serial.begin(9600);
    dht.begin();
}

void loop() {
    float humidity = dht.readHumidity();
    float temperature = dht.readTemperature();

    Serial.print("온도: ");
    Serial.print(temperature);
    Serial.print("°C / 습도: ");
    Serial.print(humidity);
    Serial.println("%");

    delay(2000);
}

실습 4: 서보모터 제어 (탁구 로봇의 시작!)

#include <Servo.h>

Servo myServo;

void setup() {
    myServo.attach(9);  // D9 핀에 서보 연결
}

void loop() {
    // 0도 → 180도 스윕
    for (int angle = 0; angle <= 180; angle += 10) {
        myServo.write(angle);
        delay(50);
    }
    // 180도 → 0도 스윕
    for (int angle = 180; angle >= 0; angle -= 10) {
        myServo.write(angle);
        delay(50);
    }
}

실습 5: PWM으로 LED 밝기 조절

const int ledPin = 9;  // PWM 핀

void setup() {
    pinMode(ledPin, OUTPUT);
}

void loop() {
    // Fade in
    for (int brightness = 0; brightness <= 255; brightness += 5) {
        analogWrite(ledPin, brightness);
        delay(30);
    }
    // Fade out
    for (int brightness = 255; brightness >= 0; brightness -= 5) {
        analogWrite(ledPin, brightness);
        delay(30);
    }
}

개발자 프로젝트 아이디어

프로젝트난이도연결 가능한 소프트웨어
🏓 탁구 스코어보드⭐⭐fingerscore 연동
🌡️ 서버룸 온도 모니터⭐⭐Grafana 대시보드
🚨 침입 감지 알림⭐⭐⭐Telegram Bot 알림
🤖 2축 카메라 팬틸트⭐⭐⭐OpenCV 얼굴 추적
🎮 커스텀 매크로 키보드⭐⭐⭐개발 생산성 도구
🏠 AI 스마트홈⭐⭐⭐⭐K8s + MQTT + LLM

AI + 전자제어 융합 (Ultimate Goal)

[Arduino 센서][ESP32 WiFi][K8s MQTT Broker]
                               [AI 추론 (GPU 서버)]
                               [제어 명령 → 모터/LED]

집에 있는 GPU 서버들과 아두이노를 연결하면:

  • 음성 명령 → Qwen3-TTS → 스피커 (omen)
  • 카메라 영상 → LTX-2 분석 → 서보모터 제어 (spark01)
  • 센서 데이터 → 이상 탐지 AI → 알림 (spark02)

시리즈 로드맵

주제상태
1편아두이노 기초 (이 글)
2편ESP32 WiFi + MQTT IoT🔜
3편Raspberry Pi + 카메라 비전🔜
4편ROS 2 로봇 제어 기초🔜
5편AI + 하드웨어 통합 프로젝트🔜

📝 퀴즈 — 전자제어 기초 (클릭해서 확인!)

Q1. 옴의 법칙 V = I x R에서 5V 전원에 1kΩ 저항을 연결하면 흐르는 전류는? ||5V / 1000Ω = 5mA (0.005A)||

Q2. Arduino에서 디지털 핀과 아날로그 핀의 차이는? ||디지털: 0/1(HIGH/LOW) 두 상태만. 아날로그: 0~1023 범위의 연속 값 읽기 가능 (ADC 10bit)||

Q3. PWM(Pulse Width Modulation)이란 무엇이고 어디에 쓰이나? ||디지털 신호의 ON/OFF 비율(Duty Cycle)을 조절해 유사 아날로그 출력을 만드는 기법. LED 밝기 조절, 모터 속도 제어에 사용||

Q4. INPUT_PULLUP 모드에서 버튼을 누르면 읽히는 값은? ||LOW (0) — 내부 풀업 저항이 평상시 HIGH를 유지하고, 버튼 누르면 GND에 연결되어 LOW||

Q5. DHT11 센서의 측정 범위와 정밀도는? ||온도: 050°C (±2°C), 습도: 2080% (±5%). 저가형으로 정밀도는 낮지만 입문용으로 충분||

Q6. 서보모터 SG90의 제어 신호와 동작 범위는? ||PWM 신호 (50Hz, 12ms 펄스폭), 0180도 회전. analogWrite가 아닌 Servo 라이브러리 사용||