IR 방식 장애물 센서 적용해 보기

IR 방식 장애물 센서 적용해 보기

1. 초음파 방식 거리센서 vs IR(적외선) 방식 장애물 센서

이전 글에서 장애물 회피를 위해, 초음파를 이용하여 장애물과의 거리를 측정하는 방법을 소개한 바 있었다. 이러한 초음파 센서들은 수 미터에 달하는 먼 거리까지 측정이 이루어지는 반면 상대적으로 고가인 편이라 주로 드론같이 이동 속도가 빠른 장치에 사용되는 경우가 많다.

https://blog.naver.com/mythee1/223242958278

그런데 과거에는 거리를 측정하거나 장애물을 감지하는 데는 주로 IR (Infrared Rays) 방식이 많이 사용되었다.

해외 직구 시 초음파 센서는 4-6천 원 정도 하는데 반해, IR 방식 장애물 센서는 배송료를 고려하지 않으면 500원도 안되는 가격에 구입이 가능한 장애물 센서인데, 빛을 이용하기 때문에 충분히 응답속도가 빠른 것도 장점이다.

다만, 자체적으로 내보내는 빛을 이용하기 때문에, 거리가 멀어지면 빛의 산란으로 인해 적외선이 약해서 감도가 떨어지기 때문에, 측정 가능한 거리가 짧은 단점이 있기는 하다.

이러한 점 때문에, 아래와 같은 IR 방식 장애물 센서 모듈은 비교적 짧은 거리(~7~8cm)의 범위에 다가온 장애물을 감지하는데 주로 사용되며, 간단한 장난감류나, 이동속도가 낮은 경우, 고정적인 위치에 부착해서 사용하는 용도 등에 서는 초음파 방식보다 훨씬 저렴하게 장애물 센서 기능을 구현할 수가 있다. 사람이 다가가면 자동으로 열리는 자동 개폐방식 쓰레기통이나, 빛을 이용하여 On/Off를 제어하는 수도꼭지 등과 같이, 센서와 대상체의 거리가 가까운 경우에 저렴하면서도 효과적인 제어를 위한 수단으로 유용하다.

2. IR 장애물 센서 외관

마침 집에 예전에 사용하던 IR 방식 장애물 방지 센서가 한 개 있었다.

장애물 센서의 전면부는 다음과 같이 생겼는데, 제품에 따라 조금 모양이 다른 리시버를 사용하기도 한다.

모듈 한쪽에는 다음과 같이, 적외선(IR)을 내보내는 투명한 색상의 LED가 있고, 그 옆에 반사되어온 IR을 감지하는 센서가 짝을 이루어 배치되어 있다.

후면에는 특별한 부착 부품이 없다.

단자는 다음과 같이 4개인데, 끝의 EN 핀은 사용할 필요가 없으며, OUT 핀으로 디지털 출력을 하게 된다.

3. IR 장애물 센서 적용 예제

다음과 같이 피코 보드와 연결하여 간단한 회로를 구성했다.

VCC로는 5V를 연결했으며, 센서의 출력 신호를 GP16에 연결했고, 장애물 감지 상태에 따라 서로 다른 색상의 LED가 켜지도록 각기 GP12와 GP15에 연결했다.

그리고 다음과 같은 간단한 코드를 만들었다.

import machine
import time

sensor=machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_UP)
greenled=machine.Pin(12, machine.Pin.OUT)
led=machine.Pin(15, machine.Pin.OUT)
while True:
if sensor.value()== 1:
print ("No obstacle")
        greenled.value(1)
        time.sleep(0.1)
        greenled.value(0)            
        
    elif sensor.value()== 0:
print ("Obstacle detected")
        led.value(1)
        time.sleep(0.1)
        led.value(0)

동작하는 모습은 다음과 같다.

그리고 동작하는 동안 LED 표시와 함께 화면에는 상태를 문자로 출력하도록 했는데,

만일 특별한 기계 동작을 원하는 경우, 위 코드에서 LED 대신 릴레이를 연결하거나, 추가 핀을 지정하여 디지털 신호 출력하는 방식으로 각 상태에 따른 제어가 가능하다.

4. 참고사항

한편 위의 예제에서 사용한 센서 모듈의 경우 과거 아두이노에서 사용하던 제품이라, 3.3V에서도 동작은 했으나, 3.3V보다는 5V 전원을 연결했을 때 더 정확하게 동작했다.

또한, 입력 신호를 감지하기 위한 핀 지정 시에도 센서 감지 시 1이 되기보다는 평상시에 1로 출력을 보내다가, 센서가 감지되었을 때 0으로 값이 떨어지는 형태로 다음과 같이 핀 모드 지정을 하는 것이 더 원활한 동작에 유리하였다.

sensor=machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_UP)

위의 예제에 사용한 IR 센서 모듈의 경우, 장애물과의 거리가 약 7cm 정도까지는 매우 정상적으로 감지하였으나, 약 8cm 정도의 거리가 될 때부터는 감지하지 못하여, 적용 가능한 장애물까지의 최대 이격 거리는 약 7cm 정도로 나타났다.