검수요청.png검수요청.png

아두이노

위키원
Asadal (토론 | 기여)님의 2019년 9월 10일 (화) 12:11 판 (같이 보기)
이동: 둘러보기, 검색
아두이노(Arduino) 로고
아두이노(Arduino) 로고와 글자

아두이노(Arduino)란 사물인터넷(IoT) 기기를 만들기 위하여 사용하는 오픈소스 기반의 컴퓨팅 플랫폼을 말한다. C, C++ 등 다양한 언어를 사용하여 원하는 동작을 하도록 코딩을 한 후 기계어컴파일하여 마이크로컨트롤러(microcontroller) 보드에 업로드하면, 아두이노가 작동한다. 아두이노는 가격이 저렴하고 리눅스(Linux), 윈도우(Windows), 아이오에스(iOS) 등 여러 운영체제에서 작동하며, 오픈소스 기반이라는 장점이 있다.

개요

아두이노(Arduino)는 오픈소스를 기반으로 한 단일 보드 마이크로컨트롤러(Microcontroller)로 완성된 보드와 관련 개발 도구 및 환경을 말한다. 2005년 이탈리아의 IDII(Interaction Design Institutelvera) 에서 하드웨어에 익숙지 않은 학생들이 자신들의 디자인 작품을 손쉽게 제어할 수 있게 하려고 고안된 아두이노는 처음에 AVR을 기반으로 만들어졌다. 아두이노는 통합 개발 환경 IDE를 제공하며, 소프트웨어 개발과 실행코드 업로드도 제공한다. 또한 어도비 플래시(Adobe Flash), 프로세싱(Processing) 과 같은 소프트웨어와 연동할 수 있다.

아두이노는 다양한 스위치나 센서로부터 입력 값을 받아들여 LED나 모터와 같은 전자 장치들로 출력을 제어함으로써 환경과 상호작용이 가능한 물건을 만들어 낼 수 있다. 예를 들어 단순한 로봇, 온습도계, 동작 감지기, 음악 및 사운드 장치, 스마트 홈 구현, 유아 장난감 및 로봇 교육 프로그램들의 다양한 제품들이 아두이노를 기반으로 개발 가능하다. 또한 아두이노는 회로가 오픈소스로 공개되어 있어 누구나 직접 보드를 만들고 수정할 수 있다.

이런 아두이노가 인기를 끌면서 이를 비즈니스에 활용하는 기업들이 있다. 장난감 회사 레고는 자사의 로봇 장난감과 아두이노를 활용한 로봇 교육 프로그램을 북미 지역에서 운영하고 있으며, 자동차회사 포드는 아두이노를 이용해 차량용 하드웨어와 소프트웨어를 만들어 차량과 상호작용을 할 수 있는 오픈XC라는 프로그램을 선보이기도 했다.[1]

역사

  • 2005년, 이탈리아 Ivrea 에서 초기 프로젝트가 만들어졌다.
  • 2008년 10월, 아두이노 Duemilanove가 출시되었다.
  • 2009년 3월, 아두이노 메가(Mega)가 출시되었다.
  • 2012년 7월, 아두이노 레오나르도(Leonardo)가 출시되었다.
  • 2011년 3월, 전 세계적으로 30만 개 이상의 아두이노 유닛을 사용할 수 있다.
  • 2014년 5월, 아두이노 우노의 후속으로 아두이노 제로(Zero)가 발표되었다.
  • 2019년 현재 최신 보드는 아두이노 101로 인텔과 협작으로 나온 보드다. 인텔 Curie 칩을 사용하고, BLE와 가속도계, 자이로스코프가 보드에 기본 낸장 된다. 또 작동 전압이 3.3V이지만, 5V를 인가해도 핀이 손상되지 않는다.

특징

