Skip to main content

Sensores de distância

Escrito por João P. Soares. Última atualização: 27/03/2023

Atualmente utilizamos 2 tipos de sensores de distância, o US100 e HC-SR04. Como o US100 tem um modo que tem comportamento identico ao HC-SR04, esse texto foca no US100 pois esse conteúdo já cobre o outro sensor.

US100

O US100 é um sensor de distância que trabalha com 2 protocolos de comunicação, serial(ECHO,TRIG) e UART. O modo pode ser selecionado curtando 2 pinos na placa do sensor, quando eles estão curtados o modo usado sera o UART (por padrão ele vem curtado)

Requisitos

É necessário instalar algumas bibliotecas, que podem ser instaladas com pip. Segue abaixo como instalar e quais instalar

sudo apt update
pip3 install RPi.GPIO
pip3 install Adafruit-Blinka
pip3 install adafruit-circuitpython-us100 #Essa segunda biblioteca só é usada para o modo UART

Analógico (TRIG ECHO)

Esse é o modo mais analógico de utilizar, através de um cálculo com a velocidade do som. O HC-SR04 funciona exatamente dessa forma e o código presente aqui deve funcionar nele.

Segue abaixo o diagrama de como funciona:

Esquema TRIG ECHO

Segue abaixo um código para usar o sensor desse modo (utiliza o circuitpython blinka):

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
# set pins for trigger and echo
trig = 16
echo = 18
# set up pins as output/input
GPIO.setup(trig,GPIO.OUT)
GPIO.setup(echo,GPIO.IN)
# set trigger pin to low
GPIO.output(trig, False)
print("Waiting for sensor to settle")
time.sleep(2)
# send a 10us pulse to trigger
GPIO.output(trig, True)
time.sleep(0.00001)
GPIO.output(trig, False)
# measure echo duration
while GPIO.input(echo)==0:
pulse_start = time.time()
while GPIO.input(echo)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
# calculate distance (in centimeters)
distance = pulse_duration * 17150
# round distance to 2 decimal places
distance = round(distance, 2)
print("Distance:", distance, "cm")
GPIO.cleanup()

UART

Esse método é mais recomendado de ser usado pois os cálculos são feitos dentro do sensor e utilizam a temperatura como parâmetro para determinar a velocidade do som no ar. Através desse método também é possível obter a temperatura. No código a seguir usamos uma biblioteca própria para o sensor, o adafruit_us100 e o circuitpython (blinka). essas 2 bibliotecas podem ser instaladas por pip

import time
import board
import adafruit_us100

class DistanceSensor:
def __init__(self, uart):
self._us100 = adafruit_us100.US100(uart)

def get_distance(self):
return self._us100.distance

def get_temperature(self):
return self._us100.temperature

uart = board.UART
distance_sensor = DistanceSensor(uart)

try:
while True:
# read distance and temperature values
distance = distance_sensor.get_distance()
temperature = distance_sensor.get_temperature()

# print distance and temperature values
print("Distance:", round(distance, 2), "cm")
print("Temperature:", round(temperature, 2), "°C")
time.sleep(1)

except KeyboardInterrupt:
pass