아날로그 출력
3개의 LED를 가지고 어두운 만큼 불을 켜는 예제를 연습해 보았다.
그런데 1개의 불 빛을 어두운 정도에 따라 밝기 조절하는 방법도 있다.
앞 서 analogRead를 배웠으니 이제 analaogWrite를 배워서 LED에 공급되는 전기량을 조절해 보는 예제를 만들어 보겠다.
아날로그 출력을 위해서는 디지털 핀 중 ~ 표시가 있는 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를 이용한 두 번째 장난감을 구상해 보자.