맞춤형소프트웨어교육(중등)-편집.hwp

Similar documents
디지털 공학

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

1

02 앱을실행하는 3 가지방법 Mobile Apps >> 앱인벤터로작성한앱은다음과같은 3가지의방법으로실행이가능하다. 만약사용자가스마트폰이있고와이파이를사용하고있다면작성한앱을바로실행하여볼수있다. 가장바람직한방법이다. 스마트폰에구글 Play 스토어를통하여 App Invent

실험 5

SBR-100S User Manual

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

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

정보


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

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

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

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

PowerPoint Template

RVC Robot Vaccum Cleaner

PowerPoint 프레젠테이션

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

슬라이드 1

ISP and CodeVisionAVR C Compiler.hwp

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

Studuino소프트웨어 설치

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

BY-FDP-4-70.hwp

Windows 8에서 BioStar 1 설치하기

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

목차 1. 앱인벤터 1.1 앱인벤터란? 1.2 앱인벤터지원기능 1.3 디자이너화면 1.4 블록조합화면 6. 앱등록하기 7. 참고자료 8. 별첨 2. 앱인벤터사용하기 2.1 크롬설치 2.2 구글가입 2.3 에뮬레이터설치 2.4 에뮬레이터실행 3. 앱인벤터시작하기 3.1

PowerPoint 프레젠테이션

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

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

고객 카드

KELP 스터디

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

PowerPoint Template

DE1-SoC Board

Office 365 사용자 가이드

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Motor

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

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

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

Example: LED flashlight

실험 5

Index 1. Intro Install Connect Scratch 1.4 (Offline Editor) Scratch 2.0 (Online Editor) Connect f

untitled

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

KMC.xlsm

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

Microsoft Word - PEB08_USER_GUIDE.doc

NX1000_Ver1.1

실험 5

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

(SW3704) Gingerbread Source Build & Working Guide

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

Install stm32cubemx and st-link utility

Microsoft Word - EastSocket매뉴얼_ _.doc

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

고급 프로그래밍 설계

API 매뉴얼

GBF-1257B 카스블루투스체지방계앱사용매뉴얼

슬라이드 1

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

PowerPoint Presentation

슬라이드 1


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

PowerPoint 프레젠테이션

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

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

Microsoft PowerPoint - Java7.pptx

Microsoft Word - Armjtag_문서1.doc

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

<4D F736F F F696E74202D20325FBEC6B5CEC0CCB3EB20B1E2C3CABDC3C7E82E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

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

ez-md+_manual01

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

System Recovery 사용자 매뉴얼

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

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D E6F312D BCB3C4A12C20C4DAB5F920B1E2C3CA2C20BDC3B8AEBEF3C5EBBDC5>

MF5900 Series MF Driver Installation Guide

Mango-E-Toi Board Developer Manual

Xcrypt 내장형 X211SCI 수신기 KBS World 채널 설정법

SMT Kor.indd

Nordic Chipset BLE Test Application Note

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

API 매뉴얼

RS- 232, RS485 FND Display Module NET-SFND-4-23A RS-232, RS485 FND Display Module NET-SFND-4-23A MANUAL (Rev 1.0) Net-Control http

[Blank Page] i

서현수

CAN-fly Quick Manual

슬라이드 제목 없음

Transcription:

차례 제 1 부스크래치 for 아두이노 1 Ⅰ. 환경설정및연결테스트 3 Ⅱ. LED 제어하기 10 Ⅲ. 조이스틱사용하기 21 Ⅳ. 엔트리 아두이노 29 제 2 부텍스트기반아두이노프로그래밍 35 Ⅰ. 사물인터넷과피지컬컴퓨팅 37 Ⅱ. 아두이노프로그래밍 40 제 3 부앱인벤터 for 아두이노 89 Ⅰ. 앱인벤터기초 91 Ⅱ. 앱인벤터와아두이노의만남 107

제 1 부 스크래치 for 아두이노 Ⅰ. 환경설정및연결테스트 Ⅱ. LED 제어하기 Ⅲ. 조이스틱사용하기 Ⅳ. 엔트리 - 아두이노 Scratch for Arduino

제 1 부스크래치 for 아두이노 Ⅰ. 환경설정및연결테스트 1. S4A 설치 가. http://s4a.cat 접속한다. 나. Download 메뉴로이동후사용자운영체제에맞는파일을다운로드한다. 맞춤형소프트웨어교육 3

Gyeongsangbuk-Do Office of Education 다. S4A 설치하기 2. S4A 와아두이노통신설정 아두이노와 S4A 간의통신을위해아두이노에펌웨어를설치해야한다. 가. http://arduino.cc 에접속한다. 4 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 나. Windows Installer 혹은 ZIP file for non admin install 을다운받는다. 맞춤형소프트웨어교육 5

Gyeongsangbuk-Do Office of Education 다. arduino.exe 파일을실행한다. 라. USB 케이블을이용해서아두이노와컴퓨터를연결한후드라이버를설치한다. 6 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 1) 드라이버수동검색 2) 찾아보기 click 3) arduino 폴더안 drivers 폴더선택 4) 드라이버설치 5) (Arduino Uno(comXX) 뜨면설치성공 6) sketch 에서확인하기 맞춤형소프트웨어교육 7

Gyeongsangbuk-Do Office of Education 마. 펌웨어 (S4A 와아두이노통신용 ) 설치하기 1) 펌웨어파일다운받기 2) 확장자 *.ino 로저장 3) sketch 에서 S4AFirmware16.ino 열기 4) 업로드하기 5) S4A 실행 보드검색중... 6) 보드검색중... 문구사라지면통신성공 8 2016 동계정보화전문요원연수

제1부 스크래치 for 아두이노 바. LED로 연결 확인 디지털 13번 출력을 통해 아두이노 보드에 있는 LED가 1초마다 깜빡이는지 확인한다. 1) LED 꺼짐 2) LED 켜짐 맞춤형 소프트웨어교육 9

Gyeongsangbuk-Do Office of Education Ⅱ. LED 제어하기 1. LED 하나켜고끄기 가. 회로연결하기 디지털 10 번을출력으로하는 1 초간격으로 LED 가깜빡거리는회로를구성한다. 나. S4A 프로그램 디지털 10 번이 1 초간격으로깜빡거리는프로그램을구성한다. 10 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 다. 아두이노구현 2. 4 개의 LED 제어하기 가. 회로연결하기 4 개의디지털핀을이용하여 0.3 초간격으로두개씩깜빡거리는회로를구성한다. 맞춤형소프트웨어교육 11

Gyeongsangbuk-Do Office of Education 나. S4A 프로그램 디지털 10, 11, 12, 13 번을이용하여 0.3 초간격으로좌우로이동하며두개씩깜빡이 는프로그램구성한다. 다. 아두이노구현 12 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 라. S4A 의한계 1) digital 출력핀이 4 개로정해져있다. 2) analog 출력핀이 3 개로정해져있다. 3) digital 출력 8,7,4 번핀은모터전용이다. 4) 아두이노연결은 serial/usb port 32 번까지만가능하고, 다양한센서를쓰기위해 서는 firmware 수정이필요함. 맞춤형소프트웨어교육 13

Gyeongsangbuk-Do Office of Education 3. mblock 설치 가. http://www.mblock.cc// 에접속한다. 나. 다운받고설치후포트를설정한다. 14 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 다. firmware upgrade 를한다. 4. 6 개의 LED 제어하기 가. 회로연결 맞춤형소프트웨어교육 15

Gyeongsangbuk-Do Office of Education 나. mblock 프로그램 6 개의 led 가왼쪽부터순서대로켜졌다꺼진후다시오른쪽에서순서대로켜졌다꺼 짐을반복한다. 다. 아두이노구현 16 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 5. RGB LED 를이용한신호등만들기 가. 회로연결 1) RGB LED - RGB LED 는다리가 4개가있으며아래와같이사용된다. 빨간색 (Red) 을의미하는 R, 녹색 (Green) 을의미하는 G, 파란색 (Blue) 을의미하는 B 의 3가지다리와 GND 를의미하는 - 다리로구성된다. 2) 회로연결 - RGB LED는아래의그림처럼각각의 R,G,B 각각의다리에 220ohm 저항을연결하고 - 다리는 GND 와연결해준다. RGB LED는종류가여러개라서경우에따라서는저항을연결하지않아도되는경우가있다. 3) 다양한 RGB LED 맞춤형소프트웨어교육 17

Gyeongsangbuk-Do Office of Education 나. mblock 프로그램무대의펜더가닿는곳의색깔을맞추어 RGB LED의색깔이변할수있도록프로그램을만들었다. 4개의스프라이트중 M-Panda 스프라이트에아래의그림과같은프로그램을코딩한다. 다. 아두이노구현 18 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 6. 포토리지스터 ( 조도센서 ) 를이용한가로등만들기 가. 회로연결 1) 포토리지스터 (Photoresister) - CDS 센서, 빛센서, 포토셀, 조도센서등의다양한이름으로알려져있다. 빛의양에따라저항값이변한다. 빛의양이적으면저항값이커지게되어직렬로연결된전선에흐르는전류의양이작아지고, 빛의양이많으면저항값이작아져서직렬로연결된전선에흐르는전류의양은많아진다. 2) 회로연결 - 포토리지스터에닿는빛의양이많아지면저항값은작아지고 10k ohm의저항으로흘러가는전류의양은커진다. V( 전압 )=I( 전류 ) R( 저항 ) 에따라아두이노의 A1으로들어오는전압값에변화가생기게된다. 전압값의변화에따라아두이노의디지털 13번핀을이용하여 LED의불을켜고끌수있다. 맞춤형소프트웨어교육 19

Gyeongsangbuk-Do Office of Education 나. mblock 프로그램 analog_pin1 으로부터주변밝기에따른전압값을읽어들여변수 analog_input 에저장한다. 손으로포토리지스터를가려보고손으로가렸을경우에전압값을측정해보고측정된값이하의전압이 analog_input 에저장이되면디지털 13번핀과연결된 LED 에불이들어오도록한다. 다. 아두이노구현 20 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 Ⅲ. 조이스틱활용하기 1. 조이스틱기본움직이기 가. 회로연결 1) 조이스틱 - 조이스틱모듈은저항이내부에내장되어있기때문에브레드보드에연결하지않고아두이노에바로연결해서사용해도된다. X축이동에사용되는 VRx, Y 축이동에사용되는 VRy 그리고버튼눌림을알수있는 SW 핀은아날로그입력핀에연결한다. 2) 회로연결 맞춤형소프트웨어교육 21

Gyeongsangbuk-Do Office of Education 나. mblock 프로그램 아날로그핀 A0 으로부터 x 축값을읽어변수 A0 에저장하고, 아날로그핀 A1 으로부 터 Y 축값을읽어변수 A1 에저장하고, 아날로그핀 A2 로부터버튼눌림값을읽어 A2 에저장한다. 각각의아날로그핀은 0~1023 까지의값들이저장이되지만실제로우 리가필요한값은아래와같다. 조이스틱의상태 아날로그핀이름 읽어들이는값 X축왼쪽끝까지조이스틱을움직임 A0 0 X축오른쪽끝까지조이스틱을움직임 A0 1023 Y축위쪽끝까지조이스틱을움직임 A1 0 Y축아래쪽끝까지조이스틱을움직임 A1 1023 버튼을누르지않음 A2 0이아닌다양한값 버튼을누름 A2 0 a,b 변수의값에따라펜더가위, 아래, 좌, 우로움직인다. 다. 아두이노구현 22 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 2. 상어피하기게임에조이스틱연결하기 가. 프로그램받기 1) https://scratch.mit.edu/projects/11850217/ ( 스크래치, 한빛미디어, 2014 년 ) 에접속한다. 2) 내컴퓨터에프로젝트다운로드하기 mblock 에서프로젝트를열기위하여내컴퓨터에이프로젝트를다운로드받는다. 맞춤형소프트웨어교육 23

Gyeongsangbuk-Do Office of Education 나. mblock 에서다운받은파일열기 1) 확장자가 sb2 인저장한파일을 mblock 에서불러온다. 그리고 Fish1 스프라이트 를선택한다. 2) 키보드로움직이는 Fish1 스트라이트를조이스틱으로움직이게하기위해아래와같이수정한다. 수정이끝나고나면조이스틱의움직임에따라 X축값은변수X에저장이되고 Y축값은변수 Y에저장이된다. X축값이 0이면왼쪽으로움직이고, X축값이 1023 이면오른쪽으로움직인다. Y축값이 0이면위쪽으로움직이고 Y축값이 1023 이면아래쪽으로움직인다. 24 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 3. 하늘에서떨어지는물고기잡기게임에조이스틱연결하기 가. 프로그램받기 1) https://scratch.mit.edu/projects/11911507/ ( 스크래치, 한빛미디어, 2014 년 ) 에접속한다. 2) 프로젝트다운받고 mblock 에서파일을연다. 맞춤형소프트웨어교육 25

Gyeongsangbuk-Do Office of Education 나. mblock 프로그램키보드로움직이는 crab 스프라이트를조이스틱으로움직이도록수정한다. 변수 X에아날로그핀 A0에서읽어들인값을저장하고 X값이 0일경우좌측으로이동하고 X값이 1023 일경우우측으로이동한다. 4. 다트게임에조이스틱연결하기 가. 프로그램받기 1) https://scratch.mit.edu/projects/12037257/ ( 스크래치, 한빛미디어, 2014 년 ) 에접속한다. 26 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 2) 프로젝트다운받고 mblock 에서열기 나. mblock 프로그램 1) cat 스프라이트는변수 X 에아날로그 A0 핀의입력값을저장하고 X 가 0 일경우 왼쪽으로움직이고, X 가 1023 일경우오른쪽으로움직인다. 맞춤형소프트웨어교육 27

