본문 바로가기
만들기/Arduino

[Arduino] #3 analog 신호 입력과 출력

by 인성패밀리 2022. 10. 9.
반응형

지난 번 digital 신호를 출력해보았습니다. 단순히 1로 켜주면 전기가 들어왔습니다. 이번 시간에는 아날로그 신호의 입력과 출력을 알아보겠습니다.

 

https://www.youtube.com/watch?v=VeVC0f-zAq8 

 

개념을 먼저 알아보겠습니다. 

 

1. 아날로그 신호?

2. PWM

3. 가변저항

 

1. 아날로그 신호

디지털 신호는 0과 1로 전기를 주거나 안 줄수 있었습니다. 아날로그 신호는 이와 다르게 여러 값을 가지고 있습니다. 0 또는 500 또는 1023과 같이 말이죠

 

그래프로 나타내 보면 사인, 코사인 함수와 비슷합니다.

아날로그 신호

 

아두이노는 아날로그 신호를 0 ~ 255까지 출력이 가능합니다. 이 값으로 LED의 불빛의 세기를 조절 할 수 있습니다.

그런데 아두이노는 아날로그 신호를 출력할 수 없습니다.

 

2. PWM

아두이노는 아날로그 신호를 출력할 수 없어서 PWM 출력을 이용하여 아날로그를 표현하고 있습니다. PWM이란 디지털 신호를 깜빡여서 아날로그의 효과를 나타내는 것입니다. LED에 1의 신호를 주어서 불을 켤 수 있었습니다. 빛의 세기는 일정합니다. 그러나 1을 주고 잠시 기다리고 끄게 되면 꺼지겠죠? 이를 일정 주기를 가지고 지속적을 깜빡이게 합니다. 일정하게 지속적으로 불을 켜는 것 보다 세기가 약해지겠죠? 그러나 우리 눈에는 깜빡이는게 보이지 않을 만큼 빠르게 진행되기 때문에 빛의 세기 만으로 느낄 수 있습니다.

PWM 신호

 

3. 가변저항

저항은 전류를 조절하기 위해 사용됩니다. 저항의 값이 변하면 전류의 값도 바뀌겠죠? 유동적으로 저항을 변화시키는 장치가 가변 저항입니다. 이 가변저항은 의외로 다양한 곳에 쉽게 볼 수 있습니다. 스피커 볼륨 조절기, 자동차 에어컨 조절기 등등에 있습니다. 참고로 조이스틱에도 들어갑니다.

 

조이스틱을 아날로그 입력 핀에 장착하면 0~1023까지의 숫자들이 나오게 됩니다.

 

유튜브 영상 오류

영상을 제작하면서 오류가 있었습니다. 

바로 analogWrite 함수를 사용함에 있어서 오류가 있었습니다.

 

analogWrite 함수는 0에서 255까지의 숫자만이 사용 가능한데 analogRead 값을 그대로 사용하면 사용 가능한 숫자 범위를 초과하게 됩니다.

 

때문에 0~1023의 값을 0~255로 값을 비례 변환해야합니다.

 

비례 변환 하는 방법은 map 함수를 사용해야합니다.

 

int val = map(0, 1023, 0, 255);

다음의 코드를 추가해야합니다. 이 코드의 의미는 0~1023을 0~255로 비례 변환해달라 라는 의미입니다.

 

따라서 수정된 코드는 다음과 같습니다.

void setup() {
  // put your setup code here, to run once:
  pinMode(A0, INPUT);  // 조이스틱 x 축 
  pinMode(3, OUTPUT);  // LED

  Serial.begin(9600);  // 조이스틱 x축의 값을 확인하기 위한 용도
}

int a = 0;  // 조이스틱 x축의 값을 저장할 변수
int val = 0;  // 비례 변환 값

void loop() {
  // put your main code here, to run repeatedly:
  a = analogRead(A0);
  Serial.println(a);
  val = map(0, 1023, 0, 255);
  analogWrite(3, val);  // 비례 변환된 값을 이용
  delay(100);
}

앞으로 조금 더 꼼꼼하게 확인을 하도록 하겠습니다. 

 

 

반응형

댓글