아두이노로 시작하는 오픈소스 임베디드 개발

아두이노의 보드 구성, IDE와 스케치 구조, I/O·통신 인터페이스, 쉴드 확장 방식과 IoT 활용 범위를 정리한다.

2026-08-14 · 최초 발행 2025-08-10

회로와 코드를 함께 다루게 만든 플랫폼

아두이노(Arduino)는 물리적 프로그래밍 가능 회로 보드와 통합 개발 환경(IDE)을 함께 제공하는 오픈소스 하드웨어·소프트웨어 플랫폼이다. 복잡한 전자 프로젝트를 상대적으로 쉽게 구현하도록 설계됐으며, 디지털 및 아날로그 신호를 읽고 제어할 수 있다.

2005년 이탈리아 Ivrea 소재 인터랙션 디자인 학교에서 학생용 저비용 마이크로컨트롤러로 처음 개발됐다. 하드웨어와 소프트웨어가 모두 오픈소스로 제공되므로 수정, 개선, 확장이 가능하다는 점도 생태계의 기반이 됐다.

프로젝트 규모에 맞춰 고르는 보드

가장 널리 쓰이는 기본 모델은 아두이노 우노(Arduino UNO)다. ATmega328P 마이크로컨트롤러를 사용하며, 디지털 핀은 PWM 6개를 포함해 14개, 아날로그 입력 핀은 6개다. 16MHz 클럭 속도와 32KB 플래시 메모리를 갖는다.

더 많은 입출력이 필요한 경우에는 아두이노 메가(Arduino MEGA)를 선택할 수 있다. ATmega2560을 사용하고, PWM 15개를 포함한 디지털 핀 54개와 아날로그 입력 핀 16개를 제공한다. 플래시 메모리는 256KB다.

공간이 제한된 곳에는 아두이노 나노(Arduino Nano)가 적합하다. 우노와 유사한 기능을 더 작은 폼팩터에 담은 보드다. 아두이노 프로 미니(Arduino Pro Mini)는 배터리 구동 프로젝트를 위한 초소형 보드이며, USB 연결이 내장되지 않아 별도 프로그래머가 필요하다. 고성능 애플리케이션에는 32비트 ARM 코어 마이크로컨트롤러와 84MHz 클럭 속도를 사용하는 아두이노 Due를 고려할 수 있다.

IDE에서 스케치를 작성하고 보드에 올리는 과정

아두이노 IDE는 코드 작성, 컴파일, 업로드 과정을 하나의 환경으로 묶는다. C/C++ 기반 언어로 스케치(Sketch)를 작성하며, 라이브러리 관리자를 통해 필요한 기능을 추가할 수 있다. 시리얼 모니터는 디버깅에 사용되고, Windows·macOS·Linux를 지원한다. 최신 버전에서는 Arduino Web Editor도 제공한다.

스케치는 초기화와 반복 실행을 각각 setup()loop()에 배치하는 구조를 사용한다.

void setup() {
  // 초기화 코드: 프로그램 시작 시 한 번만 실행
  pinMode(13, OUTPUT);  // 13번 핀을 출력 모드로 설정
}

void loop() {
  // 메인 코드: 반복적으로 실행
  digitalWrite(13, HIGH);  // LED 켜기
  delay(1000);             // 1초 대기
  digitalWrite(13, LOW);   // LED 끄기
  delay(1000);             // 1초 대기
}

setup()은 보드가 시작될 때 한 번 실행되는 초기화 함수이고, loop()는 그 뒤에 무한 반복되는 메인 함수다.

입출력과 통신으로 외부 장치를 연결한다

디지털 입출력은 pinMode(), digitalRead(), digitalWrite()로 다룬다. 센서 데이터를 읽거나 LED와 릴레이를 제어할 때 사용한다.

아날로그 신호는 analogRead()로 0-1023 값으로 읽을 수 있다. analogWrite()는 PWM으로 아날로그 출력을 시뮬레이션하며 0-255 값을 사용한다.

외부 장치와의 통신에는 시리얼(UART)의 Serial 객체, I2C(TWI)의 Wire 라이브러리, SPI의 SPI 라이브러리를 활용한다. 실시간 이벤트를 감지하고 처리해야 할 때는 attachInterrupt()detachInterrupt()를 이용해 인터럽트를 다룬다.

쉴드로 기능을 빠르게 확장하는 방식

쉴드는 아두이노 보드 위에 장착하는 모듈형 확장 보드다. 표준화된 핀 배치를 바탕으로 복잡한 회로 구성 없이 플러그 앤 플레이 방식의 기능 확장을 제공한다.

이더넷 쉴드는 네트워크 연결을, 모터 쉴드는 DC 및 스테퍼 모터 제어를 담당한다. SD 카드 쉴드는 데이터를 저장하고, 디스플레이 쉴드는 LCD·OLED 같은 시각적 출력을 추가한다. WiFi와 모터 제어, LCD 디스플레이 같은 기능도 쉴드로 더할 수 있다.

