목차 머리말 PART I 아두이노와친해지기 CHAPTER 01 아두이노소개 1. 아두이노하드웨어 2. 아두이노우노 3. 아두이노소프트웨어 4. 아두이노프로그래밍 5. 스케치의구조 6. 맺는말 CHAPTER 02 아두이노기본클래스 1. UART 시리얼연결 2. Serial 클래스 3. String 클래스 4. 맺는말 CHAPTER 03 디지털데이터입력 1. 블링크 2. 시리얼모니터로 LED 제어 CHAPTER 04 디지털데이터출력 1. 풀업풀다운저항 2. 버튼테스트 3. 버튼을누른횟수세기 4. 맺는말 CHAPTER 05 아날로그데이터입출력 1. 아날로그데이터입력 2. 아날로그데이터출력
CHAPTER 06 주기적인데이터처리 1. delay 함수 2. millis 함수 PART II 아듀카를위한부품 CHAPTER 07 DC 모터 1. DC 모터 2. DC 모터제어 CHAPTER 08 서보모터 1. 서보모터 2. 서보라이브러리 3. 가변저항으로서보모터제어 4. 시리얼모니터입력으로서보모터제어 5. 맺는말 CHAPTER 09 초음파거리센서 1. 초음파거리센서 2. 물체감지경보기 CHAPTER 10 적외선통신 1. 적외선 2. 적외선데이터포맷 3. IRremote 적외선라이브러리 4. 리모컨으로 LED 제어 5. 요약
CHAPTER 11 라인트레이서모듈 1. 포토트랜지스터 2. 라인트레이서모듈 CHAPTER 12 블루투스통신 1. 블루투스 2. HC-06 블루투스모듈 3. 스마트폰설정 4. 블루투스통신 5. 맺는말 CHAPTER 13 텍스트 LCD 1. 텍스트 LCD 2. I2C (Inter-Integrated Circuit) 통신 3. I2C 방식텍스트 LCD 4. 맺는말 PART III 아듀카 - 아두이노로제어하는자동차 CHAPTER 14 아듀카만들기 1. 아듀카 (ArduCar : Arduino Controlled Car) 2. 모터연결 3. 텍스트 LCD 연결 4. 아듀카라이브러리 5. 맺는말 CHAPTER 15 블루투스로제어하는아듀카 1. 블루투스설정 2. 블루투스로제어하는아듀카
CHAPTER 16 리모컨으로제어하는아듀카 1. 적외선수신모듈 2. 리모컨으로제어하는아듀카 CHAPTER 17 라인트레이싱아듀카 1. 라인트레이서모듈 2. 라인트레이서 CHAPTER 18 장애물회피아듀카 1. 서보모터와초음파거리센서 2. 장애물회피아듀카 appendix 부록 APPENDIX 01 아두이노기본함수 I. 디지털입출력함수 II. 아날로그입출력함수 III. 고급입출력함수 IV. 시간함수 V. 수학함수 VI. 삼각함수 VII. 문자함수 VIII. 난수함수 IX. 비트조작함수 X. 외부인터럽트함수 XI. 인터럽트함수 APPENDIX 02 아두이노기본클래스 I. Serial II. String
머리말 아두이노가처음출시된지도 10년이넘게지났다. 지난 10여년이아두이노가 누구나쉽게사용할수있는마이크로컨트롤러보드 라는기반을다지는시기였다면, 다가올 10년은 누구나실생활에필요한도구를만들어사용할수있는마이크로컨트롤러보드 로생활속으로들어오는시간이기를바라고있다. 어찌보면작은변화일수있지만실생활에서사용될수있다는것은상상만하던일을현실에서만날수있다는의미이며, 더이상구경만하면서부러워할필요없이직접만들어사용할수있다는의미이기도하다. 아두이노가성공할수있었던이유에는오픈소스정책을따랐기때문에, 쉬운프로그래밍방식을도입했기때문에, 사물인터넷의보급에영향을받았기때문에등등기술적인장점들을여러가지이야기할수있지만그보다덜하지않은이유중하나가 어른들을위한장난감 이라는점이아닐까싶다. 어릴적트랜지스터와몇개의부품만으로라디오를만들어본경험이있다면아두이노에서어린시절의추억을찾아낼수있으리라생각한다. 이미많은아두이노관련책들이판매되고있으며이들은서로다른방향에서아두이노를바라보고있다. 하지만실생활에서사용되는위해서는, 어른들을위한장난감으로매력을가지기위해서는단편적인내용들을하나로합해서만들수있는무언가가필요하다. 잠깐의검
색만으로도신기하고흥미로운것들을찾아낼수있고, 필요한것들은대부분은공개되어있지만이들을아울러하나의완성품으로만들어낼수있는방법까지알려줄수있다면더좋으리라는생각에이책을준비하였다. 아두이노관련책을한권쯤읽고나서다음에는무엇을해야할지망설이는독자를위해이책을준비하였다. 아두이노로만들수있는것은많다. 그중에서도이책에서는아두이노로움직이는자동차를선택한것은많은관련내용을쉽게찾아낼수있을만큼접근하기가쉬운것이그하나이며, 그럼에도아직까지다양한응용이가능하기때문이다른하나다. 구슬이서말이라도꿰어야보배라는말처럼여기저기흩어져있는것들을모아줄거리가있는이야기로풀어나가고싶었다. 어찌생각하면이책에서신기한무언가를발견할수없어실망할수도있겠지만시작부터끝까지, 준비부터완성까지를경험하고스스로에게자문할수있기를바란다. 이책을통해아두이노라는또다른재미를발견할수있기를, 아두이노를사용하여무언가만들어보고싶은것이생기기를, 그무언가를완성해서즐거워할때이책이기억난다면더바랄것이없겠다.
IP A R T 아두이노와친해지기
01 C hapter 아두이노소개 아두이노는비전공자들을위한오픈소스기반마이크로컨트롤러프로젝트중하나로, 쉽고간단한사용방법으로다양한사용자층을끌어들여독자적인생태계를구축함으로써마이크로컨트롤러관련프로젝트중가장많은관심을받고있다. 이장에서는아두이노보드가가지는하드웨어측면의특징과, 아두이노보드를사용하여쉽고빠른개발이가능하도록해주는소프트웨어개발환경에대해알아본다. 1. 아두이노하드웨어 13 1-1 마이크로컨트롤러 + α 최근마이크로컨트롤러와관련하여가장주목을받는단어중하나는아두이노가아닐까싶다. 아두이노는이탈리아밀라노옆에위치한이브레아 (Ivrea) 에서예술가와디자이너가쉽게사용할수있으며, 저렴하고간단한제어장치를만들수있도록시작된오픈소스프로젝트중하나다. 2005년처음발표된이후아두이노는쉬운사용법으로수많은참여자들을끌어들여독자적인생태계구축에성공함으로써마이크로컨트롤러관련오픈소스프로젝트중가장많은참여자를가진프로젝트의하나로자리매김하고있다. 아두이노에관해간단히설명하였지만아두이노가무엇인지정의하기는쉽지않다. 그이유중하나는아두이노라는단어가마이크로컨트롤러를이용 PART I 아두이노와친해지기
하여만들어진개발보드, 즉, 하드웨어에해당하는아두이노보드와아두이노보드를동작시키기위해필요한 ( 흔히펌웨어라고불리며아두이노에서는스케치라부르는 ) 프로그램을개발할수있는소프트웨어개발환경까지함께가리키기때문이다. 14 아두이노하드웨어에대해서도간단히설명하기는쉽지않다. 아두이노하드웨어를이해하기어렵게만드는이유역시여러가지가있지만 마이크로컨트롤러 와 마이크로컨트롤러보드 를명확히구분하지못하는이유가그중하나다. 아두이노는 마이크로컨트롤러를사용하여만들어진개발보드 다. 주의할점은 개발보드 지 마이크로컨트롤러 가아니라는점이다. 마이크로컨트롤러는싱글칩컴퓨터 (single chip computer) 라고도불리는, 컴퓨터의본체에해당하는기능을하나의칩으로집약시켜놓은성능이낮은컴퓨터다. 컴퓨터의본체에전원만공급하면컴퓨터로기능할수있는것처럼마이크로컨트롤러역시전원만주어진다면마이크로컨트롤러로서, 즉, 낮은사양의컴퓨터로동작할수있다. 하지만아두이노보드에는마이크로컨트롤러이외에많은것들이추가되어있다. 그림 1은아두이노보드중가장많이사용되는아두이노우노를나타낸것이다. 아두이노는개발보드이므로편리한개발을위해컴퓨터또는주변장치와연결할수있는방법, 전원을공급할수있는방법등을제공하고있다. 실제로아두이노우노에는아두이노우노에서핵심이라할수있는 ATmega328 마이크로컨트롤러이외의부가적인부품들이더많은공간을차지하고있다. 이처럼아두이노보드는 마이크로컨트롤러 + α = 마이크로컨트롤러보드 를의미한다. 아듀카, 아두이노로미는자동차
리셋버튼 USB 시리얼변환마이크로커트롤러 디지컬핀 USB 커넥터 16MHz 클록 ISP 연결커넥터 ATmega328 외부전원 아날로그핀 그림 1. 아두이노우노 1 1-2 아두이노보드의종류 - 핀헤더의유무 아두이노를이해하기어렵게만드는또다른이유는아두이노보드가한가지보드만을지칭하는것이아니라는점이다. 아두이노의제품소개페이지 2 에는수많은보드들이나열되어있다. 아두이노라고이름붙은보드들은크 15 기와형태가다양하여외형적으로는공통점을쉽게찾아볼수없다. 아두이노보드의공통점은아두이노의개발환경을사용하여작성된펌웨어를서로다른아두이노보드들이함께사용할수있다는점에서찾아야한다. 마이크로컨트롤러는그종류에따라펌웨어를작성하는방법은조금씩다르다. 동일한회사에서만들어진마이크로컨트롤러의경우에도예외는아니다. 즉, 동일한기능을구현하기위해작성해야하는펌웨어는마이크로컨트롤러에따라일부달라지거나전혀다른형태를가질수있다. 하지만아두이노라 1 http://www.arduino.cc 2 http://www.arduino.cc/en/main/products PART I 아두이노와친해지기
고이름붙여진보드들은모두동일한방식으로펌웨어를작성할수있으며이러한공통의개발환경이아두이노의장점중하나라고할수있다. 아두이노를특징짓는중요한요소중한가지가개발환경에있는것은사실이지만, 이는하드웨어의지원이바탕이되어야하는것도사실하다. 서로다른형태로공통점을찾기어려운아두이노보드들이공통점을가지기는한것일까? 아두이노보드들을그룹으로묶어보면아두이노보드들사이의공통점을발견할수있다. 먼저아두이노보드를피메일 (female) 형태의핀헤더가존재하는보드와존재하지않는보드로나누어보자. 16 (a) 아두이노우노 (b) 아두이노나노 (c) 아두이노레오나르도 (d) 아두이노마이크로 그림 2. ATmega328 과 ATmega32u4 마이크로컨트롤러를사용하는아두이노보드 3 3 http://www.arduino.cc 아듀카, 아두이노로미는자동차
그림 2의아두이노우노와아두이노나노는동일한마이크로컨트롤러를사용하여만들어진보드다. 가장큰칩이마이크로컨트롤러로, 크기와형태가달라보이지만패키징의차이일뿐 ATmega328이라는동일한마이크로컨트롤러를사용하고있다. 동일한마이크로컨트롤러를사용하는서로다른보드가필요한이유는무엇일까? 바로사용목적의차이다. 아두이노우노는아두이노의대표적인보드중하나로 개발보드 의목적에충실하게주변장치나컴퓨터와간편하게연결할수있는다양한부가장치들이포함되어있다. 하지만아두이노나노는개발목적이라기보다는개발이완료된후실제작품에적용하는단계에서사용할수있도록아두이노우노와동일한기능의보드를소형으로만들어놓은것이다. 이처럼보드의형태는다르지만동일한기능을가지고있는아두이노보드들이존재한다. 아두이노레오나르도와아두이노마이크로의관계역시아두이노우노와아두이노나노의관계와동일하다. 17 (a) 릴리패드아두이노 (b) 아두이노에스플로라 (c) 아두이노로봇 그림 3. 전용목적의아두이노보드 4 (d) 아두이노메가 ADK 4 http://www.arduino.cc PART I 아두이노와친해지기
이외에도웨어러블기기개발을위한릴리패드아두이노, 센서가결합되어있는아두이노에스플로라 (Esplora), 주행장치를만들수있는아두이노로봇, 안드로이드용액세서리개발을위한아두이노메가 ADK 등특정목적에맞게사용할수있는전용아두이노보드들이존재한다. 이들전용아두이노보드는아두이노우노나아두이노레오나르도와같은기본보드에목적에맞는주변장치를추가하여만들어진것이므로기본보드와호환성을가진다. 예를들어아두이노에스플로라는아두이노레오나르도와동일한 ATmega32u4 마이크로컨트롤러를사용하며, 릴리패드아두이노는아두이노우노와동일한 ATmega328 마이크로컨트롤러를사용하고있다. 1-3 아두이노보드의종류 - 핀헤더의배열 18 아두이노보드의또다른공통점을찾아내기위해이번에는핀헤더의위치와배열을살펴보자. ATmega328 마이크로컨트롤러를사용하는아두이노우노와 ATmega2560 마이크로컨트롤러를사용하는아두이노메가2560의핀헤더에서공통점을발견하였는가? (a) 아두이노우노 (b) 아두이노메가 2560 그림 4. 아두이노우노와아두이노메가 2560 5 5 http://www.arduino.cc 아듀카, 아두이노로미는자동차
아두이노메가2560은 ATmega2560 마이크로컨트롤러의 70개입출력핀을사용할수있도록해주므로, 아두이노우노가 ATmega328 마이크로컨트롤러의 20개입출력핀을사용할수있도록해주는것과비교하면훨씬많은입출력핀을사용할수있어다양한주변장치를연결하여사용할수있다. 따라서아두이노메가2560에는더많은수의피메일핀헤더가존재한다. 하지만그림 4에서아두이노메가2560 보드의왼쪽에있는핀헤더들은아두이노우노와동일한배열을가지고있다. 즉, 아두이노우노에서연결한주변장치를그대로아두이노메가2560에연결하고아두이노우노에서사용한프로그램을그대로업로드하면아두이노우노에서와동일한동작을아두이노메가2560에서도확인할수있다. 핀헤더배열이동일하다는점은아두이노보드에공통으로사용할수있는확장보드인쉴드 (shield) 제작을가능하게해준다. 아두이노홈페이지에도여러종류의쉴드가소개되고있으며그림 5는그중일부다. 그림 5에소개된쉴드들역시아두이노우노의핀헤더와동일한핀헤더를가지고있으므로여러개의쉴드를적층하여사용할수있다. 다만동일한입출력핀을사용하는여러개의쉴드를적층하는경우에는사용에제한이있을수있다. 19 PART I 아두이노와친해지기
(a) 이더넷쉴드 (b) USB 호스트쉴드 20 (c) 모터쉴드 그림 5. 아두이노쉴드 6 (d) 릴레이쉴드 아두이노는하드웨어가공개되어있기때문에누구나아두이노에서사용가 능한쉴드를제작할수있다. 아두이노홈페이지에소개된쉴드이외에도검 색을통해다양하고신기한기능의쉴드들을쉽게찾아볼수있다. 1-4 아두이노보드의종류 - 사용된마이크로컨트롤러 이외에도아두이노보드들은대부분마이크로칩 (Microchip) 7 에서제작한마이 크로컨트롤러를사용한다는공통점이있다. 마이크로칩사에서제작하고아 6 http://www.arduino.cc 7 http://www.microchip.com 아듀카, 아두이노로미는자동차
두이노보드에사용된마이크로컨트롤러는크게두종류로나눌수있다. 아두이노우노, 아두이노레오나르도, 아두이노메가2560 등은마이크로칩의아키텍처를바탕으로하는 AVR 시리즈마이크로컨트롤러를사용하고있다. 반면아두이노듀에, 아두이노제로등은 ARM의아키텍처를사용하고마이크로칩에서제작한 Cortex-M 시리즈마이크로컨트롤러를사용하고있다. 표 1은마이크로칩에서제작하고아두이노에서사용되고있는마이크로컨트롤러의종류를요약한것이다. 표 1. 아두이노보드별마이크로컨트롤러종류 아두이노보드마이크로컨트롤러아키텍처 CPU 비트수 우노 ATmega328 AVR 레오나르도 ATmega32u4 AVR 메가2560 ATmega2560 AVR 제로 ATSAMD21G18 ARM Cortex M0+ 듀에 AT91SAM3X8E ARM Cortex M3 8 비트 32 비트 21 애초아두이노는마이크로칩의 AVR 시리즈마이크로컨트롤러를사용하여제작되었다. 하지만높은사양의마이크로컨트롤러에대한요구가증가함에따라 ARM Cortex-M 기반의아두이노보드도출시되고있다. 아두이노우노의경우 8비트 CPU에 16MHz 클록을사용하지만아두이노듀에의경우 32 비트 CPU에 84MHz 클록을사용하는등 Cortex-M 마이크로컨트롤러를사용하는아두이노보드들은높은성능을보여준다. 하지만아두이노는비전공자들을위한마이크로컨트롤러프로젝트로시작되었다는점을잊지말아야한다. 아두이노는높은사양도중요하지만간편한사용역시중요하다. 따라서아직도 AVR 시리즈마이크로컨트롤러를사용한아두이노보드가주류를이루고있으며최초의아두이노보드를계승한아두이노우노는여전히아두이노의대표보드로자리매김하고있다. PART I 아두이노와친해지기