본문 바로가기
HW/Raspberry Pi | Arduino

라즈베리파이 - PWM 제어, 초음파센서

by 코젼 2022. 8. 18.
728x90
반응형

2022-08-18(43일차)


💡 PWM 제어

▪ 디지털 --> 아날로그 값

▪ convert dac

📃PWM으로 LED 실습

#-*-coding:utf-8-*-

# 필요한 라이브러리를 불러옵니다. 
import RPi.GPIO as GPIO
import time

# 불필요한 warning 제거,  GPIO핀의 번호 모드 설정
GPIO.setwarnings(False)  
GPIO.setmode(GPIO.BCM)

# GPIO 18번 핀을 출력으로 설정 
GPIO.setup(18, GPIO.OUT)  
# PWM 인스턴스 p를 만들고  GPIO 18번을 PWM 핀으로 설정, 주파수  = 50Hz
p = GPIO.PWM(18, 50)  

p.start(0)  # PWM 시작  , 듀티비  = 0

try:               
    while 1:   
        for dc in range(0, 101, 5):    # dc의 값은  0에서 100까지 5만큼 증가  
            p.ChangeDutyCycle(dc)     # dc의 값으로 듀티비 변경  
            time.sleep(0.1)                  #  0.1초 딜레이       
        for dc in range(100, -1, -5):   # dc의 값은  100에서 0까지 5만큼 감소   
            p.ChangeDutyCycle(dc)     # dc의 값으로 듀티비 변경  
            time.sleep(0.1)                  #  0.1초 딜레이 
except KeyboardInterrupt:   # 키보드 Ctrl+C 눌렀을 때 예외발생 
    pass                   # 무한반복을 빠져나와 아래의 코드를 실행  
p.stop()                    # PWM을 종료
GPIO.cleanup()             # GPIO 설정을 초기화

📃PWM으로 부저 실습

#-*-coding:utf-8-*-

# 필요한 라이브러리를 불러옵니다. 
import RPi.GPIO as GPIO
import time

# 불필요한 warning 제거,  GPIO핀의 번호 모드 설정
GPIO.setwarnings(False)  
GPIO.setmode(GPIO.BCM)

# GPIO 18번 핀을 출력으로 설정 
GPIO.setup(18, GPIO.OUT)
# PWM 인스턴스 p를 만들고  GPIO 18번을 PWM 핀으로 설정, 주파수  = 100Hz
p = GPIO.PWM(18, 100)  

# 4옥타브 도~시 , 5옥타브 도의 주파수 
Frq = [ 262, 294, 330, 349, 392, 440, 493, 523 ]
speed = 0.5 # 음과 음 사이 연주시간 설정 (0.5초)

p.start(10)  # PWM 시작 , 듀티사이클 10 (충분)

try:               
    while 1:   
        for fr in Frq:
            p.ChangeFrequency(fr)    #주파수를 fr로 변경
            time.sleep(speed)       #speed 초만큼 딜레이 (0.5s) 
             
except KeyboardInterrupt:       # 키보드 Ctrl+C 눌렀을때 예외발생 
    pass                       # 무한반복을 빠져나와 아래의 코드를 실행  
p.stop()                        # PWM을 종료
GPIO.cleanup()                 # GPIO 설정을 초기화

📃 PWM으로 서보모터 실습

#-*-coding:utf-8-*-

# 필요한 라이브러리를 불러옵니다. 
import RPi.GPIO as GPIO
import time

#서보모터를 PWM으로 제어할 핀 번호 설정 
SERVO_PIN = 18

# 불필요한 warning 제거
GPIO.setwarnings(False)

# GPIO핀의 번호 모드 설정
GPIO.setmode(GPIO.BCM)

# 서보핀의 출력 설정 
GPIO.setup(SERVO_PIN, GPIO.OUT)

# PWM 인스턴스 servo 생성, 주파수 50으로 설정 
servo = GPIO.PWM(SERVO_PIN,50)
# PWM 듀티비 0 으로 시작 
servo.start(0)

try:
    while True:
        # 듀티비를 변경하여 서보모터를 원하는 만큼 움직임  
        servo.ChangeDutyCycle(7.5)  # 90도 
        time.sleep(1)
        servo.ChangeDutyCycle(12.5) # 180도 
        time.sleep(1)
        servo.ChangeDutyCycle(2.5)  # 0도 
        time.sleep(1)

except KeyboardInterrupt:
        servo.stop()
        GPIO.cleanup()

 


💡 초음파센서(HC-SR04)

내보내는 Trigger 핀 (output) - 3.3V

Echo핀으로 들어오는 값은 5V 단위로 들어오기 때문에, 3.3V이내로 다운 시켜야한다.

낮출 때 비례로 맞춰 낮추어야 한다.

728x90
반응형

댓글