요즘 IT업체들의 가장 핫한 키워드 중 하나인 사물인터넷(Internet of Things, IoT)의 관심이 높아지고 있죠.

사물인터넷이란 말은 간단하게 말해서 주변의 모든 사물들이 인터넷을 통해 하나로 연결됨을 의미합니다. 그냥 말로만 들으면 언뜻 이해가 안되는 것이라고 생각할 수 있는데요, 어느 부분 우리들은 이런 사물인터넷 환경속에서 살고 있습니다. 웨어러블 기기나 원격수술, 보일로 온도조절 등 이미 사물과 인터넷간의 통신이 되고 있는 세상에 살고 있습니다.

이런 사물인터넷은 기본적으로 그것들이 작동할 수 있도록 하는 장치들이 있어야 합니다. 예를 들어 냉장고 내 음식정보를 냉장고에서 관리할 수 있지만 부족한 음식을 주인에게 알려주는 기능은 할 수 없겠죠. 그래서 사물간 통신이 가능하도록 하고 그것들이 서로 연계될 수 있도록 하는 장치들이 주목을 받게 됩니다.

이번 블로그는 이런 사물인터넷이 가능하도록 하는 장치인 아두이노에 대해서 설명을 드리고 아두이노를 통해서 어떻게 할 수 있는지 설명하도록 하겠습니다.


아두이노(Arduino)란?

'절친한 친구'라는 뜻의 이탈리아어인 아두이노는 이탈리아에서 시작을 했습니다. 2005 Ivrea에서 시작된 프로젝트 이름으로 주머니가 얇은 학생들이 쓰기 좋게 보다 저렴하고 유용한 컨트롤 장치를 만들기 위해서 시작된 것으로 올해로 10년째가 됩니다.

언급한데로 저렴하고 유용하지만 누구나 쉽게 만들 수 있는 하드웨어를 표방한 것처럼 아두이노는 단순한 기판과 메인프로세서로 구성이 되어 있습니다.

아두이노의 장점은 내가 원하는 어떤 것이든 만들 수 있다는 점이 아닐까 합니다. 오픈 하드웨어오픈소프트웨어, 그리고 오픈소스(C언어) 기반으로 제작이 가능하여 머리속의 생각들을 직접 만들어서 작동까지 할 수 있는 것이 장점이라고 할 수 있습니다.

단순하게 하드웨어만 작동하는 것이 아니라 오픈소스를 활용하여 하드웨어를 원하는 기능으로 구동이 될 수 있도록 할 수 있습니다. 예를 들어 아두이노를 활용하여 자리에 없을 때 컴퓨터 모니터를 자동으로 꺼지게 할 수 있고 스마트폰으로 전등을 원격으로 On/Off를 할 수 있습니다.

이런 기능들은 이미 제품화되어 구매할 수 있지만 내가 원하는 세세한 부분까지는 부족한 측면이 있습니다. 하지만 아두이노를 통해서라면 언제든 쉽고 간단하게 자신이 원하는 것들을 만들 수 있다는 점이 특징이라 할 수 있습니다.

아두이노는 오픈하드웨어와 오픈소프트웨어 그리고 개발이 가능한 툴을 제공하고 있습니다. 그리고 다양한 OS(윈도우, 리눅스 등)을 지원하고 있습니다.

사물인터넷을 말하지만 남의 이야기처럼 들리는 것은 너무 어렵지는 않을까? 혼자서 할 수 있을까 하는 걱정이 앞서기 때문이라 생각됩니다.

그래서 이러한 두려움을 없애고 누구나 쉽고 편리하게 자신만의 사물인터넷 환경을 꿈꾸는 분들을 위해서 아두이노를 통해서 어떤 것들을 할 수 있는지 그리고 어떻게 그것들이 가능한지를 간단하게 설명을 드리도록 하겠습니다.

초보자의 관점에서 초보자의 시선으로 작성하는 만큼 이미 아시는 분들은 시시할 수 있지만 모르시는 분들 특히나 무언가 하고 싶은데 용기가 없는 분들을 위해서 글을 남기고자 합니다.

