2016년 11월 27일 일요일

Arduino 2. 아두이노란 무엇인가?




Arduinoboard 뿐만 아니라 module, shield 그리고 종합세트인 kit이 있다. Module board에서 핵심 부분을 모아 더 작게 만든것이고, shieldboard의 부족한 기능(무선통신, 그래픽 등)을 보완하도록 만든 보조 장치다. 따라서 사용자의 목적에 따라 Arduino에 다양한 제품을 선택해 활용할 수 있다(그림 2).  


그림 2. 사용 목적에 따른 Arduino 제품들[1]


이번 실험에 사용할 Arduino Uno board는 초심자용 board 이지만, Arduino의 가장 기본적이고 대표적인 reference board 이다. Arduino 하면 가장 먼저 접하는 boardUno는 이탈리아어로 하나, 첫째라는 뜻이다. 가격은 board 1개에 8000원 정도로 저렴하며(그림 3), Atmel사의 ATmega328P microcontroller를 기반으로 구성되어 있다.



그림 3. Arduino Uno board

ATmega328P microcontroller pin map(그림 4)에서 알 수 있듯이, Arduino Uno boardATmegar328P microcontroller를 사용자가 쉽게 쓸 수 있게 각 pin의 기능을 board에 모으고 외부 장치와 연결을 편하게 해놓은 것이다





그림 4. Arduino Uno board에 핵심인 ATmega328 chip pin map[2]



Arduino Uno board14개의 digital input/output pin, 6개의 analog input pin, 16 MHz quartz crystal, USB 연결부, 외부전원 연결부로 구성되어 있다(그림 5). Arduino Uno board를 사용하기에 앞서 우리가 실제로 쓰는 부분의 역할에 대해 자세히 알아보도록 한다

그림 5. Arduino Uno board의 각 부분에 명칭과 역할[3]

 Board에서 가장 많이 쓰이는 것은 14개의 Digital I/O pin들이며 0 ~ 13번으로 표시되어 있다. Digital pin들 중 우리가 실제로 사용하는 것은 2 ~ 13 번으로, 외부에 digital 신호(0 또는 1의 이진수 신호)를 받거나 보내는데 사용한다. 신호를 받거나(입력) 보내는 것(출력)Arduino와 외부 스위치를 연결했을 때 스위치가 눌렀는지 아닌지를 확인(입력기능) 하거나, ArduinoLED를 연결했을 때 Arduino에서 LED를 켜고 끄는 장치(출력기능)로 사용하는 것을 말한다. 입력기능은 외부 스위치가 열려있는지, 닫혀있는지에 따라 포트로 들어오는 전압값이 0 V 혹은 5 V 인지를 인지하여 입력신호(스위치의 상태)를 알려준다. 출력기능은 Arduino와 연결된 장치에 전압을 주지 않으면(0 V) Low 신호, 즉 장치를 끄는 역할을 하는 것이고 전압을 주면(5 V) High 신호, 장치를 켜는 역할을 하는 것을 말한다. 특히 출력기능은 우리가 만든 프로그램으로 제어할 수 있어, 원하는 시간에 정확히 장치를 켜고 끄는 것을 할 수 있다.


[1] https://www.arduino.cc/en/Main/Products
[2] https://www.arduino.cc/en/Hacking/PinMapping168
[3] https://www.arduino.cc/en/Main/ArduinoBoardUno

2016년 11월 19일 토요일

Arduino 1. 아두이노란 무엇인가?

Arduino 아두이노
아두이노를 알기 위해서는 먼저 마이크로컨트롤러를 알아야 한다.
아래 글은 내가 학부실험을 위해 작성한 실험메뉴얼에 나온 내용이다.

마이크로컨트롤러
Microcontroller[1] 는 하나의 칩 안에 microprocessor, memory, analog to digital converter, digital to analog converter, parallel I/O interface, serial I/O interface, timer, counter 를 모두 포함하는 작은 컴퓨터를 말한다(그림 1). 사용자의 다양한 요구에 맞춰 사용하는 개인용 컴퓨터(personal computer, PC)와 달리 microcontroller는 미리 프로그램 된 특정 기능을 반복적으로 처리하는데 사용한다. 성능은 PC에 비해 낮지만 기본적인 연산 능력, 신호처리기능이 있으며 소형에 저전력(µW ~ mW)에서 작동이 가능하다. 따라서 우리 주변에서 흔히 보는 전기 밥솥, 세탁기, 에어컨, TV, 핸드폰 등 거의 모든 가전 및 산업제품에서 내장되어 사용자가 버튼을 눌렀을 때 정해진 기능을 수행하는데 쓰인다.  
이처럼 microcontroller는 현대사회의 기기에 널리 쓰이는 핵심부품이지만, microcontroller에 원하는 명령을 넣고 장치를 제어하는 것은 하드웨어와 소프트웨어에 대한 상당한 경험과 지식이 있는 전문가가 아니면 하기 어려운 분야이다. Microcontroller용 프로그램을 작성해 직접 사용하려면 전문교육과 실무 경험을 몇 년간은 해야 하는 것이 필수고, microcontroller제조사에 따라 프로그램을 새로 작성해야 하며 제조사가 같더라도 모델이 다르면 호환이 되지 않아 일반 사람들에게는 진입장벽이 무척 높은 영역인 것이었다.
Image result for microcontroller 구조

그림 1. 일반적인 microcontroller 의 구성도



[1] Udayashankara, V., Microcontroller; Tata McGraw-Hill Education, 2009.

그러면 아두이노는 무엇일까 ?


2005년 이탈리아에 마시모 반지(Massimo Banzi) 교수는 디자인을 전공하는 학생들에게 IT를 융합한 작품을 만들도록 하기 위해 비전문가도 쉽게 microcontroller를 활용해 자신이 원하는 장치를 만들 수 있도록 Arduino[1] 라는 하드웨어와 똑같은 이름의 통합개발환경 (integrated development environment, IDE) 소프트웨어를 공개하였다. 공학도도 접근이 쉽지 않은 microcontroller를 임베디드 시스템(embedded system: 특정 기능을 수행하는 시스템) 개발 경험이 전혀 없는 사람도 쉽게 배우고 접근하여 사용할 수 있도록 하드웨어와 소프트웨어의 내용을 모두 오픈소스(open source) 형태로 공개하여 제공한 것이다.[2] 누구나 직접 Arduino board를 만들고 수정할 수 있게 회로도를 공개하였고, 실행 코드(code)를 기존보다 더 쉽게 제작하고 업로드(upload: 사용자가 만든 코드를 microcontroller에 전송 하는 것) 할 수 있도록 IDE 소프트웨어를 만들었다. IDE에는 편집이 쉬운 에디터(editor), 컴파일(compile: 인간이 만든 프로그래밍 언어를 기계가 인식할 수 있도록 함)과 업로드가 가능한 컴파일러 플랫폼(compiler platform)이 포함되어 있다. 프로그램 언어를 잘 모르는 초심자도 Arduino IDE 를 이용해 코딩(coding: 프로그램의 코드를 작성하는 것)을 쉽게 할 수 있도록 하였으며, 기존에 복잡한 컴파일과 업로드 과정을 벗어나 PCUSB 케이블로 연결하여 쉽게 컴파일과 업로드를 할 수 있게 만들었다. 더욱이 Arduino는 아폴로 우주 계획에 사용한 항법 컴퓨터와 비슷한 컴퓨팅 파워를 가지면서 가격은 1/35,000 수준이라 성능과 가격에 대한 부담없이 마음껏 활용할 수 있다. 따라서 예술가, 일반인, 심지어 어린이들까지도 머릿속의 상상을 실제로 구현해 볼 수 있는 환경이 Arduino를 통해 마련된 것이다. 실제로 Arduino와 사물인터넷을 결합해 집에 있는 TV, 에어컨을 제어하거나 농촌에서 자동으로 농작물에 물을 주고 습도를 조절하는 장치를 만든 예들을 쉽게 찾아 볼 수 있으며, 기분을 표현하는 디스플레이 장치, 의류, 조명등 감성과 결합한 장치들도 개발되어 있다[3]. 이처럼 Arduino 의 저렴한 가격, 낮은 진입장벽, 개방된 환경은 창업, 교육, 산업, 예술계와 같은 사회 여러 분야에 활용될 수 있는 가능성을 열어주었다.[4]



[2] 스마트과학관-사물인터넷 아두이노 http://terms.naver.com/entry.nhn?docId=3386838&cid=58369&categoryId=58369
[3] http://www.instructables.com/id/20-Unbelievable-Arduino-Projects/