교육부터 IoT 프로토타이핑까지

아두이노는 STEM 교육에서 프로그래밍과 전자공학 기초를 익히는 도구로 쓰인다. 제품 아이디어를 빠르게 검증하는 프로토타이핑에도 활용되며, 스타트업과 제품 개발자의 MVP 개발에 연결된다.

IoT 기기에서는 WiFi, 블루투스, 이더넷 쉴드로 연결성을 구현하고, 센서 데이터 수집 및 클라우드 연동 시스템을 만들 수 있다. 로보틱스에서는 서보모터와 스테퍼 모터를 제어하는 기본 로봇 시스템에, 홈 오토메이션에서는 스마트홈 기기와 환경 모니터링·자동화 시스템에 적용된다.

이런 활용을 뒷받침하는 것은 사용자 커뮤니티와 오픈소스 라이브러리, 예제 코드다. 서드파티 호환 보드와 액세서리, 온라인 포럼과 교육 자료, Maker Faire 같은 창작자 행사도 생태계를 넓혀 왔다.

스케치가 하드웨어 동작으로 이어지는 구조

사용자 코드 - 스케치아두이노 IDE컴파일러업로더아두이노 보드마이크로컨트롤러디지털 I/O아날로그 I/O통신 인터페이스센서/액추에이터센서/액추에이터외부 장치쉴드확장 기능

사용자 스케치는 IDE에서 컴파일된 뒤 업로더를 통해 보드로 전달된다. 보드의 마이크로컨트롤러는 디지털 I/O, 아날로그 I/O, 통신 인터페이스를 통해 센서·액추에이터와 외부 장치를 제어하며, 쉴드는 이 경로에 확장 기능을 더한다.

온습도 모니터링 시스템 예시

아두이노 우노, DHT22 온습도 센서, I2C LCD 디스플레이, ESP8266 WiFi 모듈을 조합하면 온습도 모니터링 시스템을 구성할 수 있다. 아래 스케치는 센서 값을 LCD에 표시하고 MQTT로 전송하는 흐름을 담고 있다.

#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define DHTPIN 2       // DHT22 센서 연결 핀
#define DHTTYPE DHT22  // DHT 센서 타입

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);  // I2C 주소 0x27, 16x2 LCD

const char* ssid = "WiFi_SSID";
const char* password = "WiFi_PASSWORD";
const char* mqtt_server = "mqtt.example.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(9600);
  dht.begin();
  lcd.init();
  lcd.backlight();

  // WiFi 연결
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // MQTT 서버 설정
  client.setServer(mqtt_server, 1883);
}

void loop() {
  // MQTT 연결 확인
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // 센서 데이터 읽기
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // 데이터 유효성 검증
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // LCD에 데이터 표시
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);
  lcd.print("%");

  // MQTT로 데이터 전송
  String payload = "{\"temp\":" + String(temperature) + ",\"humidity\":" + String(humidity) + "}";
  client.publish("home/livingroom/climate", payload.c_str());

  delay(10000);  // 10초마다 측정
}

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ArduinoClient")) {
      Serial.println("MQTT connected");
    } else {
      Serial.print("MQTT connection failed, rc=");
      Serial.print(client.state());
      Serial.println(" trying again in 5 seconds");
      delay(5000);
    }
  }
}

요구 조건이 달라질 때 검토할 대안

아두이노는 비교적 낮은 처리 속도와 제한된 메모리를 갖기 때문에 고성능 작업에는 부적합할 수 있다. 배터리 기반 장기 운용 프로젝트에 최적화되지 않았고 저전력 모드 지원도 제한적이다. 내구성과 신뢰성이 산업 표준에 미치지 못하며, 극한 환경에서의 사용에도 제약이 있다.

완전한 운영체제와 더 높은 연산 능력이 필요하다면 라즈베리 파이를 검토할 수 있다. WiFi 내장 및 강화된 저전력 기능이 필요하면 ESP32/ESP8266, 고성능 32비트 ARM Cortex-M 마이크로컨트롤러가 필요하면 STM32가 대안이다. Teensy는 고성능 USB 기반 마이크로컨트롤러 보드이며, Particle Photon은 클라우드 연결에 최적화된 IoT 개발 보드다.

아두이노는 전자공학 지식의 장벽을 낮춰 하드웨어 프로토타이핑을 가능하게 했고, 교육용 도구에서 상업용 제품 개발까지 활용 범위를 넓혔다. 오픈소스 철학을 하드웨어 영역으로 확장한 사례이기도 하다. 향후 클라우드 통합과 머신러닝 같은 기술 트렌드를 수용하며 계속 진화할 것으로 예상된다.

아두이노임베디드 시스템마이크로컨트롤러오픈소스 하드웨어IoT