memo6759 님의 블로그
2025-10-15(라즈베리파이-2, PWM 본문

학습 주요 주제
- AI 활용한 프로젝트 진행 방법과 스케줄
- PWM과 GPI를 이용한 드론 제어 방법
- 웹을 통한 드론 제어와 DB 활용 방법
빛의 밝기
- 0.05로 하면 1초에 100번 점멸하기 때문에 우리 눈에는 안 보임
- 1초에 100번 켜졌다 꺼졌다를 계속 하고 있지만 우리 눈에는 안 보임
- 1 대 9기 때문에 어둡다고 느끼는 것임


주파수의 개념
- 1초 주기로 led가 켜졌다 꺼졌다를 반복하고 있는 것을 1 헤르츠의 주파수로 led가 점멸하고 있다라고 표현함
- 주파수는 어떤 상황이 1초 동안에 몇 번 반복되는지를 나타내는 값이고 단위는 헤르츠임
- led로 놓고 보면 꺼졌다 켜졌다 꺼졌다 켜졌다 하는 것이 한 주기임
import RPi.GPIO as GPIO
import time
# 1초 간격으로 LED 깜빡이기
led_pin = 13
# GPIO핀을 어떤 방법으로 액세스할 것인지 모드를 설정
GPIO.setmode(GPIO.BCM)
#GPIO핀이 입력 or 출력
GPIO.setup(led_pin, GPIO.OUT)
# PWM을 사용하기 위해서 객체를 생성
pwm = GPIO.PWM(led_pin,1) # 주파수를 1Hz로 지정 - 1초 동안 HIGH와 LOW의 한 사이클이 1번
# PWM서비스를 시작
pwm.start(10) # PWM을 시작하는 HIGH비율을 유지하는 시간이 10% - 듀티비가 10
# pwm에서 듀티사이클을 변경
time.sleep(3)
pwm.ChangeDutyCycle(100)
# # PWM서비스 종료 - pwm출력을 멈춤
# try:
# while True:
# pass
# except KeyboardInterrupt:
# pass
# finally:
time.sleep(3)
pwm.stop()
GPIO.cleanup()
import RPi.GPIO as gpio
import time
led_pin = 13
gpio.setmode(gpio.BCM)
gpio.setup(led_pin,gpio.OUT)
try:
while True:
gpio.output(led_pin,gpio.HIGH)
time.sleep(0.009)
gpio.output(led_pin,gpio.LOW)
time.sleep(0.001)
except:
print("end")
finally:
gpio.cleanup()
import RPi.GPIO as gpio
import time
led_pin = 13
# LED의 점점 밝아지는 효과
gpio.setmode(gpio.BCM)
gpio.setup(led_pin,gpio.OUT)
try:
while True:
for led_val in range(0,11):
gpio.output(led_pin,gpio.HIGH)
time.sleep(led_val*0.001)
gpio.output(led_pin,gpio.LOW)
time.sleep((10 - led_val)*0.001)
except:
print("end")
finally:
gpio.cleanup()
while True:
for led_val in range(0,11):
gpio.output(led_pin,gpio.HIGH)
time.sleep(led_val*0.001)
gpio.output(led_pin,gpio.LOW)
time.sleep((10 - led_val)*0.001)
부저
- 부저란?
부저(Buzzer Module)는 전원이 인가되면 소리를 내는 모듈. 디지털 출력 신호에 따라 부저를 ON/OFF 할 수 있습니다. 경고음을 출력하는 곳에 응용할 수 있음
pwm_buzzer

pwm.ChangeFrequency(262) # 주파수를 변경
pwm_buzzer_test 1,2,3
import RPi.GPIO as GPIO
import time
buzzer_pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin,GPIO.OUT)
try:
pwm = GPIO.PWM(buzzer_pin,262)
pwm.start(50)
time.sleep(2)
finally:
if pwm is not None:
pwm.stop()
GPIO.cleanup()
import RPi.GPIO as GPIO
import time
buzzer_pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin,GPIO.OUT)
pwm = GPIO.PWM(buzzer_pin,1)
pwm.start(50)
try:
for i in range(0,3):
pwm.ChangeFrequency(262) # 주파수를 변경
time.sleep(0.5)
pwm.ChangeFrequency(294) # 주파수를 변경
time.sleep(0.5)
pwm.ChangeFrequency(330) # 주파수를 변경
time.sleep(0.5)
pwm.ChangeDutyCycle(0)
finally:
if pwm is not None:
pwm.stop()
GPIO.cleanup()
import RPi.GPIO as GPIO
import time
buzzer_pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin,GPIO.OUT)
pwm = GPIO.PWM(buzzer_pin,1)
pwm.start(50)
# 나비야의 한 소설을 연주해보자 배열로 할 것 . - 솔미미 파레레 도레미파 솔솔솔
frq = [392, 330, 330, 349, 330, 0, 392, 392, 392, 0, 392, 330, 330, 349, 330, 0, 392, 392, 392]
try:
while True:
for i in frq:
pwm.ChangeFrequency(i)
time.sleep(0.5)
finally:
if pwm is not None:
pwm.stop()
GPIO.cleanup()

| 각도 | 듀티비 |
| 0 | 2.5 |
| 90 | 7.5 |
| 180 | 12.5 |
import RPi.GPIO as GPIO
import time
server_pin = 20
GPIO.setmode(GPIO.BCM)
GPIO.setup(server_pin,GPIO.OUT)
pwm = GPIO.PWM(server_pin,50)
pwm.start(0)
time.sleep(1)
pwm.ChangeDutyCycle(2.5) # 0 도
time.sleep(1)
pwm.ChangeDutyCycle(7.5) # 90도
time.sleep(1)
pwm.ChangeDutyCycle(12.5) # 180도
time.sleep(1)
pwm.stop()
GPIO.cleanup()
pwm = GPIO.PWM(server_pin, 50) # 주파수 50으로 설정
wm = GPIO.PWM(server_pin, 50) # 주파수 50으로 설정
PWM(Pulse Width Modulation, 펄스 폭 변조) 신호를 사용할 객체를 생성
50Hz 주파수로 설정 → 서보모터는 일반적으로 50Hz 신호(주기 20ms)를 사용
pwm.start(0)
time.sleep(1)
- PWM을 **0% 듀티비(duty cycle)**로 시작 → 신호가 거의 없는 상태
- 1초 대기 (서보모터 초기화용)
'HDC 학습일지' 카테고리의 다른 글
| 2025-10-17 [라즈베리파이 mqtt ,쓰레드(상속,이너클래스)] (0) | 2025.10.19 |
|---|---|
| 2025-10-16(서브모터 제어, MQTT 통신 (자바)) (0) | 2025.10.16 |
| 2025-10-14(라즈베리파이) (0) | 2025.10.15 |
| 2025-10-13(라즈베리파이(리눅스 명령어)) (0) | 2025.10.14 |
| 2025-10-02 (JDBC - final(2), JPA, DAO, DTO, 라즈베리파이) (0) | 2025.10.04 |