스위치를 이용하여 LED의 밝기를 조절할 수 있는 스텐드를 만들어 본다.
<준비물>
- 브레드보드 : 1개
- LED 흰색 : 1개
- 220옴(빨빨갈) 저항 : 1개
- 스위치 : 1개
- 암/수 점퍼케이블 : 4개
- 수/수 점퍼케이블 : 1개
<회로도>
<코드>
from gpiozero import PWMLED,Button
from time import sleep
led_white = PWMLED(12)
swPin = Button(21)
swState = 0
newSw = 0
oldSw = 0
def swOn():
global newSw
global oldSw
newSw = swPin.is_pressed
if newSw != oldSw:
oldSw = newSw
if newSw == 1:
return 1
return 0
try:
while True:
if swOn() == 1:
swState = swState + 1
if swState >= 4:
swState = 0
sleep(0.2)
print(swState)
if swState == 0:
led_white.value = 0
print("duty:0")
elif swState == 1:
led_white.value = 0.3
print("duty:30")
elif swState == 2:
led_white.value = 0.6
print("duty:60")
elif swState == 3:
led_white.value = 1.0
print("duty:100")
except KeyboardInterrupt:
pass
led_white.value = 0
<코드설명>
이 코드는 PWM(Pulse Width Modulation)을 이용하여 LED의 밝기를 조절하고, 버튼을 눌러 밝기 단계를 변경하는 프로그램이다. 버튼을 한 번 누를 때마다 LED의 밝기가 0%, 30%, 60%, 100%로 순차적으로 변경된다.
1. 모듈 임포트
from gpiozero import PWMLED, Button
from time import sleep
gpiozero 라이브러리에서 PWMLED(LED 밝기 조절), Button(스위치 제어)을 불러온다.
time.sleep() 함수로 잠깐 대기할 수 있도록 time 모듈에서 sleep 함수를 불러온다.
2. 변수 초기화
led_white = PWMLED(12)
swPin = Button(21)
swState = 0
newSw = 0
oldSw = 0
12번 핀에 연결된 LED를 PWMLED로 선언하고, LED의 밝기를 조절할 수 있게 한다.
21번 핀에 연결된 스위치를 제어하기 위해 Button으로 선언한다.
swState는 버튼이 눌렸을 때 LED의 밝기 단계를 추적하는 변수이고, 0부터 3까지의 값을 가질 수 있다.
newSw와 oldSw는 스위치 상태 변화를 추적하기 위한 변수이고, 버튼이 눌릴 때만 이벤트를 감지하기 위함이다.
3. 스위치 상태를 확인하는 함수
def swOn():
global newSw
global oldSw
newSw = swPin.is_pressed
if newSw != oldSw:
oldSw = newSw
if newSw == 1:
return 1
return 0
이 함수는 버튼이 눌렸을 때만 1을 반환하고, 그렇지 않으면 0을 반환한다.
newSw는 현재 스위치 상태를 나타내며, oldSw는 이전 스위치 상태를 저장합니다.
두 상태가 다를 때(즉, 버튼이 눌리거나 떼어질 때) 상태를 업데이트하고, 스위치가 눌렸을 때(1일 때) 1을 반환한다. 그렇지 않으면 0을 반환하여 동작을 처리하지 않는다.
4. 메인 루프
try:
while True:
if swOn() == 1:
swState = swState + 1
if swState >= 4:
swState = 0
sleep(0.2)
swOn() 함수가 1을 반환할 때(즉, 버튼이 눌릴 때), swState 값을 1씩 증가시키고, swState가 4 이상이 되면 다시 0으로 돌아가게 한다.
sleep(0.2)는 버튼이 너무 빠르게 반복해서 눌리는 것을 방지하기 위해 디바운스 효과를 준다(즉, 짧은 시간 동안 버튼이 눌리는 것을 무시함).
5. LED 밝기 조절
if swState == 0:
led_white.value = 0
elif swState == 1:
led_white.value = 0.3
elif swState == 2:
led_white.value = 0.6
elif swState == 3:
led_white.value = 1.0
swState 값에 따라 LED의 밝기를 변경한다.
swState == 0: LED 밝기를 0%로 설정(꺼짐),
swState == 1: LED 밝기를 30%로 설정.
swState == 2: LED 밝기를 60%로 설정,
swState == 3: LED 밝기를 100%로 설정한다(최대 밝기).
6. 프로그램 종료 시
except KeyboardInterrupt:
pass
led_white.value = 0
Ctrl + C로 프로그램을 종료할 때, 프로그램이 안전하게 종료되도록 처리한다.
프로그램 종료 시 LED의 밝기를 0%로 설정하여 LED를 끈다.
<요약>
이 프로그램은 버튼을 눌러 LED의 밝기를 4단계로 조절한다. 0%, 30%, 60%, 100%의 밝기로 변하며, 다시 0%로 돌아온다. 스위치를 누를 때만 상태가 변하며, LED는 해당 상태에 맞는 밝기를 유지한다.
<시연영상>
'라즈베리파이 > 실험' 카테고리의 다른 글
경찰차 경광등 (파랑/빨강 LED 교차 깜빡임 + 스위치) (0) | 2024.09.20 |
---|---|
신호등 (차량용 + 보행자) (0) | 2024.09.19 |
경광등 (LED 교차 깜빡임) (0) | 2024.09.19 |