Gyeongsangbuk-Do Office of Education 2) dart 스프라이트는변수 SW 에아날로그 A2 핀의입력값을저장하고 SW 의값이 0 일경우에고양이가보는방향으로다트가날아가게한다. 28 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 Ⅳ. 엔트리 아두이노 1. 엔트리에아두이노연결하기 가. 엔트리 play-entry.org 에접속하여 만들기 - 새로만들기 를클릭한다. 나. 연결프로그램을다운로드받는다. 맞춤형소프트웨어교육 29

Gyeongsangbuk-Do Office of Education 다. 다운받은파일의압축을풀고 nw 파일을실행한다. 라. Entry server v1.1 이실행되면아두이노를선택한다. 30 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 마. 드라이버를설치하고펌웨어가설치되면자동으로연결이성공된다. 바. 이렇게연결이성공되면 chrom 브라우저로돌아와서연결을확인한다. 맞춤형소프트웨어교육 31

Gyeongsangbuk-Do Office of Education 2. RGB LED 를 1 초간격으로색깔바꿔보기 가. 회로연결 RGB LED는아래의그림처럼각각의 R,G,B 각각의다리에 220ohm 저항을연결하고 - 다리는 GND 와연결해준다. 이번에사용할 LED 는 Common cathode 타입이기때문에가장긴다리부분이 GND 이고나머지 3개의다리는 R,G,B 를나타낸다. 디지털 9, 10, 11번핀은아날로그출력이가능함으로 9, 10, 11번핀에 RGB 를연결한다. 나. 엔트리프로그램 1 초간격으로색깔이빨간색, 녹색, 파란색으로바뀐다. 32 2016 동계정보화전문요원연수

제 1 부스크래치 for 아두이노 다. 아두이노구현실제아두이노를구현할때는 S4A나 mblock 보다훨씬더안정적인아두이노와의연결을보여주었다. 이미많이쓰고있는스크래치프로그램을다운받아연결할수없다는단점은있다. [ 참고문헌 ] 우지윤 (2015). 스크래치 for 아두이노. 서울 : DIGITAL BOOKS 김종훈, 양영훈 (2015) 꼬마해커의작업실, 수프스크래치. 서울 : 한빛미디어 맞춤형소프트웨어교육 33

제 2 부 텍스트기반 아두이노프로그래밍 Ⅰ. 피지컬컴퓨팅과사물인터넷 Ⅱ. 아두이노프로그래밍의실제 Text based Arduino programming

제 2 부텍스트기반아두이노프로그래밍 Ⅰ. 사물인터넷과피지컬컴퓨팅 1. 사물인터넷 사물인터넷 (IoT: Internet of Things) 은각종사물에센서와통신기능을내장하여인터넷에연결하는기술을말한다. 사물인터넷의핵심은센서와무선통신, 그리고임베디드소프트웨어이다. 사물인터넷에연결되는사물들은자신을구별할수있는유일한아이피 (IP) 를가지고인터넷으로연결되어야하며, 외부환경으로부터의데이터를얻기위해센서를내장한다. 일상생활속에서쉽게접하는휴대폰, TV, 세탁기, 자동차, 비행기, 엘리베이터등에는마이크로프로세서가내장되어있으며, 이러한기기들이올바르게동작하려면소프트웨어가필요하다. < 임베디드소프트웨어 > 마이크로프로세서에내장되어제한된자원을최적으로활용하여특정기능을수행하도 록지원하는소프트웨어로, 이를내장한임베디드시스템의역할과특성을결정하게된다. < 그림 > 식물을인터넷에연결해이산화탄소배출을줄이는데도움을주고있다. 서로연결된식물의에너지를활용, 전력소비를줄일수있는시스템이다. 2. 피지컬컴퓨팅 피지컬컴퓨팅은소프트웨어와하드웨어를이용하여아날로그세상과상호작용이가능한물리적시스템 (interactive physical systems) 을만드는것이다. 즉실생활과컴퓨터의가상세계가상호작용하는것을말한다. 컴퓨터가실생활과상호작용하기위해센서로정보를수집하고, 피지컬시스템의처리결과로사물을동작시키거나빛과소리같은다양한정보를제공한다. 맞춤형소프트웨어교육 37

Gyeongsangbuk-Do Office of Education < 그림 > Physical computing 가. 생활속의센서들센서란물리적 화학적정보를감지하고취득해컴퓨터나이용자가읽을수있는신호로바꾸는장치이다. 우리의생활속에서도사물에포함된센서들을쉽게찾아볼수있다. 온도계 ( 온도센서 ), 조도계 ( 빛센서 ), 습도계 ( 습도센서 ), 거리측정기 ( 초음파센서 ), 터치센서등무수히많은센서가사용되고있다. < 그림 > 집에적용된센서들 나. 피지컬컴퓨팅의구성과동작원리피지컬컴퓨팅을구성하는데는아두이노, 라즈베리파이와같은마이크로컨트롤러가필요하며, 이는사물과인간, 사물과컴퓨터를연결하여센서로부터정보를수집하고, 물리적변화를만드는모터나다른장치들을제어한다. 마이크로컨트롤러컴퓨터와다른장치들에정보를전송하는역할을한다. 38 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 < 그림 > 피지컬컴퓨팅의동작원리 맞춤형소프트웨어교육 39

Gyeongsangbuk-Do Office of Education Ⅱ. 아두이노프로그래밍 1. 아두이노 아두이노 (Arduino) 는오픈소스를기반으로한단일보드마이크로컨트롤러이다. 아두이노는하드웨어와통합개발환경으로구성된다. 아두이노를사용하면빛, 소리, 접촉, 움직임등에반응하거나이러한것들을제어할수있는도구를만들수있다. 임베디드개발경험이전혀없는사람을위해개발된교육용플랫폼이기때문에프로그램을작성하고보드에프로그램을올리는과정을단순화하여다루기쉽게되어있다. 아두이노를이용하여만들수있는것들의예로는악기, 로봇, 빛조형, 게임, 인터랙티브가구, 의상등이있다. 자동차로봇쿼드콥터식물돌봄시스템 종이피아노 스마트의류 2. 아두이노프로그래밍을위한준비 아두이노는통합개발환경 (IDE) 과아두이노보드, 브레드보드, 저항, LED, 빛센서, 초음파센서등다양한하드웨어로구성되어있다. 40 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 가. 하드웨어 1) 아두이노보드아두이노 (Arduino) 보드는오픈소스를기반으로한단일보드마이크로컨트롤러이다. 아두이노를사용하면빛, 소리, 접촉, 움직임등에반응하거나이러한것들을제어할수있는도구를만들수있다. 그중아두이노우노 (UNO) 는가장보편적으로사용되는보드로, 14개의디지털입출력핀, 6개의아날로그입력, 16MHz 의클럭스피드를지원한다. < 그림 > 아두이노보드의구성 마이크로컨트롤러 ATmega328 사용전압 5V 추천하는입력전압 7-12V 최대입력전압 6-20V 디지털 I/O 핀수 14 ( 이중 6 개는 PWM 출력 ) 아날로그입력핀수 6 DC I/O 핀당전류 40 ma DC 3.3V 핀을위한전류 50 ma Flash Memory 32 KB (ATmega328) (0.5KB 는부트로더로사용 ) SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Clock Speed 16 MHz PWM PWM(pulse width modulation) 의약자로펄스폭의변화를이용하여아날로그신호를표현하는기술을말한다. 기존의아두이노메가 (Mega) 는고성능과많은 IO 핀을제공하는것이특징이다. 로봇이나이미지, 음성, 영상등상대적으로고성능이필요한곳에사용될수있다. 아두이노 MEGA ADK 는 ATmega2560 을기반으로하는마이크로컨트롤러이다. 안드로이드폰에 맞춤형소프트웨어교육 41

Gyeongsangbuk-Do Office of Education 연결할수있는 USB 호스트인터페이스를가지고있으며, 54 개의디지털입출력핀, 16 개의아날로그입출력핀, 4 개의하드웨어 UART( 시리얼포트 ), 16MHz 크리스탈오실 레이터 1) 등을가지고있다. < 그림 > 아두이노 MEGA 2560 아두이노마이크로 (Micro) 는 Adafruit 와합작으로만들어진, ATmega32u4 를기반의보드이다. 20개의디지털입출력핀 ( 이중 7개는 PWM 출력으로사용, 12개는아날로그입력으로사용가능 ), 16 MHz 오실레이터, 마이크로 USB 연결, ICSP 헤더와리셋버튼이있다. 간단하게마이크로 USB 케이블을통해컴퓨터와연결하여시작할수있고, 브레드보드에꽂아쓰기편한형태이다. ATmega32u4 를통해추가프로세서의필요없이 USB 통신을한다는점에서 Arduino Leonardo 와유사하다. 이때문에아두이노마이크로는컴퓨터에연결하였을때, 가상 (CDC) 시리얼 /COM 포트뿐만아니라, 마우스나키보드로서인식될수있다. < 그림 > 아두이노 MICRO Lily Pad는바느질로보드및센서, 액세서리를옷에장착하는 Wearable 용으로사용되는특수보드이다. 외모가아름답고전도성실과전도성패브릭소재등을함께활용해서옷에다양한효과나기능을추가할수있다. < 그림 > Lily Pad 1) 결정진동자 (crystal oscillator) 는압전기물질의결정이진동할때생기는기계적인공명을이용하여전기발진기이며, 정확한주파수를만든다. 42 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 2) 브레드보드전자부품으로회로를구성하려면부품을끼울수있는그림과같은보드가필요한데이를브레드보드라 (bread board) 고부른다. 브레드보드는가운데를중심으로 2부분으로나누어진다. 각쪽에는 5 개의구멍이이웃하는데서로연결되어있으며, 양쪽끝에있는 2개의구멍이각각 5개씩으로연속되어있고, 각줄은처음부터끝까지연결되어있다. < 그림 > 브레드보드 3) 저항아두이노회로를구성하는모든전기부품은적당한전류가공급되어야올바르게동작할수있다. 기본적으로브레드보드에연결하는부품들이동작하기위하여 5V 전압을공급한다. 이때저항은도체에흐르는전류량을조절하는기능을한다. 저항은양쪽으로다리가나온원통형모양으로몸통에다양한색상의색상띠가있다. 저항의값은색띠로나타내는데, 각각의색깔은 [ 그림 ] 과같은값을가진다. 56KΩ 저항은 녹색 / 파랑 / 주황 의색으로구성되어있다. 맨오른쪽의색깔은오차율을나타낸다. 이들색상의조합으로저항의크기 ( 저항값 ) 를표시하며, 이색상띠의값을읽을수있어야전자회로에적절한저항을골라사용할수있다. < 그림 > 저항색상코드 맞춤형소프트웨어교육 43

Gyeongsangbuk-Do Office of Education 색상띠의색상은약 12 가지정도의색으로표현되며각색상마다나타내는숫자가정 해져있다. 따라서저항값을읽는방법은첫번째색띠와두번째색띠의숫자를차례 로적고, 세번째색띠의숫자만큼 10 진수지수를곱하면되며, 네번째색띠는저항 값의오차 ( 정확도 ) 를나타낸다. 저항값을계산할때세번째띠의값을숫자뒤에붙는 0 의개수로생각하면계산이좀더편해진다. 색상 검정 갈색 빨강 주황 노랑 초록 파랑 보라 회색 흰색 숫자 0 1 2 3 4 5 6 7 8 9 네번째띠색상 갈색 빨강 금색 은색 오차 1% 2% 5% 10% 예를들어갈색, 검정, 빨강, 금색띠를가진저항은오차 5%, 1000Ω( 옴 ) 의저항값 을가지며, 1000 옴은 1000 이 1 킬로 (kilo) 에해당하므로주로 1KΩ( 킬로옴 ) 으로부른다. 물체에전달되는전류량 2) 은저항이크면줄어든다. 따라서저항값이커지면 LED 의 밝기가어두워진다. 4) 입출력장치들 아두이노보드에연결되는입력장치는각종센서들이다. 빛의양을측정하는빛센서, 온도를측정하는온도센서, 거리를측정하는초음파센서, 소리크기를측정하는소리센 서등다양하다. 온도센서빛센서 IR LED 와 Receiver 회로의동작에따라값을출력하는부품들은 LED, 스피커, LCD, 모터등다양한출력 장치들을이용할수있다. 피에조스피커 LED 모터 2) 전류량 전압 저항 44 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 나. 소프트웨어아두이노프로그램은아두이노통합개발환경을사용하여작성할수있다. 1) 아두이노 IDE 설치아두이노프로그램작성툴은편집과컴파일및업로드를모두할수있는통합개발환경이다. 통합개발환경을영어로 Integrated Development Environment 라고하며약어로 IDE라부른다. 아두이노프로그램을작성하기위한단계는 ⓵아두이노소프트웨어를 http://arduino.cc 에서다운로드받는다. 설치가끝나면바탕화면에오른쪽과같은단축아이콘이생성된다. ⓶보드를 USB 케이블로컴퓨터와연결한다. 이때디바이스드라이버가자동으로설치된다. 포트 (COM & LPT) > Arduino Uno(COM#) 를확인하자. # 은컴퓨터에따라번호가달라질수있다. 만약드라이버가바르게설치되지않으면업로드할수없다. 이경우장치관리자에서오류가표시된부분 ( 노란느낌표 ) 을찾고드라이버를수동으로설치한다. 맞춤형소프트웨어교육 45

Gyeongsangbuk-Do Office of Education ⓷스케치 ( 소스코드 ) 를작성하고 ⓸컴파일하여오류가없는지확인한다음 ⓹아두이노보드에업로드한다. 컴파일이나업로드과정에오류가발생하면프로그램창의아래상태영역에붉은색으로된글자가보이는데, 이는 ⓵포트설정이잘못되었거나 ⓶보드설정이잘못된경우및 ⓷아두이노드라이버가잘못설정된경우이다. 3. 아두이노프로그래밍 가. 동작과정아두이노통합개발환경을사용하면스케치 (sketch) 라불리는아두이노프로그램을작성할수있다. 아두이노프로그램의동작을확인하려면, 아두이노보드에회로를구성하고, 스케치를작성하여보드에업로드한다. 46 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 나. 회로구성 1) 부품별회로구성하기센서와부품이올바르게동작하기위해서는적합한회로를구성해야한다. 아두이노사이트 (http://arduino.cc/en/tutorial/) 에서기본센서의회로구성에대한정보를얻을수있다. 2) 회로구성의예 LED 회로를구성하기위하여먼저 LED 를브레드보드에꽂는다. LED 의긴다리 + 단자 (anode) 는 220Ω 저항을이용하여 13번핀에연결한다. 이때핀번호는바뀔수있다. 그리고 LED 의짧은다리 단자 (cathode) 는 GND 에연결한다. USB 를이용하여아두이노보드와컴퓨터를연결한다. 부품 : LED 1개, 저항 220Ω 1개 맞춤형소프트웨어교육 47

Gyeongsangbuk-Do Office of Education < 그림 > LED 회로구성 아두이노를파괴하는경우들 Case 1. I/O핀을 GND( 그라운드 ) 에연결아두이노 I/O 핀을 Output 으로하고 HIGH 로설정한다. 그리고그 I/O 핀과 GND 를연결한다. 이때 I/O 핀에과전류상태로파괴된다. Case 2. I/O에과전압입력하나의 I/O 핀에 5.5V 이상의전압을인가하면작동하는경우도있지만, 이경우언젠가는핀을파괴할수있다. Case 3. Vin 핀전원을반대로연결한다. Vin 핀과 GND 핀에플러스극과마이너스극을서로반대로하여외부전원을연결하면 Arduino 의어떤장치가파괴된다. Case 4. Vin과 GND 를연결시킨다. DC 전원잭으로 Arduino 에전원을공급한후, Vin 핀과 GND 핀을연결한다. Arduino 의역류방지다이오드가파괴되어 Arduino 에서불타오르는장면을목격할수있다. 48 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 모든전기부품을 GND( 접지 ) 에연결하는이유는무엇일까? 전자기기에전원이들어오면, 닫힌회로일때전기가흐르게된다. 전류는높은전압에서낮은전압으로흐르는데, 접지 (GND) 는전압이 0V인상태이다. 전기부품의한쪽을 GND 에연결하게되면닫힌회로를형성하고, 전류가흘러전기부품이동작하게된다. 만약부품이 GND 에연결되지않으면, 전류가흘러나가지않으므로닫힌회로가아니기때문에올바른동작을하지않는다. 또한이상태에서전기부품을사람이만지면, 사람몸으로전류가흘러감전의위험이있으므로주의해야한다. 다. 아두이노프로그램업로드 아두이노 IDE 에서 [ 파일 ]-[ 예제 ]-[01.Basics]-[Blink] 를선택한다. Blink 예제는아 두이노보드에내장된 LED 를 1 초에 1 번씩깜박이는프로그램이다. Blink 예제를실행하기위해아래와같이컴파일메뉴 ( ) 를누른후컴파일이완료되 면업로드메뉴 ( ) 를차례대로누른다. 업로드완료표시가화면아래에나타나면스케치가아두이노보드에제대로옮겨진것 이다. 맞춤형소프트웨어교육 49

Gyeongsangbuk-Do Office of Education 아래그림과같은위치의아두이노보드에내장된 LED 가 1 초에 1 번씩꺼졌다켜지면 스케치가제대로동작하는것이다. ( 보드에내장된 LED 는보통보드의작동여부를 확인하는디버깅용도로많이활용된다.) 회로도그리기 fritzing 은피지컬컴퓨팅의회로를설계하는오픈소프트웨어이다. fritzing.org 사이트에 서프로그램을이용하면아두이노회로를구성해볼수있다. 다음은 fritzing 이용하여 LED 회로를구성한형태이다. 50 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 1) 브레드보드설정하기브레드보드를선택한후크기를 full/full+/half/half+ 등으로설정할수있다. 여기서는중간크기의브레드보드를사용하면서, 브레드보드에서 +/- 연결선이나타나도록 half+ 를선택한다. 2) LED 선택하기 부품에서 CORE 에서선택하고브레드보드에놓는다. 맞춤형소프트웨어교육 51

