Neste artigo, vou mostrar como usar um sensor ultrassônico HC-SR04 para medir a distância entre seu sensor e um objeto em seu caminho usando Raspberry Pi. Vamos começar.
Componentes de que você precisa:
Para medir a distância com sucesso com o sensor Raspberry Pi e HC-SR04, você precisa,
- Um computador de placa única Raspberry Pi 2 ou 3 com Raspbian instalado.
- Um módulo sensor ultrassônico HC-SR04.
- 3x10kΩ resistores.
- Uma placa de ensaio.
- Alguns conectores macho para fêmea.
- Alguns conectores macho para macho.
Escrevi um artigo dedicado à instalação do Raspbian no Raspberry Pi, que você pode verificar em https: // linuxhint.com / install_raspbian_raspberry_pi / se você precisar.
Pinagem HC-SR04:
O HC-SR04 tem 4 pinos. VCC, TRIGGER, ECHO, GROUD.
Fig1: pinagem HC-SR04 (https: // www.rato.com / ds / 2/813 / HCSR04-1022824.pdf)
O pino VCC deve ser conectado ao pino + 5V do Raspberry Pi, que é o pino 2. O pino TERRA deve ser conectado ao pino GND do Raspberry Pi, que é o pino 4.
Os pinos TRIGGER e ECHO devem ser conectados aos pinos GPIO do Raspberry Pi. Embora o pino TRIGGER possa ser conectado diretamente a um dos pinos GPIO do Raspberry Pi, o pino ECHO precisa de um circuito divisor de tensão.
Diagrama de circuito:
Conecte o sensor ultrassônico HC-SR04 ao seu Raspberry Pi da seguinte maneira:
Fig2: sensor ultrassônico HC-SR04 conectado ao Raspberry Pi.
Depois que tudo estiver conectado, será assim:
Fig3: sensor ultrassônico HC-SR04 conectado ao Raspberry Pi no breadboard.
Fig4: sensor ultrassônico HC-SR04 conectado ao Raspberry Pi no breadboard.
Escrevendo um programa Python para medir distâncias com HC-SR04:
Primeiro, conecte-se ao Raspberry Pi usando VNC ou SSH. Em seguida, abra um novo arquivo (digamos distância.py) e digite as seguintes linhas de códigos:
Aqui, a linha 1 importa a biblioteca GPIO raspberry pi.
A linha 2 importa a biblioteca de tempo.
Dentro de tentar bloco, o código real para medir a distância usando HC-SR04 é escrito.
O finalmente bloco é usado para limpar os pinos GPIO com GPIO.Limpar() método quando o programa termina.
Dentro de tentar bloco, na linha 5, GPIO.setmode (GPIO.BORDA) é usado para facilitar a definição de pinos. Agora, você pode fazer referência aos pinos por números físicos, como acontece na placa do Raspberry Pi.
Nas linhas 7 e 8, pinTrigger está configurado para 7 e pinEcho está configurado para 11. O ACIONAR pino de HC-SR04 é conectado ao pino 7, e ECO pino do HC-SR04 é conectado ao pino 11 do Rapsberry Pi. Ambos são pinos GPIO.
Na linha 10, pinTrigger está configurado para OUTPUT usando GPIO.configurar() método.
Na linha 11, pinEcho está configurado para INPUT usando GPIO.configurar() método.
As linhas 13-17 são usadas para redefinir pinTrigger (configurando-o para lógico 0) e configurando o pinTrigger para a lógica 1 por 10ms e depois para a lógica 0. Em 10 ms, o sensor HC-SR04 envia 8 pulsos de 40 KHz.
As linhas 19-24 são usadas para medir o tempo que leva para os pulsos de 40KHz serem refletidos para um objeto e de volta para o sensor HC-SR04.
Na linha 25, a distância é medida usando a fórmula,
Distância = tempo delta * velocidade (340M / S) / 2
=> Distância = tempo delta * (170M / S)
Calculei a distância em centímetros em vez de metros, só para ser mais preciso. A distância calculada também é arredondada para 2 casas decimais.
Finalmente, na linha 27, o resultado é impresso. É isso muito simples.
Agora, execute o script Python com o seguinte comando:
$ python3 distance.pyComo você pode ver, a distância medida é 8.40 cm.
Fig5: objeto colocado em cerca de 8.40 cm de distância do sensor.
Mudei para o objeto um pouco mais longe, a distância medida é 21.81cm. Então, está funcionando conforme o esperado.
Fig6: objeto colocado em cerca de 21.81 cm de distância do sensor.
Então é assim que você mede a distância com Raspberry Pi usando o sensor ultrassônico HC-SR04. Veja o código para distância.py abaixo:
importar RPi.GPIO como GPIOtempo de importação
tentar:
GPIO.setmode (GPIO.BORDA)
pinTrigger = 7
pinEcho = 11
GPIO.configuração (pinTrigger, GPIO.FORA)
GPIO.configuração (pinEcho, GPIO.DENTRO)
GPIO.saída (pinTrigger, GPIO.BAIXO)
GPIO.saída (pinTrigger, GPIO.ALTO)
Tempo.dormir (0.00001)
GPIO.saída (pinTrigger, GPIO.BAIXO)
enquanto GPIO.entrada (pinEcho) == 0:
pulseStartTime = tempo.Tempo()
enquanto GPIO.entrada (pinEcho) == 1:
pulseEndTime = tempo.Tempo()
pulseDuration = pulseEndTime - pulseStartTime
distance = round (pulseDuration * 17150, 2)
imprimir ("Distância:%.2f cm "% (distância))
finalmente:
GPIO.Limpar()