Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

memo6759 님의 블로그

2025-10-15(라즈베리파이-2, PWM 본문

HDC 학습일지

2025-10-15(라즈베리파이-2, PWM

heewon09 2025. 10. 16. 11:14

로컬에서 원격으로 접속하는 방법

학습 주요 주제 

  • 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초 대기 (서보모터 초기화용)