- Published on
개발자를 위한 전자제어 입문 — 아두이노부터 AI 로봇까지
- Authors
- Name
- 들어가며
- 왜 개발자가 전자제어를 배워야 하나
- 로드맵
- 준비물 (5만원이면 충분!)
- 기초 개념: 3가지만 알면 된다
- 실습 1: LED 깜빡이기 (Hello World)
- 실습 2: 버튼으로 LED 제어
- 실습 3: 온습도 센서 (DHT11)
- 실습 4: 서보모터 제어 (탁구 로봇의 시작!)
- 실습 5: PWM으로 LED 밝기 조절
- 개발자 프로젝트 아이디어
- AI + 전자제어 융합 (Ultimate Goal)
- 시리즈 로드맵

들어가며
우리는 매일 코드를 쓰지만, 그 코드가 물리적 세계와 만나는 순간을 경험해본 적 있나요? LED가 내 코드에 반응해서 켜지는 그 순간, 소프트웨어 개발의 새로운 차원이 열립니다.
이 시리즈는 소프트웨어 개발자를 위한 전자제어 입문입니다. C/C++이나 Python을 할 줄 안다면, 전자제어는 생각보다 훨씬 쉽습니다.
왜 개발자가 전자제어를 배워야 하나
- 풀스택의 진짜 의미 — 소프트웨어 + 하드웨어 = 완전한 시스템
- 로보틱스 시대 — 2026년 휴머노이드 로봇 시대 진입
- IoT/Edge AI — 클라우드를 넘어 디바이스로
- 취미가 곧 실력 — 임베디드 개발자 몸값은 계속 상승중
로드맵
[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 라이브러리 사용||