안녕하세요? LGS입니다.

지금까지 우리가 했던것을 되집어 보면

Digital Output(Blinking LED) 했구요 Digital Input (Switch) 했구요 Analog Input (자동 조명)까지 했습니다요~

그럼 다음 차례는? 넵 오늘은 Analog Output에 대해서 알아보겠습니다 o(^o^)o

오늘 만들 Arduino 작품(?)은 Blinking LED 처럼 ON/OFF가 딱 끊어 지는 것이 아니라 부드럽게 켜졌다가 부드럽게 꺼지는 LED입니다. 




이미 기본적인 System이 구축되어 있으므로 MATLAB Code와 회로를 조금씩 살짝살짝 씩만 바꿔주면 됩니다 ^^

오늘 알아볼 Analog Output도 'LED 깜빡이기' 회로를 그대로 쓰겠습니다.


1_FGPDTdxQpSXRjOFKBvEykoP1TULw5H8u2wVrWbS85IF7JLQaxuoXIGkSyVyaFAMW5sRjdVuG6h_DVOAZYMt4prPvZx2yStZQywKopQqj1Bd9PRyKQ

 


Digital Output을 사용하기 위해서 digitalWrite method를 썼듯이 

Analog Output을 사용하시려면 analogWrite method(클래스 함수)를 사용하시면 됩니다.

단 Arduino UNO에서 analogWrite method를 지원하는 핀은 3번, 5번, 6번, 9번, 10번, 11번 총 6개의 Pin입니다.

Arduino Digital 부분에 괄호로 PWM~ 라고 써있죠? 핀번호를 잘 보면 '~'가 붙은 녀석들이 있습니다. 

~ 붙은 핀만 analog output을 지원합니다. (PWM은 잠시후에 설명할께요~)

즉 analogWrite를 사용 하시려면 위의 6개의 핀중에 하나를 골라서 쓰셔야 합니다.

우선 아날로그 output으로 사용하시려는 핀을 pinMode에서 'output'으로 설정해 주셔야합니다.

analogWrite(핀넘버, analog 값) 이런식으로 사용하는데요

두번째 입력 변수가 출력할 analog 값입니다. 0부터 255까지 사용할 수 있습니다.

즉 0V~5V사이의 전압을 8bit 즉 2^8 = 256단계로 analog output으로 출력할 수 있어요.

analog input과 비슷하죠? 10bit가 8bit로 줄어든 것과 input이 아니라 output인 것만 다릅니다.


MATLAB code입니다.

QMHhBZz3UReEAgj0hgjJj-y_P-ofJqWxOcx_tMD-2dNfn-FyloYXWynA1U8tZSO2qLyTY3qzk3qdGsvvYpASL5dQbE7bq-uz556Y5W9oUeSyJHjJFdA


 

어려운 부분은 없으니까 code를 이해하시는데는 아무 문제 없으실 꺼구요~


사실 Arduino에서 Digital output을 Analog output처럼 사용하기 위해서 '꼼수'를 씁니다.

이름하야 PWM(Plus Width Modulation)이 되시겠습니다.


Arduino는 490Hz(1초에 싸이클이 490번 반복) 의 PWM을 가지고 있습니다..

그러므로 한 Cycle은 1/490초 = 약 2ms(0.002초)가 됩니다.

이 0.002초를 다시 256등분으로 쪼개서 analogWrite method에서 받은 값 만큼은 ON(5V) 시키고 나머지는 OFF(0V) 시킨다 이거죠~

무슨 말인지 이해가시죠?

엄밀하게 말하면 analog가 아니지만 사람이 느끼기에는 0.002초의 또 256등분한 것의 변화를 느끼지 못합니다.

대신에 그 평균값으로 느끼게 되는거죠~


lFSJot4gKZv7KUHZ6G4tDfQwIPhSFNAPrZ3ZLn-J6ZDpsnaeMZYGdw2G-ALHXDuoIzjz-dxlIl9cjHQ1A5HVVI7x-46j88bKVASXFqNMTRZp_wOvI8U

(그림 출처: Arduino 공식 홈페이지 arduino.cc)

 

예를 들어 한 Cycle 내의 256개 구간중에 25%(64개의 구간)이 ON되면 ( a.analogWrite(11,64) )

5V의 25% 1.25V가 output으로 나오는 것 처럼 느껴진다는 말입니다.

256개 중에 128개가 ON되고 나머지 128개가 OFF( a.analog(11,128) ) 이면~ 2.5V가 나오는 것 처럼  보인다 이거죠

연속적으로 analog output 값을 변화 시키면 위의 동영상에서 보신것처럼 부드럽게 켜지고 부드럽게 꺼지는 LED를 만들 수 있습니다.

지난 시간  배운 Analog Input과 이번 시간의 Analog Input을 조금 응용하면 주위 밝기에 따라 LED의 밝기도 조절할 수 있겠죠?

주위가 어두우면 어두울 수록 LED를 점점  더 밝게한다든지... ^^

 

LED 대신에 DC 모터를 달게되면 어떻게 될까요?

DC motor는 전압이 높으면 높을 수록 빠르게 회전하는 녀석입니다.

즉 PWM으로 DC 모터의 속도를 조절할 수도 있어요. ㅋㅋ

(motor 관련해서 Motor Shield 때 집중적으로 다루겠습니다 ^^)

LED 대신 스피커를 달면 음악을 재생할 수도 있구요~

오늘 강좌 끝!! 


자~ 이제 여러분들은 Arduino의 기본적인 사용법을 모두 Master 했습니다. o(^o^)o

사실 Arduino로 하는 모든 작품은 모두 다 Digital Input/Output, Analog Input/Output을 기본으로해서 응용하는 거예요~

다시 한번 말하자면 Arduino와 MATLAB을 함께 이용하시면 더욱 강력한 능력을 가질 수 있습니다.

예를 들어 여러분이 이족보행 로봇을 만든다고 하면 MATLAB에서 물리(동역학) Simulation을 바로하고(Simmechanics)

Arduino로 바로 테스트 할 수 있다 이겁니다요~ WOW


 

 

다음 강의에서는 MATLAB GUI를 붙여 볼께요~

다음시간에 뵙겠습니다. =(=^ㅅ^=)= 꾸벅