brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Aug 14. 2020

12. 불을 은은하게 켜주세요

아날로그 출력

3개의 LED를 가지고 어두운 만큼 불을 켜는 예제를 연습해 보았다.

그런데 1개의 불 빛을 어두운 정도에 따라 밝기 조절하는 방법도 있다.

앞 서 analogRead를 배웠으니 이제 analaogWrite를 배워서 LED에 공급되는 전기량을 조절해 보는 예제를 만들어 보겠다.


아날로그 출력을 위해서는 디지털 핀 중 ~ 표시가 있는 PWM 핀을 이용해야 한다. 

PWM용 핀들


쉽게 설명하자면 PWM은 디지털 출력을 일정한 간격을 두고 출력하는 방식으로 그 출력 값을 조절하는 방식이다.



이해를 돕기 위해 도식화하자면 위의 그림처럼

아날로그 출력의 경우 HIGH값의 사각 파형의 넓이와 LOW 값의 사각 파형 넓이의 비율에 따라 그 전압이 결정된다.


앞의 예제에서 8번 핀은 PWM 핀이 아니므로 9, 10번에만 LED를 연결하여 아래와 같이 연결하고, 조도센서에 비치는 빛에 따라 LED 등의 밝기를 조절해 보자.


앞 선 예제에서 8번에 있던 LED만 제거한 회로이다.


여기에 다음과 같이 코드를 수정하여 시뮬레이션을 시작하면 된다.

먼저 앞 선 예제처럼 구간을 정해서 그 구간에 LED의 밝기를 변화시키는 코드를 보자.


이 코드를 실행하고 조도센서를 클릭하여 밝기를 조절하면 밝기 구간에 따라 4가지의 밝기로 조절이 될 것이다.

그러나 아날로그 데이터를 받아서 아날로그 데이터를 출력한다고 하면 특정 구간에 따른 변화가 아니라 모든 변화에 반응하는 조절도 가능하게 된다.


여기서 알아두어야 할 내용은 아날로그 입력 데이터는 0~1023까지의 변화 값을 갖고, 아날로그 출력 값은 0~255까지의 변화값을 갖는다는 것이다. 따라서 입력되는 값을 4로 나누어 이 값을 출력 값으로 만들면 된다.



앞 예제에서 테스트를 통해 A0의 값이 6~676까지 변했으므로 어두울 때는 거의 255-6/4 = 253.5의 값이 켜지고,  밝을 때는 255-676/4=86의 값으로 어두워진다.

실행 화면

밝을 때 완전히 LED 불을 끄고 싶다면 그에 상응하는 코드를 지정해 줘야 한다. 즉 다음과 같은 코드가 필요하다.

if (val>600){
    digitalWrite(led1, LOW);  
    digitalWrite(led2, LOW);  
}

analogRead와 analogWrite를 이해하기 위한 예제는 이 정도로 마무리하고 다음 강좌에서는 LED를 이용한 두 번째 장난감을 구상해 보자.






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