brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Aug 12. 2020

11. 어두우면 불을 켜주세요
- 조도 센서 이용

센서를 배우자.

앞 강좌에서 만들었던 회로를 조금만 변경하여 조도 센서를 이용하여 어두우면 LED 3개를 켜고 점점 밝아짐에 따라 불을 하나씩 끄다가, 아주 밝은 경우 모든 LED를 끄는 자동 점등 프로그램을 만들어 보자.


LED 3개가 연결된 회로는 변화가 없고 버튼스위치가 없어진 자리에 1킬로 오옴의 저항을 연결한 조도센서를 연결하였다. 

조도 센서는 주변의 밝기에 따라 저항이 변하는 성질을 가지고 있는 센서이므르 디지털 핀에 연결하지 않고 아날로그 핀에 연결을 해야 한다. 

 (센서는 팅커 캐드의 부품 영역에는 "포토 레지스터"라고 표시되어 있다.)


아래 그림과 같이 조도 센서를 연결하게 되면 조도 센서는 마치 스위치와 같은 역할을 하게 된다. 

스위치보다 더 좋은 것은 빛의 밝기에 따라 여러 가지 작업을 가능하게 해 준다는 것이다.



팅커 캐드에 만든 회로의 경우 A0에 전달되는 값이 6~679까지 변화하게 되는데(조도센서에 연결된 저항이 1kΩ일 경우),  이는 실제 회로를 꾸몄을 경우 연결된 조도 센서의 종류에 따라 많이 달라지게 된다. 이를 테스트하기 위하여 새롭게 등장한 명령어가 있다.

바로 


Serial.begin(통신 속도); 과 

Serial.println(수치)이다.

더하여

analogRead(아날로그 포트) 

까지 3개의 추가 명령어를 배우고 완전한 코드를 만들어 보자.


전체 코드는 위와 같이 만들 수 있다.

코드가 길어져서 좌우로 나눠 뒀으니 좌측 코드가 끝나고 화살표를 따라 우측 코드를 보면 된다.



코드를 보면 A0에서 읽어 들인 아날로그 값에 따라 그 값이 600보다 크면 모든 등을 끄고,
401~600까지의 값이면 붉은색 1개를 점등,

201~400 까지면 붉은 등과 노란 등 2개를 점등,
0~200 까지면 도든 등을 켜는 것으로 코딩이 되어 있다.


먼저 A0에서 나오는 아날로그 값이 얼마인지를 알기 위해 

int val=analogRead(A0)라고 명령을 했지만 이때 val에 들어간 값을 알 길이 없다.

이를 확인하려면 


setup에  Serial.begin(9600); 을 선언하여 화면상의 직렬 모니터 (Serial monotor) 화면과 9600 baud로 통신하겠다고 선언하고,

loop에 Serial.println(val)이라는 명령어로 실제 A0에 들어간 값을 화면에 표시하도록 하면 된다.

그리면 A0의 값이 Serial 화면에 표시되게 되는데 이 창은 아래와 같이 코드의 하단에 있는 직렬 모니터 버튼을 눌러보면 된다.


직렬 모니터를 켠 상태에서 화면에 붉은 박스 안의 조도 센서를 누르고 검은 버튼을 좌우로 움직여 빛의 밝기를 조절하면 오른쪽 아래의 직렬 모니터에서 해당 밝기의 값이 표시되게 된다.


화면에서는 값이 535이기 때문에 붉은색 LED 한 개만 점등하게 된다.


실제로 위의 회로를 실물을 이용하여 만들어 보면 A0의 값이 6~679가 아닌 다른 값이 나오게 된다.

그래서 해당 작품을 전시하거나 테스트하는 공간의 조건에 맞추어 그 값을 조정하거나 아니면 가변 저항을 사용하여 해당 위치의 조건에 맞는 값으로 수정하는 작업이 필요하다.


많은 센서들이 그 민감도에 따라 제작 장소와 다른 결과치를 보여줄 때가 있으므로 이를 보정하는 방법에 대해서는 실물을 이용한 강좌를 올릴 때 다시 한번 실제 상황에 따른 회로 구성에 대하여 이야기하도록 하겠다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari