본문 바로가기

Dev/C언어

아두이노 가변저항으로 밝기 제어하기

728x90
반응형

오늘은 아두이노에서 전에 다루었던 가변저항을 사용해서 LED의 밝기를 조절해보려 합니다.

 

전에 다루었던 가변저항글이 궁금하신 분들은 아래 링크를 봐주시면 감사하겠습니다 ㅎㅎ

https://programmingandengineering.tistory.com/35

 

아두이노 가변저항 사용하기

이번에는 Arduino Uno에 Potentiometer, 가변저항(분압기)을 연결하여 그 값을 볼 수 있는 회로를 만들었습니다. 5V, 접지, Analog 핀을 연결해줍니다. 위 회로는 tinkercad 상에서 구현하였는데, 각 핀에 마우

programmingandengineering.tistory.com

전의 내용을 알고 계신 분들이라면 더욱 쉽게 이번 회로를 구성하실 수 있을 거라고 생각합니다.

 

회로는 아두이노 보드의 아날로그 핀에 가변저항을 연결하고, 2번 핀에는 LED를 연결해 주었습니다.

 

코드는 아래와 같습니다.

 

int pin_LED=2;

void setup()
{
  Serial.begin(9600);
  pinMode(pin_LED, OUTPUT);
  pinMode(A0, INPUT);
}

void loop()
{
  int ADC_value = analogRead(A0);
  int PWM_value = ADC_value >> 2;
  Serial.print(String("ADC value : ") + ADC_value);
  Serial.println(String(", PWM value : ") + PWM_value);
  analogWrite(pin_LED, PWM_value);
  delay(100);
}

결과 값을 보기위해 시리얼 모니터 보우 레이트를 9600으로 설정하고, 사용할 핀 두 개의 모드를 지정했습니다.

 

Serial.print로 ADC value : int ADC_value처럼 문자열 + 변수 형식으로 출력을 하게됩니다. 이 때, 줄은 바꾸지 않습니다.

 

Serial.println에서는 , PWM value : int PWM_value로 윗줄처럼 출력을 하게됩니다.

이 때, println은 다음 줄로 바꿔주는 역할을 합니다.

 

 

여기서 int PWM_value라는 변수가 ADC_value에 >> 2가 붙어있죠. 보통은 잘 안쓰는 연산자일텐데요.

 

>>라는 연산자는 비트 연산자인데요. 지정된 개수만큼 모든 비트를 오른쪽으로 이동시키는 연산자입니다.

 

여기서는 뒤의 값이 2니까 모든 비트를 두 자리만큼 오른쪽으로 이동시키는 연산을 할 겁니다.

 

이 연산을 취하게 되면 무슨 일이 생길까요??

 

ADC_value 값의 최댓값은 얼마일까요?

 

아두이노 보드에서 지원하는 값은 최대 10비트입니다. 그럼 최댓값은 2^10=1024입니다.

 

이 값을 PWM_value에서 비트 연산자로 2자리를 오른쪽으로 당기는 거에요.

 

그럼 PWM_value의 최댓값은 2^8=256이 되겠죠.

 

그렇게 전류의 세기에 따라 두 개의 변수 값이 같이 낮아지거나 같이 높아지겠죠.

 

또 이 변수의 값만큼 LED의 밝기도 변해 완전히 꺼지거나 서서히 밝아지기도 하겠죠?

 

그래서 이 코드를 아두이노에서 작동을 시키게 되면 아래처럼 결과를 볼 수 있습니다.

 

여기서도 delay를 설정한 이유는

글자가 깨질 정도로 글자가 모니터에 너무 빨리 지나가기 때문에 100정도로 설정했습니다.

 

이번엔 스스로 회로를 조작하는 재미가 있었을 거라고 생각합니다.

 

아니라면... 위로를....

 

어쨌든 오늘도 글 봐주셔서 감사하구요. 다음에도 좋은 정보가 될 수 있는 글로 찾아뵙겠습니다.

728x90
반응형

"); wcs_do();