반갑습니다. 교주 LGS입니다.
오늘도 재미있게 Arduino를 가지고 놀아 봅시다요 ^^
주위의 밝기에 따라 LED를 켜고 끄는 녀석을 만들어 볼꺼예요

 

 

 

지금까지는 Digital 영역에서 놀았구요~ 오늘부터 Analog 영역으로 들어 갑니다.

Digital 과 Analog의 가장 큰 차이점은 상태(state)의 개수 입니다.

거듭해서 말하듯이 Digital은 1과 0, ON/OFF, 5V와 0V 단 두가지 상태밖에 가질 수 없지만

Analog는 연속적인 값을 가질 수 있죠? Arduino에서는 5개의 Analog Input Pin을 재공하고 있습니다.

Arduino UNO의 Analog Input의 경우 Input Pin으로 들어오는 전압을 1024 단계로 구분할 수 있습니다.

1024 단계는 2^10 즉 10 bit의 분해능을 가졌다는 말예요~ 이해가시죠?

0V~5V 를 1024 단계로 쪼개서 값을 돌려 주는거예요~
다시말해 Analog Input에 0V가 들어오면 0을 돌려주고 5V가 들어오면 1023을 돌려줍니다.

진정한 의미에서의 Analog라고 할 수는 없지만 Digital Pin에 비해서는 많은 단계의 값을 가질 수 있는 거죠~

 

FPPf56vNBpHeEO2rFsMGAY01tRnVQAnkn5AiWVAy_TEDaF_5L6CHxVyUgqAqR302CX426WYiCHusAdRZ5mGNpXmdDS8P6aBofjMSye5xfNPbV1tgE4U

 

 

 

오늘 새롭게 등장한 녀석은 CdS Photo Resistor(또는 Photo cell이라고도 부릅니다) 입니다. 

빛에 반응하는 센서인데요 아래처럼 생겼습니다.

JGZRkQsS1BYRhNHmrcPQBCdKLmA29Mm-Ms01j8W5zORYDRNq37YFca9oit7PXbeoa7KnNOg5MwyrLUYnVQ1JT36Jfq5F1mdiqjaj6wUm6PtIYbS1YvI

 

CdS라고 불리는 이유는 CdS Photoresistor를 만드는 주 재료가 카드늄(Cd)과 황(S)의 화합물인 황화카드늄(CdS)이기 때문입니다.

주위가 밝으면 저항이 줄어 들고 주위가 어두우면 저항이 커지는 특징을 가지고 있는 녀석 입니다.(Photo Conductivity Effect)


OgpkewvrsaQpvo8KKx43XOrcm_JIjfLQn94FWz8RA-2dP6oocoyoqgUNci6H4PjAN6SJXhlG0zbYEy0Pglw_nufjH8PTHWpQeoGrYlq2ha-mmOOQw3k

CdS Photo Resistor를 직관적으로 사용하시려면 Pull Down으로 회로를 구성하면 되겠네요
지난 시간에 보았던 디지털 Pull Down 회로는 스위치를 누르면(저항이 0이 되면) Input 핀에 5V가 인가되고 
스위치를 누르지않으면 (저항이 무한대가 되면) Input pin에 0V가 들어갔었죠?
이 스위치를 CdS Photo Cell로 대체했다고 생각하시면 됩니다.
즉 주위가 밝아 지면 CdS저항이 줄어 들어 스위치를 닫은 효과 나타나므로 Analog Input Pin에 높은 전압이 들어가구요
반대로 주위가 어두워 지면 CdS의 저항이 커지게 되므로 아날로그 인풋 핀에 낮은 전압이 들어가겠죠?

Switch 회로에서 Switch를 CdS Photocell로 바꾸시고 
Digital 5번 핀에 꼽혀있던 Jump wire를 Analog 0번 핀에 꽂으시면 됩니다.

1Bop1Znr1iWo39z4tlZsslejzk0xfHqiEeZBncBqM_t-CGqwAVm5140JfS_JPbWngT0U_1rqD8qnckXl77G9qfCw5P7Nn1OOsh4d81rqNZRzRQ607wM
(Image 출처: ladyada.net)

MATLAB code를 보겠습니다.
pjWfDFliVynjeeD1fmdN5IrSqY1S9LPDCbOh9wAMuL0uu_dPY19W2VeWv328KTng9hT6dqwQ6cydITeb6-IZmMhlc7nrj_c6TysUG1u910CeN6AwYus

Analog Input은 따로 pinMode를 지정해주실 필요가 없습니다.
Analog 값을 읽어 들이시려면 analogRead('핀 번호') 이런식으로 쓰시면 되요~ 

Code를 보시면 Analog 0번 핀으로 들어오는 전압 값을 읽어서
주의의 밝기가 500 이하이면 LED를 자동으로 켜는 구조입니다. 가로등이 생각나내요 ^^

 

 

실시간으로 그래프도 그리구요(plot(b); drawnow 부분)주목하셔야 할 것은 그래프를 그리기위해서 따로 프로그램을 설치할 필요없이 MATLAB에서 기본으로 제공하고 있는 plot 함수를 그대로 쓰고 있다는 겁니다.MATLAB이 아닌 다른 개발환경이라면 그래프를 띄우기 위해 많은 절차가 필요합니다.비단 plot 함수뿐만 아니라 여러분들이 쓰고 싶은 수백가지 MATLAB 함수를 그냥 쓰시면 되요~예를 들어 Arduino로 Computer Vision 관련 프로젝트(빨간 공을 따라간다거나)를 하실때복잡하게 라이브러리를 추가하지 않고도 MATLAB에서 제공하는 Computer Vision Toolbox를 쓰면 간단히 해결됩니다.
지금은 단순히 LED를 끄고 켜는 수준이지만 Arduino로 진행하는 프로젝트가 조금만 복잡해져도 MATLAB의 진가가 발휘 될겁니다. ^^
여러분이 "Arduino with MATLAB" 강좌를 만나신 것이 행운이라깐요!! 헤헤

CdS 대신 온도 센서를 달면 온도계가 될꺼구 습도센서를 달면 습도계가 될거구요~
응용은 무궁무진 합니다요~ ㅎㅎ
실시간으로 그래프를 볼 수 있으니 오실로스코프(softscope)로도 쓸수 있겠는 걸요~ ^^


자~ 오늘 강의 끝~ o(^o^)o