Data Loading...

아두이노101 Flipbook PDF

아두이노101


353 Views
67 Downloads
FLIP PDF 2.29MB

DOWNLOAD FLIP

REPORT DMCA

만들기 입문자를 위한

메이크 코리아 도서 3D 프린터

아두이노를 쉽게 배우고, 이해하고, 만든다!

안상준, 정재학 지음 2017년 초 출간 예정 / 가격 미정

지금은 ‘아두이노’의 이름을 안 것으로 충분하니 책장을 넘기며 아두이노와 테크 DIY의 세계로 걸어 들어가 보자.

케이티 세서리 지음 / 임지순 옮김 2016년 8월 / 20,000원 PART 01 아두이노 시작하기

Zero to Maker

제로 투 메이커

아두이노 입문자에게 필요한 모든 것

블루투스 관련 모바일 어플리케이션과 펌웨어 개발을 본업으로 삼고 있으며 틈틈이 아두이노 를 이용한 테크 DIY 강좌와 워크샵을 개최하고 있다. 테크 DIY에 필요한 아두이노와 프로그래 밍 기초, 센서 및 각종 프로젝트 정보를 제공하

세상을 바꾸는 것도 한 걸음부터! 내 생각, 상상, 아이디어를 밖으로 꺼내보자.

심플 로봇

서영배

1장 나의 첫 아두이노

아두이노 서영배 지음

는 홈페이지 하드카피월드(hardcopyworld. com)를 운영하고 있다. 필자 역시 아두이노를 통해 테크 DIY에 입문한 아두이노 키드이다.

2장 프로그래밍의 기초 3장 프로젝트 준비

데이비드 랭 지음 / 장재웅 옮김 2015년 2월 / 14,000원

PART 02 아두이노 사용하기

4장 디지털 입출력 5장 아날로그 입출력

일상 무기 제작법 시리즈 존 오스틴 지음 / 정향 옮김 2015년, 2016년 / 각 권 18,000원

6장 작업 시간 관리 7장 기본 입출력 응용 8장 센서 통신 9장 디스플레이

예제소스 http://www.hanbit.co.kr/exam/2478 https://github.com/godstale/ArduinoBasicExample

메이커의, 메이커에 의한, 메이커를 위한 국제적인 매체 Make:의 한국 채널입니다. 한빛미디어가 독점 운영하는

정가 18,000원 아두이노/취미공학

메이크 코리아에서는 2011년 Make: 매거진 한국판 출간 을 시작으로 관련 도서 출간을 꾸준히 하고 있으며, 2012년부터는 국내 최초이자 최대인 메이커 축제, 을 시작하여 연간 개최하고 있으며 메이커 데이(Maker Day), 교육 프로그램, 워크샵 등 비정기적인

101은 만들기의 기초에 발을 들이는 사람들을 위한 메이크 코리아의 기본서 시리즈입니다.

온오프라인 이벤트도 계속해서 진행하고 있습니다.

지은이

서영배

블루투스 관련 모바일 어플리케이션과 펌웨어 개발을 본업으로 삼고 있으며 틈틈이 아두이노를 이용한 테크 DIY 강좌와 워크샵을 개최하고 있 다. 테크 DIY에 필요한 아두이노와 프로그래밍 기초, 센서 및 각종 프로젝트 정보를 제공하는 홈페이지 하드카피월드(hardcopyworld.com) 를 운영하고 있다. 필자 역시 아두이노를 통해 테크 DIY에 입문한 아두이노 키드이다.

아두이노 101 : 아두이노 입문자를 위한 모든 것 초판발행 2016년 10월 15일 지은이 서영배 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02– 325– 5544 / 팩스 02– 336– 7124 등록 1999년 6월 24일 제10– 1779호 / ISBN 978-89-6848-478-0 93000 총괄 전태호 / 책임편집 송성근 / 기획•편집 정희 디자인 표지•내지 강은영 / 조판 이은미 / 일러스트레이터 이혜연 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 변지영 / 제작 박성우, 김정우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 [email protected] Published by HANBIT Media, Inc. Printed in Korea Copyright

2016 서영배 & Hanbit Media, Inc.

이 책의 저작권은 서영배와 한빛미디어(주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다. 지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( [email protected] ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.

지은이의 말

지금은 아두이노 초급서를 쓰고 있지만, 불과 몇 년 전까지만 해도 전 자회로를 다루는 작업은 멀게만 느껴졌습니다. 본업으로 소프트웨어 관련된 일만 해왔기 때문에 머릿속은 추상적인 코드의 흐름에만 익숙 해져 있었습니다. 그래서 전자회로를 이용해 물리적인 움직임을 만 드는 작업은 경외의 대상이자 전문적인 교육을 받은 사람들만을 위한 영역이라고 생각하고 있었습니다. 이런 고정관념을 탈피하게 된 계기가 바로 아두이노였습니다. 정말 배우기 쉽다며 친구가 소개해 준 아두이노 보드를 처음 손에 쥐었을 때도 사실 반신반의했었는데, LED를 켜는 첫 예제를 실행해 보는 순 간 직감했습니다. “이거라면 해볼 만하다!” 물론 아두이노를 처음 배우는 과정이 순탄치만은 않았습니다. 브레드 보드 사용법부터 생소한 개념과 단어, 회로이론 그리고 아두이노의 특징 등 새로 배워야 할 것도 많았고 구글 검색으로 찾을 수 있는 정 보들은 파편화되어 있었습니다. 전자회로를 다루고 싶은 이들이 처 음 아두이노 배울 때 참고할 수 있는 체계적인 정보가 필요하다고 느 꼈습니다. 그래서 제가 아두이노를 배우는 과정에서 참고했던 자료를 정리해서 홈페이지를 통해 공유해 왔습니다. 이 책은 홈페이지를 통해 해 온 작업의 연장선에 있습니다. 그동안 배 워온 과정을 바탕으로 수집하고 정리한 자료를 체계화한 결과물이라 고 말할 수 있을 것 같습니다. 하지만 이 책으로 그간의 작업이 끝난 것은 아닙니다. 아두이노 세계도 다른 IT 트렌드처럼 빠르게 변화하 는 만큼 꾸준히 지금까지 해 온 활동을 이어가면서 책에도 반영할 계 획입니다.

IV

아두이노에 한창 빠져들 무렵, 운이 좋게도 학창시절을 함께했던 친구 들과 아두이노를 이용한 테크 DIY 소모임을 할 기회가 있었습니다. 뇌 파 제어, RC 자동차와 컨트롤러, 드론 등 다양한 작품을 만드는 Wired

Factory 프로젝트 그룹을 꾸려 2년간 활동했습니다. 비록 진행 속도는 느 리지만 꾸준히 공통의 관심사를 함께할 수 있어 재미있었을 뿐 아니라 기 술적 시야를 넓히는데도 많은 도움이 되었습니다. 현재는 각자의 본업과 육아 문제로 지속하지 못하지만 그간 함께한 박일용, 김병규, 이상원, 정 경부 팀원에게 이 자리를 빌려 감사를 표합니다. 책이 출간될 즈음에 한 번 모여 그 때의 추억을 되새길 것 같습니다. 그리고 테크 DIY 관련된 활동의 장을 마련해 준 단체와 지인들에게도 감 사의 인사를 드립니다. 크리에이터 플래닛, 한국과학창의재단, 블로터닷 넷, 국립과천과학관, 아트센터 나비, 시드스튜디오, 넥슨, 코오롱베니트, 서울문화재단, 한국콘텐츠진흥원, 메이커 페어와 한빛미디어에서 마련해 준 많은 기회는 큰 경험이 되어 남았고, 그때의 내용이 원고에도 상당 부 분 녹아 있습니다. 물론 가장 큰 감사는 가족의 몫이겠지요. 원고를 쓰고 실습 과정을 테스트 하는 긴 작업을 함께해줬을 뿐 아니라 물심양면으로 지원해 준 사랑하는 아내에게 첫 책을 바칩니다. 그리고 아들 시우에게는 먼 훗날의 일이긴 하 겠지만, 시우가 스스로 배움을 터득할 수 있는 나이가 되었을 때에도 이 책이 함께 할 수 있기를 바랍니다.

V

서문

이 책의 내용 이 책은 두 파트로 구분되어 있습니다. 1장~3장은 첫 파트인 ‘아두이 노 시작하기’이고, 4장~9장은 두 번째 파트인 ‘아두이노 사용하기’입 니다. 파트 1는 아두이노와 친해지는 과정입니다. 즉 아두이노가 어 떤 것인지 어떻게 쓸 것인지와 프로젝트를 시작하기 전에 필요한 기 본 정보를 다룹니다. 그리고 파트 2에서는 본격적인 아두이노 이론과 실습을 진행합니다. 새로운 세계에의 첫걸음으로는 기본적인 정보와 이해가 먼저겠지요. 아두이노 보드에 대한 기본적인 설명, 그리고 아두이노 세계에서 상 식처럼 통용되는 정보와 도구에 대한 내용이 첫 파트에서 다뤄집니 다. 입문, 그리고 아두이노를 사용하다 보면 자주 마주치게 되는 상황 에 대한 사전 지식이 파트 1에 담겨 있습니다.

1장 이 책이 다루는 핵심인 아두이노에 대한 소개와 아두이노의 종류, 아 두이노 개발환경 설치 방법을 설명합니다. 1장의 내용은 당장 머릿속 에 뒤야 할 정보라기보다는 아두이노를 다루다 보면 하나씩 터득하게 될 내용입니다.

2장 아두이노는 하드웨어 절반, 소프트웨어 절반이라고 할 수 있습니다. 아두이노를 뜻대로 제어하려면 초급 수준의 프로그래밍 지식이 필요 합니다. 2장에서는 아두이노 제어를 위해 필요한 최소한의 프로그래 밍을 다루고 있습니다.

VI

3장 아두이노를 이용해 실습하기 전 알아둬야 할 정보를 담고 있습니다. 아두 이노의 전원 핀 배치, 브레드보드 사용법, 아두이노 스케치의 기본 구조, 라이브러리 사용법, PC와의 통신 방법이 수록되어 있습니다. 파트 2는 아두이노의 기본 동작 방식에 대한 이론과 실습 예제를 포함하고 있습니다. 크게 4장~6장, 7장~9장 두 부분으로 나눌 수 있습니다.

4장~6장에서는 아두이노의 기본 동작 원리인 디지털 입력, 디지털 출력, 아날로그 입력, 아날로그 출력을 설명합니다. 그리고 아두이노를 제어할 때 마주지게 되는 시간 관리 문제와 해결법을 알려줍니다. 4~6장에 포함 된 내용은 아두이노의 기본 이론이라 할 수 있습니다.

4장 가장 기본 소자인 LED와 버튼을 이용해서 디지털 입력과 출력 방법을 실 습합니다.

5장 포텐셔미터와 LED를 이용해서 아날로그 입력과 출력 방법을 실습합니다.

6장 아두이노에서 여러 작업을 동시에 수행할 때 부딪히게 되는 시간 관리 문 제를 설명하고 해결법을 제시합니다.

7~9장은 앞서 배운 아두이노의 기본 기능을 바탕으로 다양한 소자와 센 서, 모듈을 사용하는 방법을 살펴보는 응용 실습 부문입니다.

VII

7장 기본 디지털 입출력, 아날로그 입출력 기능을 이용한 센서 사용법 을 설명합니다. 버저, 모션 센서, 초음파 센서, 조이스틱, 가스 센서,

RGB LED, 서보 모터 예제가 들어 있습니다.

8장 아두이노가 지원하는 시리얼(Serial), I2C, SPI 통신의 원리를 설명 하고 실습 예제를 통해 사용법을 확인합니다. 예제에서는 온습도 센 서, LED, 가속도-자이로 센서, 이더넷 모듈을 사용합니다.

9장 아두이노는 별도의 디스플레이가 없기 때문에 아두이노가 가진 데이 터나 상태를 확인하고 싶은 경우 별도의 디스플레이 장치를 연결해야 합니다. 9장은 아두이노와 함께 자주 사용되는 16x2 캐릭터 LCD,

8x8 LED 매트릭스, I2C OLED 디스플레이 사용법을 소개합니다. 그리고 책 후반부의 부록에서 아두이노 및 부품 구매 방법, 아두이노 주요 함수, 본문에 사용된 예제 스케치 다운로드 방법을 찾아볼 수 있 습니다.

4장부터 본격적인 아두이노 실습 예제가 제공됩니다. 각 예제는 실 습 내용 소개, 회로 연결 방법, 사용할 스케치 분석, 테스트 방법의 순 서로 정리되어 있습니다. 예제의 흐름에 맞춰 회로를 구성하고 아두 이노 스케치를 작성해서 업로드 한 뒤, 동작 결과를 확인하면 됩니다. 예제 실습을 시작하기 전에 ‘연결 방법’ 부분에 소개된 부품을 미리 준 비해두세요.

VIII

본문에 활용한 예제는 최대한 ‘아두이노 스타터 킷’에 공통으로 포함되는 소자, 센서, 모듈을 사용하려고 노력했습니다. 하지만 응용 실습에 해당하 는 7장~9장에서는 별도로 구매해야 하는 센서, 모듈이 사용됩니다. 모션 센서, 초음파 센서, 가스 센서, 서보 모터, 가속도-자이로 센서, 이더넷 모 듈, 8x8 LED 매트릭스, I2C OLED 디스플레이 등이 여기에 해당합니다. 부록으로 수록된 ‘아두이노 및 부품 구매 방법’ 편을 참고해서 별도로 구매 하시길 바랍니다.

예제 및 회로도 사용 관련 책에 쓰인 모든 소스코드는 http://www.hanbit.co.kr/exam/2478 또는 https://github.com/godstale/ArduinoBasicExample에서 내 려받을 수 있습니다. 그리고 책에 사용된 회로도는 소프트웨어 툴인 프릿 징(fritzing) 프로그램을 이용해서 작성되었습니다. http://fritzing.org 에서 프릿징 프로젝트에 대해서 볼 수 있으며, 직접 다운로드 받아 써볼 수 있습니다.

저자 웹사이트 책에 실린 내용을 포함한 저자의 다양한 프로젝트를 hardcopyworld.

com에서 확인하실 수 있습니다.

IX

목차

IV

지은이의 말 서문

VI

PART 01

아두이노 시작하기 Chapter

나의 첫 아두이노

01

01 아두이노(Arduino)란?

3 4

02 아두이노의 종류와 특징 03 아두이노 준비 과정

7 14

04 아두이노 개발환경

16

05 LED 깜빡여보기

21

Chapter

프로그래밍의 기초

29

02

01 스케치와 프로그래밍 02 함수

32

03 변수

45

04 배열

50

05 조건문

54

06 반복문

57

31

07 전역 변수와 지역 변수

62

08 클래스와 라이브러리 09 문자열

65

68

Chapter

프로젝트 준비

03

01 아두이노 전원 핀

73

02 브레드보드 사용법

74 76

03 아두이노 기본 함수와 동작 순서 04 라이브러리

80

05 아두이노 시리얼 통신

84

78

PART 02

아두이노 사용하기 Chapter

디지털 입출력

93

04

01 디지털 출력

96

02 디지털 입력

105

03 내부 풀업 저항

115

Chapter

아날로그 입출력

119

05

01 아날로그 입력

120

02 아날로그 출력

127

Chapter

작업 시간 관리

06

01 delay() 함수의 덫

135 136 140

02 millis() 함수를 이용한 시간 관리 145

03 인터럽트 이해하기

150

04 인터럽트를 이용한 예제 완성

Chapter

기본 입출력 응용

07

01 버저

155

156 166

02 모션 감지 센서

174

03 초음파 센서 04 조이스틱

180

05 가스 센서

187

06 RGB LED

194

07 서보 모터

203

Chapter

센서 통신

08

01 기본 통신과 온습도 센서

215

02 시리얼 통신과 LED 제어

225

213

03 I2C 통신과 가속도-자이로 센서 04 SPI 통신과 이더넷 모듈

247

235

목차 Chapter

디스플레이

09

01 16x2 캐릭터 LCD

259

02 8x8 LED 매트릭스

260 271 285

03 I2C OLED 디스플레이

부록

299

01 아두이노 및 부품 구매 방법 02 아두이노 주요 함수 03 예제 스케치 다운로드

찾아보기

318

305 316

300

01 아두이노 시작하기

Chapter

01 나의 첫 아두이노

천 리 길도 한 걸음부터라 했습니다. 아두이노라는 긴 여정을 시작하는 첫걸음에 필요한 아두이노 기초 자료를 소개합니다. 아두이노가 무엇인지, 아두이노를 이용해 창의적인 프로젝트 를 만든다면 어떤 것이 필요하고, 어떤 과정을 거쳐야 하는지 소개합니다.

01 | 아두이노(Arduino)란?

그림 1-1 아두이노

아두이노(Arduino)의 세계에 발을 들이신 것을 환영합니다. 위에 보이는 작은 보드가 바로 아두이노 보드입니다. 손바닥에 들어갈 만큼 작은 크기 때문에 아두이노와 이와 비 슷한 보드를 ‘손바닥 컴퓨터’라고 부르기도 합니다. 이 작은 보드를 컴퓨터라고 부를 수 있는 이유는 바로 데이터를 넣어나 출력할 때 연산을 처리할 수 있는 능력이 있기 때문 입니다. 생긴 것은 장난감처럼 보이지만, 실제로는 어엿한 컴퓨터 기능을 수행할 수 있 다는 것이지요. 이 보드는 무엇이며, 이 보드로 어떤 것을 할 수 있을지 천천히 확인해봅 시다. 사전적인 의미로 보면 아두이노는 오픈소스를 기반으로 한 단일 보드 마이크로컨트롤러 입니다. 센서를 연결해서 주변 환경의 변화를 감지하게 할 수도 있고, 모터나 LED를 달 면 사물을 움직이거나 빛을 만들어내기도 하는 작은 신경계라고 할 수 있습니다. 흔히

4

Part 1 아두이노 시작하기

이렇게 부품을 붙여서 사물을 다루는 작업을 피지컬 컴퓨팅(Physical computing)이라 고 부르는데, 아두이노는 이런 전자적인 제어를 하는데 특화되어 있습니다. 하지만 아두이노가 피지컬 컴퓨팅을 위한 유일한 도구는 아닙니다. 사람들은 이전부터

AVR이라고 부르는 것을 써왔는데, 대학에서 가르칠 정도로 전문적인 도구라고 할 수 있 습니다. AVR은 상대적으로 가격도 비싸고 다루기 까다로우며 프로그래밍을 하기도 어 렵습니다. 전문적으로 다루기 위한 사람들을 위한 것이었지요. 이것을 쉽게 배울 수 있 도록, 아무나 사용할 수 있게 만든 것이 아두이노입니다. 아두이노는 이탈리아 이브레아 스쿨에서 피지컬 컴퓨팅을 가르치던 마시모 반지 (Massimo Banzi)가 시작했습니다. 학생들에게 쉽게 가르치기 위한 도구로 고안을 한 것이지요. 2005년에 첫 아두이노가 개발되었으니 이미 10년 넘게 쓰인 셈입니다. 그동 안 아두이노는 학생들, 학교, 각 기관으로 퍼져나갔고 전 세계로 급속히 확산되어 현재 는 가장 사랑받는 마이크로컨트롤러 중 하나가 되었습니다. 아두이노가 확산된 결정적인 이유는 어디에 있을까요? 여러 가지를 생각해볼 수 있겠지 만, 가장 중요한 이유는 바로 쉽기 때문일 것입니다. 아두이노로 하드웨어(물리적인 장 치, 대부분 전자부품) 제어를 하려고 할 때는 추가적인 장비나 설정이 필요 없습니다. 아두이노와 USB 케이블, 그리고 PC 한 대만 있으면 됩니다. PC에 아두이노 개발환경 (Arduino IDE, Integrated Development Environment)이라는 프로그램을 설치하 고 USB로 아두이노를 연결하면 바로 마음껏 가지고 놀 수 있습니다. 개발환경에서 프로 그래밍을 한 후에 USB로 아두이노 본체에 옮기면 실행이 되거든요. 프로그래밍을 하기도 쉽습니다. 아두이노가 가지고 있는 핀(전기신호 입력, 출력에 사 용)을 쓰기 위해 복잡한 제어구조와 방법을 배울 필요가 없습니다. 프로그램 전문가가 아니더라도 쉽게 배워서 쓸 수 있게 되어 있기 때문입니다. 간단한 함수 몇 개로 이전에 는 수십, 혹은 수백 줄 코드가 필요하던 하드웨어를 작동시킬 수 있습니다. 그러니 소프 트웨어, 혹은 하드웨어의 전문가가 아니라도 아두이노를 이용해 다양한 작업을 시도해

Chapter 1 나의 첫 아두이노

5

볼 수 있습니다. 아마도 이 글을 읽는 분은 아두이노의 이런 부분에 매력을 느껴 이 책을 펼쳤으리라 생각합니다. 한 가지 더 중요한 아두이노의 특징이 있는데, 바로 오픈소스 하드웨어라는 점입니다. ‘오픈소스’라는 말은 크게 해석하면 ‘지식을 공유한다’의 의미입니다. 하드웨어의 구조가 공개되어 있으므로 누구나 사용할 수 있고, 다양하게 발전시키고, 이를 다시 다른 사람 들과 공유할 수 있습니다. 좀 전에 언급한 아두이노 개발환경 같은 경우도 프로세싱(Processing)이라는 오픈소스 개발환경에 기반하고 있습니다. 프로세싱은 일반인이 시각화를 쉽게 하기 위해 고안된 개발환경인데, 아두이노와 지향점이 거의 같지요. 프로세싱 개발환경과 아두이노 개발 환경은 거의 유사한 형태를 가지고 있습니다.

그림 1-2 프로세싱 개발환경(왼쪽)과 아두이노 개발환경(오른쪽)

아두이노 공식 홈페이지(arduino.cc)에 들어가면 아두이노 보드의 회로도가 공개되어 있습니다. 누구나 이 회로도를 보고 부품을 사서 직접 아두이노 보드를 조립해볼 수도 있고, 또는 호환 보드를 제작할 수도 있습니다. 심지어는 판매도 할 수 있습니다. 오픈소 스 하드웨어의 힘이지요. 아두이노 이후에도 수많은 손바닥 컴퓨터가 출시되었지만, 이 런 점이 아두이노가 여전히 왕좌를 차지하고 있는 이유겠지요.

6

Part 1 아두이노 시작하기

아두이노의 이런 장점 덕에 전 세계 수많은 DIY 프로젝트가 아두이노에 기반하게 되었 습니다. 이러한 프로젝트에 사용된 소스코드(프로그램, 코드)와 지식은 온라인을 통해 공유되어 아두이노 데이터를 더욱 풍부하게 만들어줍니다. 뭔가 좋은 아이디어가 떠올 라 아두이노로 만들고 싶어질 때, 우리가 가장 먼저 할 수 있는 일은 이미 유사한 프로젝 트가 있는지 검색하는 것입니다. 그만큼 방대한 자료가 오픈소스로 이미 누적되고 공개 되어 있기 때문에 우리는 가능한 시행착오를 줄이고 빠르게 아이디어를 구현할 수 있습 니다. 일이든 취미든 필요에 의해 어떤 분야를 배우다 보면 배움의 과정에서 목적을 잃어버리 기도 합니다. 아두이노는 배우는 과정을 단순화시켜 줌으로써 아이디어와 목적에 더욱 집중할 수 있도록 해줍니다. 이 점이 아두이노의 가장 큰 강점입니다.

02 | 아두이노의 종류와 특징 그럼 아두이노의 종류를 살펴볼까요? 십 년이 넘는 시간 동안 아두이노는 발전해왔으며, 이 과정에서 여러 버전이 출시되었습니다. 똑같은 모양에 성능이 개선된 경우도 있었지 만, 대부분은 특정한 쓰임에 골라서 쓸 수 있도록 약간씩 다른 기능을 가지고 있게끔 설 계되었습니다. 전부 아두이노라고 부르긴 하지만, 단종된 보드까지 합하면 아두이노에 서 정식 출시된 모델만 이십여 가지 이상이며, 아두이노 회사(팀에서 회사가 되었습니 다)가 아닌 다른 업체에서 제작한 호환 보드까지 감안하면 그 수는 급격히 늘어납니다. 이 많은 보드 중에 어떤 것을 선택해야 할까요? 수많은 아두이노 보드 앞에 처음 선 사람 은 통과의례처럼 하게 되는 질문입니다. 답은 간단합니다. 아두이노가 익숙해질 동안은 아두이노 우노(UNO) 보드를 사용하면 됩니다. 이유는 아두이노 우노 보드가 아두이노의 표준 보드이기 때문입니다. 표준 보드 의 의미는 바꿔 말하면, 레퍼런스 스마트폰(구글 넥서스 시리즈)처럼 공식적으로 기준이 되는 보드라는 뜻입니다. 인터넷상에 공유되는 많은 참고자료가 표준 보드인 아두이노

Chapter 1 나의 첫 아두이노

7

우노 보드를 기준으로 하고 있습니다. 따라서 공유된 소스코드, 라이브러리(특정 기능을 구현해주는 소스코드 묶음)는 대부분 우노 보드를 기준으로 하며 다른 보드를 쓰면 예상 치 않은 문제가 발생할 수도 있습니다. 하지만 프로젝트에 따라서 아두이노 우노 보드만으로는 부족한 경우가 있습니다. 이럴 때는 기능이 다른 아두이노 보드 사용을 고려해볼 수 있습니다. 이런 경우를 위해 아두 이노 공식 보드 중 주요한 몇 가지를 소개하려고 합니다. 아두이노의 종류별 설명을 보기 전에 기억할 것이 하나 있습니다. 아두이노의 기능 대부 분은 모두 칩 하나 안에 들어가 있습니다. 따라서 아두이노 보드에 어떤 칩이 사용되었 는지가 가장 중요한 요소입니다. 같은 칩을 사용하는 보드라면 외관이 다르더라도 같은 특징을 공유하는 형제 관계라고 보면 되는데, 형제 관계인 보드끼리는 소스코드나 라이 브러리도 대부분 호환이 된다고 생각하면 됩니다.

아두이노 우노(UNO)

8

Part 1 아두이노 시작하기

현재 아두이노의 표준 보드입니다. 온라인상에 있는 예제와 강좌, 소스, 라이브러리 대 부분이 우노 보드에 맞춰져 있기 때문에 아두이노 입문자라면 바로 우노 보드를 선택하 면 됩니다. 현재 Revision 3 버전까지 나와 있기 때문에 Arduino UNO R3라고 표시 합니다. 아두이노 우노 보드는 ATmega328P 칩을 탑재하고 있습니다.

아두이노 나노(Nano)

아두이노 우노 보드의 소형화 버전이라고 생각하면 됩니다. 아두이노 우노 보드와 같은 계열의 ATmega328 칩을 탑재하기 때문에 우노 보드의 특징을 똑같이 가지고 있습니 다. 잘 사용하지 않는 외부 전원용 어댑터 소켓 등이 빠져서 크기가 작고 가격도 상대적 으로 저렴합니다. 흔히 빵판(‘브레드보드’라고도 부릅니다)이라 불리는 구멍 송송 뚫린 핀 확장용 도구에 꽂아 사용할 수 있어서 편리한 부분도 있습니다. 우노 보드의 형제 격 인 보드라 할 수 있습니다.

Chapter 1 나의 첫 아두이노

9

아두이노 프로/프로 미니(Pro/Pro Mini)

아두이노 우노 보드가 허리를 졸라매고 다이어트를 한 버전입니다. 우노 보드와 같은 심 장(ATmega328)을 가졌지만 USB 통신 칩(FTDI 칩) 마저도 빠져있어 별도의 USB 통 신 모듈을 이용해서 PC와 연결해야 합니다. 아두이노 우노는 5V의 전압에서 동작하는 데 반해 3.3V/5V용이 별도로 존재하는 것이 특징입니다. 그래서 3.3V 동작 전압이 필 요한 경우나 리튬폴리머(LiPo) 배터리를 이용하는 경우 궁합이 좋습니다. 최소한의 부 품으로만 구성되어 있어서 저렴하고 소형이지만 초보자가 다루기엔 조금 어렵습니다.

아두이노 메가(Mega, Mega2560)

10

Part 1 아두이노 시작하기

아두이노 우노 보드보다 덩치도 크고, 제어할 수 있는 핀도 훨씬 많고, 더 빠르고, 메모 리와 저장용량도 더 큰 보드입니다. 로봇처럼 제어해야 할 하드웨어가 많고 복잡한 작업 을 처리해야 할 경우에 어울립니다. 하지만 단순히 기능(스펙)이 좋다고 메가 보드를 선 택해서는 안됩니다. 메가 보드는 ATmega2560 칩을 사용하기 때문에 일반 핀과 특수 기능 핀 배치가 우노 보드와는 다릅니다. 우노 보드에 맞춰진 예제가 제대로 동작하지 않을 수 있으며, 이 경우 초보자는 문제 지점을 찾기 힘듭니다.

아두이노 릴리패드(LilyPad)

웨어러블, 전자 바느질 등에 쓰기 편하게 변형된 아두이노 보드입니다. 예쁜 꽃 모양이 라 패션 쪽에 사용하게끔 만들었다는 것을 알 수 있습니다. 비슷한 모양의 여러 가지 전 용 악세사리 장치도 함께 선보이고 있습니다. 아두이노 우노 보드와 같은 계열의 칩을 사용하므로 사용법은 크게 다르지 않지만, 변형된 보드가 많아서 주의가 필요합니다.

Chapter 1 나의 첫 아두이노

11

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

많이 쓰이지는 않지만, 나름의 쓰임새가 있는 보드입니다. 레오나르도에 탑재된

ATmega32U4 칩은 USB 통신 기능을 자체 내장하고 있어서 통신 칩 없이도 PC와 연 결할 수 있습니다. 덕분에 PC와의 통신에 사용되는 핀을 아껴서 다른 모듈과 통신하는 용도로 사용할 수 있습니다. 그리고 PC는 레오나르도 보드를 마우스, 키보드와 같은 입 력 장치로 인식하기 때문에 나만의 입력 장치로도 만들 수 있습니다. 하지만 주의하세 요. 우노 보드와는 특수 기능 핀 설정이 다릅니다.

아두이노 마이크로(Micro) 우노 보드의 소형화 버전이 나노 보드라면, 레오나르도 보드의 소형화 버전은 마이크로 보드입니다. ATmega32U4 칩을 사용하기 때문에 부가적인 소켓 등을 제외한 나머지 특징이 레오나르도 보드와 동일하지만 공간을 적게 차지해서 유용합니다.

12

Part 1 아두이노 시작하기

아두이노 프로 마이크로(Pro Micro) 우노–나노–프로 미니 보드의 관계가 레오나르도–마이크로–프로 마이크로 보드라고 생각하면 됩니다. 프로 마이크로 보드는 3.3V에서 동작이 가능하기 때문에 충전용 배터 리와 궁합이 좋으며 크기도 가장 작은 축에 속합니다. 프로 미니 보드와는 달리 PC와 직 접 연결이 가능하기 때문에 더욱 유용합니다(위에 설명한 것처럼 ATmega32U4 칩은 별도의 USB 통신 모듈이 필요 없습니다). 이 보드는 아두이노의 공식 보드로 소개되어 있진 않습니다만 해외 쇼핑몰을 통해 비교적 저렴한 가격으로 구매할 수 있습니다.

기타 보드 이 외에도 다양한 보드가 있지만 당장 모든 특징을 알 필요는 없습니다. 현재 사용하는 보드가 부족하다고 생각될 때쯤 아래 링크로 들어가 용도에 맞게 다음에 사용할 보드를 찾아보면 됩니다. 아두이노 개발환경과 호환이 된다면 서드파티 업체(정식 업체가 아니 지만 호환되는 물품을 만드는 업체를 ‘서드파티’라고 지칭합니다)에서 나온 보드를 사용 해도 좋습니다. IUUQTXXXBSEVJOPDDFO.BJO1SPEVDUT

아두이노 스타터 킷 아두이노를 시작하기 위해서는 아두이노와 몇 가지 부품을 준비해야 합니다. 저항, LED, 브레드 보드, 점퍼선 등등 자잘한 부품이 필요한데 이 모두를 각각 구매하기는 굉장히 번거로운 일입니다. 그래서 아두이노 입문자에게는 초급 과정에서 필요한 부품들이 모두 구비되어 있는 ‘아두이노 스 타터 킷’을 추천합니다. 스타터 킷도 종류가 많은데 기본 부품은 공통으로 포함하고 있으므로 자신 의 예산에 맞춰 선택하면 되고, 사용하다가 부족한 부품은 나중에 추가로 구매하면 됩니다. 이 책 에서도 아두이노 스타터 킷에 공통적으로 들어가는 부품을 최대한 활용할 것입니다. 아두이노 및 부품을 구매하는 방법은 책 뒷부분에 있는 부록에서 확인할 수 있습니다.

Chapter 1 나의 첫 아두이노

13

03 | 아두이노 준비 과정 아두이노의 가장 큰 장점인 ‘바로 시작하기’로 넘어가 볼까요? 뭐부터 시작하는 것이 좋을까요? 남들이 다 한다는 ‘LED 깜빡이’부터라도 해보고 싶은데... 어떻게 할까요? ‘LED 깜빡이’를 한다고 가정하고, 먼저 순서가 어떻게 되는지 살펴봅시다. 1

아두이노와 원하는 부품(LED, 저항 등)을 연결한다.

2

아두이노를 USB 케이블로 PC에 연결한다.

3

아두이노 개발환경 프로그램을 실행한다.

4

아두이노에 연결된 LED가 동작하도록 코드(스케치)를 작성한다.

5

코드, 즉 스케치를 컴파일하고, 컴파일한 바이너리를 아두이노 보드에 업로드한다.

6

아두이노가 스케치대로 동작하는지 확인한다.

모르는 개념이 몇 개 나왔는데, 하나씩 뜯어보겠습니다. 가장 먼저 할 것은 부품을 연결하는 일입니다. 우리가 원하는 부품을 아두이노에 연결해 야겠지요. 그리고 이렇게 연결한 상태로 아두이노와 PC를 USB 케이블로 연결합니다. 이 단계를 부품을 물리적으로 연결하는, 즉 하드웨어 세팅 단계라고 할 수 있습니다. 그리고 연결된 부품을 제어할 수 있도록 소스코드를 작성해야 합니다. 하드웨어를 동작 시킬 소프트웨어를 작성하는 것인데요. 아두이노 개발환경을 PC에서 열면, 화면에 바로 코드를 작성할 수 있습니다. 이때 작성하는 소스코드를 아두이노에서는 스케치(Sketch) 라 부릅니다. 아두이노가 기반한 프로세싱 언어에서 사용하던 단어인데, 코드 덩어리, 즉 작성한 프로그램을 지칭합니다. 여기서 말하는 ‘LED 깜빡이’의 경우는 바로 시험해볼 수 있도록 개발환경에 내장되어 있습니다. 처음에는 코드를 한 줄도 안 쓰더라도 예제 코드로 바로 실행해 볼 수 있습니다. (아두이노 개발환경 프로그램을 설치하지 않았다면 실행할 수 없겠지요? 아두이노 개발환경 프로그램 설치는 이어지는 ‘04 | 아두이노 개발 환경’에서 설명합니다) 14

Part 1 아두이노 시작하기

하드웨어, 그리고 소프트웨어 준비가 끝나면 소스코드를 아두이노가 인식할 수 있는 형 태로 바꿔주는 컴파일 과정을 거쳐야 합니다. 코드는 컴퓨터가 쓰는 언어이지만, 그래도 사람이 더 알아보기 쉽게 구성되어 있습니다. 이 컴파일 과정은 사람이 쓴 코드를 컴퓨 터가 더 쉽게 이해할 수 있게 바꿔주는 과정입니다. 코드를 작성하고 있는 화면 위쪽의 ‘확인’ 버튼 하나를 누르면 컴파일이 진행되는데, 이때 나오는 결과물을 바이너리 혹은 펌웨어라 부릅니다. 컴퓨터의 언어지요. 이 과정에서 만약 소스코드에 문제가 있다면 오 류 메시지가 뜨면서 어디가 문제인지 알려줍니다. 결과물이 나왔으니 아두이노에 컴퓨터 언어를 전달해야겠지요? 이 과정이 업로드입니 다. 긴 과정처럼 설명했지만 컴파일 및 업로드는 ‘업로드’ 버튼 하나를 누르면 연결해서 자동으로 진행됩니다. 중간에 문제가 있다면 오류 메시지를 보고 오류를 수정하는 작업 이 필요하겠지만, 그렇지 않다면 아두이노 보드에 탑재된 자그마한 LED가 깜빡거리면 서 바이너리 코드가 업로드되고 있다는 것을 보여줍니다.

LED가 꺼지면, 그때부터 아두이노는 작성한 소스코드대로 동작하기 시작할 겁니다. 만 약 준비(하드웨어 연결, 소스코드)가 치밀하지 못했다면 무언가 제대로 안 되는 것이 있 겠지요. 오류와 부딪칠 때는 단계별로 하나씩 돌아가서 각 단계를 점검하고, 문제를 찾 아 수정하는 과정을 반복하면서 진행을 합니다. 이제 살짝 감이 왔나요? 이제 직접 아두이노를 테스트해볼 시간입니다. 테스트를 위해 아래 준비물을 챙겨주세요. 아두이노 우노 보드

LED, 스위치, 저항, 점퍼선 등(아두이노 스타터 킷을 사면 들어있는 기본 부품) PC 아두이노 개발환경

세 번째까지 준비했다면, 아두이노 개발환경은 웹사이트에서 내려받을 수 있습니다. 아 두이노 개발환경을 설치해봅시다.

Chapter 1 나의 첫 아두이노

15

04 | 아두이노 개발환경 아두이노 개발환경은 아두이노 공식 홈페이지에서 배포하는 아두이노 개발 도구입니다. 개발환경은 축약해서 IDE(통합개발환경의 약자)라고도 하는데, 프로그래밍을 하는 소 프트웨어 도구를 부르는 말입니다. 프로그램을 만드는 프로그램이라고 할 수 있겠지요. 아두이노 개발환경은 아두이노를 동작시키는 스케치 작성과 컴파일, 업로드, 디버깅(문 제 해결)을 위한 도구를 모두 포함하고 있기 때문에 소프트웨어 작업은 대부분 이 도구 를 이용하게 됩니다. 아두이노 개발환경은 아두이노 공식 홈페이지에서 내려받을 수 있습니다. 아래 홈페이 지 접속하셔서 최신 버전을 다운로드 받으세요. IUUQBSEVJOPDDFO.BJO4PGUXBSF

최신 아두이노 개발환경 버전은 1.6.11 버전입니다. 대부분의 경우 최신 버전의 아두이노 개 발환경을 설치해서 사용하면 됩니다. 하지만 가끔 인터넷에서 구한, 구형 개발환경에 맞춰진 스케치가 문제를 일으키기도 합니다. 이때는 1.0.6 버전을 추가로 설치해서 테스트해보세요. 책의 본문에서는 아두이노 개발환경 1.6.8 버전을 기준으로 예제를 작성했습니다.

일반적인 프로그램 설치 방법과 마찬가지로 화면의 지시를 따라가면 됩니다. 여기서는 윈도우 환경에서 설치하는 것을 기준으로 설명하겠습니다. 윈도우용 설치파일은 2가지 버전이 있습니다. 자동설치(installer) 버전과 무설치 버전

(ZIP file for non admin install). 이 중 자동설치 버전을 다운로드 받으세요. PC에 서 아두이노를 인식하려면 드라이버가 설치돼야 하는데, 무설치 버전은 이 과정을 생략 합니다. 다운로드 받은 파일을 실행하면 다음과 같은 과정을 거쳐 설치하실 수 있습니다.

16

Part 1 아두이노 시작하기

1

창이 열리면, 라이선스에 동의하는 [I Agree](동의합니다) 버튼을 선택합니다.

2

다음 창에서 컴포넌트를 전부 선택한 후에 오른쪽 아래에 있는 [Next >](다음) 버튼 을 선택합니다.

Chapter 1 나의 첫 아두이노

17

3

창에 들어 있는 아두이노 설치 경로를 확인한 후에 오른쪽 아래의 [Install](설치하 기) 버튼을 선택합니다.

4

18

그러면 아두이노 개발환경의 설치가 진행됩니다.

Part 1 아두이노 시작하기

5

중간에 윈도우 보안 창이 뜨는 경우에는 [설치] 버튼을 선택합니다.

6

설치가 완료되었습니다.

자동설치 버전을 이용하면 파일이 [C:\Program Files (x86)\Arduino] 경로에 설치 될 것입니다. 이 경로에 한 번 접속해보세요. 내부에 [libraries] 폴더가 보입니다. 라이 브러리는 특정 기능을 사용하기 쉽도록 미리 만들어둔 소스코드 묶음입니다. 인터넷에 서 원하는 라이브러리 파일을 구해서 쓰는 경우 이 폴더에 넣으면 아두이노가 자동으로 인식하므로 이 경로는 외워두면 좋습니다.

윈도우 버전에 따라 [C:\Program Files\Arduino] 경로에 설치될 수도 있습니다.

Chapter 1 나의 첫 아두이노

19

설치가 완료되면 바탕화면에 생성된 아두이노 아이콘을 눌러 실행해보세요. 아래와 같 은 실행 화면이 뜹니다.

메뉴 실행 아이콘

텍스트 에디터

하단 정보창

그림 1-3 아두이노 개발환경 실행창 구성

간단한, 마치 노트패드 같이 생긴 실행창이 뜹니다. 실행창은 크게 4개의 영역으로 구성 됩니다.

20

Part 1 아두이노 시작하기

메뉴 스케치 불러오기, 저장하기, 연결된 아두이노 보드의 종류, 포트 설정, 라이브러리 설정, 예제 파일 불러 오기 등 다양한 설정 메뉴를 제공합니다.

실행 아이콘 컴파일, 업로드, 시리얼 모니터 등 자주 사용되는 기능을 바로 실행할 수 있는 아이콘을 제공합니다.

텍스트 에디터 스케치를 작성, 수정할 수 있는 영역입니다. 오른쪽 위의 ▼ 아이콘을 이용해 스케치 파일을 추가, 삭제 할 수도 있습니다.

하단 정보창 선택된 아두이노 종류와 포트, 컴파일 및 업로드 과정을 수행한 결과 등이 표시되는 영역입니다.

당장은 대강의 구성만 눈에 익혀두면 됩니다. 예제를 하나하나 실행하다 보면 금방 친해 질 거라 생각합니다.

05 | LED 깜빡여보기 프로그래밍을 위한 개발환경을 PC에 설치하면 제대로 동작하는지 확인을 해봐야겠지 요. 소프트웨어의 경우는 이 때 확인용 프로그램, 즉 가장 단순한 예제를 ‘Hello World’ 예제라고 합니다. 화면에 Hello World라는 텍스트를 띄워보는 예제지요. 하드웨어의 세계에도 Hello World 예제가 있습니다. 다른 점이 있다면 화면에 글자를 출력하는 대신 기본 소자인 LED를 깜빡여본다는 점입니다. 아두이노를 만났으니 친해 지는 인사로 LED를 한번 깜빡여보도록 합시다.

Chapter 1 나의 첫 아두이노

21

1

가장 먼저 USB 케이블을 이용해서 아두이노와 PC를 연결하세요. USB 케이블은 양 쪽이 같은 모양이 아닌, 한쪽은 일반적인 USB 그리고 다른 한쪽은 좀 더 두꺼운 모 양으로 되어 있는 A-B 타입 USB 케이블을 사용합니다. PC에는 일반형(USB A), 그 반대쪽을 아두이노(USB B)에 연결합니다. 그리고 PC 화면에서 아두이노 개발 환경을 실행하고 상단 메뉴 영역에서 [파일–예제–01.Basics–Blink]를 순서대로 클릭합니다.

22

Part 1 아두이노 시작하기

2

그러면 새로운 창에 개발환경에 내장된 Blink 예제 스케치가 열립니다.

아! 그런데 아직 LED를 연결하지 않았네요. 괜찮습니다. 아두이노 보드 위에는

LED가 하나 붙어 있는데, 이 LED는 보드 내부에서 13번 핀과 연결되어 있습니다. 예제는 13번 핀을 사용하는 것으로 짜여 있으므로 아무 부품이 없더라도 당장 이걸 사용해봅시다.

Chapter 1 나의 첫 아두이노

23

3

예제를 실행하기 전에, 즉 버튼을 누르기 전에 먼저 아두이노 개발환경에 현재 연결 된 아두이노 보드 종류가 무엇인지, 연결된 포트는 몇 번인지를 알려줘야 합니다. 메 뉴 영역에서 [도구–보드–아두이노 우노] 보드를 선택하세요. 완성된 소스코드와 하드웨어 전부 준비가 되었네요. 이 부분은 아두이노를 많이 사 용하더라도 종종 잊어버리곤 하는 부분이니 꼭 기억해두세요.

24

Part 1 아두이노 시작하기

4

그리고 [도구 – 포트 – COMx] 에서 연결된 아두이노 포트를 선택해줍니다.

연결된 COM 포트가 무엇인지 모를 경우는 윈도우 탐색기에서 [컴퓨터–마우스 우클릭–장 치 관리자]를 실행하세요. 포트(COM & LPT) 항목에서 아두이노가 연결된 포트 넘버를 확인 하면 됩니다.

Chapter 1 나의 첫 아두이노

25

5

이제 아이콘 영역에서

(확인) 버튼을 눌러보세요. 이 버튼을 누르면 곧 컴파일이

완료되었다는 메시지가 하단 정보창에 표시됩니다. 오류가 없는 경우 완료 메시지 가 뜨고, 오류가 있다면 오렌지색 오류 메시지가 표시됩니다.

26

Part 1 아두이노 시작하기

6

아두이노에 컴파일된 결과물을 올릴 차례네요.

(업로드) 버튼을 누르면 미리 설정

한 아두이노 보드 종류에 맞게 COM 포트를 통해 코드가 업로드됩니다.

업로드 버튼은 실제로 컴파일 및 업로드 과정을 순서대로 진행합니다. 따라서 업로드를 할 때 컴파일 확인 과정이 없더라도 ‘업로드’ 버튼 하나로 컴파일과 업로드가 순서대로 진행됩니다.

Chapter 1 나의 첫 아두이노

27

7

아두이노 개발환경에 업로드 완료 메시지가 표시되고, 아두이노 보드의 LED가 1초 마다 깜빡이는 것을 확인할 수 있나요?

사실은 아두이노 보드를 처음 구매했을 때에는 Blink 예제가 이미 올라가 있습니다. 그 래서 USB 케이블을 연결만 해도 아두이노가 전원을 공급받아 동작하면서 LED를 깜빡 이지요. 그래서 새 아두이노를 사용한다면, Blink 예제를 업로드해도 변화가 없는 것이 정상입니다. 이렇게 가장 간단한 예제로 아두이노를 시작해보았습니다. 여러분은 아두이노라는 작은 보드가 어떻게 작동하는지 흥미를 느껴서 이 책을 손에 쥐 고 있겠지요? 작은 빛을 깜빡인다는 것, 어찌 보면 작지만 어찌 보면 지금까지 해보지 못 했던 일들을 쉽게 해주는 것이 아두이노의 진정한 매력입니다. 이렇게 아두이노와 조심 스럽게 인사를 나눠보았으니 이제 아두이노와 대화를 해볼까요? 다음 장은 아두이노의 언어, 컴퓨터의 언어에 대해서 다루어보려고 합니다. 아두이노에 대해서 잘 알지 못해도 할 수 있는 일이 있지만, 아두이노와 적극적으로 소통을 하게 되 면 정말 수없이 많은 일들을 할 수 있어요.

28

Part 1 아두이노 시작하기

Chapter

02 프로그래밍의 기초

아두이노는 전자적인 제어를 해주는 하드웨어와 소프트웨어가 결합하여 동작합니다. 따라서 회로를 구성하는 것만큼이나 프 로그래밍 기술도 중요합니다. 이번 장에서는 아두이노를 다루기 위해 필요한 최소한의 프로 그래밍 기술을 다룹니다.

아두이노를 제대로 이해하려면 하드웨어와 소프트웨어를 전부 살펴봐야 합니다. 여기서 하드웨어는 손으로 만질 수 있는 물리적인 부분, 즉 아두이노 보드와 여러 부품, 또한 그 사이의 물리적인, 전자적인 연결을 포함합니다. 그리고 소프트웨어는 실제로 보이지 않 는 부분, 즉 아두이노를 동작시킬 소스코드 부분을 가리킵니다. 코드의 의미와 연결을 이해해서 실제로 소스코드를 작성하는 과정을 이르는 것이지요. 아두이노를 사용하기 위해서는 전자적인 지식도 필요하지만, 소스코드 작성을 위한 프로그래밍 지식도 필요 합니다. 앞서 보았듯이 아두이노를 위한 프로그래밍은 아두이노 개발환경에서 합니다. 이 안에 서는 컴퓨터 언어를 사용하는데, 사람과 사람의 관계에서와는 달리 뜻을 전달하려면 컴 퓨터의 언어로 말을 해줘야 합니다. 이 안에서 소통되는 언어이자 대표적인 프로그래밍 언어인 C 언어와 여기에서 파생된 언어인 C++ 언어와 친해져 봅시다. 이번 장에서는 아두이노를 제어하기 위해 필요한 C/C++ 언어의 기초 문법을 간단히 다 루려고 합니다. 프로그래밍이 처음이라면 눈에 쉽게 들어오지 않고, 진도가 더딜 수도 있지만, 자주 스케치를 보면 어느 정도 익숙해지는 순간이 옵니다. 그 순간에는 문자의 나열로만 보이던 코드가 덩어리로 묶이면서 여기에 담긴 논리적 흐름이 이해되기 시작 합니다. 이미 프로그래밍 경험이 있다면, 혹은 하드웨어를 다루는 것으로 바로 넘어가고 싶은 사 람은 이번 장은 넘어가도 됩니다. 하드웨어 부분을 진행하다가 코드에 담긴 뜻이 궁금해 지면 다시 이 장으로 돌아오세요.

30

Part 1 아두이노 시작하기

01 | 스케치와 프로그래밍 아두이노 우노 보드에 탑재된 ATmega328P 칩의 사양을 잠시 살펴보겠습니다. 클럭 속도(초당 사이클) : 16MHz

SRAM : 2KB 플래시 메모리 : 32KB(0.5KB는 부트로더가 사용)

EEPROM : 1KB

여기서 첫 항목은 속도, 뒤의 항목 세 가지는 여러 방식의 저장 장치인데, 우리가 사용하 는 PC의 속도와 메모리에 비교해서 생각하면 아주 낮은 사양을 가지고 있습니다. 당연 히 PC 수준의 복잡한 작업을 할 수 없고 현란한 화면을 구현할 수도 없습니다(화면 자체 가 없으니 기대할 수가 없겠지요!). 하지만 반대로 생각하면 엄청나게 간단하겠다는 것 을 짐작할 수 있습니다. 관리해야 할 게 많지 않으니 간단한 프로그래밍만으로도 아두이 노를 움직일 수 있습니다. 처리 속도의 차이가 아무리 크더라도 아두이노, 그리고 PC는 전산처리를 해준다는 점에 서 둘 다 컴퓨터라고 할 수 있습니다. 이 둘을 가게에 비유해볼까요? PC를 종업원이 많 은 프렌차이즈라고 할 수 있습니다. 굉장히 복잡한 업무를 많은 직원이 달라붙어 유기 적으로 처리하지요. 성격이 다른 여러 일을 한꺼번에 처리할 수도 있고, 빨리 처리할 수 도 있습니다. 하지만 메뉴에 없는 주문은 받지 않을지도 몰라요. 반대로 어떤 가게는 상 대적으로 단순한 일들만 천천히 처리하기도 합니다. 아두이노는 느긋한 1인 가게라고 할 수 있어요. 오직 한 명의 직원이 손님의 주문을 꼼꼼히 메모해서 하나씩 처리하는 거 지요. 동시에 여러 가지 일을 처리할 수 없고, 그렇기 때문에 순서대로 하나씩 일을 합니 다. 하지만 끈기를 가지고 세세하게 부탁하면 손님이 제안하는 새로운 메뉴를 만들어줄 수도 있어요.

Chapter 2 프로그래밍의 기초

31

그러니 우린 한 명뿐인 직원이 효율적으로 일할 수 있도록 꼼꼼하게 하고 싶은 것, 먹고 싶은 것을 알려줘야 합니다. 일종의 작업 설명서라고 할 수 있을 것 같네요. 이 작업 설 명서가 바로 아두이노의 스케치에 해당합니다. 작업을 꼼꼼히 설명해서 직원의 능력을

100% 발휘하도록 하는 부탁의 미학이 바로 프로그래밍입니다. 1장에서 LED를 깜빡이게 하려고 예제 스케치를 불러왔었습니다. 이 스케치는 LED를 깜빡이는 동작을 반복하도록 작성된 코드가 들어있는 작업 설명서입니다. 컴파일과 업 로드 과정은 작성된 작업 서류에 문제가 없는지 확인하고 아두이노가 이해할 수 있게 번 역, 정리해서 넘겨주는 과정이라 할 수 있습니다. 일단 아두이노에 작업 내용이 전달되면 오직 하나뿐인 아두이노의 일꾼은 성실히, 그리 고 쉼 없이 작업을 처리합니다. 전기만 끊어지지 않는다면요.

02 | 함수 이제 본격적으로 아두이노 프로그래밍을 위한 문법을 알아보겠습니다. 사람의 언어와 마찬가지로 컴퓨터 언어의 원칙도 ‘문법’이라고 부릅니다. 아두이노 개발환경을 새로 실행해보세요. 아마 오른쪽처럼 간단한 기본 스케치가 표시 될 것입니다.

32

Part 1 아두이노 시작하기

그림 2-1 아두이노 개발환경 실행 화면

중간에 빈 편집 영역(텍스트 에디터)에 아두이노 스케치에서 대부분 쓰는 기본 코드가 들어가 있습니다. 코드에 사람의 언어가 섞여 있지요? 슬래시 두 개(//) 뒤에는 알아볼 수 있는 영어 단어들이 있습니다. //로 시작하는 내용은 컴퓨터, 즉 아두이노에게 전달하는 내용이 아니라 작성한 스 케치를 열어볼 사람들에게 전달하는 내용입니다. ‘이러이러한 목적으로 이런 코드를 썼다’라 고 누가 봐도 알 수 있게끔 말이지요. 아두이노의 동작과는 무관한 부분입니다. ‘주석’이라고 부르는데, 코드를 보는 사람을 위한 도움말 정도로 생각하면 됩니다. 주석은 아무 기능이 없으 므로 무시해도 됩니다.

Chapter 2 프로그래밍의 기초

33

예제 2-1 아두이노 기본 코드

WPJETFUVQ \ QVUZPVSTFUVQDPEFIFSF UPSVOPODF

^

WPJEMPPQ \ QVUZPVSNBJODPEFIFSF UPSVOSFQFBUFEMZ

^

코드를 살펴보도록 하겠습니다. 코드에 중괄호 ‘{ }’로 둘러싸인 부분이 두 군데가 있습니 다. TFUVQ 이후에 나오는 영역과 MPPQ 이후에 나오는 영역입니다. 이 두 영역은 구 체적인 일을 하려고 중괄호로 감싼 뒤 setup, loop라는 이름을 붙여 둔 겁니다. 이렇게 중괄호를 이용해서 영역을 만든 뒤 이름을 붙여둔 것을 우리는 ‘함수(function)’ 라고 부릅니다. 보통 음식점은 홀, 주방, 카운터 이렇게 공간이 구분되지요? 이와 비슷하게 관련된 작업 을 한 곳에서 처리할 수 있도록 모아서 이름을 붙여둔 것이 함수입니다. 음식점의 주방 에 주문을 넣으면 요리가 나오지요. 이걸 함수로 표현하면 아래처럼 됩니다.

GPPELJUDIFO PSEFS \ пઙਃܻ੘স ^

이것을 컴퓨터가 받아들이는 형태로 표현하면 오른쪽과 같습니다.

34

Part 1 아두이노 시작하기

୹۱ೡ@‫੉ؘ‬ఠ@ఋੑೣࣻ@੉ܴ ੑ۱ೡ@‫੉ؘ‬ఠ@ఋੑ \ ୊ܻೡղਊ ^

SFUVSO@UZQFGVODUJPO@OBNF JOQVU@UZQF \ jj ^

이러한 내용이 실제로 어떻게 보일지 확인해볼까요? 간단한 프로그램이지만 코드는 대 부분 의미를 함축하고 있기 때문에 당장 눈에 안 들어올 수 있습니다. 간단한 함수를 만 들면서 프로그램을 작성해보겠습니다. 숫자 두 개를 넣으면 덧셈을 해서 결과를 알려주 는 함수를 만든다면 아래처럼 됩니다.

JOUBEE JOUB JOUC \ JOUD DB C SFUVSOD ^

컴퓨터는 사람과는 다르게 글을 이해하는데, 가장 큰 차이는 아무것도 가정하지 않는다 는 점입니다. 그래서 컴퓨터에 말을 걸 때는 모든 것을 정확하게 정의해서 알려줘야 합 니다. 첫 줄의 JOU라는 코드는 정수(int는 영어로 정수를 의미하는 integer의 줄임)를 의 미합니다. 숫자를 다룬다는 것을 알려주는 것이지요. 함수 이름 앞에 붙어 있으므로 출 력할 데이터의 종류가 정수임을 표시합니다. 위에 쓴 ‘데이터 타입’은 말 그대로 데이터 의 종류를 부르는 말이고, 자료의 형태, 즉 ‘자료형’이라고도 많이 부릅니다.

Chapter 2 프로그래밍의 기초

35

그렇게 생각하고 첫 줄을 보면 아래와 같은 순서로 읽을 수 있습니다. 1

출력할 데이터 타입은 정수이다.

2

함수의 이름은 add(더하기)이다.

3

add 함수에 입력할 데이터 타입도 정수이다.

4

정수 2개를 입력받아서 a, b라고 부른다(쉼표로 구분).

우리가 생각하는 순서로 고치면, BEE라는 함수에 정수 2개를 B, C 자리에 넣으면 중괄호 안의 과정을 거친 후에 정수로 결과 데이터를 받을 수 있다는 의미입니다. 이제 함수 안의 내용을 살펴보겠습니다. 함수 안에서는 덧셈을 하고 결과를 넘기는 과정이 진행됩니다. 일단 계산한 결과를 c라 고 부를 거라고 준비를 합니다. D도 역시 정수 값으로 사용할 것이므로 JOU라고 앞에 데 이터 타입 표시를 해줍니다.

JOUD

마지막에 세미콜론(;)이 붙었지요? 이건 문장의 마침표 같은 역할을 합니다. 여기까지가 하나의 작업이라는 것을 표시해 주는 거지요. 작업 내용을 적을 때는 습관처럼 세미콜론 을 붙여주세요! 이제 입력된 숫자를 a와 b라고 하고, 이 둘을 더해서 결과를 c라고 합니다. 여기서 B, C, D는 메모지 같은 역할을 해요. 매번 다른 숫자가 들어올 수 있으니 이 위치에 들어온 숫

자를 넣겠다고 표시하는 것이지요. 메모지에 숫자 값을 적을 때는 등호  기호를 사용하 면 됩니다. 오른쪽과 같은 코드는 수식이랑은 달라요. 오른쪽 코드의 의미는 ‘a 더하기

b는 c와 같다’가 아니라 ‘a와 b의 값을 더해서 결과로 나온 값을 c에 넣어라’의 의미입니 다. 코드 내에서의 더하기, 빼기, 곱하기, 나누기의 사칙연산은 각각 , , ,  기호를 사

36

Part 1 아두이노 시작하기

용하면 됩니다.

DB C

계산이 완료되었으니 c 메모지에 적힌 값을 전달해주면 됩니다. 주방(함수)에서 주문(입 력 데이터)을 받은 뒤 음식(출력 데이터)을 만들어서 내주는 것처럼요. 이때는 SFUVSO이 라는 명령을 사용하면 됩니다.

SFUVSOD

여기까지 BEE 라는 덧셈 함수를 작성해보았습니다. 이제 BEE 함수를 아두이노 개발환경 기본 스케치에 더해 보겠습니다. 아래처럼 BEE  함수를 붙여넣어 보세요. 예제 2-2 add() 함수를 더한 코드(chap2_2_function.ino)

WPJETFUVQ \ ^

WPJEMPPQ \ ^

JOUBEE JOUB JOUC \ JOUD DB C SFUVSOD ^

Chapter 2 프로그래밍의 기초

37

그럼 아두이노 음식점에 주방이 만들어진 것입니다. 여기에 주문을 넣어서 음식이 제대 로 나오는지를 확인해 보겠습니다! 함수를 동작시킬 때는 함수 밖에서 함수를 부르면 됩니다. 외부에서 함수를 호출한다고 하는데요. 음식점에서 직원이 홀에서 주문을 받아 주방으로 가서 음식을 만들고, 완성된 음식을 가지고 나와서 손님한테 최종적으로 전달하는 순서라고 생각하면 됩니다. 여기 서 아두이노 일꾼에게 주문을 넣는 것이 함수 호출입니다. 신경 써야 하는 점은, 함수를 호출할 때는 함수를 만들 때 적어둔 모양대로 불러야 합니 다. 우리가 작성한 BEE 함수는 정수 2개를 받도록 만들었으니 호출할 때도 정수 2개 를 넣어야 합니다. 1과 2를 더하도록 BEE 함수 호출을 해보겠습니다.

JOUTVN TVNBEE   

이렇게 작성하면 정수를 기록하는 TVN이라는 메모지에는 1과 2를 더한 결과가 기록됩 니다. 실제 아두이노 스케치에서 BEE 함수를 사용하면 아래처럼 됩니다. 예제 2-3 add() 함수를 호출하는 코드 추가(chap2_3_variable.ino)

WPJETFUVQ \ JOUTVN TVNBEE    ^

WPJEMPPQ \ ^

38

Part 1 아두이노 시작하기

JOUBEE JOUB JOUC \ JOUD DB C SFUVSOD ^

여기서는 TFUVQ 함수 안에서 BEE 함수를 불렀지만, 다른 곳에서 사용해도 됩니다. 우리가 작성한 코드를 아두이노가 알아듣고 있는지 확인하는 간단한 방법은 ‘컴파일’ 버 튼을 이용하는 겁니다. 왼쪽 위의 컴파일 버튼(체크 모양 ‘확인’ 버튼)을 눌러서 아래 까 만 창에 에러 메시지 없이 ‘컴파일 완료’가 표시되는지 확인하세요.

그림 2-2 컴파일 완료 화면 Chapter 2 프로그래밍의 기초

39

우리가 간단히 수정해 본 스케치 파일을 다시 보면 함수 3개, 즉 TFUVQ , MPPQ , BEE 가 보입니다. BEE 함수는 우리가 추가한 함수이고 TFUVQ 함수 안에서 불러

서 사용하는데, TFUVQ 함수와 MPPQ 함수를 부르는 곳은 없습니다. 그런데 왜 아두 이노는 이 두 함수를 기본으로 표시하는 것일까요? 우리가 작업 내역서를 아두이노에게 전달해줄 때 아두이노 일꾼은 작업을 어디서부터 시작해야 할지 모릅니다. 그래서 작업을 시작할 곳이 어디인지 미리 약속을 해뒀습니다. TFUVQ 함수가 미리 약속해둔 작업의 시작점입니다. 실제 아두이노에 전원을 넣어주

면 아두이노는 잠에서 깨어나 제일 먼저 TFUVQ 함수를 찾아서 작업을 수행합니다. 그 리고 TFUVQ 함수의 내용을 모두 처리하면 곧바로 MPPQ 함수를 처리하러 갑니다. MPPQ 함수는 이름(loop는 ‘순환’이라는 의미)처럼 무한하게 돌고 도는 함수입니다. TFUVQ 함수는 처음 시작할 때 딱 한 번 호출되지만, 이후부터 MPPQ 함수는 무한 반

복 호출됩니다. 따라서 TFUVQ 함수의 중괄호 안에는 처음 한 번만 처리할 작업들, 첫 세팅에 필요한 작업을 적어주면 되고, 계속 반복적으로 실행되어야 하는 작업은 MPPQ  함수의 중괄호 안에 적어주면 됩니다. 좀 전에 덧셈 함수를 이용해서 더하기를 할 수 있도록 스케치를 작성했지만, 아두이노 보드에는 덧셈 결과를 사람에게 보여줄 수 있는 디스플레이 화면이 없습니다. 이럴 때는 ‘시리얼 모니터’라는 기능을 이용합니다. USB로 아두이노와 PC가 연결되어 있는 상태 일 때, 아두이노가 PC로 데이터를 던져줘서 PC가 대신 출력하도록 하는 기능입니다. 이 기능을 이용해서 덧셈 함수로 계산한 결과를 확인해 보겠습니다. 작업하던 스케치에서 다음의 코드를 추가해 보세요.

40

Part 1 아두이노 시작하기

예제 2-4 PC 출력 기능을 더한 코드(chap2_4_array.ino)

WPJETFUVQ \ 4FSJBMCFHJO  

1

JOUTVN TVNBEE    4FSJBMQSJOU TVN  2 ^

WPJEMPPQ \ ^

JOUBEE JOUB JOUC \ JOUD DB C SFUVSOD ^

빨간색 코드가 새로 추가된 부분입니다. 아두이노가 PC로 데이터를 보내주기 위해서는 두 단계를 거쳐야 합니다. 먼저 아두이노와 PC의 통신을 하겠다고 아두이노에게 말해줘 야 합니다. 그럼 아두이노가 PC와 통신하기 위한 준비를 합니다.

1

의 코드가 이 내용에

해당합니다. 이제 아두이노와 PC는 통신할 준비가 되었으니 아두이노에서 데이터를 PC로 보내주면 됩니다.

2

의 코드가 그런 내용을 담고 있지요.

소괄호 ‘( )’ 안에 출력하고 싶은 숫자나 문자 등을 넣으면 됩니다. 그러면 PC에서 이 값 을 받아 표시해 줄 수 있습니다. 메모지 TVN은 BEE   함수의 결과인 3이 기록되어

Chapter 2 프로그래밍의 기초

41

있으니 PC 화면에서 3을 보여줄 것입니다. 추가한 코드는 그 외에도 여러 가지 의미를 담고 있지만, 당장은 파고들 필요는 없습니다. 나중에 좀 더 자세히 다루려고 하니 일단 은 어떻게 생겼는지 보고, 사용해보면 됩니다.

PC에서 아두이노가 보내준 데이터를 확인해 보겠습니다. 지금까지는 프로그래밍만 진 행했기 때문에 아두이노를 연결하지 않아도 괜찮았지만, 아두이노와 통신을 시도해보려 면 아두이노를 연결해야겠지요? 아두이노를 USB 케이블로 연결합니다. 포트를 설정한 후에 메뉴에서 ‘업로드’ 버튼을 클릭해서 수정된 스케치를 아두이노에 업로드합니다. 업 로드가 완료된 다음에 우측 상단의 돋보기 아이콘을 눌러 보세요.

그림 2-3 시리얼 모니터 실행

42

Part 1 아두이노 시작하기

돋보기 아이콘은 아두이노가 보내준 데이터를 보여주는 ‘시리얼 모니터’ 창을 띄워줍니 다. 아래와 같은 창이 뜨는 것을 확인할 수 있습니다.

그림 2-4 실행 결과 출력 화면

시리얼 모니터 창을 띄우고 잠시 기다리면 우리가 기대했던 대답인 ‘3’이 출력되는 것을 확인할 수 있습니다. 앞으로는 이런 방식으로 예제의 실행 결과를 확인할 수 있습니다. 지금은 코드가 짧지만, 점점 긴 코드가 나오면 책을 보면서 진행하기 어렵겠지요? 책에 사용 되는 모든 코드는 http://www.hanbit.co.kr/exam/2478에서 압축파일 형태로 받을 수 있 습니다.

그리고 하나 더 이야기하고 넘어가야 할 게 있네요. 방금 우리가 추가한 BEE 함수와 호출 코드를 잠시 사용하고 싶지 않을 때 쓰는 방법입니다. 당장 필요가 없을지 몰라도 나중에 쓰일 수 있도록 알아두는 편이 좋습니다. 코드를 삭제하는 대신 실행되지 않도록 막는 방법입니다.

Chapter 2 프로그래밍의 기초

43

예제 2-5 주석 사용 방법

WPJETFUVQ \ JOUTVN TVNBEE    ^

WPJEMPPQ \ ^

 JOUBEE JOUB JOUC \ JOUD DB C SFUVSOD ^ 

TFUVQ 함수 안의 코드 앞에 두 개의 슬래시 를 붙입니다. 이렇게 적으면 두 개의 슬

래시 뒤부터 줄이 바뀔 때까지 나오는 내용이 무시됩니다. 보통 코드 한 줄의 실행을 막 거나 코드에 설명을 넣어 둘 때 사용합니다. 컴퓨터가 코드로 인식하는 범위를 막아주는 ‘주석(comment)’ 기능입니다. BEE 함수를 정의한 부분도 어디가 바뀌었는지 잘 살펴보세요. BEE 함수 앞, 뒤를

‘/*’, ‘*/’ 기호로 감쌌습니다.  ,  기호도 주석 처리를 하는 방법인데, 여러 줄을 한 번 에 막을 때 사용합니다.

44

Part 1 아두이노 시작하기

주석은 코드의 실행을 막아주기도 하지만 코드가 어떤 의미인지 적는 용도로도 사용하 기도 합니다. 불멸의 기억력을 가진 게 아니라면 주석 칸을 만들어서 작성한 코드가 어 떤 의미인지 적어두세요. 코드는 컴퓨터의 언어이고 각각의 문법이 있기 때문에 눈으로 의미를 바로 읽기는 상당히 어렵습니다. 시간이 흘러 과거의 내가 왜 이렇게 했는지 고 민하는 건 프로그래밍의 세계에서 흔히 발생하는 일입니다. 또한, 다른 사람이 내 코드 를 봤을 때 설명을 보면 어떤 의도로 코드를 짰는지 알 수 있겠지요.

03 | 변수 함수에 이어서 변수를 알아봅시다. 우리는 이미 변수를 함수를 설명하면서 썼습니다. 덧 셈 함수를 만들 때 사용한 a, b, c 메모지가 바로 변수입니다. 이 메모지를 프로그래밍 세계에서는 ‘변수(variable)’라 부릅니다. 일반적인 변수의 사용법은 아래와 같습니다.

߸ࣻ੄@‫੉ؘ‬ఠ@ఋੑ߸ࣻ@੉ܴ

여기서 데이터 타입은 함수 개념 설명할 때에도 살짝 나왔는데, 한 번 사용해 봤으니 이 제 어떤 종류의 데이터가 있는지 알아봅시다. 아두이노 스케치에서 사용할 수 있는 데이 터 타입은 아두이노 웹사이트(http://www.arduino.cc/en/Reference/HomePage) 의 Data Types 부문에서 확인할 수 있습니다.

Chapter 2 프로그래밍의 기초

45

변수 중 자주 사용되는 몇 가지를 중점적으로 살펴보겠습니다. void setup() 함수와 loop() 함수 앞에서 보이는 종류입니다. 비어 있다는 뜻인데, 한마디로 ‘해당 사항 없음’ 을 알려주는 역할을 한다고 생각하시면 됩니다.

boolean 참 또는 거짓, 두 가지 상태 중 하나만을 표시할 때 사용합니다. 아두이노에서는 참을 true라고 표시하 고 거짓을 false라고 표시합니다.

char 영문자와 숫자, 기호 등 키보드에서 입력 가능한 문자 하나를 저장할 때 쓰입니다. 아스키(ASCII) 코드 라는 정해진 약속, 즉 표준안에서 영문자, 숫자, 기호마다 특정 숫자를 할당해 뒀는데 이 값을 이용해서 문자 하나를 표현합니다. 예를 들어 대문자 ‘A’는 십진수 65에 해당합니다.

int 정수 값을 저장하는 데 사용합니다. 여기에 저장할 수 있는 숫자의 범위는 -32,768~32,767입니다.

unsigned int 정수형이란 점은 int와 동일하지만 음수를 표현할 수 없습니다. 대신에 양수의 표현 범위가 2배로 늘어 나서 범위는 0~65,535입니다. unsigned라는 단어가 붙으면 음수를 포기하고 양수의 표현 범위를 늘립니다.

long 정수를 저장할 때 사용합니다. 정수형 int보다 저장 범위가 2배 크기 때문에 -2,147,483,648에서

2,147,483,647까지 저장할 수 있는 값의 범위가 늘어납니다.

unsigned long unsigned가 붙었으니 음수를 포기했겠지요? 나중에 시간 값을 저장하는 데 사용해서 응용해보겠습 니다.

float 실수를 저장할 때 사용합니다. 일반 계산에서는 정수를 많이 쓰지만, 소수점 이하 숫자를 다룰 때 사용 합니다.

string 문자열을 저장하고 변형할 때 사용합니다.

46

Part 1 아두이노 시작하기

실제로는 아래처럼 사용하게 됩니다. 예제 2-6 변수 사용 방법(chap2_6_loop.ino)

JOUJWBMVF 1 



JWBMVF੿ࣻഋ߸ٜࣻܳ݅ӝ݅೤‫׮פ‬





чਸ૑੿ೞ૑ঋইࢲই૒਷ࢎਊೡࣻহण‫׮פ‬



JWBMVF߸ࣻী҅࢑੄Ѿҗੋਸ੷੢೤‫׮פ‬





JWBMVF 

CPPMFBOJT$MJDLUSVF 2 

JT$MJDL߸ٜࣻܳ݅‫ࢲݶ‬ଵ USVF‫۽חژ‬





ੑ۱ ਵ‫۽‬ӝ‫۾‬೤‫׮פ‬

JT$MJDLGBMTF



JT$MJDLчਸѢ૙ GBMTF‫חژ‬ਵ‫۽‬ੑ۱ ਵ‫۽‬





߄Ը‫׮פ‬









DIBSPOF$IBSr"s 3 

POF$IBS߸ࣻী‫ޙ"ח‬੗ܳաఋղ‫ח‬чਸ









੷੢೤‫׮פ‬

POF$IBS



r"s৬э਷಴അੑ‫؀׮פ‬नইझః





௏٘ܳࢎਊ೮ण‫׮פ‬





GMPBUGWBMVF 4 

GWBMVFपࣻഋ߸ٜࣻܳ݅‫ࢲݶ‬ਸ



੷੢೤‫׮פ‬







GWBMVFGWBMVF 

GWBMVFчীਸ؊ೠٍ‫׮‬दGWBMVFчਵ‫۽‬



੷੢೤‫׮פ‬







예제에서 사용된 등호 ‘=’ 기호는 오른쪽의 결과값을 왼쪽에 넣어준다는 의미입니다. (수 학에서 사용하는 ‘같다’라는 의미가 아닙니다!) 그래서 변수에 값을 넣는 용도로 사용합 니다. 변수를 만드는 것을 ‘생성’ 또는 ‘선언’한다고 말합니다. 변수의 종류에 따라 생성하는 방 법을 위 예제에서 볼 수 있습니다.

Chapter 2 프로그래밍의 기초

47

1

JOU 예제를 보면, JWBMVF라는 이름의 정수형 변수를 만들고, 그다음 줄에서 만든 변

수에 값을 넣었습니다. 가장 기본적인 사용법입니다. 오른쪽 식에서 처리되는 결과값이 변수에 저장되게 됩니다. 2

CPPMFBO 예제를 보면 JT$MJDL 변수를 만들면서 바로 true 값을 넣었습니다. 변수를

만들면서 바로 값을 넣는 식으로도 사용할 수 있습니다. 그리고 바로 다음 줄에서 false 로 값을 바꿔 봤습니다. 아두이노 내부에서 처리할 때는 true 값을 1로 이해하고 false 값을 0으로 이해하기 때문에 CPPMFBO 변수는 0 또는 1 값을 가진다고 보면 됩니다. 3

DIBS 예제가 조금 특이합니다. DIBS 변수는 두 가지 방법으로 값을 넣을 수 있습니

다. 첫 줄처럼 특정 문자나 기호를 홑따옴표로 묶어서 이 문자에 해당하는 코드를 기억 하게 할 수 있습니다. 또는 원하는 문자의 코드 값을 숫자로 직접 지정해서 넣을 수도 있 습니다. " 문자의 아스키 코드 값(코드 값 전체는 인터넷 검색으로 쉽게 찾을 수 있습니 다)이 65이기 때문에 POF$IBS 변수에 두 번째로 들어간 숫자도 A 문자와 같은 값으로 기억됩니다. 4

마지막의 실수형 변수인 GMPBU는 정수 사용과 같은 방법으로, 소수점을 다룰 때 쓸

수 있습니다. 숫자를 바로 넣어도 되지만, 위 예제처럼 해당 변수를 불러서 사용할 수도 있습니다. 이 점은 모든 변수에 적용할 수 있는데요. 어떤 변수든 다른 줄에서 부를 때 최종적으로 기억하고 있는 값으로 처리됩니다. 예제 코드를 스케치에 넣어서 아두이노의 변수에 어떤 값이 들어가는지 직접 확인해 보 겠습니다.

48

Part 1 아두이노 시작하기

예제 2-7 변수 테스트

WPJETFUVQ \ 4FSJBMCFHJO    JOUJWBMVF

JWBMVF੿ࣻഋ߸ٜࣻܳ݅ӝ݅೤‫׮פ‬чਸ૑੿ೞ૑



ঋইࢲই૒਷ࢎਊೡࣻহण‫׮פ‬





JWBMVF  JWBMVF߸ࣻী҅࢑੄Ѿҗੋਸ੷੢೤‫׮פ‬ 4FSJBMQSJOUMO JWBMVF 

CPPMFBOJT$MJDLUSVF

JT$MJDL߸ٜࣻܳ݅‫ࢲݶ‬



ଵ USVF‫۽חژ‬ੑ۱ ਵ‫۽‬ӝ‫۾‬೤‫׮פ‬







4FSJBMQSJOUMO JT$MJDL  JT$MJDLGBMTF

JT$MJDLчਸѢ૙ GBMTF‫חژ‬ਵ‫۽‬ੑ۱ ਵ‫߄۽‬Ը‫׮פ‬

4FSJBMQSJOUMO JT$MJDL 

DIBSPOF$IBS"POF$IBS߸ࣻী‫ޙ"ח‬੗ܳաఋղ‫ח‬чਸ੷੢೤‫׮פ‬ 4FSJBMQSJOUMO POF$IBS  POF$IBS

"৬э਷಴അੑ‫؀׮פ‬नইझః௏٘ܳࢎਊ೮ण‫׮פ‬

4FSJBMQSJOUMO POF$IBS 

GMPBUGWBMVFGWBMVFपࣻഋ߸ٜࣻܳ݅‫ࢲݶ‬ਸ੷੢೤‫׮פ‬ 4FSJBMQSJOUMO GWBMVF  GWBMVFGWBMVF  





GWBMVFчীਸ؊ೠٍ‫׮‬दGWBMVFчਵ‫੷۽‬੢೤‫׮פ‬

4FSJBMQSJOUMO GWBMVF  ^

WPJEMPPQ \ ^

Chapter 2 프로그래밍의 기초

49

TFUVQ , MPPQ 처럼 아두이노에는 이미 약속된 여러 함수가 있습니다. 앞에서도 사용

법이 정해진 함수를 사용해봤는데요. 여기서도 변수를 생성하고 값을 바꿀 때마다 결과 값을 시리얼 모니터 창에 보여주는 4FSJBMQSJOUMO 함수를 이용해서 변수에 담긴 값 을 출력했습니다. 아두이노에 예제 코드를 업로드한 다음에, 스케치의 코드를 보고 예상 했던 값과 똑같이 출력되는지 확인하세요.

함수 예제에서 사용했던 Serial.print() 함수를 사용하면 출력된 값 뒤에 줄 바뀜이나 띄어쓰 기 없이 바로 다른 값이 붙어 출력됩니다. Serial.println() 함수는 결과값 출력 후 줄을 바꿔주 는 기능을 포함하는 함수입니다. 이 함수를 사용하면 자동으로 줄 넘김을 해주기 때문에 결과 값을 보기 편해집니다. Serial.println() 함수 코드를 Serial.print() 함수 코드로 교체해서 실행 하면 차이를 분명히 확인할 수 있습니다.

04 | 배열 달걀이 30개가 있습니다. 이걸 사용하기 편하게 보관하려면 어떻게 해야 할까요? 달걀 한 판을 담는 종이 상자가 떠오르지요? 마찬가지로 같은 종류의 변수 여러 개를 한꺼번 에 담을 수 있는 틀을 만들어 사용하면 편리한 경우가 많습니다. 이걸 ‘배열(array)’이라 고 합니다. 배열을 만들 때는 어떤 종류의 변수 몇 개를 만들지 미리 알려줘야 합니다. 데이터 타입 과 배열 이름을 적어주고 대괄호 ‘[ ]’ 안에 몇 개의 변수를 쓸 건지 지정하는 방식을 사용 해서 배열을 만들 수 있습니다. 그런데 만드는 방법은 꽤 다양합니다.

JOUNZ"SSBZ

1

JOUBSSBZ\    ^ 2 JOUBSSBZ\    ^ 3 DIBSUBMLIFMMP 4

50

Part 1 아두이노 시작하기

1

정수 6개를 담는, NZ"SSBZ라는 이름을 가진 배열을 만든다는 의미입니다. 대괄호를

이용해 6이라고 써서 저장 공간을 지정했지요. 하지만 이 배열은 만들어는 졌어도 배열 의 각 위치, 즉 ‘원소’에 정수 값을 넣어주지 않았기 때문에 사용할 준비가 안된 상태입 니다. 2

1, 5, 3, 7, 9 정수 값을 각각 넣어 둔, 5개의 원소를 담는 배열을 만듭니다. 배열의

크기는 지정하지 않았지만, 아두이노 개발환경이 몇 개로 잡을지 알아서 계산해줍니다. 이 예제처럼 배열의 원소를 미리 지정할 때는 중괄호와 값을 나누는 구분으로 쉼표를 ‘{ , }’를 사용합니다. 3

여기서는 배열의 크기와 값 모두 명시했습니다. 그런데 대괄호에 크기는 6으로 지정

하고 값은 5개만 넣어줬지요? 이때는 크기 6의 배열이 만들어집니다. 4

특별한 배열입니다. DIBS 변수는 문자 하나를 담는 데 씁니다. 그러니 char를 담는

배열은 문자열을 표현하는데 사용할 수 있습니다. 문자열 자체는 따옴표 두 개로 둘러싸 서 표현하지만, 이걸 변수에 넣을 때는 DIBS 배열을 사용합니다. 그런데 IFMMP는 다섯 문자인데 배열의 크기는 6으로 한 이유가 있습니다. 문자열은 반드시 끝을 알려주는 빈 문자를 하나 포함해야 하기 때문입니다. ‘비어 있음’을 표현하는 문자를 ‘널(null)’ 문자 라고 부르는데 이 문자를 마지막에 포함합니다. 문자열의 길이는 들쭉날쭉할 수 있기 때 문에 끝을 나타내는 특수한 문자를 마지막에 사용합니다. 배열을 만들었으니 사용도 해봐야겠지요? 배열을 사용하는 방법은 쉽지만, 주의해야 할 사항들이 있습니다.

Chapter 2 프로그래밍의 기초

51

예제 2-8 배열 사용 예제

JOUNZ"SSBZ JOUBSSBZ\    ^ JOUBSSBZ\    ^ DIBSUBMLIFMMP

JOUVOEFGJOFENZ"SSBZ  5 JOUBBSSBZ BSSBZ 6 BSSBZ

7

UBMLY 8

배열에 저장된 데이터, 각 원소를 사용할 때는 몇 번째 원소인지 표시하는 ‘숫자(index)’ 를 사용합니다. 그런데 컴퓨터의 세계에서는 이 숫자가 0부터 시작합니다. 그래서 첫 번 째 원소를 사용하고 싶으면 0을 사용해야 합니다. 따라서 NZ"SSBZ는 첫 번째 원소를 나타냅니다. 크기가 6인 배열의 마지막 원소를 사용하려면 NZ"SSBZ로 써서 사용해 야 합니다. 5

그런데 위 예제에서 NZ"SSBZ를 바로 사용하려면 문제가 생깁니다.

1

에서 배열을

만들 때 크기는 지정했는데 값을 아직 넣지 않았거든요. 배열을 사용할 때는 반드시 값 을 먼저 넣어준 뒤(초기화) 사용해야 합니다. 그렇지 않으면 예상치 못한 이상한 동작을 할 수 있습니다. 아래 두 줄은

6

배열의 각 원소에 담긴 값을 가져와서 사용하는 예제와

7

배열의 원소

에 다른 값을 넣는 예제입니다. 8

예제의 마지막 줄에 담긴 내용이 꽤나 흥미롭습니다. 앞에서 문자열의 마지막은 ‘널’

문자로 표현한다고 했습니다. 따라서 문자열을 담은 배열의 중간에 널 문자를 넣으면 컴 퓨터는 널 문자 앞까지만 문자열로 사용합니다. UBML 배열의 2번, 즉 0부터 세면 세 번

52

Part 1 아두이노 시작하기

째 원소에 강제로 널 문자를 넣는 내용입니다. Y는 널 문자를 16진수인 아스키 코드 로 표현한 것이므로 컴퓨터는 Y이 널 문자라고 인식하게 됩니다. 이렇게 배열 중간 에 널 문자를 넣어버리면, 이 배열은 세 번째 원소 앞까지만 쓰이게 됩니다. 기존에 원소

6개가 들어가는 tIFMMPu 문자열을 만들었는데, 널 문자까지만 쓰이기 때문에 이 문자 열은 tIFu 문자열처럼 취급됩니다. 아두이노에 스케치를 올려서 배열의 값이 변경된 것을 확인해 보겠습니다. 아래 스케치 를 업로드하고 시리얼 모니터에서 결과를 확인해보세요. 예제 2-9 배열 사용 방법(chap2_9_string.ino)

WPJETFUVQ \ 4FSJBMCFHJO    JOUNZ"SSBZ JOUBSSBZ\    ^ JOUBSSBZ\    ^ DIBSUBMLIFMMP  JOUVOEFGJOFENZ"SSBZ  4FSJBMQSJOUMO VOEFGJOFE   JOUBBSSBZ BSSBZ 4FSJBMQSJOUMO B 

4FSJBMQSJOUMO BSSBZ  BSSBZ 4FSJBMQSJOUMO BSSBZ 

4FSJBMQSJOUMO UBML 

Chapter 2 프로그래밍의 기초

53

UBMLY 4FSJBMQSJOUMO UBML  ^

WPJEMPPQ \ ^

05 | 조건문 생명체의 내부를 보면 신비로운 면이 많습니다. 유기체 속에서 일어나는 굉장히 복잡한 작업들이 4개의 기본 염기가 조합, 반복되는 DNA로 프로그래밍되니까요. 디지털 세상 도 마찬가지입니다. 통신을 하고 멀티미디어를 재생하는 복잡한 프로그램도 그 근원을 쫓아가면 몇 개의 데이터 타입, 그리고 조건문과 반복문으로 이루어져 있습니다. 조건문은 JG, FMTF와 소괄호 ‘( )’를 이용해서 만들 수 있습니다. 예제 2-10 조건문 사용 방법

JG B \ Bоࠁ‫׮‬੘ਸ‫ࣻ੄ٸ‬೯ೡ੘স

1

^ FMTFJG B \ Bоࠁ‫׮‬௿‫ࣻٸ‬೯ೡ੘স 2 ^ FMTF\ ա‫ݠ‬૑҃਋ Bоੌ‫ࣻ ٸ‬೯ೡ੘স 3 ^

54

Part 1 아두이노 시작하기

JG 뒤 소괄호 ( )로 감싼 영역에 특정한 조건을 넣어주면, 해당 조건에 맞을 때 중괄호 ‘{

}’ 안의 내용을 실행합니다. 조건문의 시작은 반드시 JG로 시작해야 합니다. 위 코드에서 첫 번째 조건을 보세요. a가 1보다 작을 때 한다는 의미입니다. 만약 a가 1보다 작아서 작업

1

1

부분에 들어가는 코드를 실행

을 수행했다면 하단에 나머지 FMTF

로 시작하는 조건들은 검사하지 않고 넘어갑니다. 두 번째 FMTFJG로 시작하는 조건문을 봅시다. 첫 JG 조건문에 해당하지 않는 경우, a가

1보다 작을 때에는 바로 아래의 FMTFJG에 달린 조건을 검사하게 됩니다. 이 조건문은 a가 1보다 작다면, a가 1보다 큰지 확인을 합니다. 이처럼 FMTFJG 는 또 다른 조건을 추가할 때 사용합니다. 앞에 나온 조건문을 만족하지 않는 경우 ‘이건 어때?’라고 다시 검사합니다. 마찬가지로 이 조건이 충족되면 작업

2

를 수행되고 하단의 FMTF 조건문은

무시되지만, 조건이 안 맞을 경우 다음의 FMTF 조건문으로 갑니다. 세 번째로 나오는 조건문 FMTF는 상황이 JG나 FMTFJG의 조건에 둘 다 해당되지 않을 때, 이도 저도 아닐 때 검사를 진행합니다. JG 혹은 FMTFJG로 검사했는데도 해당 사항 이 없는 나머지 경우에 작업

3

을 실행하라는 의미입니다. JG나 FMTFJG 조건이 이미 맞

았다면, 하단으로 연결된 이 조건문은 무시되겠지요. 만약 위 예제에서 a가 1보다 작을 때뿐 아니라 a가 1보다 클 때도 작업

1

을 실행하고 싶

다면 어떻게 할까요? JG 조건문을 두 번 사용하지 않고도 할 수 있는 방법이 있습니다.

JG B]]B \ ੘স

1

^

]] 기호를 이용해서 두 개의 조건 중 하나만 만족하면 실행하도록 코드를 수정했습니다.

이때 사용된 || 기호를 ‘or 논리 연산자’라고 합니다. 양 조건 중 하나가 맞을 경우 ‘맞 다’, 즉 참(true)이라는 결과를 줍니다. 위 예제처럼 사용하면 a가 1이 아닌 모든 경우에 작업

1

을 실행하겠지요. Chapter 2 프로그래밍의 기초

55

반대로 두 조건을 모두 만족시켜야만 작업

1

을 수행하게 하려면 논리 연산자를 사용

하면 됩니다. && 기호는 양 조건이 다 맞을 때 참이라는 결과를 주는 ‘and 논리 연산자’ 입니다.

JG BB \ ੘স

1

^

a가 1보다 작으면서 동시에 1보다 커야 작업

1

이 수행됩니다. 즉, 작업

1

이 실행될 수

없는 바보 코드지요. 이렇게 코드를 짤 때 긴 코드를 간략하게 짜기 위해서 사용하는 기호를 ‘연산자’라고 합 니다. 이 기호를 씀으로 이러이러한 작업을 하겠다고 하는 일종의 약속이지요. 연산자에 는 여러 종류가 있습니다. 바로 위의 예제에서도 논리 연산자 외의 연산자가 또 있습니 다.  , 가 그것입니다. 설명하지 않아도 어떤 뜻인지는 알겠지요? 이 연산자는 비교 연 산자라고 부르는데, 자주 쓰이는 비교 연산자를 살펴보면서 어떤 개념인지 좀 더 자세히 설명하도록 하겠습니다. 그러면 값 두 개를 비교해봅시다. 앞에서 ‘=’가 수학에서 쓰이는 ‘=’과 의미가 다르다고 언급한 바 있습니다. 그만큼 많이 헷갈리는 연산자인데, 수학 공식에 쓰일 때와 마찬가 지로 ‘같다’라는 의미로 착각해서 프로그래밍하는 경우도 종종 발생합니다. 하지만 같은 값인지 비교하는 연산자는 프로그래밍에는 따로 있습니다. 바로  비교 연산자입니다.  기호는 오른쪽의 값을 왼쪽의 변수에 넣을 때 사용합니다.

