2 CHAPTER 01 시작하기 에매료되어있다. 아두이노는하드웨어로잘알려져있지만이하드웨어를프로그래밍하기위한소프트웨어도필요하다. 하드웨어와소프트웨어모두 아두이노 (Arduino) 라고부른다. 이러한하드웨어와소프트웨어를함께사용하여실제세계를감지하고제어하는프로젝트를만들수있다.

Similar documents
Windows 8에서 BioStar 1 설치하기

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint - es-arduino-lecture-03

IRISCard Anywhere 5

vRealize Automation용 VMware Remote Console - VMware

Studuino소프트웨어 설치

JARDUINO-UNO-BT 커넥터 / 스위치기능 종류 USB 커넥터리셋스위치 DC 전원잭업로드선택스위치 ISP 모드선택점퍼블루투스시리얼모듈전원 / 디지털포트 / 아날로그포트커넥터및 ISP 커넥터 기능 +5V 전원공급, 유선업로드기능누른상태에서전원을공급하면부트로더프로그

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Microsoft PowerPoint - chap01-C언어개요.pptx

ISP and CodeVisionAVR C Compiler.hwp

MF5900 Series MF Driver Installation Guide

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

SBR-100S User Manual

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

JDK이클립스

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

고객 카드

1

Office 365 사용자 가이드

목 차 1. 드라이버 설치 설치환경 드라이버 설치 시 주의사항 USB 드라이버 파일 Windows XP에서 설치 Windows Vista / Windows 7에서 설치 Windows

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

PowerPoint 프레젠테이션

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

ThinkVantage Fingerprint Software

<4D F736F F F696E74202D20325FBEC6B5CEC0CCB3EB20B1E2C3CABDC3C7E82E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft Word - src.doc

Microsoft Word - Armjtag_문서1.doc

Install stm32cubemx and st-link utility

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

MF3010 MF Driver Installation Guide

온습도 판넬미터(JTH-05) 사양서V1.0

System Recovery 사용자 매뉴얼

Windows 10 General Announcement v1.0-KO

CODESYS 런타임 설치과정

Microsoft Word - PLC제어응용-2차시.doc

온라인등록용 메뉴얼

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10


슬라이드 1

PowerPoint Template

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Endpoint Protector - Active Directory Deployment Guide

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

준비물 아두이노보드, 올인원쉴드, USB 연결케이블 아두이노우노보드 올인원쉴드 - 2 -

View Licenses and Services (customer)

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

슬라이드 1

슬라이드 1

소개 Mac OS X (10.9, 10.10, 10.11, 10.12) 와 OKI 프린터호환성 Mac OS X 를사용하는 PC 에 OKI 프린터및복합기 (MFP) 제품을연결하여사용할때, 최고의성능을발휘할수있도록하는것이 OKI 의목 표입니다. 아래의문서는 OKI 프린터및

F120L(JB)_UG_V1.0_ indd

4S 1차년도 평가 발표자료

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

볼륨 조절 아이콘 표시하기 만일 알림 영역에 볼륨 조절 아이콘이 표시되지 않았다면 아래의 방법을 따라합니다. 1> [시작] - [제어판] - [사운드 및 오디오 장치] 아이콘을 더블 클릭합니다. 2) [사운드 및 오디오 장치 등록 정보] 대화상자에서 [볼륨] 탭을 클릭

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

TOOLS Software Installation Guide

MF Driver Installation Guide

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

NTD36HD Manual

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

프린터서버응용프로그램가이드 이설명서는다음모델에적용됩니다. 목차 Chapter 1. 개요...1 Chapter 2. 설치하기전...2 Chapter 3. Windows 운영체제에설치...2 Chapter 4. Windows 운영체제용응용프로그램 TP-LIN

NX1000_Ver1.1

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

Microsoft Word - AVRISP mkII 장비 운용.doc

Microsoft PowerPoint - e pptx

게시판 스팸 실시간 차단 시스템


tiawPlot ac 사용방법

네이버블로그 :: 포스트내용 Print VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 /carrena/ VMware 에서 l

Microsoft PowerPoint - es-arduino-lecture-01

Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL: E-M

Microsoft PowerPoint - RPino-GOGO_datasheet.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

API 매뉴얼

작동 원리

: AA ( ) TV : ios ( ).. 2

Visual Studio online Limited preview 간략하게살펴보기

Microsoft Word - MAI-ISP-STK500_매뉴얼_Ver25.docx

Mango-E-Toi Board Developer Manual

DBMS & SQL Server Installation Database Laboratory

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

untitled

왜곡보정버전업그레이드순서 - Windows 판 - 니콘제품을애용해주셔서대단히감사합니다. 여기에서는왜곡보정의버전업그레이드에대해설명하고있습니다. 그리고니콘서비스센터에서의업데이트도받고있으므로사용하시는환경등으로펌웨어를업데이트할수없는사용자는이용하여주십시오. 사용하시는카메라사용법

RealDSP UT 프로그램 메뉴얼

*Revision History 날짜 내용 최초작성 Tel Fax [2] page

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

실험 5

PowerPoint Template

USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 최초작성 by 김정현 스크립트추가, 설명보충 by 유형목 1. VritualBox

ICAS CADWorx SPLM License 평가판설치가이드

A SQL Server 2012 설치 A.1 소개 Relational DataBase Management System SQL Server 2012는마이크로소프트사에서제공하는 RDBMS 다. 마이크로소프트사는스탠다드 standard 버전이상의상업용에디션과익스프레스 exp

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

The Pocket Guide to TCP/IP Sockets: C Version

디지털일안리플렉스카메라펌웨어업그레이드순서에대하여 (Mass Storage 대응기종 ) - Mac 판 - 니콘제품을애용해주셔서대단히감사합니다. 여기에서는이번다운로드대상이되는니콘디지털일안리플렉스카메라의펌웨어버전업그레이드에대해설명하고있습니다. 그리고니콘서비스센터에서의업데이트

Transcription:

Chapter 1 Arduino Cookbook, Second Edition 시작하기 1.0 소개 아두이노환경은소프트웨어나전자공학과관련된경험이없는초보자도쉽게사용할수있도록설계되었다. 아두이노를사용하면빛, 소리, 접촉, 움직임등에반응하거나이러한것들을제어할수있는도구를만들수있다. 아두이노를사용하여만들수있는것의예로는악기, 로봇, 빛조형, 게임, 인터랙티브가구등이있으며, 심지어는인터랙티브의상도만들수있다. 처음시작하는경우가아니라면흥미를끄는레시피부터바로시작해도괜찮다. 아두이노는전세계적으로수많은교육프로그램에서사용되고있으며, 특히기술에대한깊은이해없이도프로토타입을쉽게만들고자하는디자이너와예술가들이많이사용하고있다. 기술이없는사람도사용할수있도록설계되었기때문에아두이노소프트웨어에는아두이노보드의다양한기능을활용하는방법을보여주는풍부한예제코드가담겨있다. 아두이노의기본하드웨어는사용하기쉬움에도불구하고임베디드장치를만들수있을정도로높은수준의정교함을갖추고있다. 마이크로컨트롤러를다루는사람들은이미아이디어를빠르게구현할수있는아두이노의뛰어난개발환경과그기능 1

2 CHAPTER 01 시작하기 에매료되어있다. 아두이노는하드웨어로잘알려져있지만이하드웨어를프로그래밍하기위한소프트웨어도필요하다. 하드웨어와소프트웨어모두 아두이노 (Arduino) 라고부른다. 이러한하드웨어와소프트웨어를함께사용하여실제세계를감지하고제어하는프로젝트를만들수있다. 이소프트웨어는무료로제공되는오픈소스크로스-플랫폼이다. 약간의비용을지불하고보드를구매하거나하드웨어설계가오픈소스로공개되어있으므로자신이직접보드를제작할수도있다. 그리고아두이노포럼과아두이노플레이그라운드 (Arduino Playground) 라는위키를통해활발한활동이이루어지고있는아두이노커뮤니티에참여할수있다. 이러한포럼과위키에서는프로젝트개발예제와여러가지문제에대한해결책을제공하고있으므로프로젝트를개발할때많은아이디어와도움을얻을수있을것이다. 이장의레시피에서는개발환경을설정하는방법과예제스케치를컴파일하고실행하는방법에대해설명한다. 아두이노커뮤니티에서는아두이노기능을제어하는컴퓨터명령이포함된소스코드를보통스케치 (sketch) 라고부른다. 이책에서는스케치라는용어를사용하여아두이노프로그램코드를지칭한다. 이장의레시피에서는아두이노와함께제공되는 Blink 스케치를예제로사용한다. 하지만이장의마지막레시피에서는단순히보드에내장된조명을깜박이기만하는것이아니라사운드를추가하고추가하드웨어를통해입력을수집하는방법까지도설명한다. 2장에서는아두이노의스케치를구조화하는방법과함께기본적인프로그래밍방법을살펴본다. 아두이노와관련된기본적인사항을이미알고있다면원하는주제를찾아서살펴보는것도좋을것이다. 하지만아두이노를처음으로접하는사용자라면인내심을갖고전반부의레시피를따라하다보면나중에좋은결과를얻게될것이다. 아두이노소프트웨어스케치 (sketch) 라고하는소프트웨어프로그램은컴퓨터에설치된아두이노통합개발환경 (IDE) 을사용하여만들어진다. 이 IDE에서는코드를작성및편집할수있으며, 아두이노하드웨어에서이해할수있는명령어로코드를변환할수있다. 또한

1.0 소개 3 변환된명령어를아두이노보드로전송할수도있다 ( 업로드 (upload) 프로세스 ). 아두이노하드웨어아두이노보드에서는사용자가작성한코드가실제로실행된다. 이보드는전기신호를제어하고그에따라반응만할수있으므로, 실질적으로어떤작업을수행하려면특정부품을보드에연결해야한다. 예를들어, 실제사물의특성을전기신호로변환하는센서를보드에연결해서사물의특성을감지하거나, 보드의전기신호를받아서특정동작으로변환해주는액츄에이터를연결해서원하는작업을수행할수있다. 센서의예로는스위치, 가속도계, 초음파거리센서등이있다. 액츄에이터의예로는조명과 LED, 스피커, 모터, 디스플레이등이있다. 아두이노소프트웨어와함께사용할수있는여러가지공식보드뿐만아니라커뮤니티에서제작한아두이노호환보드도많이있다. 전원을공급하고소프트웨어를보드에업로드하는데사용되는 USB 커넥터가장착된보드가가장많이사용되고있으며, 그림 1-1에서는대부분의사람들이시작할때사용하는기본보드인 Arduino Uno를보여준다. 그림 1-1 기본보드 : Arduino Uno. 사진제공 : todo.to.it.

