Sensor ultrassônico HC-SR04 no STM32 com Arduino

Tutoriais Sistemas Embarcados
Sensor ultrassônico HC-SR04 no STM32 com Arduino

A conexão de sensores de distância a microcontroladores modernos é um requisito comum em projetos de robótica e medição. Este tutorial aborda como ler dados de distância de um sensor ultrassônico HC-SR04 usando uma placa de desenvolvimento STM32. Para escrever e enviar código de forma eficiente, configuraremos nosso espaço de trabalho usando o PlatformIO junto com o Arduino Framework no PlatformIO e o PlatformIO Core (CLI).

Requisitos de hardware e conexões

Para acompanhar esta montagem, você precisará de alguns componentes padrão de prototipagem. Prepare sua STM32 BlackPill

e um sensor HC-SR04

para a montagem.

STM32 BlackPill

HC-SR04

3.3V

Vcc

GND

Gnd

B9

Trig

B8

Echo

Confira novamente suas conexões com a tabela de fiação antes de ligar a placa. O diagrama abaixo ilustra como rotear os jumpers de alimentação e sinal.

Diagrama Fritzing mostrando uma STM32 BlackPill conectada a um HC-SR04 em uma protoboard

Veja como fica a montagem final do hardware na bancada:

Foto de um circuito montado na prática com uma STM32 BlackPill e um sensor HC-SR04

Inicialização do projeto

Abra seu terminal e crie um novo diretório para o espaço de trabalho, depois acesse-o:

mkdir hcsr04-stm32
cd hcsr04-stm32

Verifique se o seu ambiente reconhece o hardware de destino verificando as placas STM32 disponíveis:

pio boards stm32

Inicialize o projeto PlatformIO para a placa BlackPill F411CE usando o framework Arduino:

pio project init --board blackpill_f411ce --project-option "framework = arduino"

Configuração e código

Abra o projeto gerado e atualize o arquivo de configuração platformio.ini para corresponder às configurações abaixo, garantindo o suporte adequado à serial USB e formatação de ponto flutuante:

[env:blackpill_f411ce]
platform = ststm32
board = blackpill_f411ce
framework = arduino
upload_protocol = dfu
monitor_speed = 115200
build_flags = 
    -D PIO_FRAMEWORK_ARDUINO_ENABLE_CDC
    -D USBCON
    -Wl,-u,_printf_float

Crie e preencha seu arquivo de código-fonte em src/main.cpp com a lógica para acionar o sensor, medir a largura do pulso de eco e calcular a distância:

#include <Arduino.h>

const int trigger = PB9;
const int echo = PB8;

void setup() {
    Serial.begin(115200);

    pinMode(trigger, OUTPUT);
    pinMode(echo, INPUT);
}

void loop() {
    digitalWrite(trigger, LOW);
    delayMicroseconds(2);

    digitalWrite(trigger, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigger, LOW);

    long duration = pulseIn(echo, HIGH, 30000);

    if (duration > 0) {
        Serial.printf("Distance: %.2f cm\n", (duration * 0.0343) / 2.0);
    } else {
        Serial.println("Reading error");
    }

    delay(1000);
}

Execute o comando de build para compilar o firmware, enviá-lo para sua placa via DFU e abrir o monitor serial para ver as leituras em tempo real:

pio run -t upload -t monitor

Guias relacionados

Se você quiser experimentar ambientes alternativos ou plataformas de hardware, pode conferir como implementar o sensor ultrassônico HC-SR04 no MicroPython:

Sensor ultrassônico HC-SR04 no STM32 com MicroPython

Sensor ultrassônico HC-SR04 no STM32 com MicroPython

Aprenda a conectar e programar um sensor ultrassônico HC-SR04 com uma placa STM32 BlackPill usando MicroPython e o módulo machine.

Você também pode conferir como conectar o sensor ultrassônico HC-SR04 em uma Raspberry Pi Pico:

Sensor ultrassônico HC-SR04 no RPi Pico com Arduino

Sensor ultrassônico HC-SR04 no RPi Pico com Arduino

Aprenda a conectar o sensor ultrassônico HC-SR04 a um Raspberry Pi Pico usando o framework Arduino e o PlatformIO.

Ou explorar como configurar o sensor ultrassônico HC-SR04 em um ESP32:

Sensor ultrassônico HC-SR04 no ESP32 com Arduino

Sensor ultrassônico HC-SR04 no ESP32 com Arduino

Aprenda a conectar e programar um sensor ultrassônico de distância HC-SR04 com uma placa ESP32 usando o framework Arduino e PlatformIO.