본문 바로가기

피지컬컴퓨팅/라즈베리파이 피코

라즈베리파이 피코 - 초음파센서 활용하기

반응형

1. 초음파센서 거리 측정하기

- VCC  : VBUS

- GND : GND

- Trigger : GPIO 12번

- Echo : GPIO  20번

# VCC는 VBUS에 GND는 GND에 연결, Trig는 12번, Echo는 20번 핀에 연결

from machine import Pin
import time

# 트리거 핀과 에코 핀 설정
trigger_pin = Pin(12, Pin.OUT)
echo_pin = Pin(20, Pin.IN)

# 초음파 센서를 이용해 거리 측정
def measure_distance():
    # 트리거 핀을 통해 10us 동안 초음파 신호 발생
    trigger_pin.low()
    time.sleep_us(2)
    trigger_pin.high()
    time.sleep_us(10)
    trigger_pin.low()

    # 에코 핀이 HIGH 상태가 될 때까지 기다림
    while echo_pin.value() == 0:
        pass
    start = time.ticks_us()

    # 에코 핀이 LOW 상태가 될 때까지 기다림
    while echo_pin.value() == 1:
        pass
    end = time.ticks_us()

    # 시간 측정
    duration = time.ticks_diff(end, start)

    # 음속(340 m/s)을 이용해 거리 계산
    # 거리 = (시간(초) * 음속(미터/초)) / 2 (왕복이므로 2로 나눔)
    distance = (duration * 340.0) / (1000000 * 2)

    return distance

# 메인 루프
while True:
    distance = measure_distance()
    print('Distance:', distance*100, 'cm')
    time.sleep(0.1)

 

2. picozero 라이브러리 설치

메뉴->도구->패키지 관리에서 'picozero'검색하여 설치

 

 

 

- GPIO핀 : Trigger : 12, Echo :20 번

# picozero 라이브러리에서 DistanceSensor 클래스 사용
from picozero import DistanceSensor
# 시간 지연을 위해 time 모듈에서 sleep 함수를 사용
from time import sleep

# 초음파 거리 센서 초기화
distanceSensor = DistanceSensor(trigger=12, echo=20)

# 무한 루프를 실행합니다. 
# 사용자가 강제로 종료하기 전까지 반복합니다.
while 1 :
    # 현재 측정된 거리를 센티미터(cm) 단위로 출력합니다.
    # 측정된 거리는 소수점 세 자리까지 표시합니다.
    print( 0, f"{distanceSensor.distance * 100:6.3f} cm" )
    
    sleep(0.1)  # 0.1초 동안 대기합니다. 초당 약 10번 측정합니다.
pass
반응형