Gyeongsangbuk-Do Office of Education 3) 저항설정하기 부품에서저항을선택하여브레드보드에놓고, 저항값을설정한다. 4) Wire 를이용하여 LED 의 단자와 GND 를연결하고, LED 의 + 단자와디지털핀을 연결한다. 4. 프로그래밍의실제 가. 아두이노프로그램의구조와명령어아두이노스케치 (sketch) 프로그램은기본적으로다음두개의함수를가지고, 생략시오류가발생한다. void setup() { // 프로그램초기화작업을수행한다. void loop() { // 프로그램주동작을수행하는함수로서무한반복으로호출되어실행된다. 1) 디지털입출력 pinmode() digitalread() digitalwrite() 가 ) pinmode() 디지털입출력을위한핀모드를설정한다. 52 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 syntax: pinmode(pin, mode) pin: 핀번호 mode: INPUT, OUTPUT * 사용예 : pinmode(13, OUTPUT); * 13번핀을출력용으로설정한다. 나 ) digitalwrite() 디지털값을 HIGH 와 LOW 로설정하여출력하는함수이다. Syntax : digitalwrite(pin, value) pin: 핀번호 value: HIGH or LOW * 사용예 : digitalwrite(13, HIGH); * 13번핀에 HIGV(5V) 전압으로출력한다. 다 ) digitalread() 디지털핀으로부터 HIGH 또는 LOW 값을읽어들인다. Syntax : digitalread(pin) pin: 디지털핀번호 * 사용예 : digitalread(2); * 2번핀에서디지털값을읽어들인다. 2) 아날로그입출력 analogread() analogwrite() 가 ) analogread() 아날로그핀으로부터센서가측정한값을읽어들인다. 아두이노보드는 6개의아날로그채널을가지고있다. 입력전원 0에서 5 volts 를 0에서 1023 사이의값으로매핑한다. Syntax : analogread(pin) pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega) Returns int (0 to 1023) 맞춤형소프트웨어교육 53

Gyeongsangbuk-Do Office of Education * 사용예 : int b=analogread(a0); * 아날로그핀 A0에서값을읽어 b변수에저장한다. 나 ) analogwrite() 아날로그값 (PWM wave) 을핀에출력한다. 이를통해 LED 의밝기를조절할수있고모터를다양한출력으로움직일수있다. Syntax : analogwrite(pin, value) pin: 출력할핀 value: the duty cycle: between 0 (always off) and 255 (always on) * 사용예 : analogwrite(9, 255); 다 ) Serial Serial 은아두이노보드와컴퓨터사이의통신을위하여사용된다. 모든아두이노보드는적어도하나이상의시리얼포트를가진다. 시리얼모니터를이용하면아두이노보드와통신하는값을알수있다. 아래명령은 Serial.begin(9600) 은시리얼포트를열고, 통신속도를 9600bps 로설정하는것이다. void setup() { Serial.begin(9600); void loop() { Serial.available() 명령은시리얼통신으로데이터를받을때바이트수를리턴한다. int incomingbyte = 0; // for incoming serial data void setup() { Serial.begin(9600); void loop() { 54 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingbyte = Serial.read(); // say what you got: Serial.print("I received: "); Serial.println(incomingByte, DEC); 나. LED 활용하기 많은전광판의글자는어떻게나타나게되는것일까? 전광판에글자는 LED 가모여서만들어내는모양이다. 아두이노회로를구성할때많이사용하는발광다이오드 LED (Light Emitting Diode) 는순방향으로전압을가했을때발광하는반도체소자이다. 어느전압이상이되면전압상승에대하여전류가빠르게흘러서전류량에비례해서빛이발생된다. 전류의양에대하여빛의세기가결정되며최대정격전류를넘으면소자가파손되어수명이짧아지거나심할경우사용할수없게된다. 저항없이 LED 의 + 를 5V, 를 GND 로직접연결하거나낮은저항으로연결하면 LED 에손상을가져올수있으므로주의해야한다. 맞춤형소프트웨어교육 55

Gyeongsangbuk-Do Office of Education 1) LED 회로구성하기 1 LED 의 + 단자와 단자를확인한다. 2 브레드보드에 LED 를꽂는다. 3 빨강점프선으로브레드보드의다른라인에 5V 핀을연결한다. 4 220Ω 저항으로 LED 의 + 단자와 5V 전압이공급되는라인을연결한다. 5 검정점프선으로 LED 의 단자와 GND 를연결한다. 2) LED 깜박이기 아두이노개발환경 (IDE) 을이용하여 1 초간격으로 LED 에불이켜지도록아래와같이 프로그램을작성하고보드에업로드한다. void setup() { pinmode(13, OUTPUT); void loop() { digitalwrite(13, HIGH); delay(1000); digitalwrite(13, LOW); delay(1000); //1 //2 명령어 1은 13번핀을출력용으로설정한것이다. 명령어 2는 13번핀에 5V전압 (HIGH) 을공급하여 LED 에불이켜지게하는명령이다. 이프로그램은 1초간 LED 에 5V와 0V 전압을공급하여 LED 가 1초단위로깜박인다. delay 시간을줄이면더빨리 led가깜박인다. 56 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 3) LED 의밝기조절하기 LED 의밝기는 pins 5, 6 or 9 번핀에서아날로그출력으로제어할수있다. void setup() { pinmode(9, OUTPUT); void loop() { for(int i=0; i<256; i++) { analogwrite(9, i); delay(10); for(int i=255; i>=0; i--) { analogwrite(9, i); delay(10); * analogwrite(9, i) 명령은 9 번단자로 0~255 사이의수치를출력한다. 수치가점 점증가또는감소하면서 9 번단자에연결된 LED 램프의밝기가조절된다. 4) 입력한값으로 LED 의밝기조절하기 다음프로그램은 0~5V 사이의원하는전압에 51 을곱하여 0~255 사이의 PWM 출력 값을결정한다. 그리고아날로그출력에서 0~255 사이의출력값을설정할수있다. 0 은 꺼짐상태를의미하고, 255 는최대출력을의미한다. 이방법은실제 LED 의밝기를효율 적으로제어할수있는방법이다. int pin=3; void setup() { pinmode(pin, OUTPUT); Serial.begin(9600); Serial.println("Enter Volts 0 to 5"); 맞춤형소프트웨어교육 57

Gyeongsangbuk-Do Office of Education void loop() { if(serial.available()>0) { char ch=serial.read(); int volts=(ch-'0')*51; analogwrite(int, volts); 시리얼통신에서키보드 0 을누르면숫자 0 이전달되지않고, ASCII 라는코드값 0 이전달이된다. 이값을숫자로바꾸려면 volts =ch- 0 ; 으로계산한다. 그러 면입력값이 0 인경우 volts 값이 0 이된다. 도전과제 LED 여러개를연결해서차례대로켜지고꺼지도록회로를구성하고프로그램을작성 해보자. int pinscount=8; int pins[ ] = {2,3,4,5,6,7,8,9; void setup() { for (int i=0; i<pinscount; i++) { pinmode(pins[i], OUTPUT); 58 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 void loop() { // 코드추가 다. 버튼활용하기푸시버튼은전류의흐름을차단하거나연결하는스위치의한종류라고볼수있다. 버튼을누른다는것은스위치를누르는것과같으며전류가스위치를통해흐르도록만들어준다. 버튼의상태는디지털값으로표현할수있고, 버튼의상태에따라 LED 에불을켜거나끌수있다. 버튼과 LED 회로는그림과같이구성할수있다. 부품 : 버튼 1개, LED 1개, 저항 220Ω 1개, 10kΩ 저항 1개 버튼이눌러지면전류가흘러, D2 의값이 HIGH 상태가되고, 버튼이눌러지지않으면 H2 의상태는 LOW 가된다. 따라서 digitalread(2) 의값이 HIGH 일때 LED 에불이켜질 수있도록아래와같이프로그램을작성할수있다. void setup() { pinmode(2, INPUT); pinmode(9, OUTPUT); void loop() { 맞춤형소프트웨어교육 59

Gyeongsangbuk-Do Office of Education int b=digitalread(2); if (b == HIGH) { digitalwrite(9, HIGH); else { digitalwrite(9, LOW); 도전과제 버튼을추가하여하나는 ON 버튼, 다른하나는 OFF 버튼으로작동하도록회로와스케 치를수정해보자. 라. 빛센서활용하기 어두워지면불이켜지도록가로등을어떻게만들어졌을까? 빛센서를활용하여주변광량에따라가로등이켜지게만들수있다. 빛센서와 LED 를 이용하여자동으로점등되는가로등을구현해보자. 1) 빛센서회로구성하기 빛센서로주변광의밝기를측정하기위하여빛센서와저항 2KΩ 을이용하여아래와 같이회로를구성할수있다. 빛센서의입력은아날로그핀에, LED 의출력은디지털핀 에연결한다. 부품 : 빛센서 1 개, LED 1 개 220Ω 저항 ( 빨강 - 빨강 - 갈색 ) 1 개, 2kΩ 저항 ( 빨간색 - 검정 - 빨간색 ) 1 개 포토레지스터또는포토트랜지스터는빛의밝기를저항으로나타낸다. 60 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 2) 프로그램작성하기 빛센서 ( 포토레지스터 ) 는광량에따라내부저항이변하는소자이다. 저항한개와결 합한간단한회로를이용하여광량에비례한전압값을출력할수있으며, 이값을아두 이노의아날로그입력채널을통해측정할수있다. 빛센서를활용하여주변광량에따 라 LED 에빛을내게하거나, 스위치를누르면전등을켜지게할수있다. void setup() { Serial.begin(9600); // 시리얼모니터속도를 9600 으로 void loop() { int a = analogread(a3); // 아날로그값읽기 Serial.println(a); // 시리얼포트로출력 delay(200); // 0.2초동안기다림 A3 핀을통해빛센서로측정한아날로그신호를읽어시리얼모니터로출력할수있 다. 툴바의오른쪽에있는 [ 시리얼모니터 ] 를마우스로열면, 1 초에 5 회씩빛의밝기를 읽어서 1024(0~1023) 개의값을출력한다. [ 시리얼모니터 ] 는 USB 케이블로아두이노 와컴퓨터가대화를하는창이다. 아두이노로값을보낼수도있고, 아두이노에서값을받 을수도있다. 맞춤형소프트웨어교육 61

Gyeongsangbuk-Do Office of Education 3) 빛센서활용하여 LED 켜기 빛센서를이용하여 LED 에불이켜지게하는프로그램은아래와같이작성할수있다. 여기에서빛의밝고어두인경계를 300 으로설정하였다. 빛센서로측정되는값을확인 한후수정할수있다. void setup() { Serial.begin(9600); pinmode(13, OUTPUT); void loop() { int sv = analogread(a3); // 빛센서에서값읽기 Serial.println(sv); if(sv > 300) digitalwrite(13, HIGH); // 어두우면 LED를켬 else digitalwrite(13, LOW); // 밝으면 LED를끔 delay(200); // 0.2초간기다림 위프로그램에서 sv 변수가가지는값은 0~1023 사이의값이다. 어두우면빛센서의측 정값이커진다. 아두이노보드에서는빛센서가측정한아날로그값을 10 비트의디지털 값으로변환한다. 즉빛센서가읽어들인 0~5V 의입력값을 0~1023 사이의값으로대응 시킨다. 더해보기빛센서회로에저항을 2KΩ, 10KΩ 으로다르게연결했을때, analogread() 로측정되는값은어떻게달라지는지확인해보자. 저항 analogread() 로읽은값 빛의밝기 2KΩ 10KΩ 라 ) 릴레이를이용한 220V 전등제어 부품 : 릴레이 1 개 전등 1 개 멀티탭 1 개 62 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 릴레이는 0V 와 5V 로 220V 를켜고끄는역할을한다. 릴레이를조립하자. 아두이노의디지털출력을릴레이의입력에연결한다. 릴레이출력은 220V 의한쪽선 의스위치역할을한다. 유의점항상전원공급이차단된상태에서회로를구성하고, 마지막에전원을연결하여동작을확인해야한다. 아두이노보드를이용하여회로를구성하는과정에서전기부품인여러도체를직접손으로만져서회로를구성하기때문에, 전원을공급한상태에서회로를구성하는것은매우위험하다. 전기안전에각별히주의해야한다. 맞춤형소프트웨어교육 63

Gyeongsangbuk-Do Office of Education 마. 스피커활용하기아두이노스피커로음악을연주할수있을까? 피에조스피커 (Piezoeletric speaker) 는크기가작고저렴하며간단하게신호전달한다. 피에조 (Piezo Speaker) 내부에는얇은필름이들어있어전압을가해필름을진동시켜소리를내도록만든다. 필름에전압을가하면소리를내지만필름에진동이나힘을가하면간단한센서역할도한다. 1) 소리와주파수소리는어떤물체가만들어낸진동에의해발생하는공기의파동이다. 이러한공기의압력변화가사람의귀로유입되어소리가들리는것이다. 파형의크기를 진폭 이라고하며, 모든파형은일정한주기로반복된다. 그리고정해진시간 (1초) 동안에몇번의주기가반복되는지측정한것을 주파수 라한다. 주파수는소리의높낮이를결정하게되며주파수가높으면고음, 낮으면저음을나타낸다. 1Hz 란 1초에한개의파동이발생한것을의미한다. 따라서주파수값에따라음계가나뉘게되며진동주파수 262Hz(1 초에 262 번진동 하는파형 ) 는도 (C4) 음으로들리고, 392Hz 의파형은솔 (G4) 음으로들린다. 64 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 2) 음계와주파수피에조 (Piezo Speaker) 내부에는얇은필름이들어있어전압을가해필름을진동시켜소리를내도록만든다. 음계의주파수값을알면피에조스피커를이용하여어떤음악도연주할수있다. 각음계별주파수는다음과같다. 3) 회로구성하기 피에조스피커는극성이있는부품으로, + 는디지털출력핀에, - 는 GND 에연결한다. 그림에서는 6 번핀에연결하였다. 맞춤형소프트웨어교육 65

Gyeongsangbuk-Do Office of Education 4) 스피커로소리내기 tone() 은소리를만들어낼때사용한다. 아래프로그램은 도 을 1 초동안소리내는것 이반복되는것이다.delay() 의시간이 tone() 의시간보다길면소리와소리사이에무음 의공백이있다. int speakerpin = 6; void setup() { void loop() { tone(speakerpin, 1046, 1000); delay(1300); * 1046: 도의주파수값 * 1000: 진동수만들어내는시간 1 초 * 1300 : 위의명령을유지하는시간 5) 피에조스피커활용하여멜로디연주하기 File>Example>2.Digital>toneMelody 파일을열어보자. 다음은스피커로멜로디를연 주할수있는프로그램이다. #include "pitches.h" int melody[] = {NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4 ; int notedurations[] = {4, 8, 8, 4, 4, 4, 4, 4; void setup() { for (int thisnote = 0; thisnote < 8; thisnote++) { int noteduration = 1000/noteDurations[thisNote]; tone(8, melody[thisnote],noteduration); int pausebetweennotes = noteduration * 1.30; delay(pausebetweennotes); notone(8); void loop() { 66 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 noteduration 의값은 4분음표인경우 1000/4=250, 8분음표인경우 1000/8=125 밀리초동안소리를낸다. 따라서 4분음표가더긴소리를낼수있다. notone() 은소리가안나게하는함수이다. pausebetweennotes 는 noteduration 의값에 1.30 을곱하였다. 파형을만들어내는시간보다 30% 긴시간동안 delay 시간을가지는것이적당하다. pitches.h 에다음과같은계이름의주파수값이정의될수있도록코드를복사해서넣으면된다. 4) 악보에따라음악연주하기 음악을연주하기위하여악보를준비한다. 악보에는음표가표시되어있어이데이터를 프로그램에넣으면아두이노가연주하는음악을스피커로들을수있다. 맞춤형소프트웨어교육 67

Gyeongsangbuk-Do Office of Education 위의악보에서음표를해당하는주파수에추가하면된다. 악보에서쉼표는주파수값을 0 으로한다. # include "pitches.h" int me[]= {NOTE_E6,NOTE_E6,0,NOTE_E6,0,NOTE_C6,NOTE_E6,NOTE_G6,0, NOTE_G5,0,NOTE_C6,0,NOTE_G5,0,NOTE_E5,0,NOTE_A5,0,NOTE_B5, 0,NOTE_AS5,NOTE_A5,0,NOTE_G5,NOTE_E6,NOTE_G6,NOTE_A6,0, NOTE_F6,NOTE_G6,NOTE_E6,0,NOTE_C6,NOTE_D6,NOTE_B5,0; int d[]={8,8,8,8,8,8,4,4,4,4,4,8,4,8, 4,8,4,8,8,8,8,8,8,8,8,8,8,8,8,8,4,8,8,8,8,8,4; void setup() { void loop() { for(int i=0; i<37;i++) { int duration=1000/d[i]; tone(8,melody[i],duration); int p=duration*1.30; delay(p); notone(8); 바. 온도센서활용하기 서미스터 (thermistor) 란저항기의일종으로, 온도에따라물질의저항이변화하는성질 을이용한전기적장치이다. 열가변저항기라고도하며, 주로회로의전류가일정이상으 로오르는것을방지하거나, 회로의온도를감지하는센서로이용된다. 부품 : 저항형온도센서, 10K 저항 10kΩ 저항 ( 갈색 - 검정 - 주황 ) 1 개옵션 : 온도에따라 LED 제어 (LED 1 개, 220Ω 저항 ( 빨강 - 빨강 - 갈색 ) 1 개, 68 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 저항과온도센서로회로를만든다. A0 에서아날로그값을읽는스케치를작성하고업 로드한다. 시리얼모니터를열고온도센서를가리면서값을관찰한다. void setup() { Serial.begin(9600); void loop() { int a = analogread(a0) Serial.println(a); delay(500); // 센서에서아날로그값읽기 // 시리얼로출력함 // 0.5초기다림 아두이노 IDE 에서오른쪽상단의 [ 시리얼모니터 ] 를열고, 측정값을관찰한다. 10 비트 A/D 변환기이므로다음과같이 0~1023 사이의값이측정된다. 맞춤형소프트웨어교육 69

Gyeongsangbuk-Do Office of Education 손으로온도센서를잡고온도가올라가는지관찰해보자. 저항형온도센서에서읽어온 값을 0~1023 의값을섭씨온도로계산하는함수는다음과같다. 이계산식은온도센서 제작회사에서제공한다. double Thermister(int v) { // http://en.wikipedia.org/wiki/thermistor double t; t = log(((10240000/v) - 10000)); t = 1 /(0.001129148 + (0.000234125*t) + (0.0000000876741*t*t*t)); t = t - 273.15; // 화씨를섭씨로바꾸어줌 return t; 위의함수를호출하는프로그램으로수정하면다음과같다. void setup() { Serial.begin(9600); void loop() { int a=analogread(a0); double t=thermister(a); Serial.println(t); delay(500); 도전과제 * 온도에따라 LED 에불이들어오는프로그램을작성해보자. * 과열되면경고음으로알려주는프로그램으로수정해보자 70 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 사. 습도센서활용하기 습도센서를활용하면화분의수분상태를확인할수있어식물관리에유용하게사용 할수있다. 1) 회로구성하기 습도센서의 VCC-5V, GND-GND, SIG-A0 에연결한다. 2) 프로그래밍하기 다음프로그램은습도센서의값을측정하여시리얼모니터에 0.1 초당 1 번씩출력한다. 맞춤형소프트웨어교육 71

Gyeongsangbuk-Do Office of Education int sensorvalue = 0; void setup() { Serial.begin(9600); void loop() { sensorvalue = analogread(a0); delay(100); Serial.print(" 습도센서값 = " ); Serial.println(sensorValue); 프로그램을업로드하여시리얼모니터에출력한결과는다음과같이나타났다. 마른화분 물을준화분 도전과제 * 화분의습도상태를색이다른 3 개의 LED 를써서출력해보자. int ledgreen = 11; // LED addressed to the pin 11 int ledblue = 10; // LED addressed to the pin 10 int ledred = 9; // LED addressed to the pin 9 void setup() { Serial.begin(9600); // set the baud rate serial with 9600 pinmode(ledgreen, OUTPUT); // declares ledgreen as an output 72 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 pinmode(ledblue, OUTPUT); // declares ledblue as an output pinmode(ledred, OUTPUT); // declares ledred as an output void loop() { 아. 적외선센서활용하기현관에사람이나물체를감지하면자동으로불이켜지는전등은어떻게만들어진것일까? 적외선센서를활용하면주변물체를감지할수있다. 초음파센서는 IR LED 와 IR Receiver 로구성된다. IR LED 가초음파를발생시키고주변에물체가있으면반사되어 IR Receiver 가물체를감지할수있다. IR LED/receiver 센서를이용하면임베디드시스템이앞에있는물체를감지할수있고, 앞에물체가얼마나멀리떨어져있는지거리도측정할수있다. < 그림 > IR LED와 Receiver 의동작 IR LED 와 Receiver 를연결하고, 주변물체를감지하면 LED 에불이켜지도록하는아두이노회로는그림과같다. 부품 : IR LED 와 Receiver, 2KΩ 저항 1개, 220Ω 저항 2개, LED 와스피커 맞춤형소프트웨어교육 73

Gyeongsangbuk-Do Office of Education IR LED 에는 2KΩ, IR receiver 에는 220Ω 저항을사용하여그림과같이회로를구성 한다. < 그림 > IR LED 와 Receiver 의회로 void setup() { Serial.begin(9600); pinmode(9,output); pinmode(10,input); // IR LED // IR Receiver void loop() { tone(9, frequency, 8); delay(1); // 1 74 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 int ir=digitalread(10); Serial.println(ir); delay(200); // 2 1 9 번핀에연결된 IR LED 가 tone() 명령으로 38000Hz 주파수로진동하여초음파를 8 초간발생하면, 2 IR receiver 가 digitalread(10) 명령으로물체가있는지없는지감지 할수있다. 주변에물체가있으면 IR Receiver 가감지한값은 0 이다. 적외선센서를이용하여 LED 에불이켜지게하는프로그램은아래와같이작성할수 있다. void setup() { Serial.begin(9600); pinmode(9,output); pinmode(10,input); pinmode(7,output); // IR LED // IR Receiver // LED 출력 void loop() { tone(9, frequency, 8); // 1 delay(1); int ir=digitalread(10); // 2 if(ir==1) digitalwrite(7, HIGH); else digitalwrite(7, LOW); delay(100); 맞춤형소프트웨어교육 75

Gyeongsangbuk-Do Office of Education 적외선센서는그림과같이 38000Hz 에서 IR 검출기의최대감도영역 (38.5KHz), 40KHz 에서는최대감도의약 1/2, 42KHz 에서는약 20% 크기의신호만감지하여, 측정가 능거리가주파수에따라달라진다. 적외선센서를이용하면거리를물체가떨어져있는거리를측정할수있다. 물체가떨 어져있는거리를출력해보자. void setup() { // Built-in initialization block tone(4, 3000, 1000); // Play tone for 1 second delay(1000); // Delay to finish tone pinmode(10, INPUT); pinmode(9, OUTPUT); // Left IR LED & Receiver Serial.begin(9600); // Set data rate to 9600 bps 76 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 void loop() { int irleft = irdistance(9, 10); // Measure left distance Serial.println(irLeft); // Display left distance delay(100); // 0.1 second delay int irdistance(int irledpin, int irreceivepin) { int distance = 0; for(long f = 38000; f <= 42000; f += 1000) { distance += irdetect(irledpin, irreceivepin, f); return distance; int irdetect(int irledpin, int irreceiverpin, long frequency) { tone(irledpin, frequency, 8); // IRLED 38 khz for at least 1 ms delay(1); // Wait 1 ms int ir = digitalread(irreceiverpin); // IR receiver -> ir variable delay(1); // Down time before recheck return ir; 도전과제 적외선센서를 2 개, LED 를 2 개연결하여좌우방향을감지하고소리도다른멜로디가 울리도록프로그래밍해보자. 자. 초음파거리센서거리를측정하는것으로는보통적외선이나초음파를많이사용한다. 각각센서들은장점과단점들이있다. 적외선과초음파센서는각각빛과소리를보낸다. 신호는물체에닿으면반사되며신호를보내고다시받는사이의시간을측정한다. 적외선센서는검은물체에작동하지않으며초음파센서는초음파센서는흡수성의물체에잘작동하지않는다. 초음파센서를활용하여거리를측정해보자. 맞춤형소프트웨어교육 77

Gyeongsangbuk-Do Office of Education 1) 동작원리초음파센서는센서가갖고있는고유진동주파수와똑같은주파수의교류전압을가하여좀더효율이좋은음파를발생할수있다. 물체에서반사된음파를그대로센서로입력 ( 진동 ) 시켜서발생된전압을회로에서처리하므로측정거리를계산할수있게된다. 2) 거리계산방법초음파센서의송신측에서짧은시간동안펄스를출력하면신호가물체에도달하여반사되어되돌아오게된다. 반사되어되돌아온신호를수신기의초음파센서에서검출한다. 음이 1cm를왕복하는데걸리는시간은얼마나걸릴까? 이송신된신호는음속 Vs 의속도로출력되기때문에여기서음속 Vs=331.5+0.6T, 78 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 T: 온도 ( ) 실내온도를 25 라고하면음속 Vs=340 m s라고하면음이 1cm 의거리를왕 복하는데걸리는시간은 tc=2*0.01/340 이된다. 음이 1cm 의거리를왕복하는데걸리는 시간은 58.824 μs가구해진다. 3) 회로구성하기 초음파거리센서의핀을 VCC-5V, GND-GND, Trig-8, Echo-9 에연결한다. 맞춤형소프트웨어교육 79

Gyeongsangbuk-Do Office of Education 4) 프로그래밍하기 const int TriggerPin = 8; //Trig pin const int EchoPin = 9; //Echo pin long Duration = 0; void setup() { pinmode(triggerpin, OUTPUT); // Trigger is an output pin pinmode(echopin, INPUT); // Echo is an input pin Serial.begin(9600); // Serial Output void loop() { digitalwrite(triggerpin, LOW); delaymicroseconds(2); digitalwrite(triggerpin, HIGH); // Trigger pin to HIGH delaymicroseconds(10); // 10us high digitalwrite(triggerpin, LOW); // Trigger pin to HIGH Duration = pulsein(echopin, HIGH); // Waits for the echo pin to get high // returns the Duration in microseconds long Distance_mm = Distance(Duration); // Use function to calculate the distance Serial.print("Distance = "); // Output to serial Serial.print(Distance_mm); Serial.println(" mm"); delay(1000); // Wait to do next measurement long Distance(long time) { // Calculates the Distance in mm // ((time)*(speed of sound))/ toward and backward of object) * 10 long DistanceCalc; // Calculation variable DistanceCalc = ((time / 2.9) / 2); // Actual calculation in mm return DistanceCalc; // return calculated value 80 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 도전과제 다양한형태로동작하는초음파센서들이있는데, 이센서들의동작은어떻게하는지, 프로그래밍방법을조사해보자. 차. 모터활용하기센서로주변환경의상황을인지하여적절한동작을할때모터를활용할수있다. 모터를이용하면화분에물을주거나, 햇빛을가리거나, 자동차를움직일수있다. 아두이노에흔히사용되는모터는 DC 모터, 서보모터, 스테핑모터가있다. DC 모터는 RC 자동차와같이빠르게연속적으로돌아야하는장치에사용되며, 서보모터는전원이외에신호단자를이용하여모터를돌린다. DC 모터 : 축이연속적으로회전하는형태의모터로전원이끊어지는경우에만정지한다. 정지시에는관성때문에정확한정지위치를지정하기어렵다. 스태핑모터 : 전원이공급되면축은일정각도를회전하고멈춘다. 축을연속적으로회전하기위해서는모터로펄스열이전달되어야한다. 스태핑모터에고유분할각도가존재하여이각도에의해제어된다. 서보모터 : DC 모터의한종류로 DC 모터에귀환회로를추가하기위하여정확한위치제어가가능하도록구성된모터이다. 정밀제어가가능하고, 속도면에서스태핑모터에비해빠른장점이있다. 1) 서보모터 (servo motor) 서보모터는 DC 모터와달리연속적으로도는것이아니라전압값을신호로주어특정한각도로조금씩정밀하게이동시킨다. 따라서회전값을읽고그값에따라각도회전을하기때문에매우정밀하게움직일수있다. 2) 회로구성두개의서보모터를각각아래그림과같이보드와연결시킨다. 서보모터연결소켓은각각디지털핀 12, 13번에연결되어있다. 또한아래그림과같이전원과전압설정에유의한다. 맞춤형소프트웨어교육 81

Gyeongsangbuk-Do Office of Education 3) 모터제어프로그래밍서보모터를제어하기위한 Servo 라이브러리에는다음과같은멤버함수들이있다. attach() write() read() attach() 는서보모터를지정한핀에연결하고현재서보모터의채널을반환한다. write() 는서보모터로값을출력하여축을제어한다. 아래그림을살펴보면진동시간에따른서보속도를보여준다. 서보모터의펄스폭 1300~1700 s 의범위에서 48에서 +48 RPM 범위의속도가변화하고있다. 시계방향회전은음수의값, 반시계방향회전은양수를가진다. 서보모터의주파수가 1500 일때속도가 0인것을확인할수있다. 82 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 다음은오른쪽서보모터가회전하는것을확인할수있는프로그램이다. #include <Servo.h> Servo sr; void setup() { sr.attach(12); // 오른쪽서보를 12 번에연결 sr.write(1300); // 오른쪽바퀴시계방향 delay(3000); sr.write(1500); // 오른쪽바퀴정지 delay(1000); sr.write(1700); // 오른쪽바퀴반시계방향 delay(3000); sr.write(1500); // 오른쪽바퀴정지 void loop() { 문제해결하기 서보모터가정지하지않는경우가자주발생한다. 어떻게해결할수있을까? 맞춤형소프트웨어교육 83

Gyeongsangbuk-Do Office of Education 서보모터를사용하기위해서먼저그림과같이 Centering 맞추는것이중요하다. Centering 이맞지않은경우올바르게동작하지않는경우가있다. - 해결방법 : 드라이버로좌우로돌리다보면정지명령시모터의동작이완전히멈추는때를찾는다. 가 ) 서보모터정지상태설정 # include <Servo.h> // Include servo library Servo sl; // Declare left servo signal Servo sr; // Declare right servo signal void setup() { sl.attach(13); // Attach left signal to pin 13 sr.attach(12); // Attach left signal to pin 12 slt.write(1500); // 1.5 ms stay still sig, pin13 sr.writes(1500); // 1.5 ms stay still sig, pin12 void loop() { 나 ) 서보모터시계방향회전 #include <Servo.h> // Include servo library Servo sl; // Declare left servo Servo sr; // Declare left servo void setup() // Built in initialization block { sl.attach(13); // Attach left signal to pin 13 sr.attach(12); // Attach left signal to pin 12 sl.write(1300); // 1.7 ms full speed clockwise sr.write(1300); // 1.7 ms full speed clockwise void loop() { 84 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 다 ) 서보모터전진 / 후진제어 #include <Servo.h> // Include servo library Servo sl; // Declare left servo Servo sr; // Declare left servo void setup() // Built in initialization block { sl.attach(13); // Attach left signal to pin 13 sr.attach(12); // Attach left signal to pin 12 sl.write(1700); // 1.7 ms full speed counterclockwise sr.write(1300); // 1.3 ms full speed clockwise void loop() // Main loop auto-repeats { // Empty, nothing needs repeating 도전과제 2 개의바퀴로아두이노자동차가전진하였다가후진하는프로그램을작성해보자 라 ) 서보모터속도제어 #include <Servo.h> // Include servo library Servo sl; // Declare left servo Servo sr; // Declare left servo void setup() // Built in initialization block { sl.attach(13); // Attach left signal to pin 13 sr.attach(12); // Attach left signal to pin 12 sl.write(1520); // 1.7 ms full speed counterclockwise sr.write(1480); // 1.3 ms full speed clockwise void loop() { 맞춤형소프트웨어교육 85

Gyeongsangbuk-Do Office of Education 도전과제 다음은 IR 센서를활용하여로봇이자율주행할수있는프로그램이다. #include <Servo.h> Servo sl; Servo sr; void setup() { pinmode(10, INPUT); pinmode(9, OUTPUT); //Left IR LED & Receiver pinmode(3, INPUT); pinmode(2, OUTPUT);//Right IR LED & Receiver pinmode(8, OUTPUT); pinmode(7, OUTPUT);// Indicator LEDs tone(4, 3000, 1000); delay(1000); sl.attach(13); sr.attach(12); 86 2016 동계정보화전문요원연수

제 2 부텍스트기반아두이노프로그래밍 void loop() { int irleft = irdetect(9, 10, 38000); // Check for object on left int irright = irdetect(2, 3, 38000); // Check for object on right digitalwrite(8,!irleft); // LED states opposite of IR digitalwrite(7,!irright); if((irleft == 0) && (irright == 0)) { // If both sides detect backward(1000); // Back up 1 second turnleft(800); // Turn left about 120 degrees else if(irleft == 0) { // If only left side detects backward(1000); // Back up 1 second turnright(400); // Turn right about 60 degrees else if(irright == 0) { // If only right side detects backward(1000); // Back up 1 second turnleft(400); // Turn left about 60 degrees else { // Otherwise, no whisker contact forward(20); // Forward 1/50 of a second int irdetect(int irledpin, int irreceiverpin, long frequency) { tone(irledpin, frequency, 8); // IRLED 38 khz for at least 1 ms delay(1); // Wait 1 ms int ir = digitalread(irreceiverpin); // IR receiver -> ir variable delay(1); // Down time before recheck return ir; // Return 1 no detect, 0 detect 맞춤형소프트웨어교육 87

Gyeongsangbuk-Do Office of Education [ 참고문헌 ] 심재창외 3인 (2014). 재미삼아아두이노. 한빛미디어. 심재창외 3인 (2014). 야금야금아두이노로봇. 카오스북. 허경용 (2014). 아두이노상상을스케치하다. 제이펍. Simon Monk 지음 (2013), 윤순백옮김. 스케치로시작하는아두이노프로그래밍. 제이펍. [ 참고사이트 ] 초음파센서란초음파센서의원리를알아보기, http://juke.tistory.com/194 초음파거리센서사용하기, http://kocoafab.cc/tutorial/view/65 피지컬컴퓨팅, http://courses.ischool.berkeley.edu/i290-4/f08/slides/thursday_week2_intro_physi cal_computing.p 88 2016 동계정보화전문요원연수

제 3 부 앱인벤터 for 아두이노 Ⅰ. 앱인벤터기초 Ⅱ. 앱인벤터와아두이노의만남 App inventor for Arduino

제 3 부앱인벤터 for 아두이노 Ⅰ. 앱인벤터기초 1. 앱인벤터란? 가. 앱인벤터소개앱인벤터 (App Inventor) 는안드로이드기반휴대폰이나에뮬레이터에앱을개발할수있도록하기위해 MIT에서블록에디터 (Block Editor) 를이용하여누구나손쉽게안드로이드용스마트폰앱을만들수있도록제공해주는스마트폰용앱저작도구이다. 누구나웹브라우저를통해실행되는앱인벤터 (App Inventor) 도구들을이용하면자바와같은프로그래밍언어에대한지식없이도간편하게안드로이드앱을만들수있다. 구글이제안한앱인벤터 (App Inventor) 는레고 (Lego) 블록조립과같이블록결합을통해서손쉽게프로그램제작이가능한개발환경을제공한다. 단순한프로그래밍블록을서로끼워맞추면앱이만들어지는시각화된언어이다. 명령어들을직접손으로적어나가는방식이아니라미리준비되어있는블록들을이용해프로그래밍하기때문에 Java(Adroid SDK), Processing 과같은스마트폰프로그래밍을위한특정언어를학습하지않고도프로그램의논리적인개념만을통하여본인이원하는안드로이드용스마트폰앱을만들수있다. 앱인벤터는버전 1부터시작하여현재버전 2가출시되어사용중이며버전간의서로호환이되지않기때문에다양한기능을활용할수있는버전 2를사용하는추세이다. 두버전의차이점은다음과같다. 구분앱인벤터 1 앱인벤터 2 프로그램 2 개로분리통합 확장자 zip aia 스크린추가어려움쉬움 블록한꺼번에보이지않음한꺼번에보임 함수 Definitions Procedures 문자열 Make text Join evalute evalute do then return evalute but ignore result 맞춤형소프트웨어교육 91

Gyeongsangbuk-Do Office of Education 앱인벤터는안드로이드기반스마트폰의앱을개발한다. 구글크롬브라우저에서클라 우드기반서비스를제공하므로내가작성하던앱을어디서든접속할수있다. 따라서프 로그램설치과정이나디스크저장이불필요하다. 스마트폰이없는경우컴퓨터에서에뮬 레이터라는가상스마트폰을활용하여실행결과를확인할수있다. 앱인벤터는다른프로그램과마찬가지로실행문, 반복문, 조건문, 데이터저장등을할 수있다. 개발용프로그램의기본적인소양을모두갖추고있어상상을현실로만들기에 는부족함이없다. 스마트폰에는 GPS 센서, 가속도센서, 자이로센서, 나침반센서, 마이크, 터치스크린, 카메 라, 시계, 근접센서, NFC 등이제공되어외부데이터를센싱하여사용할수있으며, 문자 보내기, 전화걸기, 카톡, 밴드, Facebook, Twitter 접속등과같은다양한기능들에접 근하여활용할수있다. 필요한센서들을활용한다면일상생활에유용한창의적인앱을 얼마든지제작할수있으며제작한앱을구글플레이스토어에올려다른사람과함께공 유할수있다. 앱인벤터 2.0 작업환경 사용가능운영체제 - MacOS, GNU/Linux - Windows OS 와안드로이드기반 사용가능한웹브라우저 - 크롬브라우저, 사파리, 파이어폭스에서실행가능 - 인터넷익스플로러는지원하지않음 나. 앱인벤터 for 아두이노앱인벤터는게임, 메신저, 인터넷, 달력, 시계등다양한기능을구현하여앱을제작할수있다. 복잡한알고리즘을요구하는앱을제작하기에는어려움이있겠지만안드로이드폰에내장된기능들을사용하여간단한게임혹은관련앱을제작할수있고외부기기를사용하여기능을확장한앱을제작할수도있다. 최근에는무선통신기술을사용하여각종전자제품을무선으로제어하는기술이각광을받으며산업및가정등다양한분야에기술이활용되고있다. 그중홈 IoT(Internet of Things) 는집밖에서혹은집안에서스마트폰하나로집안전기제품을제어하는장치로서집안의전자제품에무선통신 (WiFi, 블루투스등 ) 기능을장착하고스마트폰과통신하여스마트폰의앱을제어하는원리를사용한다. 이러한기술은아두이노와앱인벤터 92 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 로충분히구현이가능하며창의적인아이디어와접목하여다양한제품과앱을개발할수있다. 아두이노에서사용할수있는다양한센서들과블루투스통신을할수있는무선모듈을이용하여하드웨어적인부분을구현하고앱인벤터를이용하여이를제어할수있는앱을제작하여소프트웨어적인부분을해결하게되면스마트폰으로하드웨어를무선으로제어할수있는제품을직접만들어볼수있다. 아두이노와센서, 스케치프로그램을사용하여피지컬컴퓨팅을충분히구현해볼수있지만여기서나아가무선모듈과이를무선으로제어할수있는앱제작을접목하게될경우더많은아이디어를구현할수있고실생활에서사용할수있는것들을직접제작해볼수있다. - 앱인벤터를사용하여앱을제작한후안드로이드폰에서앱을다운받는다. - 안드로이드폰과아두이노간에블루투스로무선통신을하여데이터를전달한다. - 전달된데이터를바탕으로프로그래밍하여안드로이드폰으로아두이노를제어한다. 2. 앱인벤터시작하기 가. 앱인벤터접속하기앱인벤터는인터넷익스플로러에서는작동하지않으므로구동가능한브라우저를설치하고로그인하기위해서구글계정을생성해야한다. 1) 크롬브라우저설치하기인터넷웹브라우저의주소창에 크롬다운로드 를입력하거나아래의주소를입력하여구글사이트에서크롬브라우저를다운로드받은후설치한다. 맞춤형소프트웨어교육 93

Gyeongsangbuk-Do Office of Education 2) 구글계정만들기앱인벤터에로그인시구글계정이필요하므로기존의계정을사용하거나새로이계정을만들어야한다. 가 ) 기존구글계정이있을경우안드로이드폰을사용하는누구나스마트폰을구입할때구글계정을생성하거나입력하게된다. 스마트폰의계정관리에서자신의구글 ID를확인하거나구글사이트에서비밀번호찾기를이용하여자신의계정을확인한다. 나 ) 구글계정이없을경우구글사이트또는아래주소에접속하여구글계정을만들어사용한다. https://accounts.google.com/signup?hl=ko google 계정을만들때는새롭게 gmail 주소를만들거나기존에사용하던메일주소를사용할수있으므로 [ 사용자이름 ] 아래 [ 기존이메일주소를사용하고싶습니다.] 또는 [ 새 Gmail 주소를만들고싶습니다.] 를클릭하여자신이선택하고싶은메일주소를선택하여계정을생성한다. 94 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 3) 앱인벤터홈페이지접속하기크롬브라우저에서 [ 앱인벤터 ] 로검색하거나아래주소를직접입력한다. https://appinventor.mit.edu 우측상단의 [Create apps!] 를클릭하고앞서만들어둔구글계정과비밀번호를입력하여접속한다. 나. 앱인벤터화면구성앱인벤터는크게디자이너 (Designer) 와블록에디터 (Blocks) 화면으로구성되어있다. 디자이너 (Designer) 는스마트폰에보여지는화면을구성하는역할을하고, 블록에디터 (Blocks) 에서는디자이너에서만든화면의기능을코딩하는역할을한다. 1) 디자이너 (Designer) 디자이너는실제스마트폰에보여지는화면을만드는곳으로왼쪽에서오른쪽방향으로순서대로작업하면됩다. 왼쪽팔레트 (Palette) 에서필요한기능이있는컴포넌트 (Component) 를가운데있는뷰어 (Viewer) 로끌어와서배치한다. 글상자나버튼같은컴포넌트는화면에보이기때문에화면상에배치되지만, 센서와관련된기능종류는화면에보여질필요가없기때문에뷰어아랫쪽화면밖에배치된다. 컴포넌트 (Component) 에서하나를선택하면가장오른쪽에있는프로퍼티 (Properties) 에서속성을변경할수있는데예를들어버튼을사용할경우우측프로퍼티에서버튼의색상, 버튼에있는글자, 글자크기등을바꿀수있다. 가 ) 팔레트 (Palette): 앱개발에필요한컴포넌트 (Component) 를모아놓은곳으로, 컴포넌트를뷰어 (Viewer) 로끌어다놓아서기능을추가한다. 나 ) 뷰어 (Viewer): 앱이실행되었을때보여질화면으로팔레트에서끌어온컴포넌트를이곳에배치한다. 다 ) 컴포넌트 (Components): 앱을만들기위해서팔레트에서꺼내온컴포넌트를모아놓은공간으로컴포넌트를선택하면컴포넌트의프로퍼티 (Properties) 를변경할수있다. 라 ) 미디어 (Media): 앱을만들기위해필요한사진, 음악, 영상들을업로드하기위한공간이다. 마 ) 프로퍼티 (Properties): 다 ) 에서선택한컴포넌트의속성을변경하는곳으로선 맞춤형소프트웨어교육 95

Gyeongsangbuk-Do Office of Education 택한컴포넌트의크기, 색상등을변경할수있다. 바 ) 디자이너 (Designer) 버튼 : 디자이너화면으로이동하기위한버튼이다. 사 ) 블록 (Blocks) 버튼 : 블록에디터화면으로이동하기위한버튼이다. 2) 블록에디터 (Blocks) 디자이너에서추가한컴포넌트들이해야할일을블록을조립하여프로그래밍하는창이다. 가장왼쪽에는블록 (Blocks) 을선택할수있는목록이있다. Built-in 에있는것들은기본적으로내장된블록을말하고그아래있는블록들은앞서디자이너화면에서추가한컴포넌트에있는블록이다. 가 ) 블록 (Blocks): 블록을선택하여오른쪽뷰어 (Viewer) 로끌어다놓는방법으로코딩을한다. 블록은내장된블록 (Built-in) 과컴포넌트블록으로나뉘는데, 컴포넌트블록은디자이너에서추가한컴포넌트의기능을활용하기위한블록이다. 나 ) 미디어 (Media): 디자이너에있는미디어와마찬가지로사진, 음악, 영상등을업로드하는데사용한다. 96 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 다 ) 뷰어 (Viewer): 왼쪽블록창에서필요한블록을드래그앤드롭하여배치하고필요한기능을코딩하는공간이다. 라 ) 디자이너 (Designer) 버튼 : 디자이너화면으로이동하기위한버튼이다. 마 ) 블록 (Blocks) 버튼 : 블록에디터화면으로이동하기위한버튼이다. 다. 앱인벤터블록소개앱인벤터는레고 (Lego) 블록조립과같이블록결합을통해서손쉽게프로그램제작하며단순한프로그래밍블록을서로끼워맞추면앱이만들어지는시각화된언어이다. 명령어들을직접손으로적어나가는방식이아니라미리준비되어있는블록들을이용해프로그래밍하는데 Built-in 에있는것들은기본적으로내장된블록을말하고그아래있는블록들은앞서디자이너화면에서추가한컴포넌트에있는블록이다. 맞춤형소프트웨어교육 97

