아두이노
더 많은 작업
아두이노(Arduino)는 마이크로컨트롤러 보드와 통합 개발 환경(IDE), 라이브러리를 회로도까지 공개한 오픈 소스 하드웨어 플랫폼으로, 전자공학 지식이 많지 않은 사람도 센서와 액추에이터를 연결해 간단한 프로그램으로 제어할 수 있게 만든 것이다.
아두이노는 2005년 이탈리아 이브레아 인터랙션 디자인 연구소(IDII)에서 마시모 반지(Massimo Banzi) 등이 디자인 전공 학생들의 작품 제작용으로 만들었다. 당시 쓰이던 마이크로컨트롤러 개발 보드는 비싸고 다루기 어려웠는데, 아두이노는 값싼 보드와 쉬운 개발 환경을 묶어 누구나 하드웨어를 만들 수 있게 했다. 회로도와 PCB 설계 파일을 크리에이티브 커먼즈 라이선스로, 소프트웨어를 LGPL·GPL로 공개했기 때문에 호환 보드와 확장 모듈이 대량으로 나왔고, 메이커 운동과 교육, 사물인터넷 시제품 제작의 대표 도구가 되었다.
아두이노는 운영체제 없이 프로그램 하나를 계속 반복 실행하는 마이크로컨트롤러 보드라는 점에서, 리눅스가 도는 싱글 보드 컴퓨터인 라즈베리 파이와 성격이 다르다.
| 구성 요소 | 설명 |
|---|---|
| 보드 | 마이크로컨트롤러, 클럭, 전원 회로, USB 인터페이스, 입출력 핀을 갖춘 기판. 대표 모델인 우노(Uno)는 ATmega328P(8비트 AVR, 16MHz, 플래시 32KB, SRAM 2KB)를 쓴다 |
| 입출력 핀 | 우노 기준 디지털 입출력 14개(그중 6개는 PWM 출력), 아날로그 입력 6개(10비트 ADC). UART·I2C·SPI 통신 지원 |
| 부트로더 | 마이크로컨트롤러에 미리 들어 있어, 별도 프로그래머 장비 없이 USB로 프로그램을 올릴 수 있게 한다 |
| 아두이노 IDE | 코드 작성·컴파일·업로드·시리얼 모니터를 제공하는 개발 환경. 윈도우·macOS·리눅스에서 돈다 |
| 프로그래밍 언어 | C/C++ 기반. 하드웨어 제어 함수를 단순화한 Wiring 라이브러리를 기본 제공한다 |
| 라이브러리 | 센서·모터·디스플레이·통신 모듈을 다루는 공식·커뮤니티 라이브러리 |
| 쉴드(Shield) | 보드 위에 겹쳐 꽂는 확장 기판. 이더넷, WiFi, 모터 드라이버, LCD 등 |
아두이노 프로그램(스케치)은 두 함수로 이루어진다.
void setup() { // 전원이 들어오거나 리셋될 때 한 번 실행
pinMode(13, OUTPUT);
}
void loop() { // 이후 전원이 꺼질 때까지 무한 반복
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
운영체제와 멀티태스킹이 없으므로 loop() 안에서 센서를 읽고 출력을 내는 일을 순서대로 처리한다. 대신 부팅 시간이 거의 없고, 핀을 직접 제어하므로 타이밍이 예측 가능하다.
| 보드 | 특징 |
|---|---|
| 우노(Uno) | 가장 기본적인 입문용 보드. ATmega328P |
| 메가 2560 | 입출력 핀 54개, 메모리가 커서 핀이 많이 필요한 작업용 |
| 나노(Nano) | 우노와 같은 칩을 작은 기판에 얹은 것. 브레드보드에 꽂아 쓴다 |
| 레오나르도 | USB 기능이 내장된 ATmega32U4로 키보드·마우스를 흉내 낼 수 있다 |
| 32비트 계열 | Due(ARM Cortex-M3), Uno R4, Nano 33 시리즈 등 ARM 기반 고성능 보드와 WiFi·블루투스 내장 보드 |
아두이노 IDE는 ESP32 같은 다른 회사 칩도 지원하므로, 개발 환경으로서의 아두이노는 보드보다 넓게 쓰인다.
- 저렴하다 : 정품 보드도 수만 원이고 호환 보드는 더 싸다.
- 쉽다 : 설치가 간단한 IDE, 단순한 함수(
digitalWrite,analogRead), 방대한 예제로 입문 장벽이 낮다. - 오픈 소스 : 회로와 소스가 공개되어 있어 직접 개조하거나 제품에 맞게 다시 설계할 수 있다.
- 크로스 플랫폼 : 윈도우·macOS·리눅스에서 모두 개발할 수 있다.
- 커뮤니티와 라이브러리 : 거의 모든 센서·모듈의 라이브러리와 예제가 있다.
- 하드웨어 직접 제어 : 운영체제가 없어 입출력 타이밍이 정확하고 실시간 제어에 유리하다.
- 저전력·즉시 시작 : 전원을 넣으면 바로 프로그램이 돈다. 배터리로 오래 쓸 수 있다.
- 확장성 : 쉴드와 모듈을 꽂아 기능을 쉽게 늘린다.
- 처리 성능과 메모리가 작아 영상 처리, 복잡한 네트워킹, 데이터베이스 같은 일에는 맞지 않는다.
- 운영체제가 없어 여러 작업을 동시에 하려면 직접 상태 기계나 타이머 인터럽트로 짜야 한다.
- 기본 보드에는 네트워크 기능이 없어 쉴드나 통신 모듈이 필요하다.
- 상용 양산 제품에는 보드 그대로보다 칩만 써서 다시 설계하는 경우가 많다.
| 구분 | 아두이노 | 라즈베리 파이 |
|---|---|---|
| 분류 | 마이크로컨트롤러 보드 | 싱글 보드 컴퓨터 |
| 프로세서 | 8비트 AVR·32비트 ARM Cortex-M, 수십 MHz | 64비트 ARM Cortex-A, 1GHz 이상 |
| 메모리 | SRAM 수 KB, 플래시 수십 KB | RAM 수 GB, microSD 저장장치 |
| 운영체제 | 없음(펌웨어 하나가 반복 실행) | 리눅스(라즈베리 파이 OS 등) |
| 개발 언어 | C/C++(아두이노 IDE) | 파이썬, C, 자바 등 리눅스에서 도는 대부분의 언어 |
| 입출력 | 아날로그 입력(ADC) 내장, 정밀한 실시간 제어 | 디지털 GPIO 중심, 아날로그 입력은 외부 ADC 필요 |
| 네트워크 | 기본 없음(쉴드·모듈 추가) | 이더넷·WiFi·블루투스 내장(모델에 따라) |
| 전력 | 수십 mA 수준, 배터리 구동에 유리 | 수백 mA~수 A |
| 부팅 | 전원 인가 즉시 실행 | 운영체제 부팅에 수십 초 |
| 적합한 용도 | 센서 측정, 모터·LED 제어, 단순 반복 제어 | 영상 처리, 서버, 네트워크 게이트웨이, 교육용 컴퓨터 |
두 보드는 경쟁 관계라기보다 함께 쓰는 경우가 많다. 아두이노가 센서와 모터를 실시간으로 다루고, 라즈베리 파이가 그 데이터를 받아 네트워크로 보내거나 분석하는 식이다.