아날로그입력 Analog Input 작품이외부세계에관한정보를아날로그형태로읽어들이는경우. 센서를이용하는여러프로젝트들이이에속한다. 이를테면작품앞에있는사람의몸무게는어느정도인지, 방안의 조명은얼마나밝은지등을알고자하는경우가이에속한다. 예 ) 다양한센서들

Similar documents
Motor


시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게

Microsoft PowerPoint - es-arduino-lecture-03

슬라이드 1

실험 5

Microsoft PowerPoint - es-arduino-lecture-09

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

Physical Computing for Artists & Designers 연세대학교디지털아트학과 Earl Park

실험 5

Example: LED flashlight

hwp

슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

PowerPoint 프레젠테이션

RVC Robot Vaccum Cleaner

Raspberry Pi 입출력디바이스 II 1 제 05 강 입출력디바이스 II 터치스위치자석스위치움직임감지센서부저모듈 LED Array RGB LED 릴레이모듈초음파센서 ( 거리측정 ) 적외선센서및리모콘 ( 미작성 )

untitled

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

슬라이드 1

<4D F736F F F696E74202D203131C1D6C2F7202D E6FB8A620C0CCBFEBC7D120C4B3B8AFC5CD204C43442C C1A6BEEEC7CFB1E2205

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

Microsoft PowerPoint - es-arduino-lecture-08

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Template

BC6HP Korean.ai

Microsoft Word - PEB08_USER_GUIDE.doc

KMC.xlsm

Microsoft PowerPoint - chap04-연산자.pptx

온라인카타로그에서적절하고정확한품명을찾으실수있습니다. lcs 초음파센서 에전가되는전류 microsonic GmbH / Phoenixseestraße 7 / Dortmund / Germany / T / F +49

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - T3 SASD(2).pptx

아두이노로만드는인형뽑기장치

실험 5

슬라이드 1

CAN-fly Quick Manual

