Notice
Recent Posts
Recent Comments
Today
Total
05-04 00:14
Archives
관리 메뉴

Jeongchul Kim

사물인터넷과 개방형 하드웨어 - 아두이노 본문

사물인터넷

사물인터넷과 개방형 하드웨어 - 아두이노

김 정출 2016. 2. 10. 22:45



사물인터넷과 개방형 하드웨어 - 아두이노



아두이노의 소개

1. 아두이노란?

아두이노의 소개

아두이노에 대해 살펴보도록 하겠습니다. 아두이노란, 오픈소스를 기반으로 한 단일 보드 마이크로 콘트롤러를 말합니다. 이탈리아에서 만든 아트멜 AVR을 기반으로 한 하드웨어 보드와 소프트웨어 개발을 위한 통합 환경(IDE)이 있습니다. 아두이노는 다수의 스위치나 센서로부터 값을 받아들여, LED나 모터와 같은 외부 전자 장치들을 통제함으로써 환경과 상호작용이 가능한 물건을 만들어낼 수 있습니다.


2. 특징

아두이노의 특징을 알아보도록 하겠습니다. 첫째, 아두이노는 쉽고 편리한 개발 환경을 제공합니다. 통합 개발 환경  소프트웨어를 지원하며, 다양한 기본 예제를 제공하고 있습니다. 또한, 컴파일된 프로그램을 USB로 쉽게 업로드할 수 있다는 장점을 지닙니다.

둘째, 다양한 확장성이 있습니다. 다양한 통신방식을 지원하고, 기존의 센서들과 모듈들을 대부분 사용하는

것이 가능하며, 호환되는 확장 쉴드와 드라이버들이 많이 생산되고 있습니다. 셋째, 오픈 소스라는 특징이 있습니다. 하드웨어 구조와 다양한 예제들이 공개되어 있어 누구나 수정 및 사용이 가능합니다. 그래서 전자 장난감, DIY, LED 조명, 3D 프린터 등 다양한 사용법을 개발, 공유되고 빠른 속도로 발전하고 있습니다. 마지막으로 저렴한 시작비용을 들 수 있습니다. 기존의 보드들에 비해 훨씬 저렴한 가격에 구매할 수 있기 때문에 임베디드 컴퓨팅의 경험이 없는 사람들도 큰 부담 없이 시작할 수

있고, 테스트 보드로서도 많이 사용됩니다.


3. 구성과 회로도

아두이노의 보드는 어떻게 구성되어 있을까요? 아두이노 우노의 기본적인 구성은 그림과 같이 USB 커넥터, 전원 커넥터, 디지털 핀, 아날로그 핀, 전원 핀, 리셋 스위치, CPU로 이루어져 있습니다. 각 항목에 대한 정격값은 표를 통해 확인할 수 있습니다.

아두이노 나노 역시 아두이노 우노와 마찬가지로, ATmega328 마이크로 콘트롤러와 USB 커넥터, 그리고 여러 가지를연결할 수 있는 핀으로 구성되어 있습니다. FTDI사의 FT232RL USB와 직렬통신(RS232) 칩을 이용하여 USB 커넥터를 구성하고PC와 연결하는 통로를 만듭니다.



다양한 방식으로 전원을 공급할 수 있는데, 핀 27을 통하여 자체적으로 5V의 전원을 공급 받을 수 있으며, 핀 30을 통하여 6-20V의 외부 전원을 공급받거나 USB를 통해서도 전원을 공급받을 수 있습니다.


Reset 핀의Active low의 의미는 0V에서 Reset이 동작한다는 의미입니다. 그 밖에 대부분의 핀은 디지털 입출력과 아날로그 입출력에 사용됩니다. 보드를 구성하는 핀과 커넥터에 대한 설명은 회로도에 자세히 설명되고 있으며, 아두이노 측에서는 오픈 소스로이를 공개하고 있어, 이를 응용하여 같은 제품을 만들어 낼 수 있습니다.



ATmega328은 아트멜 사에서 제작한 마이크로 콘트롤러로 아두이노 보드의 핵심 부품이라 할 수 있습니다. 8비트 CPU와 32KB의 플래시메모리가 포함되었고, 20MHz 정도의

속도로 동작합니다. 여기에 각종 입출력 핀들이 포함되어 있어 전원이나 클럭 같은 간단한 주변 회로만으로도 동작하게 됩니다.


ATmega328의 구성은 그림과 같습니다. 그림을 보면 1KB의 SRAM, 512B의 EEPROM 메모리가 있는데, 프로그램을 만들 때 read(), write() 함수를 이용하여 이런 메모리에 접근할 수 있습니다.


메모리에 접근했던 것과 마찬가지로, pinMode(), digitalWrite(),digitalRead()의 함수를 이용하여 입출력 핀을 제어할 수 있습니다. 입출력은 직렬통신 serial 0(RX), serial 1(Tx)가 있는데, 아두이노 나노에서는 이것이 FTDI의 USB 직렬통신 칩에 연결되어 PC와 통신하게 됩니다. 일반적으로 입출력 핀은 5V에서 동작하고 최대 40mA를 받거나 제공합니다. 또한, 내부에 2-50 kOhms의 풀업 저항이 있어서 아무것도 연결 안 된 경우 기정치를 가지게 합니다.





오늘의 핫 이슈! 오늘의 핫 이슈는 아두이노 하드웨어의 종류입니다. 아두이노는 프로젝트에 따라 용도를 달리할 수 있도록 다양한 모델이 존재하는데, 지금부터 하나씩 살펴보도록 하겠습니다. 먼저, 아두이노 우노는 아두이노의 기본형으로 신용카드 정도의 크기를 지닙니다. 기본적으로 14개의 디지털 입력 포트와 6개의 아날로그 입력 포트를 탑재하고 있지만, 아날로그 포트를 통해서도 디지털 입, 출력이 가능합니다.


아두이노 레오나르도는 크기, 포트 숫자 면에서 아두이노 우노와 거의

유사합니다. 다른 점은, 아두이노 우노는 USB 통신용 칩이 따로 붙어있어 총 두 개의 칩이 있는데, 아두이노 레오나르도는 하나의 칩으로 통합하여 사용됩니다. 또 다른 특징으로는 컴퓨터에 연결하면 컴퓨터가 주변 입력장치(HID)로 인식하여, 키보드나, 마우스, 조이스틱과 같이 취급합니다. 즉, 키보드 대용으로 추가적인 키패드를 만들거나 특정 매크로를 실행하는 디바이스 제작에 활용될 수 있습니다.


아두이노 메가는 디지털 포트 54개, 아날로그 포트 16개, 시리얼 통신 포트 4개를 탑재하고 있으며,

강력한 성능을 자랑합니다. 아두이노 마이크로는 아두이노 레오나르도의 미니 버전으로 크기가 작아지면서 기판에서 생략된 부분이 있습니다. 아두이노 나노는 아두이노 우노의 미니 버전이며, 아두이노 프로 미니는 가장 작은 크기의 아두이노입니다. 초소형인 만큼 USB 통신 칩이 없고 실드 류의 장착이 힘들다는 단점이 있습니다. 아두이노 프로 역시 USB 통신 칩이 없는데, 크기는 훨씬 크며, 외장 배터리로 사용할 수 있도록 배터리용 커넥터가 달려있습니다.

아두이노 이더넷은 이름 그대로 이더넷에 연결 가능한 칩셋이 설치되어 있습니다. 보통 마이크로 콘트롤러를 이용하여 인터넷에 접속하는 것은 어렵지만, 아두이노

이더넷은 쉽게 인터넷에서 데이터를 받아 올 수 있습니다. 다음 사진은 아두이노 윤입니다. 와이파이 모듈이 붙어 있으며,리눅스가 깔려있어 내부에 프로그램을 설치할 수도 있습니다. 아두이노 피오는 배터리 충전 모듈이 내장되어 있으며 Funnell

입출력을 지원하기 때문에, 루비, 파이선 등의 프로그래밍 언어를 사용하여 무선 제어가 가능하다는 장점이 있습니다.

이 독특하게 생긴 것은 아두이노 릴리 패드입니다. 의류용으로 생산되어 전도성 실을 연결해 꿰맬 수 있도록 디자인되어

있습니다. 아두이노 에스플로라는 보드에 다양한 센서가 달려있는 것이 특징입니다. RGB LED, 스피커, 마이크, 광센서, 온도센서, 3축 가속도 센서, 디스플레이용 드라이버, 버튼 4개, 버튼이 한 개 포함된 조이스틱이 달려 있어 게임용 패드로 활용하기에 편리합니다.





아두이노의 활용

1. 통합 개발 환경

아두이노의 활용

아두이노 통합 개발 환경(IDE)은 자바로 작성되어 있고, Processing이나 Avr-gcc 등을 기반으로 작성된 오픈소스 소프트웨어 입니다. 아두이노 홈페이지(http://arduino.cc/ )에서 각 OS에 알맞은 버전을 다운로드하여 설치할 수 있습니다. 팁 버튼을 클릭하여 아두이노 통합개발 환경을 설치해 보세요.


아두이노 통합 개발 환경(IDE)을 설치하면 그림과 같은 화면을 볼 수 있습니다. 메뉴의 사용법을 보면, 가장 왼쪽에는 컴파일 버튼이 있습니다. 컴파일이란, 프로그램된 내용을 마이크로 컨트롤러가 인식할 수 있는 기계언어로전환하는 것을 뜻합니다. 오른쪽 화살표 버튼은 아두이노 보드로 프로그램을 업로드합니다. 나머지 버튼은 차례로 새로운 파일 만들기, 문서 열기, 문서 저장하기를 의미합니다.


2. 스위치 연결하기

아두이노에 스위치를 연결해 보도록 하겠습니다. 빨간선은 5V 전원이고, 검정선은 접지입니다. 접지는 전기 회로의 전원선 가운데 모든 다른 전위의 기준이 되는 전위를 말합니다. 그리고 파란 선은 2번 핀과 스위치를 연결하여 소프트웨어가 스위치의 상태를 알 수 있도록 해 줍니다.


이것을 회로도로 나타내면 그림과 같습니다. 프로그램 코드는 다음과 같이 짤 수 있습니다.

핀 2를 통해 디지털 입력을 읽어 들여, 시리얼 모니터에 결과를 출력하는 것입니다. void setup은 초기화 내용이 설정됩니다. 초당 9600 비트에서 시리얼 통신을 초기화하는 것을 확인할 수 있습니다. void loop에는 계속 반복되면서 실행될 내용이 들어갑니다.


3. LED 제어하기

아두이노로 LED 제어하기를 실습해 보도록 하겠습니다. 아두이노는 보드 자체에 LED를 하나 가지고 있어 아두이노 통합 개발 환경에서 제어를 할 수 있는데, LED옆에 L이라고 표시가 되어 있어 흔히 L LED라고 부릅니다.

아두이노에 USB케이블을 연결하여 전원을 공급하면 아두이노의 LED가 이미 깜빡이는 것을 볼 수 있습니다. 이것은 보통 아두이노를 생산할 때 미리 Blink 파일을 인스톨하였기 때문에 그렇습니다. 여기서는 Blink 예제에서 LED가 깜빡이는 속도 등을 조절하여 아두이노를 재 프로그래밍 하여보도록 하겠습니다.


올바른 시리얼 포트를 찾아 아두이노를 컴퓨터와 통신 가능한 상태로 만듭니다.

아두이노 통합 개발 환경을 실행하고 Blink 파일을 불러옵니다. File Examples 0.1 Basics 메뉴를 차례로 클릭하면 Blink 파일을 찾을 수 있습니다. 아두이노 통합 개발 환경에 포함된 예제 파일들은 읽기만 가능하기 때문에, 수정을 하려면 다른 파일 형태로 저장을 하여 주어야 합니다. Save As 옵션을 선택하여 'MyBlink'라는 이름으로 저장합니다.


저장을 하게 되면 sketchbook에서 MyBlink를 확인할 수 있습니다. 그다음 아두이노 보드를 USB 케이블을 이용하여 컴퓨터에 연결하고, BoardType과 Serial Port가 올바르게 설정되어 있는지 확인합니다. 아두이노 통합 개발 환경의 하단을 보면 현재 세팅되어 있는 환경이나타납니다. 확인이 되었으면, 업로드 버튼을 클릭합니다.


아두이노 통합 개발 환경의 하단의 상태영역을 보면, 프로그레스 바와메세지가 나타나는 것을 볼 수 있습니다. 컴파일이 성공적으로 끝나면 업로딩 완료 메시지가 뜹니다. 업로드가 끝나면 리셋되고

LED가 깜박입니다. 하지만 업로드에 문제가 생겼을 때는 오른쪽 그림과 같은 메시지가 뜹니다. 이때에는 아두이노 보드가 컴퓨터와 잘 연결되었는지, 드라이버가 제대로 설치되었는지, 올바른 시리얼 포트를 선택했는지 확인해 볼 필요가 있습니다.

이제 Blink 파일의 내용을 수정해보도록 하겠습니다. Blink 파일은 화면과 같은 내용을 담고 있습니다. 첫 줄에서는 led라는 변수를 선언하여 이름을 부여하고, led가 붙어 있는 13핀을 의미하는 숫자 13이 할당되었습니다. 다음으로는 setup 함수가 나와

있는데 이 함수는 아두이노가 리셋되고 한 번만 실행이 되는 함수입니다. 그렇기 때문에 대부분 초기화 관련 루틴을 넣어 사용합니다. Setup 함수가 리셋 후 한 번만 실행되는 것과는 달리 loop함수는 계속 반복 됩니다. 이 loop 함수 안에는 LED핀을 끄고 켜는 명령을 담고 있습니다. HIGH는 1초 동안 딜레이 후 LED핀을 끄는 명령을 담고 있으며, LOW를 보면, 끈 후에도 역시1초 동안 딜레이를 주는 명령으로 작성되어 있습니다. LED가 깜박거리는 속도를 변경하고 싶다면, 이 delay 옆의 숫자를 변경하면 되는데, 예를 들어, 1000에서 500으로 변경하면 두 배만큼 빠르게 깜박이는 것을 볼 수 있습니다.


아두이노는 어떻게 활용되고 있을까요? 아두이노의 다양한 확장사례를 살펴보도록 하겠습니다. ArLCD는 3.5인치 터치스크린디스플레이와 아두이노를 결합한 것입니다. 그 결과 온도와 습도의 상태를 디스플레이를 통해 시각적으로 확인할 수 있으며, 화면 밝기나 센서 제어를 터치 스크린의 버튼을 이용하여 조절할 수 있습니다.

Primo는 아두이노를 이용한 3~7세용

장난감입니다. 작은 자동차, 이동방향을 나타내는 블록과 판으로 이루어져 있습니다. 조작판에 이동방향을 지시하는 블록을 끼운 뒤 빨간 버튼을 누르면 자동차는 지정된 방향으로 움직입니다. Primo는 오픈 소스 활용의 훌륭한 예를 보여주고 있습니다.


littleBits은 복잡한 하드웨어를 매우 간단하게 다룰 수 있게 해주는 확장 라이브러리와 하드웨어를 제공합니다. 이러한 키트를이용하면 생활 속의 다양한 부분에서 응용할 수 있는 장치를 만들 수 있습니다. 예를 들어, 모터에 스푼을 연결하여 음료를 자동으로 저어주는 사물을 만들 수도 있고, 작은 로봇 팔을 동작하게 할 수도 있습니다. 또한, 화장실에 가 보지 않아도 화장실이비었는지 확인할 수 있으며, 정교한 로봇 손도 만들어 낼 수 있습니다.


Bare Conductive 역시 각종 하드웨어 키트와 응용

방법을 제공하고 있습니다. 독특한 점은 전기 페인트라고 부르는 마커를 이용하는데, 종이에 마커를 이용해 선을 그리면, 전선 없이도 전기가 통하게 됩니다. 홈페이지에서는 다양한 키트와 함께 상세한 사용법을 제공하고 있습니다.



Comments