목차 Chapter I HBE-ADK HBE-ADK-2560 개발환경 /3 1-2 Driver 설치 /7 1-3 Arduino 처음실행 / Arduino 소프트웨어사용을위한설정 / HBE-ADK-2560 Program 다운로

Similar documents
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Microsoft PowerPoint - es-arduino-lecture-03

실험 5

슬라이드 1

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

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

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

PowerPoint 프레젠테이션

RVC Robot Vaccum Cleaner

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

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

2주차: 입출력 제어 복습

Install stm32cubemx and st-link utility

(SW3704) Gingerbread Source Build & Working Guide

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Microsoft PowerPoint - chap06-2pointer.ppt

API 매뉴얼


PowerPoint 프레젠테이션

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Example: LED flashlight

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

OCW_C언어 기초

슬라이드 1

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

슬라이드 1

JDK이클립스

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

BS-K1217-M□□-3012_ProductGuide_KR_PDF

SBR-100S User Manual

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

실험. Multimeter 의사용법및기초회로이론 Multimeter 의사용법 멀티미터 (Multimeter) 는저항, 전압, 전류등을측정할수있는계측기로서전면은다음그림과같다. 멀티미터를이용해서저항, 전압, 전류등을측정하기위해서는다음그림과같은프로브 (probe) 를멀티미터

Microsoft Word - src.doc

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap04-연산자.pptx

ISP and CodeVisionAVR C Compiler.hwp

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

정보보안 개론과 실습:네트워크

Chapter #01 Subject

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

ATmega128

슬라이드 1

Studuino소프트웨어 설치

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

Windows 8에서 BioStar 1 설치하기

실험 5

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

슬라이드 제목 없음

Microsoft PowerPoint - es-arduino-lecture-08

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

< 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1

ez-shv manual

chap 5: Trees

Microsoft Word - PEB08_USER_GUIDE.doc

슬라이드 1

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

실험 5

Section 03 트랜지스터를이용한스위칭동작 16/45 트랜지스터의직류특성 활성 직류상황에서전류 I C 는전류 I B 보다 h FE 배만큼더많은전류가흐름» 베이스와이미터가순방향으로바이어스» 컬렉터와베이스가역방향으로바이어스 차단 만일 I B 가 0[A] 이면컬렉터전류

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

금오공대 컴퓨터공학전공 강의자료

Visual Basic 반복문

중간고사

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

KMC.xlsm

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

(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)

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

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

Microsoft PowerPoint - Java7.pptx

PowerPoint Template

adfasdfasfdasfasfadf

PowerPoint 프레젠테이션

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

SMT Kor.indd

Microsoft Word - Armjtag_문서1.doc

Microsoft Word - logic2005.doc

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

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - additional01.ppt [호환 모드]

11장 포인터

윈도우즈프로그래밍(1)

고객 카드

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

그룹웨어와 XXXXX 제목 예제

슬라이드 1

Microsoft Word MetOne237Bmanual

UART Controller 구현

<4D F736F F F696E74202D E6F312D BCB3C4A12C20C4DAB5F920B1E2C3CA2C20BDC3B8AEBEF3C5EBBDC5>

금오공대 컴퓨터공학전공 강의자료

½½¶óÀ̵å Á¦¸ñ ¾øÀ½

ez-md+_manual01

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

Transcription:

목차 Chapter I HBE-ADK-2560 1-1 HBE-ADK-2560 개발환경 /3 1-2 Driver 설치 /7 1-3 Arduino 처음실행 /11 1-3-1 Arduino 소프트웨어사용을위한설정 /11 1-3-2 HBE-ADK-2560 Program 다운로드 /13 Chapter II 프로그램실습 2-1 실습 1 : LED 제어 /19 2-1-1 ADK-Accessory-Base 의장착 /19 2-1-2 LED PORT 구성표 /20 2-1-3 LED 회로도 /20 2-1-4 프로그램소스 /21 2-1-5 프로그램설명 /22 2-1-6 프로그램동작및확인 /24 2-2 실습 2 : 스위치를이용한 LED 제어 /25 2-2-1 SW PORT 구성표 /25 2-2-2 SW 회로도 /25 2-2-3 프로그램소스 /26 2-2-4 프로그램설명 /28 2-2-5 프로그램동작및확인 /29 2-3 실습 3 : BUZZER 제어 /31 2-3-1 BUZZER 연결 /31 2-3-2 BUZZER PORT 구성표 /31 2-3-3 BUZZER 회로도 /32 2-3-4 프로그램소스 /32 2-3-5 프로그램설명 /33 2-3-6 프로그램동작및확인 /34 2-4 실습 4 : DC Motor Driver 제어 /35 2-4-1 DC Motor Driver 연결 /35 2-4-2 DC Motor Driver PORT 구성표 /36 목차 a

2-4-3 DC Motor Driver 회로도 /36 2-4-4 프로그램소스 /37 2-4-5 프로그램설명 /38 2-4-6 프로그램동작및확인 /40 2-5 실습 5 : Electronic Switch 제어 /41 2-5-1 Electronic Switch 연결 / 41 2-5-2 Electronic Switch PORT 구성표 /42 2-5-3 Electronic Switch 회로도 /42 2-5-4 프로그램소스 /42 2-5-5 프로그램설명 /44 2-5-6 프로그램동작및확인 /44 2-6 실습 6 : Open Detect Sensor /45 2-6-1 Open Detect Sensor 연결 /45 2-6-2 Open Detect Sensor PORT 구성표 /46 2-6-3 Open Detect Sensor 회로도 /46 2-6-4 프로그램소스 /46 2-6-5 프로그램설명 /47 2-6-6 프로그램동작및확인 /48 2-7 실습 7 : Motion Detection Sensor /49 2-7-1 Motion Detection Sensor 연결 /49 2-7-1 Motion Detection Sensor PORT 구성표 /50 2-7-2 Motion Detection Sensor 회로도 /50 2-7-3 프로그램소스 /50 2-7-4 프로그램설명 /52 2-7-5 프로그램동작및확인 /53 2-8 실습 8 : Light Sensor /55 2-8-1 Light Sensor PORT 연결 /55 2-8-2 Light Sensor PORT 구성표 /56 2-8-3 Light Sensor 회로도 /56 2-8-4 프로그램소스 /56 2-8-5 프로그램설명 /57 2-8-6 프로그램동작및확인 /58 2-9 실습 9 : Temperature Sensor /59 2-9-1 Temperature Sensor 연결 /59 2-9-2 Temperature Sensor PORT 구성표 /60 2-9-3 Temperature Sensor 회로도 /60 2-9-4 프로그램소스 /60 2-9-5 프로그램설명 /61 2-9-6 프로그램동작및확인 /62 b 목차

2-10 실습 10 : Sound Sensor /63 2-10-2 Sound Sensor PORT 구성표 /55 2-10-3 Sound Sensor 회로도 /55 2-10-4 프로그램소스 /56 2-10-5 프로그램설명 /56 2-10-6 프로그램동작및확인 /57 목차 c

d 목차

Chapter I HBE-ADK-2560

1-1 HBE - ADK-2560 개발환경 HBE-ADK-2560 의개발환경을구축하기위해, 개발툴을인터넷에서내려받고, 설치하는과정을설명한다. 그림 1-1-1 Arduino 1.0.1 Program 1-1 HBE-ADK-2560 개발환경 3