JG BC  B৬Cоэ‫ ݶ׮‬ \ D



^

56

Part 1 아두이노 시작하기

Dীчਸ֍‫׮ח‬

이상의 예제에서 보시다시피 JG, FMTFJG, FMTF 조건문을 비교 연산자 기호와 결합하면 상상 가능한 대부분의 경우의 수를 처리할 수 있습니다. 조건문은 고등 수학의 처음에 항상 나오는 집합과 비슷한 정도로 중요한 기본 개념이니 앞으로도 마르고 닳도록 보시 게 될 겁니다. 연산자가 중간에 있으면, 오른쪽의 내용을 처리하여 왼쪽에 넣는다고 해석하면 됩니다. 자주 쓰는 연산자가 어떻게 생겼는지 확인을 한 번 하고 넘어가도록 하겠습니다. 표 2-1 자주 쓰는 연산자와 그 의미

종류

연산자

사용

의미

대입 연산자

=

a=b

a의 자리에 b라는 값을 넣는다.

+=

a += b

a의 기존 값에 b라는 값을 더해서 넣는다.

-=

a -= b

a의 기존 값에 b라는 값을 빼서 넣는다.

++

a++

a의 값에 1을 더한다.

--

a--

a의 값에 1을 뺀다.

==

a == b

a와 b는 값은 같다.

!=

a != b

a와 b의 값은 다르다.

>=

a >= b

a의 값은 b의 값과 같거나 크다.