Gyeongsangbuk-Do Office of Education 이벤트핸들러 (Event Handler) - 이벤트 (Event): 스마트폰이흔들리거나버튼을누르는등프로그램이인식할수있는변화들을의미함. - 이벤트가발생했을때어떤반응을보여야할지필용한반응에대한블록을이벤트블록사이에끼워넣는다. 명령블록 (Command) 과표현블록 (Expression) - 명령블록 (Command): 앱이구체적으로어떻게작동할지를결정하는블록 - 표현블록 (Expression): 어떤명령을제대로수행하기에필요한매개변수 (Parameter) 를전달하는블록 컴포넌트 (Component) - 가속도센서, 스피커, 타이머, GPS 등앱을구성하는구성요소 - get 블록 : 컴포넌트의속성값을가져오는블록 - set블록 : 컴포넌트의속성값을변경시키는블록 - set블록에표현블록을끼워넣으면컴포넌트속성을변경하는명령블록으로완성됨. - 이벤트핸들러의상단에컴포넌트속성들이나열되어있는데마우스를대고있으면 get 블록과 set 블록을가져올수있다. 98 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 1) 블록다루기 블록에다마우스를대고마우스오른쪽버튼을클릭하면블록을편집할수있다. - 블록삭제하기 : 마우스를끌어휴지통위에드래그앤드롭하거나블록위에서마우스오른쪽을눌러 [Delete ~ Blocks] 를선택한다. 또는블록을마우스로선택한후 [delete] 키를누른다. - 블록복사하기 : 특정블록을복사할경우마우스로블록을선택한후블록위에서마우스오른쪽을눌러 [Duplicate] 를눌러붙여넣는다. 2) 블록실행하기블록은위에서아래로진행되는규칙에따라순차적으로실행된다. 가로로연결되어있는블록들은한명령을실행하는데각각의명령들을수행하는큰블록을만들때는세로로필요한블록들을연결하는데여러개의블록들이모여있는것을블록스택 (Stack) 이라고한다. 3. 앱제작첫걸음 가. 프로젝트생성다음과같은기능을하는간단한앱을만든다. 화면의버튼을누르거나핸드폰을흔들면특정소리가나는앱 1) [Projects] > [Start new project] 메뉴를선택해서새로운프로젝트를생성한다. 맞춤형소프트웨어교육 99

