ESP32+hcsr04的超声波模拟雷达

前情提要

在逛淘宝的时候发现超声波模拟雷达居然敢卖这么贵,想了一下代码也不是很难,于是就写着试了下.

由于使用0.96寸oled无法实现较好效果,只能看看

使用0.96寸oled,hcsr04,esp32,sg90舵机.

模拟雷达效果图

 连线

io16接舵机信号线,io21和io22是i2c通信,21接屏幕SDA,22接SCL,io15接超声波trig,io2接echo,

屏幕以及超声波使用3.3v,舵机使用下方5v

软件

vscode+platformIO,比arduino好用点,主要是代码补全和调试界面舒服多了.

安装教材PlatformIO+VScode+ESP32开发环境搭建教程

建立项目

选择你的开发板,路径,开发语言.

由于需要做到模拟雷达的效果,所以需要更好的oled库,导入u8g2库,使用也很简单通过platformio中搜索u8g2库添加到该项目,同理,添加esp32servo库,将舵机库引入项目

随后直接添加

库函数和常数

#include <Arduino.h>
#include <U8g2lib.h>
#include <math.h>
#include<esp32servo.h>
Servo myservo;
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the 
### 设计基于 STM32 和 HC-SR04超声波雷达程序 为了实现基于 STM32 和 HC-SR04 超声波模块的雷达功能,可以按照以下方法构建完整的硬件和软件解决方案。 #### 1. 硬件连接 HC-SR04 模块有四个引脚:VCC、Trig、Echo 和 GND。这些引脚需要正确连接到 STM32 单片机上: - VCC 连接到 STM32 的电源正极 (通常为 3.3V 或 5V)。 - Trig 接到 STM32 的 GPIO 输出引脚(用于触发测量信号)。 - Echo 接到 STM32 的 GPIO 输入引脚(用于接收回响信号)。 - GND 连接到 STM32 的接地端[^1]。 #### 2. 初始化配置 在 STM32 中,需完成如下初始化工作: - 配置 Trig 引脚为输出模式。 - 配置 Echo 引脚为输入模式并启用中断检测(可选),以便更精确捕获脉冲宽度。 - 设置定时器来计算时间间隔或者通过直接读取寄存器的方式处理数据采集逻辑[^3]。 以下是头文件定义的一个例子: ```c #ifndef __HCSR04_H__ #define __HCSR04_H__ #include "stm32f10x.h" void Hcsr04_Init(void); float Get_Distance(void); #endif /* __HCSR04_H__ */ ``` #### 3. 主要代码结构 下面提供了一个简单的 C 文件框架作为参考,其中包含了必要的函数实现以及核心算法部分。 ##### (a)驱动层初始化 此函数负责设置 GPIO 及其他外设参数。 ```c void Hcsr04_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // TRIG Pin Configuration GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); // ECHO Pin Configuration GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA,&GPIO_InitStructure); } ``` ##### (b)获取距离值 该函数会发出一个短促的高电平信号给 Trig 引脚,并等待来自 Echo 引脚的时间响应,从而得出目标物体的距离。 ```c float Get_Distance(){ uint32_t TimeOut=0; GPIO_SetBits(GPIOA, GPIO_Pin_8); // Set Trigger HIGH for at least 10us. delay_us(10); // Wait for the required time period. GPIO_ResetBits(GPIOA, GPIO_Pin_8); // Reset trigger pin. while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)); // Wait until echo goes high. TIM6->CNT = 0; // Start counting when pulse begins. while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)){ if(++TimeOut > 7000)return -1; // Timeout after ~7ms (~4m range). } float Distance=(TIM6->CNT)*0.01715; // Convert count into cm using speed of sound formula. return Distance; } ``` 以上代码片段展示了如何利用 STM32 控制 HC-SR04 并获得实际物理量——即探测物之间的直线距离^。 #### 4. 数据显示与警报机制 如果希望进一步扩展项目,则可以通过 OLED 屏幕实时更新当前测得的数据;当检测数值低于设定阈值时启动蜂鸣器提醒用户注意安全等问题。这部分涉及到了多任务调度技术,在这里不做详述[^2]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值