본문 바로가기
라즈베리파이&아두이노

PWM LED 제어하기

by minimax95 2020. 12. 25.

이번 포스팅에서는 라즈베리파이에서 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 제어에 대해 알아보았습니다.

감사합니다.

댓글