오픈 하드웨어

  • 오픈 하드웨어오픈 소스로 개발 및 사용이 편리하다.
  • 아두이노 보드의 회로 설계도가 모든 공개되어 있는 오픈 하드웨어이다.
  • 누구나 직접 보드를 만들고 수정할 수 있다.
  • 하드웨어 구조와 다양한 예제들이 함께 공개되어 있어 누구나 수정 및 사용이 가능하다.
  • 장난감, DIY, LED, 3D 프린터 등 다양한 사용법을 개발, 공유되고 빠른 속도로 발전하고 있다.

오픈 소스

  • 통합 개발환경 소프트웨어를 지원하며, 다양한 기본 예제를 제공하고 있다.
  • 컴파일된 프로그램을 USB로 쉽게 업로드 할 수 있다.

확장성

  • 다양한 통신방식을 지원하며, 기존의 센서들과 모듈들을 대부분 사용하는 것이 가능하다.
  • 호환되는 확장 쉴드와 드라이버들이 많이 생산되고 있다.

동작

  • AVR프로그래밍은 WinAVR로 컴파일하여, ISP 장치를 통해 업로드를 해야하는 과정을 거쳐야 하지만 아두이노는 컴파일된 펌웨어를 USB를 통하여 바로 업로드 가능하다.

저렴한 가격

  • 비슷한 다른 하드웨어에 비해 비교적 저렴하다. 때문에 임베디드 컴퓨팅의 경험이 없는 사람들도 큰 부담이 없이 시작 가능 하며, 테스트 보드로서도 많이 사용된다.

다양한 OS지원과 성능의 보드

  • 윈도우(Windows), Mac OS, 리눅스(Linux)등 여러 OS를 모두 지원한다.
  • 오픈된 설계도를 통해 다양한 아두이노 호환 클론 보드들이 존재한다.

종류

아두이노 우노(R3)

가장 보편적으로 사용하는 보드이다. 우노보드는 Duemilanoves 와 같은 프로세서를 사용하지만 USB 통신을 위한 FTDI칩을 기본으로 내장하고 있어 별도의 변환기 없이 PC등에 USB로 연결해서 사용이 가능하다. 5V, 3.3V 모두 지원하기 위해 레귤레이터가 내장되어 있고, USB 전원을 사용 가능하며 외부 입력 전원도 지원한다. 안드로이드 표준 보드로 핀 배열 등이 우노를 기준으로 맞춰져 있으므로 확장 쉴드 등을 사용하는데 최적화 되어있어 처음 아두이노를 접할 때 가장 많이 사용한다.

아두이노 레오나르도(Leonardo)

우노 보드와 생김새가 비슷하지만 성격이 다른 보드로 ATmega32u4 칩을 탑재하고 있다. ATmega32u4 칩은 내부에 USB 통신을 위한 기능을 갖추고 있기 때문에 우노 보드와 같이 별도의 변환기를 필요로 하지 않는다. 우노 보드에서는 PC와 serial로 통신하기 위해 디지털1번(D0), 디지털2번(D1)핀을 사용하는데 이 보드에서는 필요 없어 디지털1번(D0)핀과 디지털2번(D1)핀을 다른 모듈과의 serial 통신에 사용할 수 있다. 별도의 serial 통신용 핀이 더 생겨 고속으로 동작하는 통신 모듈을 함께 사용할 때 유리하다. 그 밖에도 핀의 수가 우노 보다 많고 특수한 기능을 담당하는 핀이 우노와는 전혀 틀리기 때문에 충분한 메뉴얼을 습득하고 사용해야 한다.

아두이노 나노(Nano)

우노보드의 소형화 버전으로 우노보드와 같은 ATmega328 칩을 사용하여 우노의 기능을 그대로 제공하고 mini-B 타입 USB도 내장되어 있다. 우노보드와 같은 칩을 사용하여 사용방법도 동일하고 라이브러리도 그대로 쓸 수 있다. 나노보드는 직접 USB로 업로딩이 가능하며 3.3V, 5V 전원 핀을 가지고 있어 외부 센서의 전압을 맞추기 간편하다. 우노보드와 같이 브레드보드에 직접 꽂아서 사용하면 회로 구성하기도 편리해 작은 우노, 브레드보드용 우노 라고 불린다.

