Arduino / / 2022. 5. 19. 19:20

[PlatformIO] 아두이노 가변저항으로 LED 밝기 조절하기

728x90

해당 게시물에서는 VS Code PlatformIO를 사용합니다. 참고바랍니다.

안녕하세요 데브구일입니다!

 

전에 포스팅했던 가변저항과 PWM을 응용해보도록 하겠습니다.

가변저항을 회전시키면 LED 밝기를 조절할 수 있도록 구현해볼건데요!

 

코드와 회로는 아래를 참고해주세요!

 

 

#include <Arduino.h> // PlatformIO IDE를 사용하시는게 아니라면 이 라인은 지워주세요!

#define POTENTIOMETER_PIN A0
#define LED_PIN 6 // LED핀 설정 (PWM핀[~] 사용)

void setup() {
  Serial.begin(9600);

  pinMode(LED_PIN, OUTPUT);
  pinMode(POTENTIOMETER_PIN, INPUT);  // pinMode INPUT 설정
}

void loop() {
  int value = analogRead(POTENTIOMETER_PIN) / 4;  // 0~1023 값으로 입력받고 4로 나누기
  Serial.println(value);  // value 시리얼 출력

  analogWrite(LED_PIN, value);  // value 값에 따라 PWM 출력

  delay(10);
}

 

위 코드를 보게되면 먼저 가변저항의 값은 0~1023의 값이 나오게 됩니다.

PWM의 값은 0~255의 값을 가지게되므로 가변저항의 값을 4로 나누면 딱 맞겠지요?

 

코드를 업로드 하시고 시리얼을 연결하게 되면 0~255의 값이 출력되면서

값에 맞게 LED의 밝기가 조절되는 것을 확인하실 수 있습니다!

 

하지만 저희가 값을 다르게 원하는 경우가 있을 수 도 있습니다!

 

예를 들어 0~255가 아닌 50~200의 값 나오도록 하고자 한다면

아두이노에서 제공하는 유용한 함수가 있습니다!

 

바로 map()이라는 함수인데요.

아래와 같은 파라미터를 가지게 됩니다!

map(value, fromLow, fromHigh, toLow, toHigh)

 

예를 들어 map_value = map(value, 0, 1023, 0, 255)와 같이 사용하면 다음과 같습니다.

0~1023의 값을 가지게 되는 value 변수를 0~255와 같은 비율로 값을 반환(map_value)

 

이 함수를 가지고 저희도 한번 사용해보겠습니다

코드는 아래와 같이 작성했습니다!

 

#include <Arduino.h> // PlatformIO를 사용하시는게 아니라면 이 라인은 지워주세요!

#define POTENTIOMETER_PIN A0
#define LED_PIN 6 // LED핀 설정 (PWM핀[~] 사용)

void setup() {
  Serial.begin(9600);

  pinMode(LED_PIN, OUTPUT);
  pinMode(POTENTIOMETER_PIN, INPUT);  // pinMode INPUT 설정
}

void loop() {
  int value = analogRead(POTENTIOMETER_PIN);  // 0~1023 값으로 입력받기
  int map_value = map(value, 0, 1023, 50, 200); // 0~1023 -> 50~200 값으로 변경

  Serial.println(map_value);  // map_value 시리얼 출력
  analogWrite(LED_PIN, map_value);  // map_value 값에 따라 PWM 출력

  delay(10);
}

 

코드를 보시면 map()를  통해서 0~1023의 값을 50~200의 값으로 변경하도록 하였습니다.

변경된 값은  map_value 변수에 넣고, 시리얼과 PWM 출력을 해주었습니다.

 

이렇게 실행하시게 되면 가변 저항값을 최저로 내려도 최소 50의 값을 가지므로

LED가 완전이 꺼지지 않고 밝기만 줄어드는 것을 확인할 수 있습니다!

최대치도 200이므로 최대 밝기가 되는 것이 아니지요!

 

이런 방식 말고도 1~50을 50~1로 바꾸는 것도 가능하고 음수로도 가능합니다!

자세한 부분은 공식 레퍼런스 문서를 확인해주세요!

 

 

map() - 아두이노 참조

설명 숫자를 한 범위에서 다른 곳으로 변환한다. 즉, fromLow 의 값은 toLow 으로 변환되고, fromHigh 값은 toHigh 으로, 값들 사이의 값은 값들 사이의 값으로, 등등. 값을 범위 안으로 제한하지 않는데,

www.arduino.cc

이번 포스팅은 여기서 마치도록하겠습니다!

 

감사합니다 :D

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유