4 CHAPTER 01 시작하기 Arduino Uno에는모든 USB 통신을처리하는보조마이크로컨트롤러가있으며, 이작은칩 (ATmega8U2) 은보드의 USB 소켓근처에있다. 이칩은보드를다양한 USB 장치로표시하고싶을때별도로프로그래밍할수있다 ( 레시피 18.14). Arduino Leonardo 보드에서는 ATmega8U2 및 ATmega328 컨트롤러를빼고 USB 프로토콜을소프트웨어로구현한하나의 ATmega32u4 칩을사용한다. 아두이노와호환되는 PJRC의 Teensy 및 Teensy+ 보드 (http://www.pjrc.com/teensy/) 도 USB 장치를에뮬레이트할수있다. 이전버전의보드와대부분의아두이노호환보드에서는컴퓨터의시리얼포트에연결되는하드웨어 USB 솔루션을갖추고있는 FTDI 회사의칩을사용하고있다. Arduino Mini 및 Pro Mini는소형보드이며, Arduino Mega는좀더크면서연결옵션이많고프로세서성능이높다. 그리고특정분야를위한맞춤형보드도있다. 맞춤형보드로는의상분야를위한 LilyPad, 무선프로젝트를위한 Fio, 임베디드분야 ( 주로배터리로작동하는독립형프로젝트 ) 를위한 Arduino Pro가있다. 최근에추가된제품인 Arduino ADK에는 USB 호스트소켓이장착되어있으며, Android Open Accessory Development Kit와호환된다. 공식적으로승인을받은이개발키트는안드로이드장치에하드웨어를연결하는기능을제공한다. Leonardo 보드에는보드자체를다양한 HID 장치로표현할수있는컨트롤러칩 (ATmega32u4) 이장착되어있다. Ethernet 보드에는이더넷연결이포함되어있다. 그리고 Power Over Ethernet 옵션이제공되므로보드연결과전원공급이단일배선만으로도가능하다. 이외에도아래목록에있는보드를포함한여러가지아두이노호환보드가있다. Arduino Nano, USB 기능을갖춘소형보드, Gravitech(http://store.gravitech. us/arna30wiatn.html) Bare Bones Board, USB 기능유무를선택할수있는경제형보드, Modern Device(http://www.moderndevice.com/products/bbb-kit) Boarduino, 경제적인브레드보드호환보드, Adafruit Industries(http:// www.adafruit.com/) Seeeduino, 다양한종류의표준 USB 보드, Seeed Studio Bazaar(http:// www.seeedstudio.com/)

1.1 통합개발환경 (IDE) 설치하기 5 Teensy 및 Teensy++, 작지만다양한기능을제공하는보드, PJRC(http:// www.pjrc.com/teensy/) http://www.freeduino.org/ 에서아두이노호환보드목록을볼수있다. 참고 http://www.arduino.cc/en/main/hardware 에서아두이노보드에대한개요를볼수있다. http://arduino.cc/en/guide/windows(windows 의경우 ), http://arduino.cc/en/guide/ MacOSX(Mac OS X 의경우 ) 및 http://www.arduino.cc/playground/learning/linux(linux 의경우 ) 에서온라인으로제공되는아두이노가이드를볼수있다. 아두이노개발환경과함께사용할수있는백여가지의보드목록을 http://jmsarduino. blogspot.com/2009/03/comprehensive-arduino-compatible.html 에서볼수있다. 1.1 통합개발환경 (IDE) 설치하기 과제 아두이노개발환경을컴퓨터에설치하고싶다. 해결책 http://arduino.cc/en/main/software에서 Windows, Mac 및 Linux용아두이노소프트웨어를다운로드할수있다. Windows용다운로드파일은 ZIP 파일이므로원하는디렉터리에파일의압축을푼 다. 일반적으로사용되는경로는 Program Files/Arduino 이다. 파일의압축을풀어주는무료유틸리티인 7-Zip을 http://www.7-zip.org/ 에서다운로드할수있다. 파일의압축을풀면 Arduino-00<nn> 이라는폴더가생성된다. ( 여기서 <nn> 은다운로드한아두이노릴리스의버전번호다.) 이디렉터리에는실행파일 (Arduino.exe) 을비롯한

6 CHAPTER 01 시작하기 여러개의파일과폴더가있다. Arduino.exe 파일을두번클릭하면스플래시화면 ( 그 림 1-2) 이표시된후기본프로그램창이나타난다 ( 그림 1-3). 소프트웨어가로드되려 면시간이걸리므로조금기다려야한다. 그림 1-2 아두이노스플래시화면 (Windows 7에서버전 1.0 실행 ) Mac용아두이노다운로드는디스크이미지 (.dmg) 로제공되며, 다운로드가완료된후파일을두번클릭한다. 그러면이미지가마운트된다. ( 즉, 데스크톱에메모리스틱처럼표시된다.) 그리고이디스크이미지안에아두이노애플리케이션이있다. 이제애플리케이션을원하는위치 ( 보통 Applications 폴더사용 ) 에복사한다. 그런다음애플리케이션을두번클릭하여실행한다. ( 애플리케이션을디스크이미지에서직접실행하는것은좋은방법이아니다.) 이제스플래시화면이표시된후기본프로그램창이표시된다.

1.1 통합개발환경 (IDE) 설치하기 7 그림 1-3 IDE 기본창 (Mac에서 Arduino 1.0 실행 ) Linux 설치는사용중인 Linux 배포판에따라달라진다. 자세한정보는아두이노위키 (http://www.arduino.cc/playground/learning/linux) 를참조한다. 아두이노개발환경과보드간에데이터를주고받으려면드라이버를설치해야한다. Windows의경우에는 USB 케이블을사용하여 PC와아두이노보드를연결한후새하드웨어검색마법사가표시될때까지기다린다. Uno 보드를사용중이라면마법사를사용하여드라이버를찾아서설치해보기바란다. 아마도이작업은실패할것이다. ( 예상된동작이므로걱정하지않아도된다.) 이문제를해결하려면시작 제어

8 CHAPTER 01 시작하기 판 시스템으로이동해야한다. 그런다음하드웨어를클릭하고장치관리자를연다. 표시된목록에서 Arduino UNO(COM nn) 이라는명칭의 COM 및 LPT 항목을찾는다. 여기서 nn은보드용으로생성된포트에자동으로지정된번호다. 적합한드라이버가아직지정되지않았기때문에항목옆에경고로고가표시된다. 이항목을마우스오른쪽단추로클릭한후드라이버소프트웨어업데이트를선택한다. 컴퓨터에서드라이버소프트웨어찾아보기 옵션을선택한후조금전압축을풀었던 Arduino 폴더안에있는 Drivers 폴더로이동한다. ArduinoUNO.inf 파일을선택한다. 그러면설치프로세스가자동으로완료된다. 이전버전의보드를 Windows Vista나 Windows 7과함께사용중이고온라인상태라면마법사를사용하여드라이버를자동으로검색해서설치할수있다. Windows XP의경우에는 ( 또는인터넷이연결되어있지않은경우 ) 드라이버의위치를지정해주어야한다. 파일선택기를사용하여아두이노파일의압축을풀었던디렉터리아래에있는 FTDI USB Drivers 디렉터리로이동한다. 드라이버설치가완료되면새로운시리얼포트가검색되었다는메시지를보여주는새하드웨어검색마법사가다시표시된다. 이제앞에서설명했던것과동일한과정을수행한다. 한가지주의할점은드라이버설치단계를 2회반복해야한다는것이다. 그렇지않으면소프트웨어와보드간의통신이이루어지지않는다. Mac에서는드라이버를추가로설치하지않고도 Uno와같은최신아두이노보드를사용할수있다. 보드를처음연결하면새네트워크포트가검색되었다는알림메시지가표시되는데, 이메시지는무시해도된다. 이전버전의보드 (FTDI 드라이버가필요한보드 ) 를사용중이라면드라이버소프트웨어를설치해야한다. 디스크이미지안에 FTDIUSBSerialDriver 패키지가있으며, 이패키지이름뒤에는버전번호가붙어있다. 이파일을두번클릭한후설치프로그램의지시에따라설치프로세스를진행한다. 설치프로세스를완료하려면관리자암호를알고있어야한다. Linux의경우에는대부분의배포판에드라이버가이미설치되어있다. 하지만사용중인배포판에해당하는정보를보려면이장의소개절에서설명한 Linux 링크를참조하기바란다.

1.2 아두이노보드설정하기 9 토론 소프트웨어가시작되지않을경우에는아두이노웹사이트의문제점해결섹션 (http://arduino.cc/en/guide/troubleshooting) 을참조하여설치문제를해결할수있다. 참고 http://arduino.cc/en/guide/windows(windows의경우 ), http://arduino.cc/en/guide/ MacOSX(Mac OS X의경우 ) 및 http://www.arduino.cc/playground/learning/linux (Linux의경우 ) 에서온라인으로제공되는아두이노가이드를볼수있다. 1.2 아두이노보드설정하기 과제 새보드에전원을공급한후보드가정상적으로작동하는지확인하고싶다. 해결책보드를컴퓨터의 USB 포트에연결한후보드에있는녹색 LED 전원표시기가켜지는지확인한다. 표준아두이노보드 (Uno, Duemilanove 및 Mega) 의경우에는리셋스위치근처에녹색 LED 전원표시기가있다. 보드에전원이들어오면보드가운데에있는주황색 LED( 그림 1-4의 핀 13 LED ) 가켜졌다가꺼진다. ( 보드는정상작동여부를간단히검사할수있도록 LED를켰다가끄는 소프트웨어가미리로드된상태로공장에서출고된다.)

10 CHAPTER 01 시작하기 핀 이 핀 커 터 시리얼 리 스 치 커 터 핀 그림 1-4 기본아두이노보드 (Duemilanove 및 Uno) Leonardo와같은새보드는 USB 커넥터옆에 LED가장착되어있다 ( 그림 1-5). 최신보드에는 I2C와함께사용할수있는이중핀이있다 (SCL 및 SDA로표기 ). 이들보드에는칩의작동전압을결정하는데사용할수있는 IOREF 핀도있다. 리 스 치 커 터 시리얼 핀 로그 커 터 그림 1-5 Leonardo 보드

1.2 아두이노보드설정하기 11 최신보드의경우에는보드의커넥터레이아웃에대한새로운표준에따라세가지추가연결기능이있다. 하지만기존쉴드도아무문제없이사용할수있다. 기존쉴드는이전버전의보드와마찬가지로새보드에서도정상적으로작동한다. 새로추가된연결로는쉴드에서아날로그기준전압을탐지하여아날로그입력값을공급전압에맞춰조정할수있도록지원하는 IOREF 핀과 I2C 장치의일관된연결을지원하기위한 SCL 및 SDA 핀이있다. ( 이전버전의보드에서는다양한칩구성으로인해 I2C 핀의위치가다양했다.) 새레이아웃에따라설계된쉴드는새핀위치를사용하는모든보드에서정상적으로작동해야한다. IOREF 핀옆의추가핀은현재사용되지않는핀이지만향후핀레이아웃을다시변경하지않고도새기능을구현할수있도록하기위해추가된것이다. 토론보드를컴퓨터에연결했을때전원 LED가켜지지않는다면보드에전원이공급되고있지않는것으로판단할수있다. 디지털출력핀 13에연결되어깜박이는 LED는보드에서실행중인코드에의해제어된다. ( 새보드에는 Blink 예제스케치가미리로드되어있다.) 핀 13 LED가깜박이고있다면스케치가올바르게실행중이라고간주할수있으며, 이는곧보드의칩이정상적으로작동하고있다는의미이기도하다. 녹색전원 LED가켜져있기는하지만핀 13 LED가깜박이지않는다면팩토리코드가칩에로드되어있지않은경우를가정할수있다. 이문제가발생한경우에는레시피 1.3의지침에따라 Blink 스케치를보드에로드하여보드가정상적으로작동하는지확인한다. 사용하는보드가표준보드가아닌경우에는핀 13에내장된 LED가없을수도있으므로해당보드의설명서를참조하기바란다. Leonardo 보드의경우에는정상적으로작동되는것을알려주기위해 LED가서서히켜졌다꺼졌다를반복한다 (LED가 호흡 하는것처럼보임 ). 참고 http://arduino.cc/en/guide/windows(windows 의경우 ), http://arduino.cc/en/guide/ MacOSX(Mac OS X의경우 ) 및 http://www.arduino.cc/playground/learning/linux (Linux의경우 ) 에서온라인으로제공되는아두이노가이드를볼수있다. http://arduino.cc/en/guide/troubleshooting에서문제점해결가이드를볼수있다.

12 CHAPTER 01 시작하기 1.3 통합개발환경 (IDE) 에서아두이노스케치준비하기 과제 보드에업로드하기위해스케치를가져와서준비하고싶다. 해결책아두이노 IDE를통해보드에서수행할작업을정의하는스케치를작성하고, 열고, 수정할수있다. 이러한작업은 IDE 상단에있는단추 ( 그림 1-6) 를사용하거나메뉴또는단축키 ( 그림 1-7) 를사용하여수행할수있다. 스케치편집기영역에서스케치코드를보고편집할수있다. 이편집기에서는일반적인텍스트편집키가지원된다. 예를들어, Ctrl-F(Mac의경우 +F) 를사용하여텍스트를검색하거나, Ctrl-Z(Mac의경우 +Z) 를사용하여이전명령을실행취소하거나, Ctrl-C(Mac의경우 +C) 를사용하여선택된텍스트를복사하거나, Ctrl- V(Mac의경우 +V) 를사용하여선택된텍스트를붙여넣을수있다. 그림 1-7에서는 Blink 스케치 ( 새아두이노보드에미리로드되어있는스케치 ) 를로드하는방법을보여준다. IDE를시작한후파일 예제메뉴에서 1. Basics Blink를선택한다 ( 그림 1-7). 그러면내장 LED를깜박거리게하는코드가스케치편집기창에표시된다 ( 그림 1-6). 코드를보드로전송하려면먼저아두이노컨트롤러칩에서읽고실행할수있는명령어로변환해야한다. 이작업을컴파일 (compile) 이라고한다. 코드를컴파일하려면왼쪽상단에체크표시가들어있는모양의컴파일단추를클릭하거나스케치 확인 / 컴파일 (Ctrl-R, Mac의경우 +R) 을선택한다. 이제텍스트편집창아래의메시지영역에 스케치컴파일... 이라는메시지가표시된다. 잠시후에 컴파일완료 라는메시지가표시된다. 검정색콘솔영역에아래와같은추가메시지가표시된다. 바이너리스케치사이즈 : 1084 바이트 ( 최대 32.256 바이트 )

1.3 통합개발환경 (IDE) 에서아두이노스케치준비하기 13 이메시지는사용중인보드와아두이노버전에따라조금씩다를수도있지만, 해당스케치의크기와보드에서지원되는최대스케치크기를알려준다. 그림 1-6 아두이노 IDE 토론 아두이노에서는소스코드를스케치 (sketch) 라고부른다. 그리고스케치를가져와서보드에서작동되는형태로변환하는프로세스를컴파일 (compile) 이라고한다. 그리고

14 CHAPTER 01 시작하기 IDE 에서는보이지는않지만수많은명령줄도구를사용하여스케치를컴파일한다. 이에대한자세한설명은레시피 17.1 을참조한다. 그림 1-7 IDE 메뉴 (Blink 예제스케치선택 ) 스케치의크기를알려주는마지막메시지에는컨트롤러명령어를보드에저장하는데필요한프로그램공간의용량이표시된다. 컴파일된스케치의크기가보드의가용메모리용량보다크면다음과같은오류메시지가표시된다. S ketch too big; see http://www.arduino.cc/en/guide/troubleshooting#size for tips on reducing it. 이문제가발생한경우에는보드에저장할수있을정도로작게스케치의크기를줄이거나용량이큰보드로바꿔야한다. 코드에오류가있으면콘솔창에하나이상의오류메시지가표시된다. 이들메시지는오류를식별하는데도움이된다. 부록 D에서소프트웨어오류를해결하는데도움이되는정보를볼수있다.

1.4 Blink 스케치업로드및실행하기 15 실수로예제를덮어쓰는경우가발생하지않도록하기위해아두이노 IDE에서는제공된예제스케치에변경사항을저장하는기능이지원되지않는다. 따라서다른이름으로저장메뉴옵션을사용하여스케치의이름을변경해야한다. 직접작성한스케치는저장단추를사용하여저장할수있다 ( 레시피 1.5). 스케치를개발하고수정하다보면파일 다른이름으로저장메뉴옵션을사용하여이름이나버전번호를정기적으로변경해주는것이좋다. 이렇게하면단계별로구현해나가면서필요에따라기존버전을쉽게검토할수도있기때문이다. 보드에업로드된코드는컴퓨터로다시다운로드되지않으므로스케치코드를컴퓨터에저장해두는것을잊지말아야한다. 예제파일에변경사항을다시저장할수는없으므로다른이름으로저장을사용하여변경된파일을다른이름으로저장해야한다. 참고 레시피 1.5에서예제스케치를볼수있으며, 부록 D에서소프트웨어문제해결에도움을주는팁을볼수있다. 1.4 Blink 스케치업로드및실행하기 과제 컴파일된스케치를아두이노보드로옮겨서작동해보고싶다. 해결책 USB 케이블을사용하여아두이노보드와컴퓨터를연결한다. 레시피 1.3의설명에따라 Blink 스케치를 IDE에로드한다. 그런다음드롭다운메뉴에서도구 보드를선택하고연결된보드의이름을선택한다. ( 연결된보드가표준 Uno 보드이면보드목록의첫번째항목으로표시된다.) 이제도구 시리얼포트를선택한다. 그러면컴퓨터에서사용할수있는시리얼포

16 CHAPTER 01 시작하기 트를보여주는드롭다운목록이표시된다. 컴퓨터에서사용하고있는장치에따라다양한조합의시리얼포트가표시된다. Windows에서는번호가매겨진 COM 항목으로나열된다. 항목이하나뿐이면해당항목을선택하고, 여러개의항목이있는경우에는아마도마지막항목이아두이노보드에해당하는포트일것이다. Mac의경우에는보드가두번나열되며, Uno 보드일경우에는다음과같이표시된다. /dev/tty.usbmodem-xxxxxxx /dev/cu.usbmodem-xxxxxxx 구형보드일경우에는다음과같이표시된다. /dev/tty.usbserial-xxxxxxx /dev/cu.usbserial-xxxxxxx XXXXXXX 값은보드마다다르다. 이제두항목중하나를선택한다. 업로드단추 ( 그림 1-6에서왼쪽 2번째단추 ) 를클릭하거나파일 업로드 (Ctrl-U, Mac의경우 +U) 를선택한다. 레시피 1.3에서처럼코드가컴파일된다. 그리고컴파일이완료되면소프트웨어가보드에업로드된다. 이제보드를살펴보면핀 13 LED의깜박임이멈추고, 이 LED의바로아래에있는두개의 LED( 그림 1-4의시리얼 LED) 가코드가업로드되는약 2초동안켜졌다가꺼지는것을볼수있다. 그런다음코드가실행되면원래 LED가다시깜박이기시작한다. 토론 IDE에서컴파일된코드에보드로보내려면보드가컴퓨터에연결되어있어야하고사용하려는보드와시리얼포트를 IDE에서지정해주어야한다. 업로드가시작되면보드에서실행중인스케치가중지된다. (Blink 스케치를실행중이었다면 LED의깜박임이멈춘다.) 새스케치는이전스케치를대체하면서보드에업로드되며, 업로드가성공적으로완료되면바로실행된다.

1.5 스케치작성및저장하기 17 구형아두이노보드와일부호환보드에서는업로드가시작될때실행중인스케치가자동으로중지되지않는다. 이경우에는소프트웨어의컴파일이완료된직후 ( 스케치크기에대한메시지가표시된직후 ) 보드에있는 Reset 단추를눌러야한다. 컴파일이완료된후 Reset 단추를누를때타이밍이맞지않으면이과정을다시반복해야한다. 업로드가실패하면 IDE에오류메시지가표시된다. 이상황은일반적으로선택한보드나시리얼포트에문제가있거나보드가컴퓨터에연결되어있지않은경우에발생한다. 아두이노창아래쪽상태표시줄에현재선택된보드와시리얼포트가표시된다. Windows에서올바른포트가식별되지않는경우에는보드연결을끊은다음, 도구 시리얼포트를선택하여어느 COM 포트가목록에표시되지않는지확인한다. 또는보드의 LED가깜박이면서코드가업로드되고있음을나타낼때까지포트를하나씩선택하면서확인하는방법을사용할수도있다. 참고 아두이노문제점해결페이지 : http://www.arduino.cc/en/guide/troubleshooting 1.5 스케치작성및저장하기 과제 스케치를작성하고컴퓨터에저장하고싶다. 해결책새스케치를작성하기위해편집기창을열려면 IDE를실행한후 ( 레시피 1.3 참조 ) 파일메뉴와새파일을차례로선택한다. 아래코드를스케치편집기창에붙여넣는다. ( 이코드는스케치와비슷하지만깜박임시간이두배더길다.) const int ledpin = 13; // LED 를디지털핀 13 에연결한다. void setup() { pinmode(ledpin, OUTPUT); }

18 CHAPTER 01 시작하기 void loop() { digitalwrite(ledpin, HIGH); // LED 를 on 으로설정한다. delay(2000); // 2 초동안대기한다. digitalwrite(ledpin, LOW); // LED 를 off 로설정한다. delay(2000); // 2 초동안대기한다. } 왼쪽상단에삼각형이들어있는모양의컴파일단추를클릭하거나스케치 확인 / 컴파일을선택하여코드를컴파일한다 ( 레시피 1.3 참조 ). 업로드단추를클릭하거나파일 업로드를선택하여코드를업로드한다 ( 레시피 1.4 참조 ). 업로드가완료되면 LED가 2초간격으로깜박이기시작한다. 저장단추를클릭하거나파일 저장을선택하여스케치를컴퓨터에저장할수있다. 스케치를새이름으로저장하기위해다른이름으로저장메뉴옵션을선택할수도있다. 그러면파일이름을입력할수있는대화상자가열린다. 토론 IDE에서파일을저장하면운영체제의표준대화상자가열린다. 이대화상자에서 My Documents 폴더 (Mac의경우 Documents 폴더 ) 에있는 Arduino 폴더에스케치를저장하는것이좋다. 기본스케치이름을스케치의용도를설명하는의미있는이름으로바꿀수도있다. 그런다음저장을클릭하여파일을저장한다. sketch라는단어뒤에현재날짜가지정된이름이스케치의기본이름으로사용된다. a부터순서대로지정되는문자는같은날작성된스케치를구별하는데사용된다. 기본이름을의미있는이름으로바꾸면나중에스케치를다시사용하게될때그용도를쉽게알수있다. 공백문자와같이 IDE 에서지원되지않는문자는자동으로올바른문자로대체된다. 아두이노스케치는확장자가.ino인일반텍스트파일로저장된다. 이전버전의 IDE 에서는.pde 확장자를사용하며, 이는 Processing에서도사용되는확장자다. 스케치는자동으로같은이름을가진폴더에저장된다. 컴퓨터에있는어느폴더에나스케치를저장할수있지만, 기본폴더 (My Documents

1.5 스케치작성및저장하기 19 폴더의 Arduino 폴더 ) 에저장하면스케치가아두이노소프트웨어의스케치북메뉴에 자동으로표시되므로더쉽게찾을수있다. 아두이노다운로드에포함된예제를편집한경우에는변경된파일을같은파일이름으로저장할수없다. 따라서표준예제를변경되지않은상태로유지할수있다. 수정된예제를저장하려면다른위치를선택해서스케치를저장해야한다. 변경작업을완료하게되면스케치를닫을때스케치의저장여부를묻는대화상자가표시된다. 스케치코드를변경만하고저장하지않으면 IDE 창의맨위에있는스케치이름뒤에 기호가표시된다. 그리고이기호는스케치를저장하면사라진다. 아두이노소프트웨어에는버전제어기능이없다. 따라서이전버전의스케치로되돌릴필요가있다면, 다른이름으로저장메뉴옵션을주기적으로사용하면서개정된각스케치에조금씩다른이름을지정해두는것이좋다. 코드를작성할때는코드를수정하거나추가할때마다컴파일작업을수행해서오류를자주검사하는것이좋다. 방금전작성한부분에오류가있을확률이높기때문에이렇게하면오류를훨씬더쉽게찾아서수정할수있다. 스케치를보드에업로드한후에는컴퓨터로다시다운로드할수있는방법이없다. 그러므로변경된스케치를항상저장해두는습관을가져야한다. 스케치파일을스케치와다른이름의폴더에저장하려고하면파일이정상적으로열리지않을수도있으므로확인을클릭하여스케치와같은이름의폴더를만들도록권장하는메시지가표시된다. 스케치는같은이름을가진폴더에있어야한다. 새스케치를저장하면자동으로해당폴더가생성된다. 이전버전의아두이노소프트웨어로작성된스케치는다른파일확장자 (.pde) 를사용하지만아두이노 1.0에서도열린다. 이전버전의스케치를저장하면새확장자 (.ino) 를사용하는파일

20 CHAPTER 01 시작하기 이생성된다. 초기버전 IDE용으로작성된코드는버전 1.0에서컴파일되지않을수있다. 이전버전의코드를실행하기위한변경작업은대부분쉽게수행할수있다. 자세한내용은부록 H를참조한다. 참고 이레시피를비롯한이책의모든레시피에서는숫자 (13) 를사용하는대신 const int 표현식을사용하여의미있는이름 (ledpin) 으로상수를표현한다. 상수를사용하는방법에대한자세한내용은레시피 17.5를참조한다. 1.6 아두이노사용하기 과제 만들기쉽고재미있게활용할수있는프로젝트부터시작하고싶다. 해결책이레시피에서는몇가지기술을간단히소개한다. 그런다음나중에이후장에서자세히살펴볼것이다. 이번레시피에서도이전레시피의 LED 깜박임코드를기반으로하지만이번에는고정된지연시간을사용하지않는다. 그대신 LDR(Light Dependent Resistor) 이라는조명감지센서에의해깜박임간격이결정된다. 그림 1-8과같이 LDR을연결한다. 그림 1-8 LDR이연결된아두이노

1.6 아두이노사용하기 21 스키마다이어그램을보고회로를구현하는데익숙하지않다면부록 B의단계별설명을통해브레드보드에회로를구현하는방법을익히기바란다. 아래스케치는아날로그핀 0에연결된 LDR의밝기레벨을판독한다. 그런다음 LDR의밝기레벨에따라핀 13에연결된내부 LED의깜박임간격이결정된다. const int ledpin = 13; // LED를디지털핀 13에연결한다. const int sensorpin = 0; // 센서를아날로그핀 0에연결한다. void setup() { pinmode(ledpin, OUTPUT); // LED 핀을출력으로설정한다. } void loop() { int rate = analogread(sensorpin); // 아날로그입력을읽는다. digitalwrite(ledpin, HIGH); // LED 를 on 으로설정한다. delay(rate); // 밝기레벨에따라지정된시간동안대기한다. digitalwrite(ledpin, LOW); // LED 를 off 로설정한다. delay(rate); } 토론 4.7K라는저항값은중요하지않다. 1K부터 10K 사이의어느값이나사용해도된다. LDR의밝기레벨에따라아날로그핀 0의전압레벨이변경된다. analogread 명령 (6장참조 ) 은 200부터 800 사이의값을제공하며, 이경우 200은 LDR이어두울때에해당하는값이고, 800은매우밝을때에해당하는값이다. 이값에따라 LED 의지속시간이결정되며, 결과적으로빛이밝을수록깜박임간격도증가한다. 다음과같이아두이노의 map 함수를사용하여깜박임간격을확장할수있다. const int ledpin = 13; // LED 를디지털핀 13 에연결한다. const int sensorpin = 0; // 센서를아날로그핀 0 에연결한다. // 다음두행에서는깜박임간의최소및최대지연시간을설정한다. const int minduration = 100; // 깜박임간의최소대기시간 const int maxduration = 1000; // 깜박임간의최대대기시간

22 CHAPTER 01 시작하기 void setup() { pinmode(ledpin, OUTPUT); // LED 핀을출력으로설정한다. } void loop() { int rate = analogread(sensorpin); // 아날로그입력을읽는다. // 다음행에서는최소및최댓값사이의깜박임간격을확장한다. rate = map(rate, 200, 800, minduration, maxduration); // 깜박임간격으로변환한다. rate = constrain(rate, minduration, maxduration); // 값을제한한다. digitalwrite(ledpin, HIGH); // LED 를 on 으로설정한다. delay(rate); // 밝기레벨에따라지정된시간동안대기한다. digitalwrite(ledpin, LOW); // LED 를 off 로설정한다. delay(rate); } 레시피 5.7에서 map 함수를사용하여값을확장하는방법에대한자세한설명을볼수있다. 레시피 3.5에서는 constrain 함수를사용하여값이지정된범위를벗어나지않도록제한하는방법을볼수있다. 컴퓨터에서 rate 변수의값을보려면아래와같이루프코드를수정하여아두이노의시리얼모니터에변수값을출력할수있다. 이스케치를실행하면시리얼모니터에깜박임간격이표시된다. 아두이노 IDE에서맨위오른쪽에있는아이콘을클릭하면아두이노 IDE에시리얼모니터창이표시된다. (4장에서시리얼모니터에대한자세한설명을볼수있다.) const int ledpin = 13; // LED를디지털핀 13에연결한다. const int sensorpin = 0; // 센서를아날로그핀 0에연결한다. // 다음두행에서는깜박임간의최소및최대지연시간을설정한다. const int minduration = 100; // 깜박임간의최소대기시간 const int maxduration = 1000; // 깜박임간의최대대기시간 void setup() { pinmode(ledpin, OUTPUT); // LED 핀을출력으로설정한다. Serial.begin(9600); // Serial 라이브러리를초기화한다. } void loop()

1.6 아두이노사용하기 23 { int rate = analogread(sensorpin); // 아날로그입력을읽는다. // 다음행에서는최소및최댓값사이의깜박임간격을확장한다. rate = map(rate, 200, 800, minduration, maxduration); // 깜박임간격으로변환한다. rate = constrain(rate, minduration, maxduration); // 값을제한한다. Serial.println(rate); // rate 값을시리얼모니터에인쇄한다. digitalwrite(ledpin, HIGH); // LED를 on으로설정한다. delay(rate); // 밝기레벨에따라지정된시간동안대기한다. digitalwrite(ledpin, LOW); // LED를 off로설정한다. delay(rate); } 그림 1-9처럼작은스피커를핀에연결한후 LDR을사용하여음의높낮이를제어할수있다. 그림 1-9 스피커와 LDR이연결된아두이노 이제핀의깜박임간격을오디오스펙트럼의주파수로조정해야한다. 이작업은아래코드와같이최소및최대기간을줄이는방법을통해수행할수있다. const int outputpin = 9; // 스피커를디지털핀 9에연결한다. const int sensorpin = 0; // 센서를아날로그핀 0에연결한다. const int minduration = 1; // 1ms on, 1ms off(500hz) const int maxduration = 10; // 10ms on, 10ms off(50hz)

24 CHAPTER 01 시작하기 void setup() { pinmode(outputpin, OUTPUT); // LED 핀을출력으로설정한다. } void loop() { int sensorreading = analogread(sensorpin); // 아날로그입력을읽는다. int rate = map(sensorreading, 200, 800, minduration, maxduration); rate = constrain(rate, minduration, maxduration); // 값을제한한다. digitalwrite(outputpin, HIGH); // LED 를 on 으로설정한다. delay(rate); // 밝기레벨에따라지정된시간동안대기한다. digitalwrite(outputpin, LOW); // LED 를 off 로설정한다. delay(rate); } 참고 constrain 함수를사용하는방법에대한자세한설명은레시피 3.5를참조한다. map 함수에대한설명은레시피 5.7을참조한다. 사운드를만드는데관심이있다면아두이노를사용하여오디오출력을만드는방법에대해자세히설명하는 9장을참조한다.