Gyeongsangbuk-Do Office of Education 2) 프로젝트의이름을입력한다. 단, 앱인벤터는프로젝트명에한글, 기호는사용할 수없다. 나. 컴포넌트설계생성한프로젝트에서컴포넌트들을화면에위치시켜화면을구성하고컴포넌트각각의속성을설정한다. 1) 버튼추가가 ) 팔레트에서버튼을화면으로드래그한다. 100 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 나 ) 버튼에텍스트대신이미지를추가하기위해이미지파일을업로드한다. 다 ) 버튼을선택한후버튼의속성중 image 를업로드한이미지파일로변경한다. 라 ) 버튼의속성중 text 에는기존의텍스트를모두삭제한다. 2) 사운드추가하기가 ) 팔레트의 [Media] 에서 [Sound] 를뷰어에드래그하여삽입한다. 나 ) 속성에서 [Sound1] 을선택한후속성의 [Source] 를재생할오디오파일로선 택한다. 단, 오디오파일을선택하기위해서는앞서이미지파일과같이업로드를 우선실시한다. 맞춤형소프트웨어교육 101

Gyeongsangbuk-Do Office of Education 3) 가속도센서추가하기 가 ) 팔레트의 [Sensors] 에서 [AccelerometerSensor] 를뷰어에드래그하여삽입 한다. 다. 컴포넌트동작프로그래밍화면오른쪽에있는 [Blocks] 버튼을클릭하면블록에디터로화면이전환시킨뒤기능에맞는블록들을조립한다. 1) 블록 (Blocks) 에서 [Button1] 을선택한후 "when (Button1).Click do..." 블록을드래그한다. 이는버튼을클릭하는이벤트가발생했을때사용하는블록으로이벤트발생시필요한블록을 do 뒤에조립한다. 2) 블록 (Blocks) 에서 Sound1 을선택한뒤 Sound 를들려주는 "Call (Sound1).Play" 를선택하여이벤트블록에끼운다. 3) 블록 (Blocks) 에서 AccelerometerSensor 를선택한뒤 when (Accelerometer Sensor1).Shaking" 을드래그하고위와같이 call (Sound1).Play" 를삽입한다. 102 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 4) 뒤로버튼을클릭하면어플이종료될수있 도록 [Screen1] 에도 close application" 블록을삽입한다. 라. 테스트하기앱인벤터로만든프로젝트를실행하는방법에는 3가지가있다. 안드로이드폰과무선 WiFi 의유무에따라방법을선택하면된다. 1) AI Companion 안드로이드폰이컴퓨터와동일한무선 (Wifi) 공유기에연결되어있어야사용할수있다. 실행속도가빠르고앱을수정할경우실행결과를빠르게확인할수있어편리한장점이있다. 가 ) 스마트폰에 MIT AI2 Companion 설치하기 Play스토어에서 MIT AI2 Companion 을검색하여설치한다. 나 ) 앱인벤터 AI Companion 실행하기 (1) MIT AI2 Companion 이설치되었다면앱인벤터에서 [Connect] > [AI Companion] 메뉴를선택한다. (2) 스마트폰 MIT AI2 Companion 에서 [scan QR code] 를선택하고앱인벤터화면에나타난 QR코드를인식시켜도되며, 화면에나타난 6자리문자를입력한후 [connect with code] 를선택해도된다. 맞춤형소프트웨어교육 103