아두이노 마이크로(Micro)

나노보드가 우노보드의 소형화 버전이라면, 마이크로보드는 레오나르도 보드의 소형화 버전이다. 이 보드역시 레오나르도 보드처럼 ATmega32u4칩을 탑재하고 있기 때문에 특징도 레오나르도 보드와 거의 비슷하다. 나노 보드와 비교할 때 핀수가 훨씬 많기 때문에 긴 사각형 형태를 띄고 있으며, 나노보드처럼 브레드보드 친화적인 보드이고 9V 배터리를 통해 휴대용으로 제작이 가능하다.

아두이노 메가(Mega)

우노보드의 확장 버전으로 우노보드의 약 2배 크기이다. 많은 핀을 가지고 있으며 더 빠르고 저장용량도 더 많이 가지고 있어 다른 보드에 비해 훨씬 많은 기기와 통신할 수 있는 고성능 보드이다. 우노보드로 처리하기 힘든 멀티미디어 관련 작업, 로봇이나 이미지, 음성, 영상 등과 같은 복잡한 제어가 필요한 작업에 사용된다.[2]

프로그래밍

아두이노(Arduino)마이크로컨트롤러이므로 원하는 기능을 먼저 설정하고 이에 맞는 프로그래밍을 통해 기능을 구현한다. 사용 언어는 C, C++을 사용하고[컴파일러 및 라이브러리는 AVR-GCC을 사용한다.

AVR-GCC(AVR Libs) 함수에 존재하는 표준함수라이브러리와 아두이노에서 제공하는 함수 등 다양한 함수를 적용 시킬 수 있다. gcc 컴파일러를 기본으로 하지만 일반 범용의 컴퓨터와 다른 부분을 수정하여 만들어진 것이므로 이를 고려해야 한다. 예를 들어 입출력 장치가 아두이노와 범용의 개인용 컴퓨터와 다르다. 따라서 몇몇 함수는 특수한 처리를 해야 하고 어떤 것은 사용이 불가능하다.

아두이노 설치 시 이미 존재하는 함수도 있지만, 그 외의 많은 기능들은 함수가 없는 경우도 있다. 그러나 아두이노의 활발한 사용으로 많은 오픈 소스 함수 들이 존재하므로 검색을 통해 찾아, 파일을 받아 라이브러리 함수를 등록해서 사용할 수 있다.

내장된 함수 사용 시, 마이크로컨트롤러의 모델에 따라 해당 함수나 클래스가 지원되지 않는 경우가 있으므로 우선 사용하는 모델 파악이 필요하다. 아두이노 우노는 시리얼 포트가 아두이노 메가에 비해 적다. 따라서 우노에서는 Serial1,2,3 등이 존재하지 않으므로, 이것을 사용하면 안된다

기본 문법

  • 구분 기호 : {} , ;
  • 주석 : //, /* */
  • define : #define, #include
  • 산술 연산자 : +, -, *, /, %
  • 할당 연산자 : =
  • 비교 연산자 : ==, !=, <, >, <=, >=
  • 부울 연산자 : &&, ||, !
  • 포인터 연산자 : *, &
  • 비트와 쉬프트 연산자 : &, |, ^, , <<, >>
  • 증감 연산자 : ++, --
  • 결합 산술 연산자 : +=, -=, *=, /=, &=, |=
  • 조건 : if, if...else, switch case
  • 반복 : for, while, do... while
  • 분기 및 점프 : break, continue, return, goto

상수

  • HIGH / LOW : 입출력 핀의 상태를 말하며, 디지털 회로의 논리 표현과 같다. LOW(논리 0, 0 V 근처), HIGH(논리 1, 높은 전압, 5 V 또는 3.3 V 논리 게이트 VCC 전압)
  • INPUT / OUTPUT: 입출력의 방향으로 입력과 출력. INPUT (입력), OUTPUT(출력)
  • true / false : 논리의 부울

변수 데이터 유형 및 C++ 클래스

  • void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float, double
  • string, array

디지털 입출력 함수

  • pinMode(pin, mode) - 핀의 입출력을 정의
  • digitalWrite(pin, value) - 디지털 출력 핀에 출력하는 함수
  • int digitalRead(pin) - 디지털 핀의 상태를 읽는 함수

활용

사물인터넷(IoT)

아두이노는 유선, 무선으로 인터넷에 연결 가능하므로, 사물인터넷(IoT) 기기로 사용할 수 있다. 또한 입출력 핀을 통하여 각종 센서 및 릴레이 등의 값을 읽거나 제어가 가능하여 스마트폰 등을 이용하여 어디서나 인터넷이 연결되는 곳에서 집에 있는 각종 기기들의 제어가 가능하다. 밖에서 집에 도착하기 전에 에어컨이나 보일러, 전등 등을 끄고 키거나 집안에 누가 침입한다면 인터넷을 통해 알려주도록 하는 것 등이 가능한 것이다.

로봇, 드론

아두이노는 DC모터, 스텝핑모터, 서보모터의 정밀한 제어가 가능하다. 예를 들어 장애물 감지 센서와 모터를 아두이노와 연결하여 로봇을 만든다면 장애물을 피해가는 로봇을 만들 수 있으며 기울기 센서 등을 이용하여 드론을 만들면 출력을 조절하여 뒤집어지지 않는 드론을 만들어 띄울수도 있다. 로봇이나 드론 은 와이파이, 블루투스 등과 연결하여 RC처럼 원격으로 조종도 가능하다.

농업 분야

아두이노는 농업에도 이용이 된다. 연결된 센서 등을 통하여 농작물에 물을 준다던지 온도, 습도 등에 민감한 식물의 경우 아두이노를 통하여 모니터링 해 생장에 최적의 환경을 만들어 줄 수 있다. 농업도 과학이 기반이 되는 만큼 아두이노를 활용하면 한층 더 과학적인 농업이 가능하다.

그 밖에도 아두이노는 3D프린터, 전기 자전거, 스마트 안경 등 다양한 분야에서 쓰일 수 있다.

문제점

파워출력의 단일화

보드의 파워 입력은 다양하지만, 파워 출력은 5V로 단일화 되어있다. 아두이노 정식 호환 부품이 아닌 경우 대다수는 그대로 사용하지 못하고 승압해야 하는 등 별도의 전자 공학적 지식이 필요해진다.

저사양 장치

아두이노 두에를 제외한 아두이노 보드들은 8비트 마이크로컨트롤러(Microcontroller)를 사용하고 있다. 대부분의 보드들이 16MHZ에서 동작하고 32KB의 프로그램 메모리를 가지고 있다. 이 말은 아주 저 사양의 장치라는 말이다. 그러므로 연산량이 많은 경우나 빠른 연산을 필요로 하는 경우, 고속의 데이터 전송을 요하는 경우는 아두이노가 적합하지 않다.

적은 입출력 포트

우노의 경우 아날로그와 디지털 합쳐서 약 20개 정도의 포트를 가지는데, 이것만 가지고는 LED몇개 켜고 디스플레이를 붙이고 스위치를 하나 추가하면 거의 소모가 되는 정도이다. 그래서 보통 사용 목적에 따른 확장 쉴드를 제공하는데, 목적에 따라 메가 확장 쉴드처럼 입출력의 포트수만 50 - 60개로 늘린 것도 있으며, LAN이나 와이파이(WIFI) 또는 모터쉴드 등 목적에 따라 다양하다. 다만 쉴드를 결합하면 쉴드가 기존의 우노의 포트를 사용하기 때문에 기존의 포트를 사용하지 못하며 전체 크기 또한 배로 커진다.

각주

  1. 아두이노〉, 《위키백과》
  2. 아두이노 종류〉, 《하드카피월드》

참고자료

같이 보기


  검수요청.png검수요청.png 이 아두이노 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.