아두이노

위키책, 위키책

아두이노는 AVR이라는 마이크로 컨트롤러를 기반으로 한 오픈소스 원보드 마이컴이라고 할 수 있다. 원래 이런 시스템을 다루기 위해서는 전문적인 기술이나 지식이 필요하기 마련이지만 이 보드의 특징은 기술 숙련도가 낮은 디자이너 혹은 예술가들을 타겟트로 설계된 것이다. 따라서 비전공자들도 손쉽게 익히고 사용할 수 있다는 큰 장점을 갖는다.

아두이노 응용[+/-]

그러면 이러한 아두이노 보드를 이용하여 어떤 일들을 할 수 있을까. 간단한 몇 가지 예를 들어보면 다음과 같다.


  • 사람이 접근하면 자동으로 조명이 켜지는 장치.
  • 애완 동물에게 정해진 시간에 먹이를 공급하는 장치.
  • 화분의 습도가 낮아지면 자동으로 물을 주라는 트윗을 보내는 장치.
  • 여러개의 LED를 이용하여 귀걸이나 목걸이의 장식으로 이용.
  • 좀 더 전문적인 응용으로 로봇의 제어장치.


위의 예는 단순한 몇 개의 예를 든 것이고 검색을 해보면 정말 많은 응용 제품들이 만들어지고 있으며 일반인 뿐만 아니라 기업에서도 이것을 이용하여 상-용 제품을 출시하며 비즈니스 모델로 이용하고 있는 등 널리 사용되고 있다.

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

개발환경 및 특징[+/-]

대부분의 아두이노 보드들은 AVR 이라는 8비트 마이크로콘트롤러를 기반으로 하고 있으나 최근에는 Cortex-M3를 이용한 제품 - Arduino Due -를 비롯한 여러 하이엔드 제품군이 개발되고 있기는 하다. 또한 소프트웨어 개발을 위한 스케치(sketch)라는 통합 개발 환경(IDE)이 제공되며 이것 또한 오픈소스로 공개되어 있다. C언어 (기본적으로는 C++임) 로 개발 가능하나 관련 라이브러리가 잘 갖추어져 있어서 난이도는 낮은 편이다.

앞에서도 언급했듯이 아두이노의 가장 큰 장점은 전기/전자의 깊은 지식이 없이도 마이크로컨트롤러를 쉽게 동작시킬 수 있다는 점이다. 일반적으로 AVR 프로그래밍이 WinAVR로 컴파일하여, ISP장치를 통해 업로드를 해야하는 등 일반인들에게는 어렵고 번거로운 과정을 거쳐야하는데 비해, 아두이노는 전용 IDE를 이용하여 컴파일된 펌웨어를 USB를 통해 업로드를 쉽게 할 수 있다. 또한 다른 모듈에 비해 비교적 저렴하고, 윈도를 비롯해 맥 OS X, 리눅스와 같은 여러 OS를 모두 지원한다. 아두이노 보드의 회로도가 CCL에 따라 공개되어 있으므로, 누구나 직접 보드를 직접 만들고 수정할 수 있으며 실제로 수많은 유사 (호환)제품이 존재한다.

개발도구[+/-]

아두이노 개발도구는

  • 코딩을 위해 편집기
  • 컴파일러 및 링커
  • 실행 코드의 업로드
  • 기타

로 구성되어 MCU개발에 필요한 기본요소를 가지고 있다.

라이브러리[+/-]

아두이노 특성성 쉽게 개발을 할수 있기 때문에 테스트를 위한 방법으로도 사용한다. 특정 입출력을 제공하는 모듈을 개발한 회사에서는 아두이노를 사용하여 기본적인 사용이 쉽게 라이브러리 형태로 제공하는 경우가 상당히 많다. 인터넷 검색을 통해면 많은 모듈을 위한 코드를 라이러리 형태로 결합하여 사용할 수 있다.

아두이노 개발도구에 내장된 라이브러리[+/-]

AVR 내의 모듈은 정해져 있기 때문에 내부의 모듈은 일반적으로 개발도구에 포함된 라이브러리를 사용하면 된다.

  • 포트
  • 타이머
  • 시리얼통신(Serial)
  • SPI(Wire)

AVR gcc[+/-]

개발도구는 기본적으로 공개된 AVR-gcc를 사용하므로 여기서 제공하는 라이브러리는 거의 모두가 가능하다.


특정 모듈에 따른 함수를 제공하는 라이브러리[+/-]

각각의 모듈에 따라 특정 개인이나 회사에서 제공하는 라이브러리로 구성된다. 따라서 특정 사이트에만 존재하지 않고 인터넷 상에 존재한다. 대표적 사이트는 GitHub 이다.


바깥 고리[+/-]