아두이노 (Arduino) 는무료소프트웨어이며, 아두이노홈페이지 (http://www.arduino.cc) 에서다운로드받을수 있다. 아래링크를클릭하면바로다운받을수있다. 만약인터넷익스플로러에서홈페이지가올바르게표시되지 않으면크롬웹브라우저를이용하기바란다. 그림 1-1-2 Arduino 다운로드 (Arduino 홈페이지 ) 그림 1-1-3 Arduino 다운로드 (Arduino 홈페이지 ) 위의과정에서다운로드한 arduino-1.0.5-windows.zip 파일을압축을푼다. 여기서는다음화면과같이 D:\tools\ 경로아래에압축을푸는것으로가정하고진행한다. 4 1. HBE-ADK-2560

그림 1-1-4 Arduino 압축풀기 위의과정들은홈페이지에서다운받는과정을설명한것이며 CD 에 Arduino IDE 폴더에있는 arduino-1.0.1.zip 파일을압축을풀어하도록한다. 이유는 ADK 관련된내용이추가되어있기때문이며본교재에서도 1.0.1 버전을 사용할것이다. 실습을편하게진행하기위해서실행파일인 arduino.exe 파일에마우스오른쪽버튼을눌러 " 바로가기 " 를만든다 음바탕화면에끌어다놓는다. 그림 1-1-5 Arduino 압축풀기 그다음으로아두블록개발환경을구축하도록한다. 다음의사이트를방문해그림과같이아두블록개발툴을설 치한다. 아두블럭다운로드경로 (source forge) http://sourceforge.net/projects/ardublock/files 1-1 HBE-ADK-2560 개발환경 5

그림 1-1-6 ardublock-beta-20131209-workshop-insectbot.zip 파일다운로드 위의화면과같이 ArduBlock 프로그램은지속적으로업데이트되고있으며여기서는현재최신버전인 2013년 12 월 9일자버전을사용한다. 본사이트에서는안정화버전인 2013년 7월 12일자를사용하도록권장하고있지만본교재에서다룰 array 와 subrutine 등을사용하려면최신버전을이용해야한다. 이파일의이름은 ardublock-beta- 20131209-workshop-insectbot.zip 이며, 다운로드후압축을해제하면다음과같은파일이존재한다. 그림 1-1-7 ardublock-beta-20131209-workshop-insectbot.zip 파일압축해제 6 1. HBE-ADK-2560

libraries 폴더는다음그림과같이아두이노프로그램설치경로아래에있는 libraries 폴더에덮어쓰기를해준다. 그림 1-1-8 아두이노의 libraries 폴더에덮어쓰기복사 그리고나머지 ardublock-all.jar 파일은아래그림과같이아두이노프로그램이설치된경로아래에있는 tools 폴더아래에 ArduBlockTool\tool 이라는두개의폴더를만들어서그안에복사한다. 그림 1-1-9 아두이노의 tools 폴더아래에 ArduBlockTool\tool\ardublock-all.jar 복사 그리고아두이노를재시작한다음도구메뉴를클릭해보면기존에보이지않던 ArduBlock 이라는메뉴를아래 그림과같이확인할수있다. 1-1 HBE-ADK-2560 개발환경 7

그림 1-1-10 아두이노의도구에새로추가된 ArduBlock 메뉴 새로추가된 ArduBlock 메뉴를선택하면아래와같이 Block 을이용해펌웨어를개발할수있는기능을사용할 수있다. 그림 1-1-11 ArduBlock 의실행화면 8 1. HBE-ADK-2560

1-2 Driver 설치 여기서는 HBE-ADK-2560 의드라이버설치하는과정을설명한다. 다음그림과같이 HBE-ADK-2560 과케이블을준비한다. 그림 1-2-1 HBE-ADK-2560( 좌 ) 과 AM to Micro USB B cable( 우 ) 다음그림과같이 HBE-ADK-2560 과 PC 를 AM to Micro USB B 케이블로연결한다. 그림 1-2-2 PC USB Port( 좌 ) 와 HBE-ADK-2560( 우 ) 을케이블로연결 1-2 Driver 설치 7

연결후다음그림과같이선택하고다음을클릭한다. 그림 1-2-3 HBE-ADK-2560 driver 설치 1 찾아보기클릭후 arduino 프로그램이복사된폴더에 drivers 폴더를찾아선택하고다음을클릭한다. 그림 1-2-4 HBE-ADK-2560 driver 설치 2 8 1. HBE-ADK-2560

그림 1-2-5 HBE-ADK-2560 driver 설치 3 그림 1-2-6 HBE-ADK-2560 driver 설치 4 Driver 설치가다음그림처럼완료되면마침을클릭한다. 그러면 HBE-ADK-2560 driver 설치는완료된다. 1-2 Driver 설치 9

10 1. HBE-ADK-2560 그림 1-2-7 HBE-ADK-2560 driver 설치 5

1-3 Arduino 처음실행 1-3-1 Arduino 소프트웨어사용을위한설정 Arduino 소프트웨어사용을위해설정하는과정을설명한다. 먼저 Arduino 폴더에 arduino.exe 파일을실행한다. 그림 1-3-1 Arduino 실행화면 내컴퓨터에서오른쪽버튼을눌러속성을클릭한후하드웨어탭을선택후장치관리자를클릭하여포트를확 인한다. 포트는다음그림과같이 Arduino Mega ADK R3(COM12) 처럼되어있다. 1-3 Arduino 처음실행 11

그림 1-3-2 포트확인 포트를확인하여후 Arduino Program 에서도구 -> 보드에서그림과같이 Arduino Mega 2560 or Mega ADK 를 선택한다. 그림 1-3-3 보드설정 12 1. HBE-ADK-2560

Arduino Program 에서도구 -> 시리얼포트를그림과같이 COM12 로선택한다. 그림 1-3-4 포트설정 이과정이완료되면 Arduino Program 설정은완료된다. 1-3 Arduino 처음실행 13

1-3-2 HBE-ADK-2560 Program 다운로드 여기서는프로그램예제작성, 컴파일및다운로드방법에대해설명한다. 다음그림과같이예제를작성한다. 그림 1-3-5 LED 제어예제소스 14 1. HBE-ADK-2560

파일 저장을클릭하고다음그림과같이 LED_TEST 라고저장한다. 그림 1-3-6 프로그램소스저장 저장이완료되면스케치 - 확인 / 컴파일을클릭한다. 컴파일이완료되면다음그림과같이 컴파일완료 라고나타 난다. 그림 1-3-7 확인 / 컴파일 1-3 Arduino 처음실행 15

컴파일이완료되면파일 - 업로드를클릭한다. 업로드가완료되면다음그림과같이 업로드완료 라고나타난다. 그림 1-3-8 프로그램다운로드 다. 업로드가완료되면 HBE-ADK-2560 에 LED(LD2) 가 1 초마다한번씩 ON/OFF 되는것을볼수있을것이 그림 1-3-9 LED OFF/ON 16 1. HBE-ADK-2560

위의 C언어로구현된소스코드를아두블럭에서다시동일한동작을하도록구현해보자. 도구메뉴의 ArduBlock 을실행한다음다음과같이블럭을조립하면동일한동작을하는프로그램을작성할수있다. 필요한블럭은왼쪽의블럭메뉴에서끌어다놓을수있으며, 실수로블럭을잘못배치한경우에는왼쪽창으로다시끌어다놓으면제거할수있다. 그림 1-3-10 아두블럭으로구현한 LED OFF/ON 위의그림에서반복블럭은 C 언어에서 loop() 함수와같은역할을한다. setup() 함수는찾아볼수없는데이는 upload 하면자동으로생성해주기때문이다. 위와같이작성후 Save 버튼을누른다음 Upload 버튼을누르면자동 으로 C 언어로변환된다. 그다음동일하게확인 / 컴파일명령을통해 ADK-2560 보드에서실행시켜볼수있다. 1-3 Arduino 처음실행 17

18 1. HBE-ADK-2560

Chapter II 프로그램실습

2-1 실습 1 : LED 제어 학습목표 1. LED 의동작원리와아두이노를이용한제어방법을익힌다. 2. 아두이노프로그램구현을위한기본함수들에대한종류와사용법을익힌다. 2-1-1 HBE-Accessory-Base 의장착 LED(Light Emitting Diode) 는우리말로발광다이오드라고하며, 순방향으로전압을가했을때발광하는반도체소자이다. 발광원리는전계발광효과를이용하고있다. 또한수명도백열등보다매우길다. 발광색은사용되는재료에따라서다르며자외선영역에서가시광선, 적외선영역까지발광하는것을제조할수있다. 일리노이대학의닉호로니악이 1962년에최초로개발되어오늘날까지여러가지용도로사용고있으며향후백열등을대체할광원으로기대되고있다. 다음그림은 HBE-Accessory-Base 이다. 그림 2-1-1 HBE-Accessory-Base 2-1 LED 제어 19

다음그림은 HBE-ADK-2560 에 HBE-Accessory-Base 를장착한그림이다. 그림 2-1-2 HBE-Accessory-Base 장착 2-1-2 LED PORT 구성표 다음표는 LED 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성 명칭 Port / Number 비고 LED1 PA0 / 22 LED2 PA2 / 24 LED3 PA4 / 26 LED LED4 PA6 / 28 LED5 PC7 / 30 LED6 PC5 / 32 LED7 PC3 / 34 LED8 PC1 / 36 LED_EN LED_EN_PIN PH3 / 6 표 2-1-1 LED Port 구성표 20 2. 프로그램실습

2-1-3 LED 회로도 다음그림은 LED 회로도이며 HBE-Accessory-Base 에장착되어있어따로연결할필요는없다. 동작방법은 회로도와같이 LED_EN_PIN 에연결된 PORT 에 LOW 를출력한후 LED 와연결되어있는 PORT 에 HIGH(1) 을출 력하면 ON, LOW(0) 을출력하면 OFF 된다. 그림 2-1-3 LED 회로도 2-1 LED 제어 21

2-1-4 프로그램소스 순서도 다음은 LED를구동하는예제프로그램의순서도이다. 프로그램이시작되면 LED 출력핀을사용할수있도록초기화한다. 그리고반복적으로 2진전가산기와같이 1씩증가시키며 LED에현재값을표시하게된다. 최대값인 255에도달하면다시 0 에서부터이작업을반복한다. 그림 2-1-4 LED 프로그램순서도 22 2. 프로그램실습

LED.ino 다음은 LED를구동하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int LED[8] = {22,24,26,28,30,32,34,36}; 003: 004: #define LED_EN 1 005: 006: void setup() 007: { 008: int z; 009: LED_SW_EN(); 010: for( i=0; i<8; i++) 011: pinmode( LED[i], OUTPUT ); 012: } 013: void LED_control(int data) 014: { 015: int i; 016: for(i=0 ; i<8; i++) 017: { 018: if(data & 0x01) 019: digitalwrite(led[i], HIGH); 020: else 021: digitalwrite(led[i], LOW); 022: data /= 2; 023: } 024: } 025: 026: void loop() { 027: int i; 028: for(i=0;i<256;i++) 029: { 030: LED_control(i); 031: delay(200); 032: } 033: } 034: 035: void LED_SW_EN(void) 2-1 LED 제어 23

036: { 037: pinmode(led_en_pin,output); 038: pinmode(sw_en_pin,output); 039: #ifdef LED_EN 040: digitalwrite(led_en_pin,low); 041: #else 042: digitalwrite(led_en_pin,high); 043: #endif 044: #ifdef SW_EN 045: digitalwrite(sw_en_pin,low); 046: #else 047: digitalwrite(sw_en_pin,high); 048: #endif 049: } 2-1-5 프로그램설명 1 setup() 아두이노프로그램은 setup() 와 loop() 로구분된다. 여기서 setup() 는말그대로포트등을설정하는부분이다. 따라서 pinmode(pin, mode) 함수는 pin에대한포트를 INPUT, OUTPUT, INPUT_PULLUP 으로설정한다. 여기서는 LED를출력으로설정한다. 그리고 LED_SW_EN() 함수는 LED와 SW의동작하도록설정하는함수이다. 009: LED_SW_EN(); 010: for(i=0; i<8; i++) 011: pinmode(led[i], OUTPUT); 2 loop() loop() 는프로그램을실행하는부분이다. 따라서 LED_control(i) 함수를이용하여 LED에 0~255까지데이터를출력한다. delay(200); 는 200ms의시간을지연한다. 028: for(i=0;i<256;i++) 029: { 030: LED_control(i); 031: delay(200); 032: } 3 LED_control() 함수 이함수는 8 개의 LED 에각각의데이터비트값을출력하는함수이다. digitalwrite(pin,value) 함수는 pin 에해당 24 2. 프로그램실습

하는포트에 value 값을출력한다. Value 값은 HIGH(1) or LOW(0) 이다. 016: for(i=0 ; i <8; i++) 017: { 018: if(data & 0x01) 019: digitalwrite(led[i], HIGH); 020: else 021: digitalwrite(led[i], LOW); 022: data /= 2; 023: } 4 LED_SW_EN() 함수아래의프로그램에서 LED_EN을 1로선언한것은 LED를사용하기위해서이다. 이함수는 LED와 SW의동작에대한 ON/OFF 를설정하는함수이다. 먼저 LED_EN_PIN, SW_EN_PIN 을출력으로설정하고, LED를사용하면 LOW로출력해주어야동작을하고, 사용하지않으면 HIGH 로출력한다. Switch도 LED와마찬가지도출력하여동작여부를설정할수있다. 004: #define LED_EN 1 035: void LED_SW_EN(void) 036: { 037: pinmode(led_en_pin,output); 038: pinmode(sw_en_pin,output); 039: #ifdef LED_EN 040: digitalwrite(led_en_pin,low); 041: #else 042: digitalwrite(led_en_pin,high); 043: #endif 044: #ifdef SW_EN 045: digitalwrite(sw_en_pin,low); 046: #else 047: digitalwrite(sw_en_pin,high); 048: #endif 049: } 2-1 LED 제어 25

2-1-6 프로그램동작및확인 컴파일을한후다운로드를하면 200ms 마다 1 씩증가되면서 LED 가 ON / OFF 를반복하고모든 LED 가켜지 면다시처음상태부터시작한다. 이것을계속반복한다. 데이터값 LED 0 1 2 3 252 253 254 255 그림 2-1-5 데이터값에따른 LED 표시 26 2. 프로그램실습

2-1-7 아두블럭으로구현하기 아두블럭조립하기 다음은 LED를구동하는예제프로그램을아두블럭으로구현한예제이다. C언어로구현한예제와는약간다른데, setup() 함수에서초기화해주어야하단 pinmode() 등의기능은자동으로구현된다. 따라서아래와같이간단하게구현해볼수있다. 그러나 C언어와같이상세한프로그램이어렵다. 예를들면비트연산이없으며, 지역변수할당을할수없다는단점이있다. 그러나 C언어에서구현된기능을아래와같이완벽히구현할수있다. C언어로구현된예제와비교하여프로그램의흐름을이해하도록한다. 그림 2-1-6 setup() 함수와 loop() 함수가함께붙어있는블록의구현 아두블럭의좌측에서블록들을가져와추가할수있으며, 만약삭제하고싶다면다시왼쪽편으로끌어다버리면 된다. 2-1 LED 제어 27

그림 2-1-7 사용자블록 LED_control 의구현 위와같이구현이되면저장버튼을누른다음실행을시켜보자. C 언어예제와동일하게동작하는지관찰해보고 더개선할방법이없는지생각해보자. 2-1-8 요점정리 1. LED 는발광다이오드 ( 發光 diode) 라고도하며, 전압가하면빛을내는반도체소자이다. 최근친환경적이며 수명이길다는점에서각광을받고있다. 2. pinmode() 를이용하여특정핀을입출력방향을설정할수있다. 3. digitalwrite() 함수를이용하여특정핀에 HIGH 또는 LOW 값을출력할수있다. 4. 아두이노프로그램은크게초기화를위한 setup() 함수와반복적으로무한히호출되는 loop() 함수로이루어 진다. 28 2. 프로그램실습

2-1-9 학습문제 1. 다음의보기중에서 LED에관한설명이아닌것은? 1 발광다이오드 ( 發光 diode) 라고도한다. 2 순방향으로전압을가했을때발광하는반도체소자이다. 3 발광원리는전계발광효과를이용한다. 4 수명이백열등보다짧은단점이있다. 2. LED 의장점을간단히기술하시오. - 3. 다음에서설명하는함수의이름을기입하시오. 1 2 3 사용하고자하는핀을입력모드로사용할지, 출력모드로사용할지설정하는함수 - 특정핀에 HIGH(1) 또는 LOW(0) 를디지털형식으로출력하는함수 - 밀리초단위로지연시간을발생시키는함수 - 4 프로그램을본격적으로시작하기전에포트입출력설정, 메모리할당등초기화시점에시스템에 의해호출되는함수 - 5 프로그램초기화가끝나면본격적인작업을무한히반복적으로수행하는함수 - 2-1 LED 제어 29

2-1-10 과제 1. 제일왼쪽의 LED 하나를점등한다음 1 초마다우측으로한칸씩이동하는프로그램을구현하시오. 30 2. 프로그램실습

2-10 실습 10 : Sound Sensor 학습목표 1. Sound Sensor 의음향인식원리에대해이해한다. 2. ADC 의변환과정을이해하고, 센싱된값을정량적단위로변환할수있다. 2-10-1 Sound Sensor 연결 Sound Sensor는우리말로음향센서라고하며, 전기음향변환기의원리를이용한마이크로폰을사용한다. 대개마이크로폰은직류바이어스방식의정전형을사용하며, 일부초저주파음이나초고음압을계측하는데세라믹소자를이용한압전형을사용하기도한다. 물질에외력을가하여변형이생기면그변형에비례한전하가생겨서전압을발생시키는데이러한현상을압전효과라고한다. 다음그림은 ADK Accessory kit 의 Sound Sensor 이다. 그림 2-10-1 Sound Sensor 다음그림은 ADK Accessory kit 의 Sound Sensor 를 HBE-Accessory-Base 에연결한것이다. 2-10 Sound Sensor 63

2-10-2 Sound Sensor Port 구성표 그림 2-10-2 Sound Sensor 연결 다음표는 Sound Sensor 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 Sound AMP_OUT ADC0 / A0 표 2-10-1 Sound Sensor Port 구성표 2-10-3 Sound Sensor 회로도 다음그림은 Sound Sensor 회로도이다. Sound Sensor 는 MIC 및 LINE 입력에따라출력되는전압이변화하여이 것을측정한다. 그림 2-10-3 Sound Sensor 회로도 64 2. 프로그램실습

2-10-4 프로그램소스 순서도 다음은 Sound Sensor 프로그램의순서도이다. 초기화시점에 Sound Sensor 의핀을입력모드로설정해서음량값을읽어올수있도록한다. 인식된값은 0~1023 사이의값을가지므로 8개의 LED로충분히표현할수없으니 Serial 포트로데이터를전송한다. Adc_data 변수에는센싱된값이저장되고이값을이용해역으로전압값을계산해낸다. 그리고연결된 Serial 포트로센싱된값을주기적으로전송하는기능을수행한다. 그림 2-10-4 Sound Sensor 프로그램순서도 2-10 Sound Sensor 65

Sound_sensor.ino 다음은 Sound Sensor 로입력된신호를측정하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int Sound = A0; 003: int adc_data=0; 004: float Sensor_data=0; 005: 006: void setup() 007: { 008: LED_SW_EN(); 009: Serial.begin(9600); 010: while (!Serial); 011: } 012: 013: void loop() { 014: adc_data = analogread(sound); 015: Sensor_data = adc_data / 204.6; 016: Serial.print("adc_data : "); 017: Serial.print(adc_data); 018: Serial.print(", Voltage : "); 019: Serial.print(Sensor_data); 020: Serial.print(" [v]\n\r"); 021: delay(100); 022: } 023: 024: void LED_SW_EN(void) 025: { 026: pinmode(led_en_pin,output); 027: pinmode(sw_en_pin,output); 028: #ifdef LED_EN 029: digitalwrite(led_en_pin,low); 030: #else 031: digitalwrite(led_en_pin,high); 032: #endif 033: #ifdef SW_EN 034: digitalwrite(sw_en_pin,low); 035: #else 66 2. 프로그램실습

036: digitalwrite(sw_en_pin,high); 037: #endif 038: } 2-10-5 프로그램설명 1 setup() Serial port를 9600의속도로설정한다. 009: Serial.begin(9600); 010: while (!Serial); 2 loop() Sound Sensor에해당하는 port의아날로그값을디지털값으로변환하여 adc_data에저장하고, 이값을전압으로변환하여 Sensor_data에저장하여이값들을 PC로출력한다. 014: adc_data = analogread(sound); 015: Sensor_data = adc_data / 204.6; 016: Serial.print("adc_data : "); 017: Serial.print(adc_data); 018: Serial.print(", Voltage : "); 019: Serial.print(Sensor_data); 020: Serial.print(" [v]\n\r"); 021: delay(100); 2-10 Sound Sensor 67

2-10-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하면먼저아두이 노프로그램의도구 - 시리얼모니터를실행시킨다. 그러면다음과같이출력된다. 전송주기를 0.1 초로설정했기때 문에상당히빠른속도로데이터가수신됨을알수있다. 그림 2-10-5 프로그램동작 68 2. 프로그램실습

2-10-7 아두블럭으로구현하기 아두블럭조립하기 다음은 Sound Sensor 의값을읽어서주기적으로 Serial 포트로전송하는예제를아두블럭에서구현한예제이다. Sound Sensor 는왼쪽블록모음에서아날로그사운드센서라는이름으로찾을수있다. 핀번호는 0번으로지정을해야첫번째핀에연결한 Sound Sensor에접근할수있다. 인식된값은 0~1023 사이의갑으로수신되는데 ADC 분해능이 10bit 이기때문이다. 그림 2-10-6 아두블럭으로구현한 Sound Sensor 프로그램 2-10 Sound Sensor 69

2-10-8 요점정리 1. Sound Sensor 는원리에따라동전형, 정전형, 압전형, 접촉저항형등이있다. 2. 물질에외력을가하여변형이생기면그변형에비례한전하가생겨서전압을발생시키는데이러한현상을 압전효과라고한다. 3. Sound Sensor 는압전효과의원리를이용하여음향입력의세기에따라전압이변화하는것을측정한다. 4. ADC(Analog-to-Digital Converter) 란아날로그센서에서측정된전압또는전류량을디지털값으로변환해 주는장치이다. 2-10-9 학습문제 1. 다음중 Sound Sensor 에대한설명과거리가먼것은? 1 전기음향변환원리에따라동전형, 정전형, 압전형, 접촉저항형등이있다. 2 MIC 및 LINE 의음향입력에따라전압이변화하는것을측정한다. 3 초정밀음향계측시세라믹소자를이용한압전형을주로사용한다. 4 센싱된결과값은분해능이 10 bit 일경우 0~255의값을반환한다. 2. 다음의설명을읽고적절한용어를 ( ) 안에기입하시오. 물질에외력을가하여변형이생기면그변형에비례한전하가생겨서전압을발생시키는데이러한 현상을 ( 소자를사용한다. ) 라고한다. 이원리가적용된마이크로폰은지르콘지탄산연등의자기에의한 4. ADC 와 DAC 의차이점을비교하시오. 2-10-10 과제 1. Sound Sensor 를이용해소리를감지한후소리가크면 LED 를많이켜고, 모터를빨리회전시키며, 소리가 작으면 LED 를적게켜고모터를천천히회전시키는프로그램을구현하시오. 70 2. 프로그램실습

2-2 실습 2 : 스위치를이용한 LED 제어 학습목표 1. 스위치의사용법과목적에대해이해한다. 2. digitalwrite() 함수와 digitalread() 함수의사용법을익힌다. 3. if-else 문을이용해프로그램의흐름을분기할수있다. 2-2-1 SW PORT 구성표 스위치 (switch) 는우리말로개폐기라고도하며전류의흐름을막거나계속흐르게하는용도로쓰인다. 본실습에서는입력장치로이용하여 LED를끄거나켜는명령의목적으로사용하게된다. 스위치의응용된형태인패턴스위치는패턴 (pattern) 과스위치 (switch) 의합성어로, 다수의전등 On/Off 조합으로패턴기능을사용할수있는스위치를가리킨다. 다음표는 SWITCH 연결에대한 Port 구성표이며, 표와같이연결되어있다. 그리고 LED 연결 PORT 는 2-1 의 실습 1 과같다. 구성 명칭 Port / Number 비고 SW1 PA1 / 23 SW2 PA3 / 25 SW3 PA5 / 27 SWITCH SW4 PA7 / 29 SW5 PC6 / 31 SW6 PC4 / 33 SW7 PC2 / 35 SW8 PC0 / 37 SW_EN SW_EN_PIN PH4 / 7 표 2-2-1 SWITCH Port 구성표 2-2 스위치를이용한 LED 제어 25

2-2-2 SW 회로도 다음그림은 SW 회로도이며 HBE-Accessory-Base 에장착되어있어따로연결할필요는없다. 동작방법은 회로도와같이 SW_EN_PIN 에연결된 PORT 에 LOW 를출력한후스위치를누르면 PORT 에서 HIGH(1) 로인식하 며누르지않은상태에서는 LOW(0) 로인식된다. 그림 2-2-1 SWITCH 회로도 26 2. 프로그램실습

2-2-3 프로그램소스 순서도 다음은스위치를구동하는예제프로그램의순서도이다. 이프로그램이시작되면 LED와스위치를함께사용할수있도록핀의입출력방향을설정한다. 그리고스위치의입력값을읽어서같은비트의 LED를켜도록동작한다. 그림 2-2-2 SWITCH 프로그램순서도 2-2 스위치를이용한 LED 제어 27

SW_LED.ino 다음은 LED를구동하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int LED[8] = {22,24,26,28,30,32,34,36}; 003: int SWITCH[8] = {23,25,27,29,31,33,35,37}; 004: 005: 006: #define LED_EN 1 007: #define SW_EN 1 008: 009: void setup() 010: { 011: LED_SW_EN(); 012: for(int i=0; i<8; i++) 013: { 014: pinmode(switch[z],input); 015: pinmode(led[z],output); 016: } 017: } 018: 019: void loop() 020: { 021: for(int i=0; i<8; i++) 022: { 023: if(digitalread( SWITCH[i] ) ) 024: digitalwrite(led[i], HIGH); 025: else 026: digitalwrite(led[i], LOW); 027: } 028: delay(100); 029: } 030: 031: void LED_SW_EN(void) 032: { 033: pinmode(led_en_pin,output); 034: pinmode(sw_en_pin,output); 035: #ifdef LED_EN 28 2. 프로그램실습

036: digitalwrite(led_en_pin,low); 037: #else 038: digitalwrite(led_en_pin,high); 039: #endif 040: #ifdef SW_EN 041: digitalwrite(sw_en_pin,low); 042: #else 043: digitalwrite(sw_en_pin,high); 044: #endif 045: } 2-2-4 프로그램설명 1 setup() LED_SW_EN(); 는스위치와 LED를사용하도록설정하는함수이고, 스위치는입력, LED 출력으로설정한다. 011: LED_SW_EN(); 012: for(int i=0; i<8; i++) 013: { 014: pinmode(switch[i], INPUT); 015: pinmode(led[i], OUTPUT); 016: } 2 loop() value = digitalread(pin) 함수는 pin에해당하는포트의값을읽어 value의저장하는함수이다. 여기서는스위치의값을읽어해당되는 LED에출력한다. 따라서스위치를누르면해당되는 LED는켜진다. 021: for(int i=0; i<8; i++) 022: { 023: if(digitalread(switch[i])) 024: digitalwrite(led[i],high); 025: else 026: digitalwrite(led[i],low); 027: } 028: delay(100); 2-2 스위치를이용한 LED 제어 29

2-2-5 프로그램동작및확인 컴파일을한후다운로드를하면스위치를누르는것에따라 LED 가 ON / OFF 가된다. 스위치 LED 스위치 LED 그림 2-2-3 스위치에따른 LED 동작 30 2. 프로그램실습

2-2-6 아두블럭으로구현하기 아두블럭조립하기 다음은앞서 C 언어로구현한스위치의입력값을읽어서 LED 를켜는프로그램을아두블럭으로구현한예제이다. 아두블럭을실행하고다음과같이구현한다음 C 언어로구현한예제와동일하게동작하는지확인해보자. 그림 2-2-4 아두블럭으로구현한 program 블록 그림 2-2-5 LED 핀배열을초기화하는 initled 블록 2-2 스위치를이용한 LED 제어 31

그림 2-2-6 스위치핀들을배열로초기화하는 initswitch 블록 2-2-7 요점정리 1. 스위치는다른말로개폐기라고하며, 전류의흐름을제어하는용도로사용한다. 2. digitalwrite() 함수는디지털출력, digitalread() 함수는디지털입력함수이다. 3. if - else 문은분기문이라고부르며, 이것을이용하여특정조건에따라다른동작을하게할수있다. 4. 32bit 컴퓨터에서 int 형의크기는 32bit 크기를가진다. 1byte 는 8bit 이다. 32 2. 프로그램실습

2-2-8 학습문제 1. 다음의설명중스위치에대한설명이아닌것은? 1 프로그램의처리결과를출력하는소자이다. 2 개폐기 ( 開閉器 ) 라고도한다. 3 전류의흐름을막거나계속흐르게하는용도로쓰인다. 4 패턴스위치는다수의전등을조합하여제어할수있다. 2. 다음의함수중특정핀에서 HIGH 또는 LOW 의값을읽어오는함수는? 1 2 3 4 digitalwrite() digitalread() analogwrite() analogread() 3. 만약 23 번핀에스위치를연결하고입력모드로설정해두었다면, A 와 B 에적절한값을기입하여스위치 입력값을읽어오는 C 언어코드를완성하시오. int pin = ( A ) ; int input = digitalread( B ); 4. 아래의코드를구현했을때 N 번핀의스위치를누르면 LED 는어떻게변하겠는가? int result = digitalread( N ); if(result) control = LOW; else control = HIGH; digitalwrite(led, control); 2-2 스위치를이용한 LED 제어 33

5. 다음은배열을할당한소스코드이다. 32 비트컴퓨터에서다음의배열의총바이트크기는얼마인가? int SWITCH[8] = {23,25,27,29,31,33,35,37}; 2-2-9 과제 1. 제일좌측의 LED 를하나켠다음, 스위치를한번누를때마다 LED 가우측으로한칸씩이동하도록 프로그램을구현하시오. 34 2. 프로그램실습

2-3 실습 3 : BUZZER 제어 학습목표 1. Buzzer 의사용법을익히고 delay() 함수를이용해음향출력시간을조절할수있다. 2. 비트단위 & 연산의사용법을익히고 10 진수, 16 진수, 2 진수의변환을할수있다. 2-3-1 BUZZER 연결 버저 (buzzer) 또는비퍼 (beeper) 는소리신호알림장치이며, 기계, 전자기계, 압전방식으로되어있다. 버저의 종류에는알람기기, 타이머, 또마우스클릭이나키입력과같은사용자입력의확인등을포함한다. 다음그림은 ADK Accessory kit 의 BUZZER 이다. 그림 2-3-1 BUZZER 다음그림은 ADK Accessory kit 의 BUZZER 를 HBE-Accessory-Base 에연결한것이다. 그림 2-3-2 BUZZER 연결 2-3 BUZZER 제어 31

2-3-2 BUZZER PORT 구성표 다음표는 BUZZER 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 BUZZER BUZZER PG1 / 40 표 2-3-1 BUZZER Port 구성표 2-3-3 BUZZER 회로도 다음그림은 BUZZER 회로도이다. 동작방법은회로도와같이 PORT 에서 HIGH(1) 를출력하면 ON, LOW(0) 을 출력하면 OFF 한다. 그림 2-3-3 BUZZER 회로도 32 2. 프로그램실습

2-3-4 프로그램소스 순서도 다음은 Buzzer를구동하는예제프로그램의순서도이다. 프로그램이시작되면 Buzzer 를사용할수있도록핀을초기화한다. 그리고 1초가경과될때마다 Buzzer 에서소리가나도록동작한다. 그림 2-3-4 BUZZER 프로그램순서도 2-3 BUZZER 제어 33

buzzer.ino 다음은 Buzzer를구동하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int buzzer = 40; 003: 004: void setup() 005: { 006: LED_SW_EN(); 007: pinmode(buzzer, OUTPUT); 008: } 009: 010: void BUZZER_control(int data) 011: { 012: if(data & 0x01) 013: digitalwrite(buzzer,high); 014: else 015: digitalwrite(buzzer,low); 016: } 017: 018: void loop() 019: { 020: BUZZER_control(1); 021: delay(1000); 022: BUZZER_control(0); 023: delay(1000); 024: } 025: 026: void LED_SW_EN(void) 027: { 028: pinmode(led_en_pin,output); 029: pinmode(sw_en_pin,output); 030: #ifdef LED_EN 031: digitalwrite(led_en_pin,low); 032: #else 033: digitalwrite(led_en_pin,high); 034: #endif 035: #ifdef SW_EN 34 2. 프로그램실습

036: digitalwrite(sw_en_pin,low); 037: #else 038: digitalwrite(sw_en_pin,high); 039: #endif 040: } 2-3-5 프로그램설명 1 setup() buzzer Port 를출력으로설정한다. 007: pinmode(buzzer, OUTPUT); 2 loop() buzzer를 1초에마다 ON / OFF 하는프로그램이다. 020: BUZZER_control(1); 021: delay(1000); 022: BUZZER_control(0); 023: delay(1000); 3 BUZZER_control() 함수함수에서 data의값에따라서 1이면 ON, 0이면 OFF 하도록출력하는함수이다. 따라서이함수는 buzzer의동작을위한함수이다. 012: if(data & 0x01) 013: digitalwrite(buzzer,high); 014: else 015: digitalwrite(buzzer,low); 2-3 BUZZER 제어 35

2-3-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하면 1 초간격으로 buzzer 는 ON / OFF 를반복한다.( 삐 ~ 소리가남 ) 2-3-7 아두블럭으로구현하기 아두블럭조립하기 다음은아두블럭을이용해주기적으로 Buzzer 를울리는예제를구현한것이다. 먼저 setup() 과 loop() 흐름을가 지는 program 블럭을먼저구현하고, Buzzer 를제어하는블록인 BuzzerControl 을구현해준다. 그림 2-3-5 아두블럭을이용한 BUZZER 의 program 블럭구현 36 2. 프로그램실습

그림 2-3-6 BUZZER 를제어하는 BuzzerControl 블럭구현 2-3-8 요점정리 1. Buzzer 는비퍼 (beeper) 라고도하며소리신호알림장치로써기계, 전자기계, 압전방식등으로구현된다. 2. 비트단위연산 (bitwise operator) 의종류에는 &(AND), I(OR), << (LEFT SHIFT), >> (RIGHT SHIFT), ~(NOT), ^(XOR) 등이있다. 3. 디지털값은 HIGH/LOW, INPUT/OUTPUT 등의 2 가지로표현할수있는값이다. 2-3 BUZZER 제어 37

2-3-9 학습문제 1. 다음의설명중에서 Buzzer에대한내용과거리가먼것은? 1 비퍼 (beeper) 라고도하며소리신호알림장치이다. 2 스위치와함께사용자입력을수신하는용도로사용된다. 3 기계, 전자기계, 압전방식등으로구현된다. 4 알람기기, 타이머, 사용자입력의확인등에사용된다. 2. 다음중비트연산 & 의결과가가장큰것은? 1 2 3 4 5 0x00 & 0x00 0x00 & 0x01 0x01 & 0x00 0x10 & 0x01 0x01 & 0x01 3. 다음의소스코드를실행했을때 Buzzer는울리지않는다. Buzzer가울릴수있도록최소한으로수정하시오. pinmode(pinbuzzer, OUTPUT); int a = 4; int b = 8; if( a & b == 1 ) digitalwrite(pinbuzzer, HIGH); else digitalwrite(pinbuzzer, LOW); delay(1000); 2-3-10 과제 1. 스위치를누를때마다 Buzzer 가울리는프로그램을구현하시오. 38 2. 프로그램실습

2-4 실습 4 : DC Motor Driver 제어 학습목표 1. DC Mortor 와 DC Motor Driver 의개념에대해이해한다. 2. for() 문을이용해배열의반복적인처리를프로그램으로구현할수있다. 2-4-1 DC Motor Driver 연결 Motor 는우리말로전동기라고부르며전력을이용하여회전운동의힘을얻는장치이다. 전동기의축에기계적부하를연결하여운전하며, 전동기의일률은보통킬로와트 (kw) 또는마력 (HP=0.75 kw) 으로표시한다. 이 Motor 를회전을제어하는장치를 Motor Driver라고한다. Motor 는특성에따라 DC Motor, Step Motor 등으로나뉜다. 다음그림은 ADK Accessory kit 의 DC Motor Driver이다. 그림 2-4-1 DC Motor Driver 다음그림은 ADK Accessory kit 의 DC Motor Driver 를 HBE-Accessory-Base 에연결한것이다. 그림 2-4-2 DC Motor Driver 연결 2-4 DC Motor Driver 제어 35

2-4-2 DC Motor Driver PORT 구성표 다음표는 DC Motor Driver 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성 명칭 Port / Number 비고 A PL7 / 42 AN PL5 / 44 DC_MOTOR ENA PG5 / 4 PWM B PL3 / 46 BN PL1 / 48 ENB PE3 / 5 PWM 표 2-4-1 DC Motor Driver Port 구성표 2-4-3 DC Motor Driver 회로도 다음그림은 DC Motor driver 회로도이다. 그림 2-4-3 DC Motor Driver 회로도 36 2. 프로그램실습

2-4-4 프로그램소스 순서도 다음은 DC Motor Driver 제어프로그램의순서도이다. DC Motor Driver가연결된핀 6개를제어할수있도록 OUTPUT 으로설정해준다. 그리고초기화가끝나면오른쪽방향으로점점빠르게회전시킨다. 255 까지속도가올라가면 Motor 를정지시킨다음방향을반대로바꾼다. 마찬가지로속도가 255가될때까지가속회전을시킨후정지한다. 이러한동작을계속해서반복하는프로그램이다. 그림 2-4-4 DC Motor Driver 프로그램순서도 2-4 DC Motor Driver 제어 37

DC_Motor_Driver.ino 다음은 DC Motor Driver를구동하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int DC_MOTOR[6] = {42,44,46,48,4,5}; 003: int i=0; 004: 005: void setup() 006: { 007: LED_SW_EN(); 008: for(i=0;i<6;i++) 009: pinmode(dc_motor[i],output); 010: } 011: 012: void loop() 013: { 014: PWM_control(0); 015: MOTOR_control(5); 016: for(i=0;i<256;i++) 017: { 018: PWM_control(i); 019: delay(40); 020: } 021: PWM_control(0); 022: MOTOR_control(10); 023: for(i=0;i<256;i++) 024: { 025: PWM_control(i); 026: delay(40); 027: } 028: } 029: 030: void MOTOR_control(unsigned char data) 031: { 032: for(i=0;i<4;i++){ 033: if(data & 0x08) 034: digitalwrite(dc_motor[i],high); 035: else 38 2. 프로그램실습

036: digitalwrite(dc_motor[i],low); 037: data *=2; 038: } 039: } 040: 041: void PWM_control(unsigned char speed) 042: { 043: analogwrite(dc_motor[4], speed); 044: analogwrite(dc_motor[5], speed); 045: } 046: 047: void LED_SW_EN(void) 048: { 049: pinmode(led_en_pin,output); 050: pinmode(sw_en_pin,output); 051: #ifdef LED_EN 052: digitalwrite(led_en_pin,low); 053: #else 054: digitalwrite(led_en_pin,high); 055: #endif 056: #ifdef SW_EN 057: digitalwrite(sw_en_pin,low); 058: #else 059: digitalwrite(sw_en_pin,high); 060: #endif 061: } 2-4-5 프로그램설명 1 setup() DC Motor Driver Port를출력으로설정한다. 008: for(i=0;i<6;i++) 009: pinmode(dc_motor[i],output); 2 loop() DC Motor driver 제어하는프로그램으로먼저정회전으로설정후속도를 0~255 까지증가시키고다시역회전 2-4 DC Motor Driver 제어 39

으로설정후속도를 0~255까지증가한다. 이것을계속반복한다. 014: PWM_control(0); 015: MOTOR_control(5); 016: for(i=0;i<256;i++) 017: { 018: PWM_control(i); 019: delay(40); 020: } 021: PWM_control(0); 022: MOTOR_control(10); 023: for(i=0;i<256;i++) 024: { 025: PWM_control(i); 026: delay(40); 027: } 3 MOTOR_control() 함수함수에서 da의값에따라서 1이면 HIGH, 0이면 LOW 하도록출력하는함수로모터의정, 역회전동작을위한함수이다. 032: for(i=0;i<4;i++){ 033: if(data & 0x08) 034: digitalwrite(dc_motor[i],high); 035: else 036: digitalwrite(dc_motor[i],low); 037: data *=2; 038: } 다음표는정, 역회전동작에관한것이다. 동작 A / B AN / BN 비고 정지 0 0 0 1 1 0x0F 정회전 1 0 0x0A 역회전 0 1 0x05 표 2-4-2 정, 역회전동작에대한데이터값 4 PWM_control() 함수 여기서 alalogwrite(pin, value) 함수는 pin에해당하는포트에 value에대한 PWM 신호를출력하도록한다. 함수 40 2. 프로그램실습

에서 spe의값에따라서 0~255 까지출력이변화한다. 이값은주기가 1이라고가정하였을때 HIGH 값을출력되는시간은 speed/255의시간의비만큼출력되며, 만약 speed 값이 0이면 LOW 와같은출력을한다. 043: analogwrite(dc_motor[4], speed); 044: analogwrite(dc_motor[5], speed); 2-4-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하면모터가정회 전으로회전하며점점속도가빨라지고최대속도에도달한다. 그러면다시역회전으로회전하며정회전하였을때 와같이점점속도가빨라지고최대속도에도달한다. 이러한동작을반복한다. 2-4-7 아두블럭으로구현하기 아두블럭조립하기 다음은 DC Motor Deiver 프로그램을아두블럭으로구현한것이다. C언어에존재하는비트단위연산은현재버전에서지원하지않기때문에회전방향의판단은디지털변수인 rotatereverse 를사용하고있다. 이값은사실 (TRUE) 와거짓 (FALSE) 의두가지값을지정할수있다. 별도의생성과정은필요없으며사용하면할당된다. 그림 2-4-5 DC Motor Driver 의 program 블럭 본프로그램은 Motor 의회전속도를지속적으로증가시키며주기적으로방향을바꾸도록되어있기때문에 다른예제보다블록이많이필요하게된다. 실수로잘못조립하지않도록주의해서실습하기바란다. 2-4 DC Motor Driver 제어 41

그림 2-4-6 Motor 를회전시키는 RotateMotor 블럭 그림 2-4-7 Motor 제어핀을설정하는 MOTOR_control 블럭 42 2. 프로그램실습

그림 2-4-8 Motor 의회전속도를지정하는 PWM_control 블럭 그림 2-4-9 DC Motor Driver 의포트를초기화하는 InitDcMotorDriver 블럭 2-4 DC Motor Driver 제어 43

2-4-8 요점정리 1. DC Mortor 는 DC Motor Driver 를이용해회전을제어할수있다. 2. Motor 는전동기라고도하며, 전기를이용해축을회전시킨다. 3. 반복문의종류에는 for() 문, while() 문, do-while() 문등이있다. 4. a,b 를변수라고할때, a = a * b 를줄여서 a *= b 로줄여서나타낼수있다. 5. PWM 은 Pulse Width Modulation 의약자로써, 펄스의폭을이용해외부로신호를보내는변조방식이다. 2-4-9 학습문제 1. 다음의보기중에서 Motor 에대한설명과거리가먼것은? 1 Motor Driver를이용해회전을제어할수있다. 2 전동기라고도하며, 전력을이용하여회전운동의힘을얻는장치이다. 3 Motor 의축에기계적부하를연결하여운전한다. 4 Motor 의일률은보통 Voltage 또는 V로표시한다. 2. 다음의소스코드에서 DC_MOTOR[6] 배열에는 Motor 제어를위한핀번호가저장되어있다. 모든핀을 출력으로사용할수있도록 ( A ) 에적절한코드를기입하시오. for( i = 5 ; i >= 0 ; A ) { pinmode(dc_motor[i],output); } 44 2. 프로그램실습

3. 변수 N = 2 일때, 다음연산결과중에서가장큰것은? 1 N *= 3 2 N = 4 3 N /= 6 4 N += 3 5 N -= 8 4. 다음에서설명하는함수를기입하시오. 특정핀을지정해서 256 단계의 PWM 신호를출력할수있다. - 2-4 DC Motor Driver 제어 45

2-4-10 과제 1. 스위치를누르면모터가회전하고, 떼면멈추는프로그램을구현하시오. 46 2. 프로그램실습

2-5 실습 5 : Electronic Switch 제어 학습목표 1. Electronic Switch 를이용해자동제어에대한개념을이해한다. 2. 비트단위 << 연산을이해하고, 프로그램으로구현할수있다. 2-5-1 Electronic Switch 연결 Electronic Switch 는우리말로전기스위치라고부르며, 다른말로릴레이 (Relay) 라고도한다. 이는전기, 전자제품을작동시키고, 신호를전달하는기능을하는전자부품이다. 이것은사람의손으로동작하는스위치와달리전자석에의해동작하는데, 전자석의원리에따라코일에전류가흐르면, 떨어져있던 Contacts 가연결되게된다. 고압전류등을직접손으로다루지않아도되기때문에안전하다는장점이있다. 다음그림은 ADK Accessory kit 의 Electronic Switch 이다. 그림 2-5-1 Electronic Switch 2-5 Electronic Switch 제어 41

다음그림은 ADK Accessory kit 의 Electronic Switch 를 HBE-Accessory-Base 에연결한것이다. 그림 2-5-2 Electronic Switch 연결 2-5-2 Electronic Switch PORT 구성표 다음표는 Electronic Switch 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 Electronic Switch RELAY PD7 / 38 표 2-5-1 Electronic Switch Port 구성표 2-5-3 Electronic Switch 회로도 다음그림은 Electronic Switch 회로도이다. 동작방법은회로도와같이 PORT 에서 HIGH(1) 를출력하면 ON, LOW(0) 을출력하면 OFF 한다. 그리고 S1 스위치는 Electronic Switch 가프로그램에관계없이동작여부를확인 할수있다. 그림 2-5-3 Electronic Switch 회로도 42 2. 프로그램실습

2-5-4 프로그램소스 순서도 다음은 Electronic Switch 를제어하기위한프로그램의순서도이다. 보는바와같이다소단순한구조로되어있는데초기화시점에 Electronic Switch 를사용할수있도록핀을초기화한다. 준비가끝나면 Electronic Switch 를켜서전류를흐르도록하고 1초를대기한다. 그리고다시 Electronic Switch 를끄고 1초대기한다. 이렇게한사이클을지속적으로반복하여 1초마다전류를끊었다흘렸다반복하는프로그램이다. 그림 2-5-4 Electronic Switch 회로도 2-5 Electronic Switch 제어 43

Electronic_Switch.ino 다음은 Electronic Switch 를구동하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int Electronic_Switch = 38; 003: 004: void setup() 005: { 006: LED_SW_EN(); 007: pinmode(electronic_switch, OUTPUT); 008: } 009: 010: void Electronic_Switch_control(int data) 011: { 012: if(data & 0x01) 013: digitalwrite(electronic_switch,high); 014: else 015: digitalwrite(electronic_switch,low); 016: } 017: 018: void loop() 019: { 020: Electronic_Switch_control(1); 021: delay(1000); 022: Electronic_Switch_control(0); 023: delay(1000); 024: } 025: 026: void LED_SW_EN(void) 027: { 028: pinmode(led_en_pin,output); 029: pinmode(sw_en_pin,output); 030: #ifdef LED_EN 031: digitalwrite(led_en_pin,low); 032: #else 033: digitalwrite(led_en_pin,high); 034: #endif 035: #ifdef SW_EN 44 2. 프로그램실습

036: digitalwrite(sw_en_pin,low); 037: #else 038: digitalwrite(sw_en_pin,high); 039: #endif 040: } 2-5-5 프로그램설명 1 setup() Electronic Switch Port 를출력으로설정한다. 007: pinmode(electronic_switch, OUTPUT); 2 loop() Electronic Switch 를 1초에마다 ON / OFF 하는프로그램이다. 020: Electronic_Switch_control(1); 021: delay(1000); 022: Electronic_Switch_control(0); 023: delay(1000); 3 Electronic_Switch_control() 함수함수에서 da의값에따라서 1이면 ON, 0이면 OFF 하도록출력하는함수이다. 따라서이함수는 Electronic Switch의동작을위한함수이다. 012: if(data & 0x01) 013: digitalwrite(electronic_switch,high); 014: else 015: digitalwrite(electronic_switch,low); 2-5-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하면 1 초간 격으로 Electronic Switch 는 ON / OFF 를반복한다. Electronic Switch 가 ON/OFF 될때 딸깍 거리는소리를들을 수있을것이다. 2-5 Electronic Switch 제어 45

2-5-7 아두블럭으로구현하기 아두블럭조립하기 다음은앞서 C언어로구현한 Electronic Switch 제어프로그램을아두블럭으로구현한예제이다. 아두블럭에서는 C언어에서사용한비트단위 AND ( & ) 연산자가아직지원되지않는다. 따라서디지털변수에해당하는 pinelectronicswitch 변수를할당하고사용하였다. 이변수는사실 (TRUE) 과거짓 (FALSE) 의두가지값을가질수있다. 이값을보고 Electronic_Switch_control 블럭에서전류를흘릴것인지판단하게된다. 그림 2-5-5 Electronic Switch 의 program 블럭 그림 2-5-6 Electronic Switch 를켜거나끄는 Electronic_Switch_control 블럭 46 2. 프로그램실습

2-5-8 요점정리 1. Electronic Switch 는릴레이 (Relay) 라고도부르며, 고압의전력을안전하게통제하기위한목적으로사용된다. 2. Electronic Switch 는일반스위치와같이출력모드로사용한다. 3. 비트단위 << 연산을 1 회하면 2 를곱하는효과가있고, >> 연산을하면 2 를나누는효과가있다. 2-5-9 학습문제 1. 다음의보기중에서 Electronic Switch 에대한설명과거리가먼것은? 1 전기스위치, 릴레이 (Relay) 라고도부른다. 2 고전압을직접적으로다루어야하기때문에감전의위험이수반된다. 3 전기, 전자제품을작동시키고, 신호를전달하는기능을하는전자부품이다. 4 사람의손으로동작하는스위치와달리전자석에의해동작한다. 2. Electronic Switch 가사용되는분야를한가지이상기입하시오. - 3. 다음의코드는 Electronic Switch 를이용해전력을일정시간켰다가끄는예제이다. 이소스코드에서 ( N ) 에 적절한숫자를기입하여전력을 1 초간켰다가꺼지도록구현하시오. pinmode(electronic_switch, OUTPUT); digitalwrite(electronic_switch,high); int count = 1 << ( N ) ; for( int i=0; i< count ; i++) { delay( 125 ); } digitalwrite(electronic_switch,low); 2-5 Electronic Switch 제어 47

2-5-10 과제 1. 스위치를누를때마다 LED 가토글되고, Electronic SWitch 를 On/Off 시키는프로그램을구현하시오. 48 2. 프로그램실습

2-6 실습 6 : Open Detect Sensor 학습목표 1. Open Detect Sensor 의동작원리를이해한다. 2. 논리연산의종류와사용법을익힌다. 2-6-1 Open Detect Sensor 연결 Open Detect Sensor 는렌쯔의법칙을이용한전자석원리를이용한장치로써, 문의개폐여부를감지하는센서이다. 도체에전선을감은다음전류를흘리면일정방향으로도체가움직이는데이를렌쯔의법칙이라고한다. 전선을통해흐르는전류주변에서자기장이발생하게되고이힘에따라도체가일정방향으로움직이는원리를이용한다. 다음그림은 ADK Accessory kit 의 Open Detect Sensor 이다. 그림 2-6-1 Open Detect Sensor 다음그림은 ADK Accessory kit 의 Open Detect Sensor 를 HBE-Accessory-Base 에연결한것이다. 2-6 Open Detect Sensor 45

그림 2-6-2 Open Detect Sensor 연결 2-6-2 Open Detect Sensor Port 구성표 다음표는 Open Detect Sensor 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 Open Detect Sensor REED PE5 / 3 표 2-6-1 Open Detect Sensor Port 구성표 2-6-3 Open Detect Sensor 회로도 다음그림은 Open Detect Sensor 회로도이다. Open Detect Sensor 는자석이근접하며 HIGH(1) 출력되는동작을 한다. 46 2. 프로그램실습

그림 2-6-3 Open Detect Sensor 회로도 2-6 Open Detect Sensor 47

2-6-4 프로그램소스 순서도 다음은 Open Detect Sensor 의상태를인식해서자기를인식하면그결과를 LED로출력하도록구현할프로그램의순서도이다. 먼저 LED 핀을사용할수있도록초기화한다음, Open Detect Sonsor 를입력모드로설정한다. 주기적으로 Open Detect Sensor 의상태를파악한다음 HIGH 신호가오면 LED를켜도록한다. 그림 2-6-4 Open Detect Sensor 프로그램순서도 48 2. 프로그램실습

Open_Detect_Sensor.ino 다음은 Open Detect Sensor 를이용하여 LED를구동하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int LED[8] = {22,24,26,28,30,32,34,36}; 003: int Open_Detect = 3; 004: 005: #define LED_EN 1 006: 007: void setup() 008: { 009: LED_SW_EN(); 010: pinmode(led[0], OUTPUT); 011: pinmode(open_detect, INPUT); 012: } 013: 014: void loop() 015: { 016: digitalwrite(led[0], digitalread(open_detect)); 017: delay(100); 018: } 019: 020: void LED_SW_EN(void) 021: { 022: pinmode(led_en_pin,output); 023: pinmode(sw_en_pin,output); 024: #ifdef LED_EN 025: digitalwrite(led_en_pin,low); 026: #else 027: digitalwrite(led_en_pin,high); 028: #endif 029: #ifdef SW_EN 030: digitalwrite(sw_en_pin,low); 031: #else 032: digitalwrite(sw_en_pin,high); 033: #endif 034: } 2-6 Open Detect Sensor 49

2-6-5 프로그램설명 1 setup() Open Detect Sensor Port는입력, LED Port 는출력으로설정한다.. 010: pinmode(led[0], OUTPUT); 011: pinmode(open_detect, INPUT); 2 loop() Open Detect Sensor Port에입력된값을 LED Port로출력한다. 016: digitalwrite(led[0], digitalread(open_detect)); 017: delay(100); 2-6-6 프로그램동작및확인 컴파일을한후다운로드후 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하고 Open Detect Sensor 에자석을가까이다가가면 LED 는켜진다. 기본상태 자석근접시 그림 2-6-5 프로그램동작 2-6-7 아두블럭으로구현하기 아두블럭조립하기 위에서 C언어로구현한 Open Detect Sensor 프로그램을아두블럭으로구현하면아래와같다. Program 블럭의 setup 단계에서 InitLED 블록을호출해서 LED 핀모드를초기화한다. 이블럭의구현방식은첫번째예제와완전히동일하다. 프로젝트간에 Copy & Paste 기능이아직은지원되지않으므로, 첫번째 LED 예제를불러와서고치는방법을사용하는것도좋다. 현재아두블럭툴은계속해서업데이트되고있다. 따라서조만간에이러한기능들이추가될것이다. 새로운버전의툴이나오면꼭사용해보기바란다. 50 2. 프로그램실습

그림 2-6-6 Open Detect Sensor 의 program 블럭 위블록에서 LED 의제어는별도의사용자블럭을정의하지않고 디지털핀설정 블럭을이용해제어하도록 한다. 그림 2-6-7 프로그램동작 2-6-8 요점정리 1. Open Detect Sensor 는마그네틱센서의일종이며, 전자석의원리를이용해문의개폐여부를감지한다. 2. Open Detect Sensor 는응답속도가빠르고, 신뢰성이높아전자제어장치, 기계제어장치등에널리쓰인다. 3. Open Detect Sensor 는렌쯔의법칙을이용한전자석의원리가적용되었다. 4. 논리연산의종류는 == (Logical And), (Logical Or),! (Logical Not), <, >, <=, >= 등이있다. 2-6 Open Detect Sensor 51

2-6-9 학습문제 1. 다음의설명중마그네틱센서에대한설명과거리가먼것은? 1 센서의가격이비싼편이라고급가전제품에만제한적으로사용되고있다. 2 응답속도가빠르고, 유리관에봉입되어접촉신뢰성이높다. 3 전자제어장치, 기계제어장치등자동기기의스위칭소자이다. 4 리드센서, 오토센서등으로도불리며, 자석의자력선에의해동작한다. 2. 다음에서설명하는 Open Detect Sensor 에적용된과학법칙은? 도체에전선을감아서전류를흘리면일정방향으로도체가움직이게되는데, 전자석은이법칙을 이용해만들어졌다. 전선을통해흐르는전류주변에서자속이발생하고, 이에따른힘이발생되어 도체는일정방향으로움직이게된다. - 3. Open Detect Sensor 를적용하여우리생활에편의를제공할수있는방안을한가지이상제시하시오. - 4. 다음의예제에서 Open Detect Sensor 에자석을근접시킬경우 LED 가켜지도록최소한으로수정하시오. pinmode(led, OUTPUT); pinmode(open_detect, INPUT); int value = digitalread(open_detect); if(!value == 1 ) digitalwrite(led, HIGH); else digitalwrite(led, LOW); delay(1000); 52 2. 프로그램실습

2-6-10 과제 1. Open Detect Sensor 에자석을가까이대면, LED 가켜지면서 Buzzer 가울리는프로그램을구현하시오. 2-6 Open Detect Sensor 53

2-7 실습 7: Motion Detection Sensor 학습목표 1. Motion Detection Sensor 의움직임감지원리와적외선의특징을이해한다. 2. 인터럽트와인터럽트서비스루틴을이해하고프로그램으로구현한다. 2-7-1 Motion Detection Sensor 연결 Motion Detection Sensor 는적외선의움직임을포착하는방식을기본원리로한다. 적외선은전자스펙트럼에서가시광선보다더긴파장을가지고있으며육안으로는확인이불가하다. 가시광선에이어지는파장범위가 0.75마이크로미터에서 1미리미터정도인전자기파를적외선이라고하며, 빛의스펙트럼에서적색부분의바깥쪽에해당됨으로써적외선이란이름이붙여졌다. 다음그림은 ADK Accessory kit 의 Motion Detection Sensor 이다. 그림 2-7-1 Motion Detection Sensor 다음그림은 ADK Accessory kit 의 Motion Detection Sensor 및 Buzzer를 HBE-Accessory-Base 에연결한것이다. 2-7 Motion Detection Sensor 49

2-7-2 Motion Detection Sensor Port 구성표 그림 2-7-2 Motion Detection Sensor 연결 다음표는 Motion Detection Sensor 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 Motion Detection Sensor DETECT PE4 / 2 표 2-7-1 Motion Detection Sensor Port 구성표 2-7-3 Motion Detection Sensor 회로도 다음그림은 Motion Detection Sensor 회로도이다. Motion Detection Sensor 는주위에움직임을감지하면 HIGH(1) 로출력되는동작을한다. 50 2. 프로그램실습 그림 2-7-3 Motion Detection Sensor 회로도

2-7-4 프로그램소스 순서도 다음은 Motion Detection Sensor를이용해주기적으로움직임을감지해서 Buzzer를울리는프로그램의순서도이다. Buzzer는출력장치이므로핀의 OUTPUT 으로설정하고, Motion Detection Sensor 는입력장치이므로핀을입력모드로설정한다. 처음엔부저를끈상태에서시작하고 0.5초주기로움직임을감지하고 Buzzer 를울리도록한다. 그림 2-7-4 Motion Detection Sensor 프로그램순서도 2-7 Motion Detection Sensor 51

Motion_Detection_Sensor.ino 다음은 Motion Detection Sensor 를이용하여움직임을감지하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int BUZZER = 40; 003: int Motion = 0; 004: int count = 0; 005: volatile int state = LOW; 006: 007: void setup() 008: { 009: LED_SW_EN(); 010: pinmode(buzzer, OUTPUT); 011: attachinterrupt(motion, Motion_isr, FALLING); 012: digitalwrite(buzzer, LOW); 013: } 014: 015: void loop() 016: { 017: if(state == HIGH){ 018: delay(10); 019: count++; 020: if(count==50){ 021: digitalwrite(buzzer, LOW); 022: state = LOW; 023: } 024: } 025: else 026: count = 0; 027: } 028: 029: void Motion_isr() 030: { 031: digitalwrite(buzzer, HIGH); 032: state = HIGH; 033: } 52 2. 프로그램실습

034: 035: void LED_SW_EN(void) 036: { 037: pinmode(led_en_pin,output); 038: pinmode(sw_en_pin,output); 039: #ifdef LED_EN 040: digitalwrite(led_en_pin,low); 041: #else 042: digitalwrite(led_en_pin,high); 043: #endif 044: #ifdef SW_EN 045: digitalwrite(sw_en_pin,low); 046: #else 047: digitalwrite(sw_en_pin,high); 048: #endif 049: } 2-7-5 프로그램설명 1 setup() attachinterrupt(interrupt, function, mode) 는외부인터럽트설정함수로 interrupt는 0~5의인터럽트포트의넘버를의미하며, function은말그대로함수, 즉인터럽트가발생하면실행될함수이고, mode는인터럽트가발생하는시점으로 LOW, CHANGE( 상승및하강에지 ), RISING( 상승에지 ), FALLING( 하강에지 ) 이있다. Motion Detection Sensor Port는외부인터럽트, Buzzer Port는출력으로설정하고 Buzzer 를 OFF 한다. 010: pinmode(buzzer, OUTPUT); 011: attachinterrupt(motion, Motion_isr, FALLING); 012: digitalwrite(buzzer, LOW); 2 loop() 여기서는 Buzzer가켜지면다시일정시간기다리고 Buzzer를 OFF 한다. 따라서 state가 HIGH 이면 Buzzer는켜져있는상태이므로일정시간이지나면 Buzzer를 OFF 하고, state를 LOW 로변경한다. count 값은시간지연을위한변수이다. 2-7 Motion Detection Sensor 53

017: if(state == HIGH){ 018: delay(10); 019: count++; 020: if(count==50){ 021: digitalwrite(buzzer, LOW); 022: state = LOW; 023: } 024: } 025: else 026: count = 0; 3 Motion_isr() Motion Detection Sensor 에인터럽트가발생하면이함수가실행되어 Buzzer가울리고 state를 HIGH 로설정한다. 031: digitalwrite(buzzer, HIGH); 032: state = HIGH; 2-7-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하고 Motion Detection Sensor 근처에서움직이면 Buzzer 가일정시간켜졌다가꺼지게된다. 54 2. 프로그램실습

2-7-7 아두블럭으로구현하기 아두블럭조립하기 아두블럭은아래의그림과같이디지털적외선모션센서블럭을기본적으로제공하고있다. 왼쪽블럭모음창에서해당블럭을찾아보자. 그외에도다양한호환가능한블럭들이존재함을알수있다. 일반블럭을조립하듯이사용하면되는데인자로핀번호를지정할수있다. 기본적으로아두블럭의배열은인덱스가 1부터시작하지만핀번호는 0번부터시작함을주의해야한다. 여기서핀번호를 1을사용하고있는데이것은두번째핀임을의미한다. 그림 2-7-5 Motion Detection Sensor 의아두블럭구현소스 2-7-8 요점정리 1. Motion Detection Sensor 는적외선의원리를이용해움직임을감지한다. 2. 적외선은전자스펙트럼에서가시광선보다더긴파장을가지고있으며, 빛의스펙트럼에서적색부분의바깥쪽 에해당한다. 3. attachinterrupt() 함수를이용하면인터럽트를이용해, 필요할때마다마이크로컨트롤러에게서비스처리를 요청할수있다. 4. 인터럽트를발생시키는방식은 LOW, CHANGE, RISING, FALLING 이있다. 2-7 Motion Detection Sensor 55

2-7-9 학습문제 1. Motion Detection Sensor 의감지원리인적외선의특징으로적절하지않은것은? 1 전자스펙트럼에서가시광선보다더긴파장을가지고있다. 2 자세히보면육안으로확인가능하며붉은색을띈다. 3 파장범위가 0.75 마이크로미터에서 1미리미터정도인전자기파이다. 4 빛의스펙트럼에서적색부분의바깥쪽에해당한다. 2. 다음에서설명하는용어를기입하시오. 방해한다는의미를가지며어떤일을하고있는장치에게하던일을잠시중단시키고필요한서비스를요 청하는것 - 3. 다음의함수중에서외부인터럽트설정함수는? 1 2 3 4 pinmode() attachinterrupt() analogread() digitalwrite() 4. 다음중인터럽트트리거의형태에해당하지않는것은? 1 TRUE 2 3 4 CHANGE RISING FALLING 2-7-10 과제 1. Motion Detection Sensor 가움직임을감지하면, LED 가켜지면서 Buzzer 에서소리를내도록프로그램을구현하 시오. 56 2. 프로그램실습

2-8 실습 8 : Light Sensor 학습목표 1. Light Sensor 의 ADC 변환원리에대해이해한다. 2. Serial 통신의연결방법및입출력함수의사용법을익힌다. 2-8-1 Light Sensor 연결 Light Sensor 는우리말로조도센서라고하며, 사람의눈에해당하는장비로물체의모양이나상태, 움직임등을감지한다. 빛자체또는빛에포함되는정보를전기신호로변환하여검지하는소자이다. 검지가비접촉, 비파괴, 고속도, 주변에잡음의영향을주지않고할수있는특징이있다. 다음그림은 ADK Accessory kit 의 Light Sensor 이다. 그림 2-8-1 Light Sensor 다음그림은 ADK Accessory kit 의 Light Sensor 를 HBE-Accessory-Base 에연결한것이다. 2-8 Light Sensor 55

그림 2-8-2 Light Sensor 연결 2-8-2 Light Sensor Port 구성표 다음표는 Light Sensor 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 Light Sensor CDS ADC1 / A1 표 2-8-1 Light Sensor Port 구성표 2-8-3 Light Sensor 회로도 다음그림은 Light Sensor 회로도이다. Light Sensor 는빛의밝기에따라 CDS 로출력되는전압이변화하여이것 을측정한다. 그림 2-8-3 CDS 센서회로도 56 2. 프로그램실습

2-8-4 프로그램소스 순서도 다음은 Light Sensor 프로그램을구현하기위한순서도이다. 본예제는 Light Sensor 를입력모드로초기화한다음주기적으로빛의밝기를읽어낸다. 읽은값을이용해전압값을산출해내고수치를알수있도록 Host Computer 쪽으로데이터를전송하는기능을수행한다. 그림 2-8-4 CDS 센서프로그램순서도 2-8 Light Sensor 57

Light_Sensor.ino 다음은 Light Sensor로빛의밝기를측정하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int Light = A1; 003: int adc_data=0; 004: float Sensor_data=0; 005: 006: void setup() 007: { 008: LED_SW_EN(); 009: Serial.begin(9600); 010: while (!Serial); 011: } 012: 013: void loop() 014: { 015: adc_data = analogread(light); 016: Sensor_data = adc_data / 204.6; 017: Serial.print("adc_data : "); 018: Serial.print(adc_data); 019: Serial.print(", Voltage : "); 020: Serial.print(Sensor_data); 021: Serial.print(" [v]\n\r"); 022: delay(500); 023: } 024: 025: void LED_SW_EN(void) 026: { 027: pinmode(led_en_pin,output); 028: pinmode(sw_en_pin,output); 029: #ifdef LED_EN 030: digitalwrite(led_en_pin,low); 031: #else 032: digitalwrite(led_en_pin,high); 033: #endif 034: #ifdef SW_EN 035: digitalwrite(sw_en_pin,low); 58 2. 프로그램실습

036: #else 037: digitalwrite(sw_en_pin,high); 038: #endif 039: } 2-8-5 프로그램설명 1 setup() Serial.begin(baud) 는속도 baud, 데이터비트 8, 패리티없음, 정지비트 1, 흐름제어없음으로설정하는초기화함수이다. while(!serial); 은통신포트에연결이될때까지여기서대기한다. Serial.write() 는한문자를송신하고, Serial.print() 는문자열등을송신하는함수이며, Serial.println() 는문자열등을송신후 줄바꿈 하는함수이다. 여기서 Serial port를 9600의속도로설정한다. 009: Serial.begin(9600); 010: while (!Serial); 2 loop() value = analogread(pin) 는 pin에대한 port를아날로그값을디지털값으로변환하여 value 에저장하며값의크기는 0~1023으로 10bit 로표현한다. 여기서 Light Sensor 에해당하는 port의아날로그값을디지털값으로변환하여 adc_data에저장하고, 이값을전압으로변환하여 Sensor_data에저장하여이값들을 PC로출력한다. 015: adc_data = analogread(light); 016: Sensor_data = adc_data / 204.6; 017: Serial.print("adc_data : "); 018: Serial.print(adc_data); 019: Serial.print(", Voltage : "); 020: Serial.print(Sensor_data); 021: Serial.print(" [v]\n\r"); 022: delay(500); 2-8 Light Sensor 59

2-8-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하면먼저아두이 노프로그램의도구 - 시리얼모니터를실행시킨다. 그러면다음과같이출력된다. 그림 2-8-5 프로그램동작 60 2. 프로그램실습

2-8-7 아두블럭으로구현하기 아두블럭조립하기 다음은 Light Sensor 의값을읽어서 Serial 포트로센싱데이터를주기적으로전송하는프로그램을구현한것이다. 아날로그광센서블럭역시기본적으로제공되고있으며왼쪽블럭모음에서가져다쓸수있다. 인자로핀번호를 1 번으로지정했으면이것은두번째핀을의미한다. 여기서는처음으로문자열을사용하게되는데아래와같이 glue 블럭을이용해정수형타입의변수를문자열로변환해연결할수있다. 예제를완성하고나면자신의이름도함께붙여보기바란다. 그림 2-8-6 빛을감지해서 Serial 포트로전송하는프로그램소스 2-8 Light Sensor 61

2-8-8 요점정리 1. Light Sensor 는조도센서라고하며아날로그신호를디지털신호로변환해주는전자부품이다. 2. Serial 통신연결시 Baudrate, stop bit, parity bit, flow control 등의값을설정해야한다. 3. 아두이노에서직렬통신시 Serial.begin() 를이용해연결하고, read()/write() 를통해양방향통신을할수 있다. 4. analogread() 함수는아날로그값을읽어서 0~1023 의값으로반환해준다. 2-8-9 학습문제 1. 다음의보기중에서 Light Sensor 에대한설명과거리가먼것은? 1 조도센서라고하며디지털신호를아날로그신호로변환해주는전자부품이다. 2 사람의눈에해당하는장치이며주위의밝기를감지한다. 3 빛자체또는빛에포함되는정보를전기신호로변환하여주는소자이다. 4 비접촉, 비파괴로주변에영향을주지않고센싱할수있다. 2. 다음중반복문이아닌것은? 1 2 3 4 while() do while() for() if() 2. 다음의보기중에서 Serial 통신의설정값이아닌것은? 1 2 3 4 baud rate ip stop bit flow control 62 2. 프로그램실습

3. 다음의함수들중에서직렬포트를초기화하고통신연결을하는함수는? 1 2 3 4 Serial.write() Serial.begin() Serial.read() Serial.println() 4. analogread() 함수에대한설명으로올바른것은? 1 특정핀에서입력되는디지털값을아날로그값으로변환한다. 2 값의크기는 0~1023으로 10bit 로표현한다. 3 직렬통신시데이터를읽어오는기능을한다. 4 수신된결과값은 HIGH 또는 LOW 의형태를가진다. 2-8 Light Sensor 63

2-8-10 과제 1. Light Sensor 를이용해빛이밝으면모터를회전하도록프로그램을구현하시오. 64 2. 프로그램실습

2-9 실습 9 : Temperature Sensor 학습목표 1. Temperature Sensor 의온도감지원리에대해이해한다. 2. Serial 통신의장단점을파악하고, UART 와 RS232 의개념에대해이해한다. 2-9-1 Temperature Sensor 연결 Temperature Sensor 는우리말로온도센서라고하며, 온도를감지하여전압이나저항의변화와같이전기신호로변환해주는센서이다. 온도센서는설치장소, 프로세서, 특정대상의물리적특성등에따라매우다양하다. 동작원리는금속산화물을얇게입혀서온도에따라저항치가변화하는특성을이용한다. 트랜지스터회로의온도보상, 온도측정, 제어, 통신기기등의자동제어에널리사용된다. 다음그림은 ADK Accessory kit 의 Temperature Sensor 이다. 그림 2-9-1 Temperature Sensor 다음그림은 ADK Accessory kit 의 Temperature Sensor 를 HBE-Accessory-Base 에연결한것이다. 2-9 Temperature Sensor 59

그림 2-9-2 Temperature Sensor 연결 2-9-2 Temperature Sensor Port 구성표 다음표는 Temperature Sensor 연결에대한 Port 구성표이며, 표와같이연결되어있다. 구성명칭 Port / Number 비고 Temperature Sensor TEMP ADC2 / A2 표 2-9-1 Temperature Sensor Port 구성표 2-9-3 Temp 센서회로도및연결 다음그림은 Temperature Sensor 회로도이다. Temperature Sensor 는 TEMP 로출력되는전압이변화하여온도 를측정한다. 그림 2-9-3 Temperature Sensor 회로도 60 2. 프로그램실습

2-9-4 프로그램소스 순서도 다음은 Temperature Sensor 를이용해주변의온도를측정하고그값을 Serial 포트로주기적으로전송하는프로그램의순서도이다. 프로그램이시작되면온도를읽어오기위해 Temperature Sensor 의핀을입력모드로설정한다. 그리고 Serial 포트를연결한다음주기적으로온도를감지하고 0.5초마다 Serial 포트로전송하는기능을수행한다. 그림 2-9-4 Temperature Sensor 프로그램순서도 2-9 Temperature Sensor 61

Temp_sensor.ino 다음은온도센서를이용하여온도를측정하는예제프로그램소스이다. 001: int LED_EN_PIN = 6, SW_EN_PIN = 7; 002: int temp = A2; 003: int adc_data; 004: float temp_value; 005: 006: void setup() 007: { 008: LED_SW_EN(); 009: Serial.begin(9600); 010: while (!Serial); 011: } 012: 013: void loop() { 014: adc_data = analogread(temp); 015: temp_value = adc_data/2.046; //Vout = 0.5 + (temp*0.01) 016: temp_value -= 50; // temp = (Vout - 0.5) / 0.01 017: Serial.print("TEMP : "); 018: Serial.println(temp_value); 019: delay(500); 020: } 021: 022: void LED_SW_EN(void) 023: { 024: pinmode(led_en_pin,output); 025: pinmode(sw_en_pin,output); 026: #ifdef LED_EN 027: digitalwrite(led_en_pin,low); 028: #else 029: digitalwrite(led_en_pin,high); 030: #endif 031: #ifdef SW_EN 032: digitalwrite(sw_en_pin,low); 033: #else 034: digitalwrite(sw_en_pin,high); 035: #endif 62 2. 프로그램실습

036: } 2-9-5 프로그램설명 1 setup() Serial port를 9600의속도로설정한다. 009: Serial.begin(9600); 010: while (!Serial); 2 loop() temp에해당하는 port의아날로그값을디지털값으로변환하여 adc_data 에저장하고, 이값을온도값으로변환하여 temp_value에저장하여이값을 PC로출력한다. 014: adc_data = analogread(temp); 015: temp_value = adc_data/2.046; //Vout = 0.5 + (temp*0.01) 016: temp_value -= 50; // temp = (Vout - 0.5) / 0.01 017: Serial.print("TEMP : "); 018: Serial.println(temp_value); 019: delay(500); 2-9 Temperature Sensor 63

2-9-6 프로그램동작및확인 컴파일을한후다운로드를하고 HBE-Accessory-Base 에 Module Power 전원스위치를 ON 하면먼저아두이 노프로그램의도구 - 시리얼모니터를실행시킨다. 그러면다음과같이출력된다. 그림 2-9-5 프로그램동작 64 2. 프로그램실습

2-9-7 아두블럭으로구현하기 아두블럭조립하기 다음은 Temperature Sensor 프로그램을아두블럭으로구현한예제이다. 초기화를수행하는 setup 부분은비어있는데아두블럭이핀의모드는자동으로초기화를해주기때문이다. 아두이노보드에서실행을시킬때 C언으로자동변환시켜주는것을볼수있는데 setup() 함수가자동으로만들어지고내부적으로 pinmode() 를호출하는것을볼수있다. 그림 2-9-6 아두블럭으로구현한 Temperature Sensor 프로그램 2-9-8 요점정리 1. Temperature Sensor 는온도를감지하여전압이나저항의변화와같이전기신호로변환해준다. 2. Temperature Sensor 는트랜지스터회로의온도보상, 온도측정, 제어, 통신기기등의자동제어에널리 사용된다. 2-9 Temperature Sensor 65

3. 직렬통신은데이터비트를 1 개의비트단위로외부로송수신하는방식으로써구현하기가쉽고, 멀리갈수가 있고, 기존의통신선로 ( 전화선등 ) 를쉽게활용할수가있어비용의절감이크다는장점이있다. 4. RS232 는비동기식통신콘트롤러에서출력되는디지털신호를외부와연동시켜주는전기적신호방식이다. 5. UART 에서나오는신호는보통 TTL 신호레벨을갖기때문에노이즈에약하고통신거리에제약이있다. 2-9-9 학습문제 1. 다음의설명중 Temperature Sensor 에대한설명과거리가먼것은? 1 온도를감지하여전압이나저항의변화와같이전기신호로변환해준다. 2 설치장소, 프로세서, 물리적특성등에따라매우다양한신호출력장치이다. 3 금속산화물을얇게입혀서제작하여온도에따라저항치가변화하는특성을이용한다. 4 트랜지스터회로의온도보상, 온도측정, 제어, 통신기기등의자동제어에널리사용된다. 2. 다음중온도를나타내는단위가아닌것은? 1 란씨 ( R ) 2 섭씨 ( C ) 3 화씨 ( F ) 4 볍씨 ( P ) 3. 병렬통신에비해직렬통신이가지는장점을한가지이상기입하시오. - 4. UART 와 RS232 의차이점을비교하시오. - 2-9-10 과제 1. Temperature Sensor 를이용해온도가높으면모터를회전하고 LED 를켜도록프로그램을구현하시오. 66 2. 프로그램실습

집필진 HBE-ADK-2560 Accessory Firmware 교재 저자 : 한백전자기술연구소발행처 : 한백전자발행일 : 2014 년 2 월 6 일 주소 : 대전광역시유성구궁동 487-1 전화 : (042) 610-1111 / 팩스 : (042) 610-1199 Web Site : http://www.hanback.co.kr 가격 : 12,000 원 ISBN : 978-89-6633-036-2 이책의저작권은저자에게있으며, 저자의동의없이복사 인용 복제 전제를금합니다.