반응형

라즈베리Pi#22 초음파 센서(HC-SR04) 사용하기!  with (파이썬 코드)
RaspberryPi Ultra-Sonic Sensor with Python !


 라즈베리파이에서 초음파 센서인 HC-SR04 모듈을 사용하는 방법에 대해 다루어 보겠습니다. 
코드는 파이썬으로 하고, "거리 측정기"를 예시로 진행해 보겠습니다.

 그리고, 내용 초반에 라즈베리파이에 직접 모니터와 키보드, 마우스 등을 연결하지 않고 자신의 주 PC인 윈도 PC에서 원격 접속으로 접속하여 동작시키는 방법으로 진행이 되는데요, (물론 직접 연결하여 진행해도 됩니다)

만약 원격 접속 제어 방법이 궁금하다면,  라즈이노 ioT(게시글) 블로그와  유튜브 영상을 참고해 주세요.

【라즈베리Pi#19】 윈도 PC에서 라즈베리 Pi 원격 제어하기

[ 윈도 PC에서 라즈베리 Pi 원격 제어하기 - 유튜브 영상으로 보기 ]

  원격 접속을 하면,  모니터 및 키보드와 마우스를 추가로 연결할 필요 없고, 멀리 떨어진 임의의 장소에 설치되었더라도, 네트워크만 연결되어 있으면, 제어할 수 있어 활용도가 높은 장점이 있습니다. 

 

실습 준비물

 위 실습 준비물을 준비해주시는데요, GPIO 40핀 어댑터&케이블은 없어도 실습을 진행할 수 있으나, 
있다면  핀 네임을 보며 연결할 수 있기에 좀 더 안정적으로 편하게 연결할 수 있습니다.

 브레드보드 또한 크게 사이즈 상관이 없으며,  작은 사이즈를 타이트하게 사용하거나 두 개 이어 붙여 사용할 수 있습니다.

라즈베리Pi 초음파 센서 연결도 

 위 이미지는 라즈베리파이 초음파 거리측정 회로 연결 도면입니다.  연결 도면을 보고 부품들을 연결해 주세요.

※  주의 사항!
아래 주의사항들을 반드시 숙지하고서 작업해 주세요~!

[ 라즈베리파이의 출력 ]
라즈베리파이의 GPIO 핀의 출력 허용 전류는 핀당 최대 8mA로(모든 핀 총합 50mA)로 제한되어 있기에 LED 이상의 모터 등과 같은 모듈을 직접 출력 제어하는 것은 라즈베리파이를 손상시킬 수 있습니다. 

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

라즈베리파이의 GPIO는 3.3V 레벨로 동작하기 때문에 반드시 3.3V 이상의 전원 또는 신호 레벨이 입력되지 않도록 주의하세요~!

 아두이노와 달리 컴퓨터 시스템과 같은 라즈베리파이는 포트에 출력으로 할애할 수 있는 여유가 크지 않기 때문에 LED 이상의 부품들은 포트 출력으로 작동시키지 말고 VCC 전원을 싱크(Synk)하여 처리하거나, 별도의 전원을 공급하여 처리하는 것이 좋습니다. 
 또한, 라즈베리파이는 입력받을 수 있는 전압 또는 신호 레벨이 3.3V 이하여서, 초음파 센서의 Echo핀으로 받는 5V의 High 신호 레벨을 3.3V로 낮추기 위해 1 : 2 비율의 저항을 연결하여 아래 그림처럼 3.3V로 낮추어 입력받게 됩니다.

입출력 핀은 어떤 GPIO 핀을 사용해도 상관없으며, 코드에서 핀 번호와 일치시켜주면 됩니다.

그럼, 초음파 센서를 통하여 거리 측정하는 원리를 간단히 설명해 보겠습니다.

초음파 센서 모듈을 살펴보면, 송신 모듈과 수신 모듈이 한 세트로 되어 있는 것을 볼 수 있습니다.

아두이노에서 초음파 센서의  Trigger Pin으로 10us의 펄스 신호를 입력해 주면,  초음파 센서의 송신 모듈에서 25us짜리 8개의 음파를 발사하게 되고, 이 음파가 물체에 부딪혀 수신 모듈로 되돌아올 때, 에코 핀에서는 그 시간 동안만 High 신호를 출력하게 됩니다.

이 High 신호의 간격(시간)을 이용해 아두이노에서 음파의 속도를 적용하여 물체와의 거리 값을 계산하게 됩니다
〔 음파의 속도 : 343m/s (34,300cm/s) 〕

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

distance = (check_time x 34300) / 2

다음은, 회로를 동작시킬 파이썬 코드입니다.

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()

[ 위 코드 다운로드 ]

UltraSonic.zip
0.00MB

 

아래는 초음파 거리측정 회로를 연결한 실제 모습입니다.

이렇게 연결 커넥터(어댑터)를 이용하면 부품을 연결할 때 쉽고 간결하게 작업할 수 있습니다.

또한 핀 레이블이 적혀있어, 잘못 연결되는 실수를 줄일 수 있습니다.

그럼,  실습을 위해 라즈베리파이를 부팅시키세요.

 키보드와 마우스를 직접 연결하여 라즈베리파이에서 코드를 직접 실행시킬 수 있으며, 윈도 PC에서 “원격 데스크톱 연결” 기능을 사용하여 원격으로 실행할 수도 있습니다.
원격 데스크톱 기능을 사용하면 아래 사진처럼, 키보드나 마우스 연결이 필요 없어 Pi 주변이 깔끔해집니다.
물론 랜선 연결 대신, WiFi로 연결하면 더욱 깔끔해지겠죠.

그리고 이때,  네트워크 연결은 PC와 동일한 네트워크로 연결되어 있어야 합니다. 
일반적으로 라즈베리파이가 랜선 연결일 경우 원격 접속하는 PC도 랜선으로 동일한 내부 네트워크로 접속해야 하고, 
WiFi 연결할 경우 동일한 WiFi중계기에 접속된 PC나 노트북 등으로 원결 접속하면 됩니다.

그럼 윈도 PC에서 원격 데스크톱 접속(검색)을 실행시켜 주세요. (라즈베리파이에서 직접 실행시키는 분은 상관없습니다)


컴퓨터 항목에 라즈베리파이가 할당받은 IP주소를 입력하고 연결을 클릭하세요.

라즈베리파이가 할당 받은 IP주소는 사전에 한 번 라즈베리파이로 모니터를 연결하여 파악해 주세요.

ID와 패스워드를 화면처럼 소문자로 입력합니다.

일반적으로 User 이름과 패스워드를 특별히 다른 것으로 변경하지 않았다면, 아이디는  pi  ,  비번은  raspberry입니다.

부팅이 완료되면,   Raspberry Pi Configuration (환경설정) 메뉴로 들어갑니다. 

Interfaces 메뉴로 들어가서 (SSH)를 Enable로 체크해 주세요.

만약 설정이 바뀌었다면 재부팅을 하고 다시 원격으로 연결하세요.

그리고 원격에서 Pi 시작 메뉴의 종료(다시 시작) 메뉴가 작동하지 않는 경우: 원격에서 라즈베리파이를 종료시키는 명령어 (터미널 창 이용)를 사용해 보세요

$ sudo shutdown -h now

그럼 이제, 개발 메뉴에서 Thonny Python IDE를 실행합니다.

토니 파이썬에 코드를 입력하고 실행시켜 봅니다.

그럼, 초음파 센서의 정면으로 평평한 면적의  노트나 박스 같은 것을 준비해서 측정해 보세요.

아래는 실제 측정되는 모습입니다.

만약, 수치가 들쭉날쭉하다면,  초음파가 잘 반사될 수 있도록 센서의 각도와 반사판의 면적이 너무 작지 않은지? 등 확인해 보세요.

네, 이렇게 라즈베리파이에서 초음파 센서(sr-04)를 연결하고, 응용 예시로 거리측정까지 다루어 보았습니다.

 본 게시글의 내용을 따라 하기 쉽도록 영상으로도 만들었으니,  아래 유튜브 영상을 참고해 보세요. 
감사합니다. 

 

 

 

반응형