빵빵한아두이노센서키트매뉴얼 Ver. 1-1 메카솔루션 ( 빵빵한아두이노센서키트 총 40 개의모듈과 40 핀케이블이포함되어있습니다. Version 1.1 릴리즈 2013 년 09 월 10 일 메카솔루션 1

서보교육자료배포용.ppt

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

Microsoft PowerPoint - Ch13

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

ez-shv manual

Microsoft Word - Lab.4

chap 5: Trees

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

차시 AS_02 대상 교육주제아두이노 LED 및버튼제어프로젝트교육시간 120 분 1. 아두이노를이용하여 LED 를제어할수있다. 교육목표 2. 아두이노를이용하여삼색 LED 를제어할수있다. 3. 아두이노에서버튼입력을수행하여프로그램에연동할수있다. 장비류는미리배분하고, 재료는

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

OCW_C언어 기초

API 매뉴얼

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

KAERITR hwp

API 매뉴얼

Microsoft Word - logic2005.doc

Microsoft PowerPoint - chap06-2pointer.ppt

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

歯FDA6000COP.PDF

PowerPoint 프레젠테이션

The zws sensors are among the smallest ultrasonic sensors available on the market in colloidal housings with teach-in buttons. 하이라이트 Ultrasonic sensor

목차 1 아두이노와이어링 & 코딩 1-1 아두이노초보자를위한 아두이노와이어링과코딩에의한 LED ON OFF 12 Coding_LED_ON_OFF_ 아두이노초보자에게위험스러운 아두이노코딩에의한 LED

뻔뻔한아두이노매뉴얼 Ver. 2-1 메카솔루션 ( 목차. 1. 아두이노의특징및종류설명 2. 아두이노소프트웨어설치및브레드보드이용하기 3. 라이브러리추가하기 4. 센서류 A. 근접물체감지하기 (QRD1114) B. 온도센서로온도감지하

Microsoft Word - LAB_OPamp_Application.doc

1. 아두이노 (Arduino) 개요및개발환경구축 아두이노프로젝트는예술가, 디자이너또는학생들이저렴한마이크로컨트롤러를이용해제어장치를쉽게만들수있도록돕기위해마시모밴지 (Massimo Banzi) 와데이비드쿠아르티에예스 (David Cuartielles) 에의해 2005년이탈

Arduino- 서보모터 서울과학기술대학교기계시스템디자인공학과 교수김성환

PowerPoint Presentation

(SW3704) Gingerbread Source Build & Working Guide

ez-md+_manual01

S O L U T I O N I N N O V A T I O N T P C M E C H A T R O N I C S TPC TPC SERVO & STEP MOTOR, DRIVER Series TDB2000 (일체형/분리형,

PowerPoint 프레젠테이션

슬라이드 1

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

[8051] 강의자료.PDF

Motor Control Solution

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

아두이노로만드는 4 족보행로봇

슬라이드 1

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

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

스테퍼모터 Stepper Motor 스테퍼모터는일반 DC 모터의장점인연속회전과서보모터의장점인정확한위치조정, 즉정밀제어가가능한모터이다. 스테퍼모터는 360도를일정한각도의스텝단계로나누어지정한스텝만큼회전하도록되어있으며, 예를들어한스텝이 1.8 인스테퍼모터는 200스텝을회전해

Requirement Definition Wheel Motor 작동하는경우장애물인식후 - Ultrasonic Sensor 홀수번누를경우 +10 Touch Sensor 누를경우 TouchSensor 계속누르고있을경우 (0.5) +10 짝수번누를경우 -10 빛이어두워졌다다

PowerPoint Presentation

뻔뻔한아두이노매뉴얼 Ver. 1 메카솔루션 ( 뻔뻔한아두이노 예제 1. [ 시작하기 ] 아두이노소프트웨어설치및브레드보드이용하기 2. [ 출력1] LED 깜빡이기 3. [ 출력2] 시리얼모니터에텍스트출력하기 4. [ 출력3] PWM

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

ZPONZCMGOVQK.hwp

hd1300_k_v1r2_Final_.PDF

歯AG-MX70P한글매뉴얼.PDF

PowerPoint 프레젠테이션

6_5상 스테핑 모터_ _OK.indd

PowerPoint 프레젠테이션

2

?.,,,.. / OSHA( ) NFPA( ) ANSI/ISA( / ) TIA( ) IEC( ) CENELEC( ) IEEE( ).....?,,.. Fluke 160- FC %.,? NEC( ) 100 " / ". ( )....,,,, EMI, RFI.

Microsoft Word - Sensor Kit for Arduino-37종.docx

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

Interactive Workshop for Artists & Designers 연세대학교디지털아트학과 Earl Park

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

Microsoft Word - Sensor Kit for Arduino-41종.docx

BY-FDP-4-70.hwp

Siemens

Transcription:

Physical Computing for Designers & Artists 연세대학교디지털아트학과 Earl Park

아날로그입력 Analog Input 작품이외부세계에관한정보를아날로그형태로읽어들이는경우. 센서를이용하는여러프로젝트들이이에속한다. 이를테면작품앞에있는사람의몸무게는어느정도인지, 방안의 조명은얼마나밝은지등을알고자하는경우가이에속한다. 예 ) 다양한센서들

센서 Sensor 센서란어떤외부자극에대해반응을감지할수있는장치나시스템을말한다. 우리몸이느끼는온도, 맛, 시각적인색깔등모든것이센서반응에대한결과라할수있다. 사람으로말하자면감각에해당하는기능을수행하는소자로볼수있으며대상물의상태를파악하고전기신호로전달하는것이일반적이다. 종류로는빛센서, 온도센서, 가스센서, 압력센서, 자기센서등다양하다. 귀 ; 입력장치 ; 청각눈 ; 입력장치 ; 시각 공중화장실의자동물내림장치, 백화점의자동문, 사람이움직이면자동으로불이켜지는아파트현관등우리의일상생활에서사람이움직이는것을감지해동작하는여러장치들이있다. 이러한사람의움직임이나위치, 주변환경의변화에반응하는인터랙션을하기위해서는컴퓨터가변화를읽을수있어야한다. 그것을도와주는것이여러가지센서들이며이러한센서들은구입할수도있고, 원리를알면스스로만들수도있다. 예를들어도체가연결되었다떨어지는원리를가진스위치는키보드자판에응용되어쓰이고있으며, 동전 2개나동테이프등을이용해사람의위치를알수있는발판스위치만들수도있다. 코 ; 입력장치 ; 후각 입 ; 입력장치 ; 미각, 출력장치 ; 말 몸 ; 입력장치 ; 촉각, 출력장치 ; 몸짓, 표정 모니터 ; 출력장치 ; 시각 인간은세밀하고복합적인센서의조직체이다. 컴퓨터는필요한기능만있는단순한장치이다. 키보드 ; 입력장치 ; 문자 마우스 ; 입력장치 ; 좌표

가변저항 Variable resistance 아날로그입력을위해가장흔히사용되는부품이가변저항이다. 가변저항은기계에너지, 빛에너지, 열에너지등여러가지에너지의변화를저항의변화로바꾸어나타내준다. 가장흔히볼수있는저항은포텐시오미터 (Potentiometer) 이다. 포텐시오미터는일상생활속의많은제품에서많이볼수있다. 오디오의볼륨다이얼은저항을달리함으로써스피커에전달되는신호의강도를조절하기위한포텐시오미터이다. 가변저항은저항값을임의로바꿀수있는저항이다. 가변저항을사용하여저항을바꾸면전류의크기도바뀐다. 우리가흔히쓰고있는저항은값이변하지않는고정저항이다. 가변저항에는반고정식저항인트리머 (Trimmer) 와포텐시오미터가가장많이쓰인다. 포텐시오미터는회전을감지하는센서로응용되기도한다. 아래는센서로쓰이면서가변저항의역할을하게되는부품들이다. A. 써미스터 thermistor : 열의변화를저항의변화로바꿈 B. 포토셀 photocell : 포토레지스터라고도한다. 빛의밝기에따라저항값이변화 C. 압력센서 FSR(force sensitive resistors) : 가해지는힘에따라저항값이변화 D. 플렉스센서 flex sensor : 굽혀지는각도에따라저항값이변화 E. 기울기센서 : 기울기에의해스위치가 (ON/OFF) 동작 F. 거리측정센서 : 적외선, 초음파센서를사용해서거리를측정. 측정거리는다양 G. Piezo 센서, 충격 & 진동센서 : 주변의충격이나진동에의해서반응하는센서 Physical Computing 4

아날로그입력 Analog input < 프로그래밍 > analog input핀으로값을받을수있는가장간단한코드로 Serial통신으로값을보면서센서가제대로동작하는지, 센서의어떤지점에서어떤값이들어오는지알아볼때쓰인다. 포텐시오미터를돌리면 Serial통신으로 analog input핀으로값이얼마가들어오는지알수있다. int analogpin = 3; // potentiometer wiper (middle terminal) connected to analog pin 3 int val = 0; // variable to store the value read void setup() { Serial.begin(9600); // setup serial void loop() { val = analogread(analogpin); // read the input pin Serial.println(val); // debug value analogread() 문은 0~5v 인풋볼트를 0~1023 의디지털값으로변환시킨다. 이것은 atmega 칩안에 ADC(analog to digital convertor) 라불리는회로에의해이루어진다. *analog input 핀은 10 비트 (2 10 ) 의범위의값인 0~1023 을받아들일수있다. < 회로구성 > 아날로그핀 3번에포텐시오미터를붙인다. - 포텐시오미터의가운데핀을아날로그핀 3번에연결한다. - 포텐시오미터의왼쪽핀을그라운드에연결한다. - 포텐시오미터의오른쪽핀을 +5v에연결한다. Physical Computing 5

빛감지센서 Photoresistor 빛감지센서는빛의양에따라저항값이변하는일종의가변저항이다. 빛감지센서는민감해서환경의영향을많이받으므로실제로사용하는환경에맞게주변을제한해주는일이필요하다. int analogpin = 0; // potentiometer wiper (middle terminal) connected to analog pin 3 int val = 0; // variable to store the value read void setup() { Serial.begin(9600); // setup serial void loop() { val = analogread(analogpin); // read the input pin Serial.println(val); // debug value 마이크로컨트롤러에연결된센서의전압값을시리얼프린트창으로확인해보자. 이제부터사용하는센서값을확인하고싶을때는오른쪽과같이시리얼통신코드를사용하도록하자. 저항은 10K를쓰도록한다. Physical Computing 6

온도센서 Thermistor /* T( 단위 K) = log(4r -3000) / ( -0.024119329) + 473 --- 저항의단위는 ( 옴 ) 화씨 (F) = 1.8 * 섭씨 (Tc)+ 32 섭씨 (Tc) = (F-32)/1.8 온도센서는온도에따라저항값이변하는일종의가변저항이다. 인풋핀으로들어오는전압값을우리가아는온도값으로보여주기위해서는복잡한 계산식이필요하다. 저항은 10K 를쓰도록한다. 섭씨 (Tc) = 절대온도 (T) - 273.15 */ int analpin = 0; int ledpin = 13; // select the pin for the LED int val = 0; // variable to store the value coming from the sensor long x=0, vcc=4840; float th=0,ce=0; void setup() { pinmode(ledpin, OUTPUT); // declare the ledpin as an OUTPUT Serial.begin(9600); void loop() { val = analogread(analpin); // read the value from the sensor digitalwrite(ledpin, HIGH); // turn the ledpin on x = map(val,0,1023,0,vcc); th = (((float)(vcc-x)*10.0)/(float)x)*1000.0; ce = ((log(4.0*th - 3000.0) / (-0.024119329) + 473)-32.0)/1.8; Serial.println(ce); digitalwrite(ledpin, LOW); // turn the ledpin off delay(200); // stop the program for some time Physical Computing 7

적외선센서 IR(Infrared) Sensor 짧은거리를측정하는데있어서는샤프의적외선센서들이자주쓰인다. 값이싸고정확한편이며사용하기도쉽다. 이센서는적외선을쏜후목표물에반사되어돌아오는양을측정한다. 적외선이므로어두운곳에서도사용가능하다. Sharp GP2Y0A21YK0F는 10cm~80cm내의거리를측정할수있다. 측정범위는좁은편이어서물체가센서로부터일직선상에있을경우에만측정된다. 정면에서조금만벗어나도측정되지않는다. 물체가가까이있을수록큰값을읽을수있으며, 10cm이내로접근했을때는예측할수없는값을돌려준다. 측정결과로서 0~5v 사이의변화하는전압을내보내주므로아날로그인풋으로값을받아들여야한다. 세가닥의건선을가지고있으며각각 +5v, 그라운드, 거리측정결과값에대한선이다. 저항은 10K를쓰도록한다. int sensorpin = A0; // select the input pin for the potentiometer int ledpin = 13; // select the pin for the LED int sensorvalue = 0; // variable to store the value coming from the sensor void setup() { pinmode(ledpin, OUTPUT); // declare the ledpin as an OUTPUT: void loop() { sensorvalue = analogread(sensorpin); // read the value from the sensor: digitalwrite(ledpin, HIGH); // turn the ledpin on delay(sensorvalue); // stop the program for <sensorvalue> milliseconds: digitalwrite(ledpin, LOW); // turn the ledpin off: delay(sensorvalue); // stop the program for for <sensorvalue> milliseconds: 참고 http://wiring.org.co/learning/basics/rangersharp.html Physical Computing 8

초음파센서 Ultrasonic Sensor int echopin = 13; // Pin to receive echo pulse int trigpin = 12; // Pin to send trigger pulse 더긴거리를측정하고자할때는초음파거리센서가좋다. 이들은소나수중탐지기처럼초음파를내보낸다음, 그것이반사되어되돌아오기까지의시간을측정한다. HC-SR04는측정범위가 2cm~5m이며측정폭은 Sharp 센서들보다는넓은 30도이다. 센서에서정면에위치한물체의거리를측정하며, 양옆으로벗어난물체를잘측정하지못한다. 측정과정에서, 희미하게들릴정도의작은소리를낸다. HC-SR04는마이크로컨트롤러에서 10us 길이의펄스신호를받으면초음파를발사해거리를측정한후그결과를펄스신호를이용해마이크로컨트롤러에돌려준다. 이때마이크로컨트롤러는돌아오는펄스의길이를측정해결과값을받게된다. 측정후다음측정을위해센서를재준비되는데 10ms의시간이걸린다. 받아온값을 58로나누면몇 cm나떨어져있는지알수있다. void setup(){ Serial.begin(9600); pinmode(echopin, INPUT); pinmode(trigpin, OUTPUT); void loop(){ digitalwrite(trigpin, LOW); // Set the trigger pin to low for 2uS delaymicroseconds(2); digitalwrite(trigpin, HIGH); // Send a 10uS high to trigger ranging delaymicroseconds(10); digitalwrite(trigpin, LOW); // Send pin low again int distance = pulsein(echopin, HIGH); // Read in times pulse distance= distance/58; // Calculate distance from time of pulse Serial.println(distance); delay(50); // Wait 50mS before next ranging 참고 http://arduino.cc/en/tutorial/ping?from=tutorial.ultrasoundsensor Physical Computing 9

힘감지저항 FSR (Force Sensitive Resistors) 플렉스센서 Flex Sensor 힘감지저항은센서표면에힘을증가시킬때감소하는저항이발생하는, 기계적인저항을전기적인저항으로바꾸어주는센서이다. 다른가변저항들과마찬가지로이들도두개의단자를가지고있으며, 아날로그입력회로에쉽게연결할수있다. 형태는다양하지만대채로작고납작하다는것은공통점이다. 힘감지저항은보통손으로버튼이나키패트를누르는정도의작은힘을감지할수있도록디자인되어있다. 이러한센서에몸전체의무게가실리면대번에센서가측정할수있는최대치에달하게된다. 단지사람이위에올라서있는지아닌지만판별하는디지털입력으로사용하고자한다면, 이것도괜찮은방법이다. 플렉스센서는힘감지저항과생김새도비슷하고작동방식도비슷하다. 누르는힘이아니라굽혀지는정도에따라저항이달라진다는점이차이점이다. 이센서는 180도까지굽혀질수있는납작한플라스틱띠처럼생겼으며그저항값은 10kΩ에서 40kΩ까지변화한다. 두개의단자가있으며아날로그입력회로에쉽게연결할수있다. 이센서는물론손가락이나경첩처럼굽혀지는물체를감지하는데쓰일수있다. 여러가상현실제어용글러브들이이센서를채택하고있다. 사용하기가워낙쉽기때문에, 이밖에회전운동이나직선운동에도응용할수있다. 이를테면책상서랍이얼마나당겨졌는지, 또는문이얼마만큼열렸는지감지할때도쓰일수있다. 참고 http://wiring.org.co/learning/basics/forceresistor.html 참고 http://itp.nyu.edu/physcomp/sensors/reports/forcesensorresistor 참고 http://sample.co.kr/flex/ Physical Computing 10

LED 를순차적으로켜기 (1) For Loop (1) < 프로그래밍 > 순차적으로 10개의 LED를켜보자. array문을이용해 LED핀번호를저장시켜놓고, LED가순차적으로켜지게해보자. for문을이용해핀을동시에설정해주거나 LED를순차적으로켜주는등반복하는곳에써본다. int pinarray[] = {2,3,4,5,6,7,8,9,10,11; int count = 0; int timer = 100; void setup(){ for (count=0;count<10;count++) { pinmode(pinarray[count], OUTPUT); void loop() { for (count=0;count<10;count++) { digitalwrite(pinarray[count], HIGH); delay(timer); for (count=9;count>=0;count--) { digitalwrite(pinarray[count], LOW); delay(timer); < 회로구성 > 디지털핀 2~11 번에 LED 를붙인다. - 220 옴저항의한쪽끝을디지털핀 2~11 번에각각연결한다. - 220 옴저항의다른쪽끝을 LED 의 anode( 긴다리 ) 와각각연결한다. - LED 의 cathod( 짧은다리 ) 를각각그라운드에연결한다. 2 11 Physical Computing 11

LED 를순차적으로켜기 (2) For Loop (2) < 프로그래밍 > 이번에는순차적으로자동으로켜지는것이아닌입력장치를사용해사용자의제어에따라순차적으로켜지는 LED를구성해보자. 포텐시오미터를이용해포텐시오미터를돌렸을때디지털핀 2~11번 LED가순차적으로켜지게해보자. map(value, fromlow, fromhigh, tolow, tohigh); value값을 fromlow에서 fromhigh까지를 tolow에서 tohigh까지의값으로맵핑한다. 여기서는 0~1023까지의값을 led 어레이갯수에맞게 10개로바꾸어주는일은한다. int pinarray[] = {2,3,4,5,6,7,8,9,10,11; int lednum =10; int count = 0; int timer = 100; int val = 0; int previous_pin; void setup(){ Serial.begin(9600); for (count=0;count<lednum;count++) { pinmode(pinarray[count], OUTPUT); void loop() { val = analogread(0); int current_pin = map(val,0,1023,0,lednum-1); if (current_pin!= previous_pin) { Serial.println(current_pin); previous_pin = current_pin; < 회로구성 > 아날로그핀 0번에포텐시오미터를붙인다. - 포텐시오미터의가운데핀을아날로그핀 0번에연결한다. - 포텐시오미터의왼쪽핀을그라운드에연결한다. - 포텐시오미터의오른쪽핀을 +5v에연결한다. 디지털핀 2~11번에 LED를붙인다. - 220옴저항의한쪽끝을디지털핀 2~11번에각각연결한다. - 220옴저항의다른쪽끝을 LED의 anode( 긴다리 ) 와각각연결한다. - LED의 cathod( 짧은다리 ) 를각각그라운드에연결한다. for (int i = 0; i <lednum; i++) { if (i!=current_pin) { digitalwrite(pinarray[i], LOW); else{ digitalwrite(pinarray[current_pin], HIGH); Physical Computing 12

아날로그출력 Analog Output 작품이외부디바이스를아날로그형태로제어하는경우. 즉외부의디바이스를단순히켜고끄는것이아니라출력의강도나방향등을제어하는경우를뜻한다. LED 의밝기 를제어하는일, 버저소리의높낮이를제어하는일, 서보모터의각도를제어하는일등이이에해당한다. 예 ) LED 밝기제어, 모터속도제어 Physical Computing 13

펄스폭변조 PWM(Pulse Width Modulation) PWM 은디지털수단으로아날로그결과를얻을수있는기술이다. 이는 On Off 의비 율을변화시켜서제어하는방법으로 DC 모터의속도제어나 LED 등조명제품들의조 광 ( 광량제어 ) 등에많이사용되고있다. Arduino Due등의하드웨어를제외한통상적 Arduino는 DAC(Digital to Analog Convertor) 를가지고있지않다. 즉, Arduino에서는 0v와 5v 이외의다른전압을내보내는것이불가능하다. 때문에디지털신호인 0v와 5v만의비율을변화시킴으로써아날로그효과를내기위해 Analog 출력임에도불구하고 Arduino의 Digtal pin을이용한다. 옆의그림에펄스의주기 (period) 와폭 (width) 을보자. PWM의주기값 * 은고정되어있다. 이고정된주기값에 width값을어떻게주느냐에따라서 output값이결정된다. 아두이노에서 analogwrite() 는 8비트 (2 8 ) 해상도로 0~255의값을쓸수있다. 따라서예를들어 analogwrite(127) 은정해진주기에 5v의 width값을 50% 의 Duty Cycle로내보내평균값으로 5v x 50% 인 2.5v를내보내는효과를가지게된다. * Arduino 에서는 PWM 은 1 초에약 500 헤르쯔 (Hz) 의주파수를가지고있으며, 오른쪽 표에서그린색라인처럼 0.002 초 (20ms) 마다 1 주기의펄스파형이만들어진다. Physical Computing 14

서서히변하기 (1) Fading (1) int ledpin = 9; // LED connected to digital pin 9 int val = 0; // variable used to store the value < 프로그래밍 > 저번시간에배운아날로그인풋을이용하여 LED 밝기를조절해보자. 여러가지아날로그인풋을받을수있는센서중에서우리는포토셀을써보기로한다. 아날로그아웃풋 (PWM) 핀은 8비트 (2 8 ) 의해상도를가진다. 따라서인풋핀으로들어오는 0~1024의데이터 (2 10 ) 를 0~255 의데이터 (2 8 ) 로바꾸어주기위하여 4(2 2 ) 를나누어준다. void setup() { pinmode(ledpin, OUTPUT); // LED is as an OUTPUT // Note: Analogue pins are automatically set as inputs void loop() { val = analogread(0); // read the value from the sensor analogwrite(ledpin, val/4); // turn the LED on at the brightness set by the sensor delay(10); // stop the program for some time < 회로구성 > 아날로그핀 0 번에포토셀을붙인다. 저항은 10K 를사용한다. - 포텐시오미터의구조를생각하면쉽다. 디지털핀 9번핀 (PWM) 에 LED를붙인다. - 220옴저항의한쪽끝을디지털핀 9번에연결한다. - 220옴저항의다른쪽끝을 LED의 anode( 긴다리 ) 와연결한다. - LED의 cathod( 짧은다리 ) 를그라운드에연결한다. 9 Physical Computing 15

서서히변하기 (2) Fading (2) < 프로그래밍 > 애플노트북의잠자기모드에쓰이는 LED를따라해보자. analogwrite() 함수를사용해서어떻게 fade 하는지알아본다. int ledpin = 9; // LED connected to digital pin 9 void setup() { // nothing happens in setup void loop() { // fade in from min to max in increments of 5 points: for(int fadevalue = 0 ; fadevalue <= 255; fadevalue +=5) { analogwrite(ledpin, fadevalue); // sets the value (range from 0 to 255) delay(30); // wait for 30 milliseconds to see the dimming effect // fade out from max to min in increments of 5 points: for(int fadevalue = 255 ; fadevalue >= 0; fadevalue -=5) { analogwrite(ledpin, fadevalue); // sets the value (range from 0 to 255) delay(30); // wait for 30 milliseconds to see the dimming effect < 회로구성 > 디지털 9 번핀 (PWM) 에 LED 를연결한다. 9 Physical Computing 16

서보모터컨트롤 Servo Motor Control #include <Servo.h> Servo myservo; // create servo object to control a servo < 프로그래밍 > 서보모터란회전각도를정확하게제어할수있는모터로 180도의각도내에서 PWM 신호를이용해움직일수있다. 정확한각도제어가특징이므로프린터나스캐너, 공작기계 (CNC), CCTV 카메라등에쓰인다. #include <Servo.h> 는서보모터를쉽게사용할수있도록만들어놓은라이브러리이다. 라이브러리란포토샵의플러그인개념과같다. int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object void loop() { val = analogread(potpin); //reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there < 회로구성 > 서보모터는 5v, 그라운드, 신호선 3핀으로구성되어있다. 따라서 analog output핀에신호선을연결하고전원을공급해주면된다. 디지털 9번핀 (PWM) 에서보모터의신호선을연결한다. 아날로그핀 3번에포텐시오미터를붙인다. - 포텐시오미터의가운데핀을아날로그핀 3번에연결한다. - 포텐시오미터의왼쪽핀을그라운드에연결한다. - 포텐시오미터의오른쪽핀을 +5v에연결한다. Physical Computing 17