오늘은 아두이노에서 전에 다루었던 가변저항을 사용해서 LED의 밝기를 조절해보려 합니다.
전에 다루었던 가변저항글이 궁금하신 분들은 아래 링크를 봐주시면 감사하겠습니다 ㅎㅎ
https://programmingandengineering.tistory.com/35
전의 내용을 알고 계신 분들이라면 더욱 쉽게 이번 회로를 구성하실 수 있을 거라고 생각합니다.
회로는 아두이노 보드의 아날로그 핀에 가변저항을 연결하고, 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정도로 설정했습니다.
이번엔 스스로 회로를 조작하는 재미가 있었을 거라고 생각합니다.
아니라면... 위로를....
어쨌든 오늘도 글 봐주셔서 감사하구요. 다음에도 좋은 정보가 될 수 있는 글로 찾아뵙겠습니다.
'Dev > C언어' 카테고리의 다른 글
아두이노 DC모터와 가변저항 사용하기 (0) | 2020.08.31 |
---|---|
아두이노 DC모터와 멀티미터 사용하기 (0) | 2020.08.25 |
아두이노 조도 센서 사용하기 (0) | 2020.08.22 |
아두이노 충돌 경보기 만들기 (0) | 2020.08.12 |
아두이노 초음파 센서 사용하기 (0) | 2020.08.09 |