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.
Veja como fica a montagem final do hardware na bancada:
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
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
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
Aprenda a conectar e programar um sensor ultrassônico de distância HC-SR04 com uma placa ESP32 usando o framework Arduino e PlatformIO.