이번 포스팅에서는 라즈베리파이에서 PWM을 통해 LED를 제어하는 방법에 대해 알아보겠습니다.
PWM(Pulse Width Modulation)은 주기적으로 반복되는 ON/OFF 신호를 통해서 모터나 팬의 속도, LED의 밝기를 소프트웨어적으로 제어할 수 있습니다. 반복되는 Pulse 신호의 주기(0~3.3V 파형)에서 ON 신호가 지속되는 시간의 비율을 Duty Cycle이라고 하며 Duty Cycle이 클수록 속도나 밝기가 커집니다.
PWM을 사용하기 위해서는 RPi.GPIO 모듈이 제공하는 PWM 클래스를 이용하여 PWM 객체를 먼저 생성해야 합니다.
pwm = GPIO.PWM(channel, frequency)
pwm 객체를 생성한 후에는 아래와 같이 pwm을 시작하여 사용할 준비를 해 줍니다.
pwm.start(dutyCycle)
제어하고자 하는 주파수와 Duty Cycle을 변경하여 원하는 제어를 합니다.
pwm.ChangeFrequency(freq)
pwm.ChagneDutyCycle(dutyCycle)
사용 종료시에는 stop( ) 함수를 호출합니다.
pwn.stop( )
실제 LED를 제어하는 소스코드는 아래와 같습니다.
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
Led_pin = 18
GPIO.setup(Led_pin, GPIO.OUT)
pwm = GPIO.PWM(Led_pin, 50)
pwm.start(0)
try:
while True:
for dc in range(0, 101, 5):
pwm.ChangeDutyCycle(dc)
time.sleep(0.1)
for dc in range(100, -1, -5):
pwm.ChangeDutyCycle(dc)
time.sleep(0.1)
except KeyboardInterrupt:
pass
pwm.stop( )
GPIO.cleanup( )
0.1초 간격으로 0~100의 Duty Cycle을 5만큼 증가시켰다가 다시 -5씩 감소시켜 주도록 하였습니다.
실행을 해보면 LED가 천천히 밝아졌다가 어두워지면서 점멸을 반복하게 됩니다.
참고로 PWM 제어를 하드웨어적으로 보다 정밀하게 제어할 수 있는 PCA9685 모듈이 있는데 다른 포스팅에서 정리해보겠습니다. 이상으로 PWM을 통한 LED 제어에 대해 알아보았습니다.
감사합니다.
'라즈베리파이&아두이노' 카테고리의 다른 글
PIR 센서(HC-SR501) 적외선 인체감지 센서 (1) | 2021.01.05 |
---|---|
PWM으로 서보모터 제어 (0) | 2020.12.26 |
바운싱(Bouncing) 현상 방지 (0) | 2020.12.23 |
라즈베리파이 고정 IP설정하기 (0) | 2020.12.07 |
라즈베리파이 4 듀얼 팬 GPIO 확장 보드 슈퍼 냉각 팬 사용 후기 (0) | 2020.12.05 |
댓글