전자, 전기, 소프트웨어, 기계, 3D 프린터, 아두이노, 라즈베리파이, 쇼핑몰 창업

전체 페이지뷰

이 블로그 검색

최신글

[Blender] 3D viewport 사용법

[강좌] 7. 아두이노에서 LED 밝기 조절하기


무작정 보고 따라하며 배우는 아두이노 강좌입니다.
아두이노 공식 사이트에서 제공하는 강좌를 바탕으로 작성되었습니다.
해당 게시글은 Arduino UNO 보드를 기준으로 작성되었습니다.



7. 아두이노에서 LED 밝기 조절


- LED 서서히 밝아지고 서서히 어두워지게 하기

지난 강좌 중에서 아두이노의 내장 LED를 디지털 제어를 통해 키고 끄는 것을 해봤습니다.
이번 강좌에서는 아두이노에서 외장 LED를 연결하여 아날로그 제어를 통해 LED를 서서히 밝아지고 서서히 어두워지게 하는법을 알려드리겠습니다.

지난번의 디지털 신호는 0과 1로 구성된 즉, 전압히 HIGH LOW 두가지 상태이지만 LED의 밝기를 조절하기 위해서는 전압을 다양하게 조절해야합니다. 아두이노에서는 아날로그 출력을 지원하는데, 0에서 255까지의 값을 출력할 수 있습니다. HIGH와 LOW의 상태를 256 단계로 나눠서 출력합니다.

이 아날로그 출력을 PWM 제어라고 하는데, 아쉽게도 아두이노의 모든 핀에서 PWM 출력이 가능한 것이 아니라 일부분의 핀에서만 ( 아두이노에서 핀 번호 앞에 ~ 표시가 된 것) 출력이 가능합니다.

이번에는 내장 LED를 사용하지 않고 외장 LED를 사용한다고 하였는데, 아두이노 우노의 내장 LED의 핀은 13번 핀이고, 13번 핀은 PWM 제어가 불가능하여 브레드 보드를 이용하여 아두이노 외부에 LED를 연결해줘야 합니다.

준비물 ( 아두이노와 PC는 기본입니다 )

브레드보드, 점퍼케이블, LED, 220옴 저항

회로도

아두이노 우노 외 다른 보드를 사용할 경우 아래의 회로도를 보고 직접 배선하시면 됩니다.



위 회로도를 바탕으로 아두이노 우노 기준 브레드보드에 연결하는 예시입니다.


코드 설명

9번 핀을  ledPin 으로 선언합니다.
전역 변수로 제일 윗 부분에  ledPin 을 선언 후에는  setup() 함수 내에  ledPin 을 출력핀으로 지정하는 것 외에는 별다른 코드가 필요없습니다.

 analogWrite() 는 메인  loop() 함수에서 사용됩니다.  analogWrite(핀번호, 값) 의 형태로 사용합니다. 핀번호에는 출력할 핀, 값에는 PWM 제어값을 입력하면 됩니다.

LED를 서서히 제어하기 위해서는 PWM 값을 0부터 255까지 입력하여 제어하면 됩니다.
0은 보통 LOW상태 255는 HIGH 상태를 뜻합니다. LED가 켜지고 꺼지는걸 반복하려면 0에서 255, 다시 255에서 0으로 반복하는 코드를 작성하면 됩니다.

아래 코드에서는 PWM 값이  brightness 라고 지정되어 있습니다. 매번 반복하면서
 brightness 의 값은  fadeAmout 만큼 변화하게 됩니다.

만약  brightness 의 값이 0부터 255사이의 값을 넘어서면,  fadeAmout 의 값이 음수에서 양수로, 양수에서 음수로 변경되게 됩니다. 즉,  fadeAmout ( brightness의 변화량)이 5에서 255에 도달하면 -5로, -5에서 0에 도달하면 5로 변경됩니다.

 analogWrite() 는 PWM 값을 매우 빠르게 변화시킬 수 있습니다, 따라서 코드 하단의 지연 명령어를 조절하여 led의 밝기 변화 속도를 조절할 수 있습니다.

지연 명령어나 PWM 값을 제어하여 LED 밝기 변화 속도를 제어해 보세요!

지연 시간을 조절하여 LED를 더 빠르게 제어하면 부드럽고 빠른 밝기제어가 가능합니다.
 fadeAmount 의 값을 조절하면 LED의 밝기 제어가 부드럽게 변화하기보다는 단계별로 변화하게 됩니다.

/*
 Fade

 This example shows how to fade an LED on pin 9
 using the analogWrite() function.

 The analogWrite() function uses PWM, so if
 you want to change the pin you're using, be
 sure to use another PWM capable pin. On most
 Arduino, the PWM pins are identified with 
 a "~" sign, like ~3, ~5, ~6, ~9, ~10 and ~11.

 This example code is in the public domain.
 */

int led = 9;           // LED가 장착된 PWM 제어 핀
int brightness = 0;    // 초기 LED의 밝기
int fadeAmount = 5;    // LED 밝기의 변화량

// 아두이노 시작/재시작시 작동되는 코드:
void setup() {
  // led핀(9번핀)을 출력으로 선언:
  pinMode(led, OUTPUT);
}

// 계속 실행되는 코드:
void loop() {
  // led핀의 밝기 brightness 출력:
  analogWrite(led, brightness);

  // 한바퀴 돌고 다음 반복때의 brightness 값을 변경시키는 식:
  brightness = brightness + fadeAmount;

  // brightness의 값이 끝에 이르면 fadeAmount의 부호 변경:
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }
  // 30밀리초 지연
  delay(30);
}

위 코드를 업로드하고 작동시켜보면 LED가 서서히 밝아지고 어두워지는것을 계속 반복한다면 정상적으로 작동하는 것입니다!


아두이노 공식 사이트 강좌 원문 링크 :
https://www.arduino.cc/en/Tutorial/Fade

댓글 2개: