티스토리 뷰


1. 목표

  - LED 밝기 제어하는 것을 목표로 한다. 단, 지난번에 LED 연결하기와 회로구성은 동일하다.


2. PWM (Pulse Width Modulation)

  - RPi.GPIO API에 LED의 밝기와 전원을 제어할 수 있는 PWM 함수를 이용한다.

  - PWM은  초당 펄스의 주파수를 유지한 채, 펄스의 길이를 변화시키는 기술이다.

  - LED 밝기, 모터 스피드 제어에 사용된다.

 

  1) PWM 초기화

     - PWM 초기화를 위해서, GPIO.PWM([pin], [frequency]) 함수를 사용한다.

       . pin : GPIO의 pin 번호

     - pwm.start([duty cycle]) 함수를 통해, duty cycle 초기값을 세팅한다.

 pwm = GPIO.PWM(18, 500)
 pwm.start(100)

     -> PWM 의 500Hz 주파수를 세팅하고, 출력을  100%이 duty cycle로 세팅한다.    

   

   2) PWM 출력 변경

     - pwm.ChangeDutyCycle([duty cycle]) 함수를 사용하면, 0%~100% 사이의 [duty cycle] 값으로 바꿀 수 있다.

     - [duty cycle]의 개념을 wiki에 검색하면, 다음과 같이 나온다.

       . "어떤 신호가 활성화되는데 한 주기의 퍼센트 값이다. 주기는 신호가 하나의 on-and-off의 cycle가 완성되는데 걸리는 시간을 의미한다. "

       . "펄스 폭 변조 (PWM)는 전력 공급 및 전압 조절과 같은 다양한 전기적 상황에 사용된다."

 pwm.ChangeDutyCycle(10)


   3)  PWM 종료

     - pwm.stop() 명령을 통해서 핀 종료가 가능하다.

 

3. 소스

  - https://github.com/gregor77/raspberrypi/blob/master/code/gpio_basic/led_control_bright.py

  - 'end'를 키보드 입력하면, LED 밝기 제어는 종료된다.

  - PWM의 duty cycle은 1에서 100까지 입력 가능하다.

import RPi.GPIO as GPIO

led_pin = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)

pwm_led = GPIO.PWM(led_pin, 500)
pwm_led.start(100)

while True:
  duty_str = raw_input("Enter Brightness (0 to 100):")
  duty = int(duty_str)

  if duty > 100:
     print("wrong input value.")
  else:
     pwm_led.ChangeDutyCycle(duty)

  end_key = raw_input(" - Stop to Blink LED, Please enter the 'end' : ")
  if end_key == "end":
     break

GPIO.cleanup()





4. 실행 화면

  - 영상을 보면 duty cycle의 값을 1에서 100까지 증가시키면 LED의 밝기가 밝아지는 것을 확인할 수 있다.





[참고 자료]

[3] "Duty Cycle에 대한 위키 설명"https://en.wikipedia.org/wiki/Duty_cycle


'Raspberry Pi > GPIO' 카테고리의 다른 글

라즈베리파이 GPIO : LED 연결하기  (1) 2015.06.09
댓글