1. 초음파 센서
라즈베리파이 피코보드에 사용할 만한 센서류를 찾다가 초음파 센서를 발견하게 되었다. 해외 직구 시 구매가격은 배송료를 포함해 개당 대략 2000원 정도에 불과했다. 사용자들의 평점도 5.0으로 상당히 높은 것이 신뢰가 갔다.
더구나, 별도의 드론 부품들을 찾다가, 상당히 평가가 괜찮은 CFly Faith2 드론에도 완전히 동일한 것은 아니지만, 유사한 초음파 센서가 장애물 회피 목적으로 사용되는 것을 알게 되었다.
이러한 점들 때문에 이 초음파 센서를 구입해 라즈베리파이 피코 보드에서 사용해 보게 되었다.
구입해서 배송받은 초음파 센서는 전면부가 다음과 같은 모양이고, 연결을 위한 4개의 단자가 있고, 초음파를 발생시키는 신호와 관련된 Trigger 핀이 SCL 핀으로 표기되어 있었고, 반사되어 돌아온 초음파 신호를 수신한 결과를 전달하는 Echo 핀 이 SDA로 표기되어 있었다.
센서 모듈의 후면은 다음과 같은 모습이었다.
2. 초음파 이용 거리 측정 원리
초음파는 인간의 가청 주파수인 20~20000 Hz 주파수 대역보다 좀 더 높은 주파수를 가지는 일종의 소리이다. 이 때문에, 사람은 들을 수 없지만, 기본적으로는 소리와 유사한 특성을 가지게 된다. 때문에 공기 중에서 초음파는 약 340m/Sec의 속도를 가지게 된다.
이 때문에, 초음파센서에서 발생한 주파수가 장애물 등에 반사되어 올 때까지의 시간을 측정하면 기본 속도 340m/sec를 이용해서, 해당 시간 동안 이동한 거리를 계산할 수 있게 된다. 이때 초음파는 센서로부터 장애물까지의 거리를 왕복하는 것이므로, 센서에서 장애물까지의 거리는 초음파가 이동한 총거리의 절반이 되게 된다.
이를 수식화하면 다음과 같이 되는데, 통상 초음파 이동시간 측정에는 1/100만 초 단위인 microSec가 사용되므로, 340m를 1,000,000으로 나누면 1usec 동안에 이동하는 거리가 된다.
340m 초음파 수신 시간, us – 초음 파발 신시 간, us
장애물까지의 거리(m) = ————– x —————————————-
1,000,000 2
3. 초음파 거리 측정 예제
구입한 초음파 센서로 거리를 측정해서, 가지고 있던 OLED 디스플레이에 결과를 표시하도록 시도해 보았다.
배선은 다음과 같이 연결했다.
사진 속의 배선 색상을 통해 연결된 핀의 위치를 확인 가능하다.
그리고 기존에 OLED 화면을 시험할 때 만들어 두었던 코드를 활용하고, 여기에 초음파 측정 함수만 추가하여 다음과 같은 코드를 만들었다. (참고: 이 코드를 사용하려면 미리 OLED 라이브러리인 SSD1306 OLED 라이브러리를 피코보드에 업로드해 두어야 한다.)
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime
WIDTH =128
HEIGHT= 64
i2c=I2C(0,scl=Pin(1),sda=Pin(0),freq=200000)
oled = SSD1306_I2C(WIDTH,HEIGHT,i2c)
oled.init_display()
echo = Pin(14, Pin.IN)
trigger = Pin(15, Pin.OUT)
def ultrasonnic():
timepassed=0
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(10)
trigger.low()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon - signaloff
return timepassed
while True:
oled.fill(0)
travel_time = ultrasonnic()
distance_cm = (travel_time * 0.034) / 2
distance_cm = round(distance_cm,1)
oled.text("Distance ",5,8)
oled.text(str(distance_cm)+" cm",5,24)
oled.show()
utime.sleep(0.1)
코드를 동작시켜 본 결과 다음과 같이 잘 작동한다.
한편 거리를 좁히면서 측정해 본 결과 다음과 같이 약 1.8cm까지의 작은 거리에서도 측정이 된다.
다만, 그 보다 짧은 거리는 센서 자체의 두께 때문에 측정이 가능하지 않았다.
반대로 거리를 점점 늘리면서 측정해 본 결과, 약 2~3.4m 거리도 측정이 잘 되었다.
도대체 어디까지 측정이 가능한지 확인할 겸, 제품 판매 스펙을 확인해 보니, 판매스펙상으로는 약 4m(3.3V 전원시) ~ 4.5m(5V 전원시)까지 거리 측정이 가능하다고 한다.
그래서 실제로 이 정도 거리가 측정가능한지를 보려고, 거리를 최대로 늘려본 결과, 일단 다음 거리까지는 측정이 가능하였다. 더 이상의 거리는 집안에 장애물 없이 더 먼 직선거리가 나오는 곳이 없어서 추가적인 거리에 대한 시험을 해보지는 못하였다.