Gyeongsangbuk-Do Office of Education 2) 에뮬레이터 (Emulator) 안드로이드폰과무선공유기가모두없을경우사용할수있는방법중하나로앱인벤터를실행하는컴퓨터에프로그램을설치해야하고실행속도도느리다. 또한 GPS 와같은스마트폰에내장된센서를이용하는앱의경우에는실행할수없는단점이있다. 가 ) 에뮬레이터설치하기웹브라우저에아래주소를입력하여 Starter 설치파일을다운로드받는다. http://appinv.us/aisetup_windows 설치를마치면 aistarter 라는바로가기가생성되며이를실행시킨다. 나 ) 에뮬레이터실행하기에뮤레이터를실행시킨후앱인벤터로돌아와서 [Connect] [Emulator] 를선택한다. 가상의스마트폰화면이나타나실행결과를화면으로보여준다. 3) USB 연결하기안드로이드폰은있지만무선 (Wifi) 공유기가없을때사용할수있는방법으로스마트폰에있는 GPS 와같은센서를활용한앱도실행시켜볼수있지만, 에뮬레이터를활용하는것만큼이나속도가느린단점이있다. 가 ) MIT AI2 Companion 를설치한다. 나 ) 에뮬레이터를설치한다. 다 ) 스마트폰을컴퓨터에 USB케이블로연결한다. 라 ) USB연결로실행한다. 스마트폰을컴퓨터와 USB케이블로연결하고, 컴퓨터에서 aistarter 를실행시킨다. 다음앱인벤터에서 [Connect] [USB] 메뉴를선택한다. 104 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 마. 스마트폰에설치하기작성한앱은스마트폰에설치하여사용할수있다. 특히작성한앱을테스트할때컴퓨터와스마트폰이무선 WiFi 로연결되어있지않을때에뮬레이터의속도가느리기때문에스마트폰에직접설치하여테스트를할수있다. 단, 설치전스마트폰환경설정에서 출처를알수없는앱 의설치를허용하도록체크를표시해두어야한다. 1) QR코드생성하기 [Build] [App (provide QR code for.apk)] 를클릭하여 QR코드를생성한다. 2) QR코드스캔하기생성된 QR코드를 QR코드스캐너앱으로스캔한다. 3) 안내에따라내폰에설치하고실행한다. 4) 내폰의스크린아이콘중에마지막부분에앱이설치되고언제든지실행할수있다. 바. 백업하기작성한앱은컴퓨터에소스코드를다운로드할수있다. 다운로드하여백업을하거나다른예제소스들을업로드하여실행해볼수있다. 1) 다운로드하기가 ) 프로젝트메뉴에서 [Projects] 를선택하고 [Export selected project(.aia) to my computer] 를선택한다. 나 ) 프로젝트파일은 [ 내문서 ] 의 [ 다운로드 ] 폴더에 [ 프로젝트명.aia] 로저장된다. 맞춤형소프트웨어교육 105

Gyeongsangbuk-Do Office of Education 2) 업로드하기 가 ) 프로젝트메뉴에서 [Projects] 를선택하고 [Import selected project(.aia) to my computer] 를선택한다. 나 ) 업로드할파일을선택한후 [OK] 를누르면나의프로젝트에추가되어언제든 지수정하고실행할수있다. 106 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 Ⅱ. 앱인벤터와아두이노의만남 1. 스마트조명만들기 가. 문제정의하기최근사물인터넷 (IoT, Internet of Things) 기술이주목을받으며관련기술이접목된다양한제품들이출시되고있다. 그중대표적인것이스마트램프로가정내조명기구를직접제어하지않고인터넷에연결된조명기기가사람의개입없이스마트폰과상호간에알아서정보를주고받아처리하는것을말한다. 이와같이아두이노에서가장기본이되는 LED 끄고켜기를앱과연동하여실생활을편리하게해주는제품이나실생활의문제들을해결할수있다. 1) 해결해야할문제 - 스마트폰을이용하여가정내조명을끄고켤수없을까? 2) 필요한기능 - LED 켜고끄기 - 앱을이용하여 LED 에게켜고끄는신호알리기 나. 아두이노회로구성하기가정내필요한조명을 LED 라고가정하고 3개의 LED를켜고끌수있는회로를구성한다. 앱과연동하기위해서블루투스모듈을사용한다. 맞춤형소프트웨어교육 107

Gyeongsangbuk-Do Office of Education 1) 구성요소 - 기본구성요소 ( 아두이노, USB 케이블, 점퍼선 ) - 블루투스모듈 (HC-06) 1개 - LED 3개, 저항 220Ω 3개 2) 무선통신이란? 무선통신이란두지점간에서유선전송로 ( 전선 ) 를통하여이루어지는유선통신에비해전선을통하지않고전파를통하여신호 부호 영상 음성등의정보를교신하는것을말한다. 가장널리사용되고있는무선인터넷와이파이 (Wi-Fi), ZigBee, NFC, 그리고 IrDa 등종류가다양하고각통신규약마다속도, 소비전력, 보안성, 전송거리와같은특징에차이가있기때문에적합한통신방법을선택해서사용해야한다. 블루투스 (Bluetooth) 는와이파이의 1/10정도의속도, 10m이하의거리, 낮은소비전력, 낮은비용의특징을가지고있다. 3) 회로도 108 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 다. 아두이노스케치프로그래밍 1) 아두이노개발환경 (IDE) 을이용하여앱에서버튼을누르면 1~6 의데이터를전송하고블루투스모듈을통해데이터값을아두이노가전송받아값에따라 LED를 ON/OFF 한다. 2) 아래와같이프로그램을작성하고보드에업로드한다. #include <SoftwareSerial.h> SoftwareSerial BT(2,3); // 블루투스모듈연결, (TX, RX) void setup() { // put your setup code here, to run once: BT.begin(9600); Serial.begin(9600); pinmode(7,output); //Blue led pinmode(8,output); //Red led pinmode(9,output); //Yellow led digitalwrite(7,low); // led 초기상태는꺼짐 (LOW) digitalwrite(8,low); digitalwrite(9,low); 맞춤형소프트웨어교육 109

Gyeongsangbuk-Do Office of Education int message; // 앱으로부터받은데이터를저장 void loop() { // put your main code here, to run repeatedly: if(bt.available()){ // 블루투스연결이유효한동안 message=bt.read(); // 앱으로부터데이터읽어서저장 Serial.println(message); switch(message){ // 앱에서보내온데이터에따라 LED on/off case 1: digitalwrite(7, HIGH); break; case 2: digitalwrite(7, LOW); break; case 3: digitalwrite(8, HIGH); break; case 4: digitalwrite(8, LOW); break; case 5: digitalwrite(9, HIGH); break; case 6: digitalwrite(9, LOW); break; 라. 앱인벤터구성하기 1) 프로젝트생성및컴포넌트설계 가 ) 디자인하기 110 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 나 ) 컴포넌트속성 (1) 스크린 : Screen1 - Title을 SmartLED" 로설정한다. - AlignHorizontal 을 "center" 로설정하여화면의구성요소를가운데로정렬한다. (2) 버튼 : Button1, Button2, Button3, Button4, Button5, Button6 - BackgroundColor 을 None 으로지정하여서버튼의배경을투명하게해준다. - Enabled 를체크해제하여서버튼이눌리지않도록한다. ( 블루투스가연결되기전에버튼이눌리지않도록하기위해서 ) 맞춤형소프트웨어교육 111

Gyeongsangbuk-Do Office of Education - Text 를 on과 off 으로설정하여서버튼에표시되는글자를바꾸어준다. (3) 리스트피커 : List Picker1 - Text를 블루투스기기를선택하세요 로설정하여서버튼에표시되는글자를바꾸어준다. (4) 라벨 : Label1, Label2, Label3, Label4 - Label1 은 Font size를 20으로설정하고 Text 를 스마트조명 으로바꾸어준다. - Label2~Label4 는화면과같이각각 Text를설정한다. 2) 컴포넌트동작프로그래밍및설치 - When ListPicker1.BeforePicking : ListPicker 가선택되기전에 ListPiker 의선택목록은블루투스를가지고있는연결가능한기기목록으로설정하여보여준다. - When ListPicker1.AfterPicking : ListPicker 가선택하여블루투스에연결에성공하면버튼 1~6 의작동이가능해지고 ListPicker 는모습을감춘다. 112 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 - When Button1.Click : BluetoothClient1 로숫자 1 을데이터로보낸다. - Button2~Button6 은 Button1 과동일하게작동한다. 도전과제 LED 의 ON/OFF 기능만이아니라각 LED 의밝기를조절하여실내조명의밝기를앱으 로조정할수있도록프로그램을작성해보자. 2. Robotics Bird 가. 문제정의하기서보모터는원으로회전하는것이아니라 0 ~179 사이의일정한각도내에서회전한다. 내부에모터드라이버가내장되어있으므로연결했을때모터를제어하기가쉬워무선조종자동차, 무선조종비행기, 휴머노이드로봇등에많이사용된다. 원형으로회전하는대신정해진위치로이동하는방식으로작동하기때문에물리적인이동을정밀하게제어하는데유용하고펄스의지속시간에반응하므 맞춤형소프트웨어교육 113

Gyeongsangbuk-Do Office of Education 로 1밀리세컨드 (ms) 미만이면서보가한쪽끝으로회전하며, 2밀리세컨드이상이면반대쪽끝으로회전한다. 이와같이정밀한제어를필요로하는곳에서보모터를 2개이상연결하여실생활을편리하게해주는제품이나실생활의문제들을해결할수있다. 1) 해결해야할문제 - 산업현장에서사용하는무선조종로봇과같이원격으로로봇을조정할수없을까? 2) 필요한기능 - 서보모터를 2개이상연결하여로봇만들기 - 앱을이용하여로봇을제어하기 나. 아두이노회로구성하기로봇의팔과같이서보모터 2개를연결하여로봇새라가정하고각각의서보모터를 0 ~179 로조정할수있도록회로를구성한다. 앱과연동하기위해서블루투스모듈을사용한다. 1) 구성요소 - 기본구성요소 ( 아두이노, USB 케이블, 점퍼선 ) - 블루투스모듈 (HC-06) 1개 - 서보모터 2개 114 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 2) 회로도 다. 아두이노스케치프로그래밍 1) 아두이노개발환경 (IDE) 을이용하여앱에서슬라이더의값을 0~180 사이의값으로설정하면블루투스모듈을통해데이터값을아두이노가전송받아값에따라서보모터의회전각을설정하여정해진위치로이동한다. 2) 아래와같이프로그램을작성하고보드에업로드한다. 맞춤형소프트웨어교육 115

Gyeongsangbuk-Do Office of Education #include <Servo.h> #include <SoftwareSerial.h> SoftwareSerial BT(2,3); Servo servoup, servodown; void setup() { // put your setup code here, to run once: BT.begin(9600); Serial.begin(9600); servoup.attach(10); servodown.attach(9); int a=0; void loop() { // put your main code here, to run repeatedly: byte a[2]; int up, down; if(bt.available()){ BT.readBytes(a,2); up=(int)a[0]; down=(int)a[1]; Serial.println(up); Serial.println(down); servoup.write(up); servodown.write(down); 116 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 라. 앱인벤터구성하기 1) 프로젝트생성및컴포넌트설계 가 ) 디자인하기 나 ) 컴포넌트속성 (1) 스크린 : Screen1 - Title을 Robotics Bird" 로설정한다. - AlignHorizontal 을 "center" 로설정하여화면의구성요소를가운데로정렬한다. 맞춤형소프트웨어교육 117

