Processor

【라즈베리파이】 wiringPi Python : 초음파 센서(HC-SR04)

작성자 임베디드코리아 작성일26-02-20 00:38 조회79회 댓글0건
● 라즈베리파이의 출력
  - 라즈베리파이의 GPIO 핀의 출력 허용 전류는 핀당 최대 8mA로(모든 핀 총합 50mA)로 제한되어 있음
  - LED 이상의 모터 등과 같은 모듈을 직접 출력 제어하는 것은 라즈베리파이를 손상시킬 수 있음.

● 라즈베리파이의 입력
  - 최대 3.3V까지 입력이 허용되며, 신호 레벨의 임계값은 1.8V 임.
    (즉, 1.8V 보다 크면 논리 1(High),  작으면 논리 0(Low)으로 인식 함.)
  - 입력 가능 전류는 핀당 최대 5mA를 넘지 않도록 해야 함

★ 라즈베리파이의 GPIO는 3.3V 레벨로 동작하기 때문에
    반드시 3.3V 이상의 전원 또는 신호 레벨이 입력되지 않도록 해야한다.

■ 초음파 센서 연결
  ▶ 라즈베리파이는 입력받을 수 있는 전압 또는 신호 레벨이 3.3V 이하이므로
      초음파 센서의 Echo핀으로 받는 5V의 High 신호 레벨을 3.3V로 낮추기 위해 1 : 2 비율의 저항을 연결한다.
  ▶ 입출력 핀은 어떤 GPIO 핀을 사용해도 상관없다.

■ 초음파 센서 거리 계산
  ▶ 초음파 센서의 송신 모듈에서 25us짜리 8개의 음파를 발사하게 되고,
      이 음파가 물체에 부딪혀 수신 모듈로 되돌아올 때, 에코 핀에서는 그 시간 동안만 High 신호를 출력한다.
  ▶ High 신호의 간격(시간)을 이용해서 음파의 속도를 적용하여 물체와의 거리 값을 계산한다.
      • 음파의 속도 : 343m/s (34,300cm/s)

   ▶ Echo Pin의 High 펄스 시간은 펄스가  발사되고 물체에 반사되어 되돌아오기(왕복)까지의 시간이기 때문에,
      나누기 2를 해주면 물체와의 거리 값을 구할 수 있다.
       •  distance = (check_time x 34300) / 2

--->>> 예제 : Ultrasonic.py  <<<-----------------------------------------------------------
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

TRIG = 23
ECHO = 24
print("초음파 거리 측정기")

GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

GPIO.output(TRIG, False)
print("초음파 출력 초기화")
time.sleep(2)

try:
    while True:
        GPIO.output(TRIG,True)
        time.sleep(0.00001)        # 10uS의 펄스 발생을 위한 딜레이
        GPIO.output(TRIG, False)
       
        while GPIO.input(ECHO)==0:
            start = time.time()    # Echo핀 상승 시간값 저장
           
        while GPIO.input(ECHO)==1:
            stop = time.time()      # Echo핀 하강 시간값 저장
           
        check_time = stop - start
        distance = check_time * 34300 / 2
        print("Distance : %.1f cm" % distance)
        time.sleep(0.4)
       
except KeyboardInterrupt:
    print("거리 측정 완료 ")
    GPIO.cleanup()
--------------------------------------------------------------------------------------------------------------