HC-SR04 com CircuitPython

Aprenda a usar o sensor ultrassônico HC-SR04 com CircuitPython. Tutorial passo a passo com código e esquema de ligação.

2 de Janeiro de 2026

HC-SR04 com CircuitPython

O sensor ultrassônico HC-SR04 é um dos componentes mais populares para medição de distância em projetos de robótica e automação. Sua simplicidade e baixo custo o tornam ideal para iniciantes e avançados. Neste tutorial, vamos explorar como integrá-lo de forma eficiente utilizando CircuitPython, testando o projeto em uma Raspberry Pi Pico.

A vantagem de usar CircuitPython aqui é a facilidade de leitura e a enorme quantidade de bibliotecas prontas, como a da Adafruit, que abstrai toda a complexidade dos pulsos de trigger e echo.

Materiais Necessários

Para seguir este tutorial, você precisará dos seguintes componentes:

  • Placa de desenvolvimento: Raspberry Pi Pico (ou qualquer outra compatível com CircuitPython).
  • Sensor Ultrassônico: HC-SR04 (versão padrão 5V) ou as versões modernas HC-SR04P / HC-SR04+ (que operam em 3.3V).
  • Conversor de Nível Lógico: Obrigatório apenas se estiver usando o sensor padrão de 5V na Raspberry Pi Pico.
  • Jumpers: 10 unidades (se usar conversor lógico) ou 4 unidades (conexão direta).
  • Breadboard: 400 pontos (e uma auxiliar de 170 pontos se usar o conversor).
  • Software: circup (para bibliotecas) e mpremote (para execução).

Versões do HC-SR04: 3.3V vs 5V

Antes de conectarmos os fios, é crucial identificar qual versão do sensor você possui.

  • HC-SR04 (Padrão Antigo): Opera estritamente com 5V. Como a Raspberry Pi Pico (e a maioria das placas modernas) trabalha com 3.3V nos pinos de GPIO, você não pode conectar o pino "Echo" do sensor diretamente na placa, pois o retorno de 5V pode queimar a porta do microcontrolador. Neste caso, é necessário usar um conversor de nível lógico ou um divisor de tensão.
  • HC-SR04P ou HC-SR04+: Estas são versões atualizadas que operam em uma faixa de tensão maior (geralmente 3V a 5.5V). Se você tiver um destes, pode conectar diretamente aos pinos de 3.3V da Raspberry Pi Pico sem componentes adicionais.

Esquema de Ligação e Pinagem

Abaixo, descrevemos a pinagem para os dois cenários.

Cenário A: HC-SR04P / HC-SR04+ (3.3V)

Se o seu sensor for compatível com 3.3V, a conexão é direta:

Esquema de ligação direta do sensor HC-SR04P 3.3V na Raspberry Pi Pico

  • VCC: Conectar ao pino 3V3 (OUT) da Pico.
  • GND: Conectar a qualquer GND da Pico.
  • Trig: Conectar ao GP17.
  • Echo: Conectar ao GP16.

Cenário B: HC-SR04 Padrão (5V) com Conversor de Nível

Se o seu sensor for o clássico de 5V, você deve alimentar o sensor com 5V (VBUS), mas converter os sinais de comunicação para 3.3V:

Esquema de ligação do sensor HC-SR04 5V na Raspberry Pi Pico com conversor de nível lógico

  • Alimentação do Sensor: VCC no VBUS (5V) da Pico e GND no GND.
  • Conversor Lógico (Lado HV - High Voltage): Conectar ao 5V (VBUS).
  • Conversor Lógico (Lado LV - Low Voltage): Conectar ao 3V3 (OUT).
  • Sinais (via Conversor):
    • Trig: Pico GP17 -> LV3 -> HV3 -> Sensor Trig.
    • Echo: Sensor Echo -> HV4 -> LV4 -> Pico GP16.

Configuração do Ambiente

Vamos utilizar duas ferramentas essenciais do ecossistema Python para microcontroladores: o circup para gerenciar pacotes e o mpremote para controlar a placa.

Instalando a Biblioteca

O CircuitPython possui uma biblioteca oficial da Adafruit específica para este sensor, o que facilita muito o trabalho. Conecte sua placa via USB e execute no terminal:

circup install adafruit_hcsr04

O comando acima irá baixar o driver adafruit_hcsr04.mpy e copiá-lo automaticamente para a pasta lib da sua placa.

O Código

Copie o código abaixo e salve-o como main.py (ou outro nome de sua preferência) no seu computador.

from time import sleep

from adafruit_hcsr04 import HCSR04
from board import GP16, GP17

with HCSR04(trigger_pin=GP17, echo_pin=GP16) as sonar:
    while True:
        print(f"{sonar.distance:.1f}cm")
        sleep(0.5)

Entendendo o Script

  • Importações: Importamos a classe HCSR04 da biblioteca que instalamos e definimos os pinos GP16 e GP17 através do módulo board.
  • Gerenciador de Contexto (with): Utilizamos a instrução with para inicializar o sensor. Isso é uma boa prática no CircuitPython, pois garante que os recursos do hardware (os pinos utilizados) sejam liberados corretamente caso o código seja interrompido ou finalizado, evitando erros de "pino em uso" ao reiniciar o script.
  • Propriedade .distance: A leitura é feita acessando sonar.distance. A biblioteca calcula automaticamente o tempo de voo do som e retorna o valor já convertido em centímetros (float).
  • Loop: O código lê a distância e imprime no console a cada 0.5 segundos.

Executando o Projeto

Com o código salvo e a placa conectada, utilize o mpremote para rodar o script diretamente:

mpremote run main.py

Você deverá ver no terminal as medidas de distância sendo atualizadas em tempo real.

Conclusão

Utilizar o HC-SR04 com CircuitPython é extremamente direto graças à abstração da biblioteca da Adafruit. Lembre-se sempre de verificar a voltagem de operação do seu sensor para proteger sua Raspberry Pi Pico.

GIF demonstrando o terminal exibindo a distância medida pelo sensor HC-SR04 em tempo real