PWM 방식으로 LED의 밝기를 점점 밝게 하거나 점점 어둡게 제어하는 것과 부저로 음악을 만드는 것은 아날로그 출력에 해당한다.
아날로그 데이터는 자연에서 발생하는 데이터로, 대부분의 센서 값은 연속형 데이터로 이루어진 아날로그 데이터이다. 조도센서, 온도센서는 대표적인 아날로그 값이다. 그러나 반도체 소자를 이용하여 디지털 값으로 변환하여 사용하는 센서도 있다. 이번에는 가변저항기를 이용해서 아날로그 값을 입력하는 실습을 해볼것이다.
가변 저항기는의 내부는 저항 물질이 둥글게 연결되어 있다. 가변저항기의 가운데 손잡이(와이퍼,wiper)를 돌려서 1~2번 사이가 가까워지면 2~3번 사이가 멀어지고 2~3번 사이의 저항 값이 증가한다. 이와 같이 저항 물질의 길이 변화에 따라 저항 값이 변한다.
아두이노에서 아날로그 값을 읽는 함수는 analogRead()를 사용한다. 아두이노는 입력된 전압의 크기를 10비트, 즉 1~1023의 정수 값으로 대응시킨다. 전압의 크기가 5V이면 입력 값은 1023이 된다.
가변저항기의 손잡이의 위치에 따라 전압이 달라진다.손잡이를 반시계 방향으로 돌리면 전압이 OV가 걸리게 되고 아두이노의 입력 값은 '0'이 된다. 반대로 손잡이를 시계 방향으로 돌리면 전압이 5V가 걸리게 되고 아두이노의 입력 값은 '1023'이 된다. 손잡이가 가운데 위치하면 전압에 따라 값이 달라지는 것을 알 수 있다. 가변저항기의 값의 변화는 스케치를 업로드 한 후 시리얼 모니터를 열어서 볼 수 있다.
아두이노에서 아날로그 입력 값을 읽을 수 있는 핀은 A0부터 A5까지의 핀으로 정해져 있다. 아날로그 값을 입력 받기 위해서 ADC 기능을 사용한다. ADC는 아날로그 신호 값을 디지털로 변환하여 사용할 수 있게 하는 기능이다. 아날로그 값은 연속적인 신호인데 이 신호를 디지털로 변환하여 MCU에서 사용하는 장치이다.
가변저항기에는 세 개의 다리가 있다. 가변저항기의 (+)와 (-)가 바뀌어도 값을 읽을 수 있다. 반대로 연결해도 회로에 오류는 없고 숫자가 커지거나 작아지는 것이 반대로 나타난다. 가변저항기의 1번과 3번 다리의 위치가 바뀌어도 에러는 나지 않으나 값의 범위가 달라진다. 가운데 선만 정확하게 연결하면 테스트는 가능하다.

void setup(){
Serial.begin(9600);
}
void loop(){
int a = analogRead(A0);
Serial.println(a);
delay(100);
}
Serial.begin(9600);
analogRead(A0);
Serial.println(a);



가변저항을 연결하고 LED를 연결하여 밝기를 제어해보자

int ledPin = 13;
int val = 0;
void setup(){
pinMode(ledPin,OUTPUT);
}
void loop(){
val = analogRead(A0);
digitalWrite(ledPin,HIGH);
delay(val);
digitalWrite(ledPin,LOW);
delay(val);
}
int ledPin = 13;
val = analogRead(A0);
digitalWrite(ledPin, HIGH);
digitalWrite(ledpin, LOW);
delay(val);
빛의 밝기를 측정하는 센서를 이용하는 전자 장치는 우리 주변에서 자주 볼 수 있다. 도로의 가로등은 주변이 어두워지면 자동으로 켜지고 다시 새벽이 되어 거리가 밝아지면 꺼진다. 자동차의 전조등도 주변이 어두워지면 자동으로 켜지는 기능이 있다.
아두이노에서 빛을 측정하는 센서로 자주 사용하는 것은 CDS 조도센서이다. CDS는 cad mium sulfide(황화카드뮴)의 약자이며, 빛이 많이 들어오면 저항이 작아지고 빛이 적게 들어오면 저항이 커지는 성질이 있다. 이 저항 성질을 이용하여 조도를 측정하는 센서로 활용된다. 즉 CDS 조도센서는 빛의 양에 따라 저항의 크기가 달라지는 저장형 센서이다. 극성이 없어서 음극과 양극을 구별하지 않아도 된다.

void setup(){
Serial.begin(9600);
}
void loop(){
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(200);
}
Serial.begin(9600);
int sensorValue
int sensorValue = analogRead(A0);
Serial.println(sensorValue);



void setup(){
Serial.begin(9600);
pinMode(4,OUTPUT);
}
void loop(){
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
if (sensorValue > 50) digitalWrite(4,LOW);
else digitalWrite(4,HIGH);
//delay(200);
}
Serial.begin(9600);
int sensorValue;
if (sensorValue > 제어 값)
else
delay(200);