다음 블로그부터 본격적으로 아두이노를 통해서 사물인터넷의 두려움을 떨치도록 하겠습니다.

 

아두이노 주요구성

사실 아두이노는 저에게 생소한 단어였습니다. 그런데 회사에서 IoT 관련 교육 공지를 보게 되었고 그 공지 내용은 사업계획서를 작성하여 제출한 사람들 중 10명을 선발하여 교육한다는 것이였습니다. 그 공지 내용에 바로 아두이노가 있었습니다. 아두이노이건 어느 별에서 온건가... 이런 생각에 검색을 통해 알아보니 앞서 언급한 내용들을 접하게 되었고 그래서 사업계획서를 작성하여 5일간 교육을 받게 되었습니다.

앞서 최재홍 과장의 포스트(http://blog.skcc.com/2250)에서도 언급됐지만 아두이노의 특징이 쉽고, 간단하게 원하는 것을 만든다는 점이여서 교육도 실습중심으로 구성되었습니다. 이번 블로그부터는 5일간의 교육을 토대로 아두이노에 대해서 설명을 드리도록 하겠습니다.


출처: http://arduino.cc/new_home/assets/illu-arduino-UNO.png

위 그림이 바로 대표적인 아두이노 우노보드입니다.

그 구성을 보면...

1. USB 연결 : PC와 연결하여 실제 프로그램이 가능할 수 있도록 연결(전원공급)

2. 외부전원 : 개발이 끝난 경우 아두이노만 동작할 수 있도록 하는 별도 외부전원 연결부

3. Digital 연결 : 13개의 디지털 입출력과 6개의 아날로그 출력이 가능한 연결단자

4. 전원부 : 5V 출력과 접지가 가능한 연결단자

5. Analog 연결 : 6개의 아날로그 정보가 들어오게 되는 연결단자

로 구성되어 있습니다. 갑자기 왠 전자공학도 아닌데 기판을 설명하는지 어리둥절 할 수도 있겠고 저 작은 것으로 무엇을 할 수 있겠어라고 생각하시는 분들도 계실 것 같아 아두이노를 통해 제작된 제품들을 몇가지 동영상으로 소개해 드리겠습니다.


※ LED Cube : https://www.youtube.com/watch?v=GUcX41pokZY

※ Coke piano : https://www.youtube.com/watch?v=Ttm62RBdOuo

※ RC Car : https://www.youtube.com/watch?v=2HlL3URZyAs

원격조정조명 : https://www.youtube.com/watch?v=p9FpVXjAojY

 

4개의 동영상은 기본적으로 아두이노 보드를 사용해서 만든 것입니다. 보드 이외 여러 센서나 장비들을 부착해야 하지만 작은 아두이노 보드를 통해서 저런 것들이 가능하다는 점이 참 신기했습니다.

그러면 저런 것들이 기동하도록 하는 방법인 소프트웨어와 프로그램은 어떻게 되는지 알아보도록 하겠습니다. 아두이노 소프트웨어는 아두이노 공식사이트인 arduino.cc를 통해서 받으실 수 있습니다.


아두이노 소프트웨어


위에서 보시면 윈도우 Mac OS, Linux까지 지원가능하고 해당하는 OS를 선택하시면 다운로드를 할 수 있게 되며 해당 소프트웨어가 설치를 할 수 있습니다. 


아두이노 프로그램 Tool


아두이노의 소프트웨어를 개발할 수 있는 툴로 현재 1.6.3(2015 4 3일 기준)까지 나와 있습니다. 위 소프트웨어를 통해서 실제 아두이노를 컨트롤하고 관련 기기들의 작동을 할 수 있는 프로그램을 할 수 있습니다. C언어로 프로그램이 가능하여 기존 C언어를 아시는 분들은 편하게 개발할 수 있고 모르시더라도 각종 예제들이 많이 있으므로 그 부분을 참고하시면 됩니다.

위와 같이 소프트웨어까지 설치하게 되면 이제 아두이노의 첫걸음은 걸었다고 할 수 있습니다. 다음 장에서는 위의 것을 가지고 간단하게 할 수 있는 기능에 대해서 설명을 드리도록 하겠습니다.


아두이노의 주변장치, 센서

자 앞에서 언급한 것만 있으면 과연 다 될까?? 궁금해 하시는 분들도 계시리라 생각됩니다. 앞서 동영상에서도 나왔지만 아두이노는 머리 역할을 하는 장치고 그 머리속에 프로그램을 넣도록 하는 S/W가 존재한다고 하였습니다. 그러면 이번에는 주변기기는 어떤 것들이 있는지 한번 알아보도록 하겠습니다.

아두이노 보드에는 연결단자가 존재합니다. 우노보드를 기준으로 디지털 13, 아날로그 6개의 연결단자가 존재하고 그것을 통해서 외부 다양한 센서, 장치, 확장쉴드와 연결할 수 있습니다.

먼저 교육실습에 사용된 구성품은 다음과 같습니다


실습 구성품



조명, 디스플레이(LED, 8*8 LED KIT, 1,4-digit display, LCD display)


▶ LED 전구

아두이노 첫걸음 대부분이 바로 이 LED 전구에 불을 들어오게 하는 방법이죠. 그리고 아두이노를 가지고 여러가지를 만들 때 가장 많이 사용하게 되는 전구입니다. 전구 특징이 (+), (-)가 구분되어서 잘못 연결할 경우 쉽게 타버리게 되니 조심하세요.

▶ 8*8 LED KIT
64개의 전구를 사용해서 다양한 모양을 만들 수 있습니다. 64개의 전구가 내부적으로 배치가 되어서 쉽게 연결하여 사용할 수 있으며 프로그램을 통해서 글자, 숫자, 특정모양 등을 만들 수 있습니다.

▶ 1,4-digit display
간단하게 디지털 시계와 동일한 숫자를 표시해줍니다. 앞서 말한 8*8 LED KIT보다는 연결이 어렵지만 나름 숫자를 표시하는데 있어서 가장 유용한 장치라고 할 수 있습니다.

▶ LCD display
앞서 3개의 경우는 일일이 프로그램을 해야 글자나 숫자 모양을 만들 수 있었다면 LCD display의 경우 간단하게 글자나 숫자를 표시할 수 있습니다. 액정표시장치라고 생각하시면 이해가 쉬우시리라 생각됩니다


센서

센서는 아두이노에 Input을 해주는 역할을 해줍니다. 1번과 같은 장치들은 대부분 Output으로 표시를 해준다면 센서들은 외부의 변화에 대한 것을 아날로그나 디지털신호로 변환시켜 아두이노에 전달해 주는 역할을 합니다.

 초음파 센서
초음파 센서는 음파를 내보내서 거리를 측정하는 센서로 각 거리에 따라서 아두이노에 데이터를 전달하게 됩니다. 가장 쉽게 알 수 있는 것이 후방감지기인데 이번 교육에서 위 센서를 이용해서 후방감지기를 만든 교육생이 있었습니다.

 인체감지센서
흔히 계단에 흔히 있는 것으로 사람의 움직임을 인식하여 조명이 자동으로 불이켜지도록 하는 것의 핵심 부품입니다. 그런 등을 잘 보시면 저렇게 생긴 동그란 것이 나와 있는 것을 보실 수 있습니다.

 조도센서
조도센서는 빛의 밝기를 감지해서 빛의 강약에 따른 정보를 아두이노에 제공해주게 됩니다. 이런 빛의 강약을 활용하는 것은 어두워지면 조명을 켜주는 센서로 이용하시면 좋습니다.

 기울기 센서
여러 종류가 있는데 기울기에 따른 값을 전달하는 센서도 있고 넘어졌다 안넘어졌다 정도를 알 수 있는 간단한 센서도 존재합니다. 이번 교육에서는 후자센서로 on-off로 활용할 수 있는 센서입니다.

 LM35(온도측정)
온도를 측정하는 센서로 이번 교육생 중 집안의 이 센서를 이용하여 화재감지기를 만든 분이 계셨습니다. 조도센서를 복합적으로 사용하면 열과 빛으로 화재의 감지를 더 정확하게 할 수 있겠죠.


기타장치

▶ 브레드 보드
일명 빵보드로 불리는데 아두이노의 연결하는 것이 제약이 있어서 이런 것을 확정할 수 있도록 해주는 보드입니다. 다음 블로그에서 이 브래드보드의 활용방법을 소개해 드리도록 하겠습니다.

 점퍼케이블
브레드 보드와 같이 사용하며 센서와 아두이노간이 연결선 역할을 해줍니다.

 모터
모터는 프로그램을 통해서 회전수, 회전각 등을 조절할 수 있으며 다양한 모터에 따른 다양한 방법으로 프로그램이 가능합니다. 모터를 활용하면 휴대폰으로 원격조종 자동차도 만들 수 있습니다.

 

이 정도 구성이 기본적인 구성이고 이런 장치나 센서들을 잘 활용할 수 있게 되면 동영상처럼 보다 복잡한 장치들을 만들기 위한 센서 등은 관련 사이트에서 구매도 가능하고 프로그램소스나 연결방법 등이 나와 있으니 참고하시기 바랍니다.

이번 교육에서는 무선통신에 대한 장치가 없어서 사용하지 못했지만 Wifi나 블루투스 등을 아두이노와 연결하여 원격조정을 통해서 장치들이 움직일 수 있도록 할 수 있습니다.

혹 이런 장치들에 대해서 궁금한 분들은 대표적으로 아래 사이트를 참고하시기 바랍니다

 - ArtRobot : http://www.artrobot.co.kr/
 -
메카솔루션 : http://www.mechasolution.com/(위 설명된 교육키트 구매처)

다음에는 아두이노와 센서간의 연결에 대해서 안내해 드리도록 하겠습니다.

 

아두이노 연결하기

이제 아두이노 구조도 알았고 주변 센서들도 알았으니 그러면 이런 것은 어떻게 움직이도록 하게 할까에 대해서 소개해 드리도록 하겠습니다.

주로 사진을 기초로 소개해 드리니 참고하시기 바랍니다.

1. 아두이노 연결

아두이노와 PC 연결

아무것도 안하고 위와 같이 PC와 연결만 하면 위와 같이 보드에 불이 들어옵니다. 일단 불이 들어오면 정상적으로 연결되었다고 생각하면 됩니다.

2. LED 깜빡이기

연결을 했다면 이제 LED를 활용해서 불을 깜빡이도록 해보겠습니다.

프로그램 코딩 및 컴파일

위와 같이 아두이노 프로그램에 코딩을 하고 컴파일(체크모양)을 합니다. 컴파일이 완료되면 이제 아두이노로 업로드를 하게 됩니다

여기서 간단하게 소스를 설명을 드리면...


void setup() {

pinMode(13, OUTPUT); → 13번으로 digital 정보를 내보낸다.
}
void loop() {
digitalWrite(13, HIGH); → 13
번으로 HIGH(점등)정보를 내보낸다.
delay(10000); → 앞 조건을 10(1000 1동안 유지(점등상태 10초 유지)
digitalWrite(13, LOW); → 13번으로 HIGH(소등)정보를 내보낸다.
delay(5000); → 앞 조건을 5초 동안 유지(소등상태 10초 유지)
}


아두이노 보드로 컴파일된 프로그램 업로드

위와 같이 컴파일이 완료 후에 아두이노 보드로 전송(화살표)을 하게 됩니다. 전송을 하게 되면 해당 코딩된 프로그램이 아두이노 보드에서 작동을 하게 됩니다.

프로그램에 따른 LED 점등

프로그램이 업로드 되면 위와 같이 LED에 불이 들어오게 됩니다. 어쩌면 가장 기본적이지만 모든 연결이 이와 같은 원리로 된다고 생각하시면 보다 쉽게 이해되지 않으실까 합니다.

3. 브레드보드 이용하여 LED 깜빡이기
자, 그러면 브레드보드를 활용한 LED 깜빡이기는 것은 어떨까요? 프로그램은 수정없이 그저 연결만으로 아까와 동일한 기능을 보여줄 수 있습니다.

브레드보드를 이용한 LED 점등

위 그림처럼 보듯이 브레드보드는 확장판이라고 생각하시면 됩니다. 프로그램은 변경없이 그저 브레드보드와 아두이노보드간의 연결만으로 동일한 효과를 볼 수 있는 것이죠. 그리고 브레드보드는 여러 개를 붙일 수 있도록 되어 있어서 앞서 보여드린 동영상처럼 다양한 것들을 만들 수 있는 도구라고 생각하시면 됩니다.

사진을 통해서 설명을 드리는 이유는 모든 것의 연결이 위와 같다는 것입니다. 단지 연결할 때 선의 연결만 잘 하면 특별한 문제 없이 아두이노를 통한 센서와 장치들을 활용할 수 있습니다.

그리고 아두이노 관련 사이트나 센서들을 파는 곳에서 연결지도, 활용소스등을 제공하므로 언제든 쉽게 원하는 형태의 장치들을 만들 수 있습니다. , 하나의 걸림돌이라면 코딩이 어렵다고 느껴질 수 있지만 앞서 보여드린 소스처럼 기본적인 소스만으로도 할 수 있는 것들이 많다는 점이 아두이노의 장점이 아닐까 합니다.

이외에도 앞서 언급한 장치와 센서들을 다 연결하여 실습을 한 내용이 있지만 그 부분은 글로 표현하는 것에는 위 LED 등 점등하는 것과 별차이가 없어서 생략하였습니다.

 

아두이노를 통한 자신감 얻기

5일간의 교육을 통해서 다음과 같은 장치들이 만들어 졌습니다.
-
다도를 할 때 물의 온도를 알려주는 장치
-
청각장애인을 위한 디스플레이 안내기능(초인종, 전화 등)
-
간단한 화재경보기
-
초음파 센서를 활용한 후방감지기
-
인체감지센서를 이용한 팀장 부재여부 확인기능

어쩌면 5일간의 짧은 기간이지만 나름 완성도가 높은 장치들이 만들어졌고 일부 장치들은 실생활에서 바로 사용할 수 있는 장치들도 많았습니다. 아쉬운 점은 센서들이 한정적이라서 다양한 센서들을 활용할 수 있다면 더 완성도 높은 장치들이 나오지 않았을까 하는 생각입니다.

회사의 교육은 전달식 교육이 강해서 듣고 그 시험보는 구조였다면 이번 교육은 실습중심의 교육방식으로 지켜보는 방관자가 아닌 참여자로써 5일의 교육 동안 집중도가 가장 높았던 것으로 생각됩니다. 그리고 마지막 날은 실습한 것을 바탕으로 자신이 초기 계획했던 장치나 제품을 하루종일 만드는데 시간이 부족해서 김밥을 먹어가며 셋팅하고 코딩하고 테스트를 통해 자신이 만든 작품을 교육생들과 공유하고 5일간의 교육이 끝을 맺었습니다.

이번 교육을 통해서 느낀점은 IoT에 대한 자신감이 생겼다고 할 수 있습니다. 이전까지는 IoT는 해외 박람회나 유명 업체들만의 전유물과 같이 멀리 떨어진 느낌이였다면 이번 아두이노 교육을 통해서 내 주변의 것들을 내가 원하는 기능으로 만들 수 있을거라는 자신감이 생겼습니다.

교육을 마치고 집에 오는 길에 보이는 것들을 어떻게 하면 IoT화 할 수 있을까 생각도 하고 이미 IoT화 된 것들에 대해서는 어떻게 구성을 하고 어떤 프로그램을 했을까 하는 생각을 하면서 IoT는 삶의 한자리를 차지하게 되었습니다.

요즘은 집에 있는 사물들을 어떻게 하면 IoT화하여 삶을 윤택하게 할까 고민하고 있습니다.


식물을 잘 죽이는 이유가 물을 안주어서인데 어떻게 하면 물을 주게 해볼까? "

어항의 온도관리와 조명관리를 자동으로 해볼까? "

잠 잘 때 스마트폰으로 각 방의 전등을 컨트롤 해볼까? "

하는 생각을 하곤 합니다.

그래서 지금은 이번 교육에서는 못해보았던 통신모듈을 사용하는 것을 공부하는 중에 있습니다. 예를 들어 전등을 관리한다던지, 화분의 물을 준 주기를 관리하거나 화분의 습도정보를 통해서 물줄 시기를 사전에 알려준다거나 집에 도둑이 침입하면 CCTV가 점등되고 그 정보가 자동으로 스마트폰으로 전송되어 그것을 기반으로 신고할 수 있도록 하는 기능 등 다양한 아이디어들이 맴돌고 있습니다.

아두이노 교육을 통해서 IoT에 대한 자신감도 얻었지만 이제까지 틀에 갇혔던 생각들이 틀을 깨면서 아이디어가 증가하고 나만의 IoT 환경을 만들 수 있는 계기가 되지 않았나 합니다.

IoT에 대해서 두리뭉실하거나 글로만 접하였다면 아두이노를 통해서 자신감도 얻으시고 이 세상에 존재하지 않는 나만의 IoT 제품들을 만들어 보시길 추천해 드립니다.

IoT는 멀리 있는 것이 아닌 바로 여러분 곁에 있으며 작은 변화를 시작으로 삶을 변화시켜 보시는 것은 어떨까요?

 





저작자 표시 비영리 변경 금지
신고

  1. 최재철 2015.05.13 09:52 신고

    좋은 글 감사합니다. 정리가 깔끔해서 너무 좋았습니다. ^^

  2. 만물인터넷 2015.05.22 09:27 신고

    흔하지 않은 글이네요. 좋은 정보가 되었습니다.

  3. 2016.11.29 16:17

    비밀댓글입니다

    • Favicon of http://skccblog.tistory.com BlogIcon SK주식회사 C&C 블로그 운영자 2016.11.29 18:11 신고

      안녕하세요. SK주식회사 C&C 블로그 운영자입니다.
      위의 질문내용에 대한 답변을 드립니다. (컨텐츠 작성하신 필진분께 문의한 사항입니다)

      초인종 디스플레이 코딩은 따로 없고 응용해서 만들면 됩니다.
      그런데 디스플레이라 하시면 화면에 초인종을 누른 사람이 나타나도록 하는 것을 말씀하시는 것이라면 그 부분은 전문 서적을 참고하시는게 좋을 듯 합니다.
      디스플레이 종류도 많고 이곳에 해당 코딩 정보를 등록하는 것도 한계가 있을 것으로 보입니다.
      디스플레이가 단순 도트형태라면 아두이노 툴킷을 활용하면 되지만 만약 LCD급 화질의 구성이라면 조금 더 복잡해 질 것으로 생각됩니다.

      참고로 블로그에 나와 있는 것은 디스플레이가 제외된 것이고 소리와 빛을 응용하는 것이라면 관련 서적에 간단하게 제작이 가능합니다.
      사실 간단한 초인종을 만들 경우 코딩은 심플하지만 회로도에 대한 이해가 있어야 하므로 아두이노를 시작하기 전 충분히 숙지 하시면 좋습니다.
      전기가 통하는 것이기 때문에 가끔 회로가 타거나 LED가 타버리는 경우가 있습니다.(저도 수업 중 몇 개 태워 먹었네요)

      원하시는 답변이 되지 못해 죄송하지만 말씀하신 부분에 대해서는 아두이노 서적을 보시면 더 쉽게 이해하시리라 생각됩니다.

      감사합니다.

티스토리 툴바