Gyeongsangbuk-Do Office of Education (2) 레이아웃 : VerticalArrangement1 - AlignHorizontal 을 Center 으로지정한다. - AlignVertical 을 Center 으로지정한다. - Height 와 Width 를 Fill parent 로지정한다. (3) 슬라이더 : Slider1, Slider2 - Width 를 90% 로지정한다. (Fill parent 를할경우꽉차서끝까지드래그되지않는다.) - MaxValue 를서보모터의최대각도인 180으로지정한다. - Min Value 를서보모터의최소각도인 0으로지정한다. - TumbPosition 을 90으로지정하여초기값을 90으로설정한다. - Visible 의체크를해제한다. (4) 라벨 : Label1, Label2, Label3, Label4 - Label1~2 는 FontSize 를 90, Text를 90, Text색상을 Dark Gray로지정한다. - Label3~4 는 Text 를새의머리와새의방향으로각각지정한다. 2) 컴포넌트동작프로그래밍및설치 118 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 - When ListPicker1.BeforePicking : ListPicker 가선택되기전에 ListPiker 의선택목록은블루투스를가지고있는연결가능한기기목록으로설정하여보여준다. - When ListPicker1.AfterPicking : ListPicker 가선택하여블루투스에연결에성공하면슬라이더 1~2 의작동이가능해지고 ListPicker 는모습을감춘다. - Initialize global (name) to~ : name 을갖는전역변수를설정한다. - When Slider1.PositionChanged : Slider 가위치가변경되면 thumposition( 현재슬라이더위치의값 ) 을전역변수에숫자로변환하여저장한다. : 저장된변수의값을 Label1 의 text 로설정한다. : 전역변수 up( 서보모터 1) 과전역변수 down( 서보모터 2) 의값을블루투스클라이언트를통해아두이노로전송한다. 맞춤형소프트웨어교육 119

Gyeongsangbuk-Do Office of Education 도전과제 1. 서보모터의개수를 3개이상으로늘려로봇팔을구성하고각각을슬라이더로제어할수있도록프로그램을작성해보자. 2. 서보모터의값을슬라이더로조정하지않고앱에서버튼을누르면서보모터가특정위치로이동하여일정한패턴으로동작할수있도록프로그램을작성해보자. 3. 온습도알리미 가. 문제정의하기스마트폰의위젯에서오늘의날씨를실시간으로알려주는것처럼센서들을통해얻게된정보를메시지나 SNS 를통해공유할수있다. 최근출시되는홈 IoT 제품중에서실내온도를측정하여온도에따라냉난방기가온도를설정하고자동으로작동하는모습을볼수있다. 이처럼센서들을이용하여주변환경에대한정보를습득하고이를토대로주변기기들을무선으로제어할수있는기능이제품을통해현실화되고있다. 이와같이온습도센서를사용하여실내온도와습도를측정하고이를앱과연동하여실생활을편리하게해주는제품이나실생활의문제들을해결할수있다. 1) 해결해야할문제 - 실내온도와습도에맞게냉난방기를자동으로제어할수없을까? 2) 필요한기능 - 실내온도와습도를측정하기 - 앱을이용하여실내온습도정보를공유하기 나. 아두이노회로구성하기주변환경의온도와습도를측정할수있도록온습도센서를연결하고앱과연동하기위해서블루투스모듈을사용하여회로를구성한다. 120 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 1) 구성요소 - 기본구성요소 ( 아두이노, USB 케이블, 점퍼선 ) - 블루투스모듈 (HC-06) 1개 - 온 / 습도센서 (DHT11) 1개 2) 회로도 맞춤형소프트웨어교육 121

Gyeongsangbuk-Do Office of Education 다. 아두이노스케치프로그래밍 1) 아두이노개발환경 (IDE) 을이용하여온 / 습도센서가실내온도와습도를측정하여데이터를앱으로전송하면앱에서데이터를받아온도와습도를화면에출력한다. 2) 온습도센서 DHT11 의라이브러리추가하기라이브러리란 소스코드샘플 로서해당라이브러리에맞는주변장치를즉시제어할수있도록해준다. 보통라이브러리는.h확장자의헤더파일과.cpp 확장자의소스코드파일로구성되어있는데아두이노의통합개발환경 (.ino) 에서는 #include <dht.h> 과같은코드를사용하여해당헤더파일을불러올수있다. 해당라이브러리를사용하기위해서는라이브러리가아두이노라이브러리폴더에포함되어있어야한다. 기본적인라이브러리는아두이노스케치프로그램을설치할때제공이되고이외에필요한라이브러리는해당파일을아두이노라이브러리폴더에저장하거나.zip파일을 [ 스케치 ]->[Include Library] 에서추가하면된다. 3) 아래와같이프로그램을작성하고보드에업로드한다. #include <dht11.h> #include <SoftwareSerial.h> SoftwareSerial BT(2,3); 122 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 int message; dht11 DHT11; #define DHT11PIN 5 char data[7]={0,; void setup() { // put your setup code here, to run once: BT.begin(9600); Serial.begin(9600); void loop() { // put your main code here, to run repeatedly: Serial.println("\n"); int chk = DHT11.read(DHT11PIN); Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; int a=dht11.humidity; int b=dht11.temperature; Serial.print("Humidity (%): "); Serial.println((float)a, 2); Serial.print("Temperature (oc): "); Serial.println((float)b, 2); sprintf(data,"%03d%03d",a,b); BT.write(data); delay(2000); 맞춤형소프트웨어교육 123

Gyeongsangbuk-Do Office of Education 라. 앱인벤터구성하기 1) 프로젝트생성및컴포넌트설계 가 ) 디자인하기 나 ) 컴포넌트속성 (1) 스크린 : Screen1 - Title을 온습도알리미 " 로설정한다. - AlignHorizontal 을 "center" 로설정하여화면의구성요소를가운데로정렬한다. 124 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 (2) 레이아웃 : VerticalArrangement1, VerticalArrangement2, VerticalArrangement3 - AlignHorizontal 을 Right 로설정한다. - Height 와 Width 를 Fill parent 로설정한다. (3) 라벨 : Label1, Label2 - Font size를 50으로설정하고 Width 를 Fill parent 로설정한다. - Text를 not connected 로바꾸어준다. - Textcolor 는원하는색상으로설정한다. (4) 리스트피커 : List Picker1 - Text를 Bluetooth connect 로설정하여서버튼에표시되는글자를바꾸어준다. - Width 를 Fill parent 로설정한다. (5) 버튼 : Button1 - BackgroundColor 을 None 으로지정하여서버튼의배경을투명하게해준다. - Height 와 Width 를 40px로설정한다. - Text 를 sharing" 으로설정하여서버튼에표시되는글자를바꾸어준다. (6) 타이머 : Timer1 - TimerInterval 을 100으로설정한다. 2) 컴포넌트동작프로그래밍및설치 맞춤형소프트웨어교육 125

Gyeongsangbuk-Do Office of Education - When ListPicker1.BeforePicking : ListPicker 가선택되기전에 ListPiker 의선택목록은블루투스를가지고있는연결가 능한기기목록으로설정하여보여준다. - When ListPicker1.AfterPicking : ListPicker 가선택하여블루투스에연결에성공하면버튼 1 의작동이가능해지고 ListPicker 는모습을감춘다. - When Button1.Click : Buttion1 이클릭되면수신된센서값을공유한다. : Label1 과 Label2 의내용을 join 으로합쳐원하는형태로문자열을만든다. : Sharing 을통해문자, SNS 등을이용하여메시지를전송한다. 126 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 - When Clock1.Timer : 타이머로설정한시간마다구성이벤트가작동된다. - If BluetoothClient.isConnected : 블루투스가연결이되어있다면 - if Bluetoothcliente.bytesAvailable >= 6 : 수신받은데이터의길이가 6 바이트이상이라면 6 바이트의문자열을읽어들여 data 라는변수에저장한다. - set Screen1.Title to get global data : 스크린의타이틀을수신받은데이터로변경하고 data 에서첫번째문자부터 3 글자 를가져와서 1 을곱한뒤문자뒤에 % 를붙인다. label2 도마찬가지로 4 번째문자 부터 3 글자를가져와문자뒤에 를붙인다. 각각의문자를 Label1 과 Label2 의 Text 로설정한다. 도전과제 아두이노에 DC 모터를추가하여온도가일정온도를넘어가면자동으로 DC 모터가회전 하여선풍기가작동할수있도록프로그램을작성해보자. 4. 우리집지키미 가. 문제정의하기초음파센서는전방의물체움직임을측정하여방향을바꾸거나움직임을감지할수있다. 초음파센서인 HC-SR04 를이용하여 1m 안의물체에대해서정확한거리값을구해준다. trig과 echo 를이용하여전송한초음파가전방물체에반사되어돌아오는시간을통해거리를측정한다. 이를이용하여시각장애인에게장애물을알려주거나자동차나로봇이주행시전방에물체를인식하고방향을전환하는등다양한용도로사용할수있다. 이와같이전방의물체를감지하고거리를측정하는초음파센서를이용하여사물을감지하고앱과연동하여실생활을편리하게해주는제품이나실생활의문제들을해결할수있다. 맞춤형소프트웨어교육 127

Gyeongsangbuk-Do Office of Education 1) 해결해야할문제 - 아무도없는우리집을지켜주는도난방지시스템을만들수없을까? 2) 필요한기능 - 초음파센서를이용하여사물감지하기 - 특정값이되면부저를이용하여소리내기 - 특정값에따라색을달리하는 RGB LED 켜기 - 앱을이용하여 LED 에게켜고끄는신호알리기 나. 아두이노회로구성하기아무도없는집에사물을감지할수있는초음파센서를연결하고초음파센서의값에따라부저로소리를내거나 RGB led의특정색을밝히는회로를구성한다. 앱과연동하기위해서블루투스모듈을사용한다. 1) 구성요소 - 기본구성요소 ( 아두이노, USB 케이블, 점퍼선 ) - 블루투스모듈 (HC-06) 1개 - RGB LED 모듈 1개 - 초음파센서 (HC-SR04) 1개 - 부저 1개 128 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 2) 회로도 맞춤형소프트웨어교육 129

Gyeongsangbuk-Do Office of Education 다. 아두이노스케치프로그래밍 1) 아두이노개발환경 (IDE) 을이용하여초음파센서를통해사물이감지되면부저를통해소리가나고 RGB LED는 Green 에서 Red로변한다. 또한블루투스모듈을통해데이터값을아두이노가앱에게전송한다. 2) 아래와같이프로그램을작성하고보드에업로드한다. #include <SoftwareSerial.h> SoftwareSerial BT(2,3); int note_g4=392; // 주파수솔 int note_e4=330; // 주파수미 int trigpin = 8; // 초음파 int echopin = 9; float duration, distance; int speakersensor=5; int noteduration=100; int ledr=13; int ledg=12; int ledb=11; char data[4]={1,1,1,1; char data1[1]={1; void setup() { // put your setup code here, to run once: BT.begin(9600); Serial.begin(9600); pinmode(trigpin, OUTPUT); pinmode(echopin, INPUT); pinmode(speakersensor, OUTPUT); pinmode(ledr, OUTPUT); pinmode(ledg, OUTPUT); pinmode(ledb, OUTPUT); 130 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 void loop() { // put your main code here, to run repeatedly: digitalwrite(trigpin, LOW); delay(2); digitalwrite(trigpin, HIGH); delay(10); digitalwrite(trigpin, LOW); duration = pulsein(echopin, HIGH); // echopin 이 HIGH 를유지한시간을저장한다. distance = ((float)(340 * duration) / 10000) / 2; digitalwrite(ledr, LOW); digitalwrite(ledg, HIGH); digitalwrite(ledb, LOW); if(distance<=10){ digitalwrite(ledr, HIGH); digitalwrite(ledg, LOW); digitalwrite(ledb, LOW); for(int i=0; i<=2; i++){ tone(speakersensor, note_g4, noteduration); delay(100); tone(speakersensor, note_e4, noteduration); delay(100); BT.write(data); else{ BT.write(data1); 맞춤형소프트웨어교육 131

Gyeongsangbuk-Do Office of Education 라. 앱인벤터구성하기 1) 프로젝트생성및컴포넌트설계 가 ) 디자인하기 나 ) 컴포넌트속성 (1) 스크린 : Screen1 - Title을 my home security" 로설정한다. - AlignHorizontal 을 "center" 로설정하여화면의구성요소를가운데로정렬한다. 132 2016 동계정보화전문요원연수

제 3 부앱인벤터 for 아두이노 (2) 텍스트박스 : Textbox1 - Width 를 60percent 로설정한다. - Hint를 your phonenumber" 로설정한다. (3) 버튼 : Button1 - BackgroundColor 을 None 으로지정하여서버튼의배경을투명하게해준다. - Enabled 를체크해제하여서버튼이눌리지않도록한다. ( 블루투스가연결되기전에버튼이눌리지않도록하기위해서 ) - Width 를 60percent 로설정한다. - Text를 save Phonenumber 로설정한다. (4) 레이아웃 : VerticalArrangement - AlignHorizontal 와 AlignVertical 을 center 로설정한다. - Height 와 Width 를 Fill parent 로설정한다. (5) 라벨 : Label1 - Font size를 50으로설정한다. - Text 를 안전 으로바꾸어준다. - Textcolor 는원하는색상으로설정한다. 2) 컴포넌트동작프로그래밍및설치 맞춤형소프트웨어교육 133

Gyeongsangbuk-Do Office of Education - When ListPicker1.BeforePicking : ListPicker 가선택되기전에 ListPiker 의선택목록은블루투스를가지고있는연결가 능한기기목록으로설정하여보여준다. - When ListPicker1.AfterPicking : ListPicker 가선택하여블루투스에연결에성공하면버튼 1 의작동이가능해지고 ListPicker 는모습을감춘다. - When Button1.Click : Textbox1 의 text 를 TiniDB1 에저장한다. : tag 는 "p1" 로설정한다. 134 2016 동계정보화전문요원연수