[Raspberry PI] PWM
PWM
PWM : 아날로그 신호
로, 펄스 폭 변조
를 뜻한다. 0~1 사이 숫자
를 사용할 수 있다.
원리
GPIO는 3.3V
와 0V
만 출력할 수 있습니다. 하지만 조절
이 가능하였다. 이는 1(3.3V)와 0(0V)를 빠르게 반복
하게 되는 것입니다.
듀티비
: 출력되는 값이 1에 대한 0의 비 ex) 20%는 10개 신호 중 1이 2개만 출력
from gpiozero import LED
from time import sleep
led = LED(2)
while True:
led.on()
sleep(0.008)
led.off()
sleep(0.002)
주파수 계산하기
주파수
: 1초에 몇 번 진동하는 지를 의미하며, 1/T
로 계산한다. 단위는 Hz
이다.
ex) T : 1ms => f : 1kHz
단위
PWM 직접 구현
500Hz
로 구현하고 최대 듀티비 90%
최소 듀티비 10%
로 스위치 1 누르면 듀티비 상승, 스위치2 누르면 듀티비 감소
from gpiozero import LED, Button
from time import sleep
def dutyUp():
global value
value += 1
if value > 9:
value = 9
def dutyDn():
global value
value -= 1
if value < 1:
value = 1
led = LED(2)
btnUp = Button(14)
btnDn = Button(15)
value = 5
btnUp.when_pressed = dutyUp
btnDn.when_pressed = dutyDn
while True:
led.on()
sleep(0.0002*value) # 90%, value 9 = 0.0018
led.off()
sleep(0.0002*(10-value)) # 10%, value 1 = 0.0002
LED PWM 제어 1
from gpiozero import PWMLED # PWMLED LIB
from time import sleep
led = PWMLED(2)
while True:
led.value = 0 # 밝기 0
sleep(1)
led.value = 0.5 # 밝기 0.5
sleep(1)
led.value = 1 # 밝기 1
sleep(1)
LED PWM 제어 2
from gpiozero import PWMLED # PWMLED LIB
led = PWMLED(2)
value = 0
while True:
print("1 or 2 >> ")
n = int(input())
if n == 1:
value += 0.1 # 1을 입력받으면 10% 밝아짐
if n == 2:
value -= 0.1 # 2를 입력받으면 10% 어두워짐
if value > 1:
value = 1
if value < 0:
value = 0
led.value = value
RGB LED
RGB : 빛의 3원색으로, 모든 색상 표현 가능
from gpiozero import PWMLED
from time import sleep
R = PWMLED(14)
G = PWMLED(15)
B = PWMLED(18)
while True:
for i in range(10):
R.value = i/10
G.value = (1-i/10) # G는 0.1~0으로 감소
B.value = i/10 # R과 B는 0~0.1까지 증가
sleep(0.1)
무드등 만들기
from gpiozero import PWMLED, Button
from time import sleep
def RLIGHT():
global valueR
valueR += 0.1
if valueR > 1:
valueR = 0
R.value = valueR
def GLIGHT():
global valueG
valueG += 0.1
if valueG > 1:
valueG = 0
G.value = valueG
def BLIGHT():
global valueB
valueB += 0.1
if valueB > 1:
valueB = 0
B.value = valueB
R = PWMLED(2)
G = PWMLED(3)
B = PWMLED(4)
btnR = Button(14)
btnG = Button(15)
btnB = Button(18)
valueR = 1;
valueG = 1;
valueB = 1;
R.value = valueR
G.value = valueG
B.value = valueB
btnR.when_pressed = RLIGHT
btnG.when_pressed = GLIGHT
btnB.when_pressed = BLIGHT
조이스틱
라즈베리파이에서는 조이스틱을 사용하지 못합니다!
GND
5V
VRX : 가로 좌표 값 아날로그
VRY : 세로 좌표 값 아날로그
SW : 스위치 클릭용
아날로그입력
을 받으려면 ADC
(Analog -> Digital 컨버터 ) 필요하지만, 라즈베리파이에는 ADC가 없다
Author And Source
이 문제에 관하여([Raspberry PI] PWM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dev-hoon/Raspberry-PI-PWM저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)