
基于ESP32S3便携式无线测距仪
简介
基于ESP32S3便携式无线测距仪,超声波测距,OLED(128X32)显示。
简介:基于ESP32S3便携式无线测距仪,超声波测距,OLED(128X32)显示。开源协议
:TAPR Open Hardware License
描述
前言
工作中需要测量一些长度之类的数据,为了体现电子工程师的B格,特意做了一款个人专属测距仪。
从结果上看,还是有误差的。具体算法需要进一步优化。
其实很简单的哦。下面简单介绍一下哈。
硬件设计
主控选择
主控选用ESP32-S3开发板。这个用的越来越喜欢。
相关介绍,我不详细说了。参考https://lckfb.com/project/detail/lckfb-esp32s3r8n8?param=baseInfo
立创开发板的资料很全,比我讲的好。
这里只列出我的使用管脚原理图:
主要包括,LED指示灯,OLED显示,超声模块接口等。
超声测距模块
工作电压:3-5.5V
工作电流:5.3MA
感应角度:小于15度
探测距离:2CM-600CM
探测精度:0.1CM+1%
输出方式: GPIO
管脚数量:4 Pin
测距原理
只需要在 Trig 管脚(触发信号)输入一个 10US 以上的高电平,系统便可发出 8 个 40KHZ 的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过 Echo 管脚输出。根据 Echo 管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间*340m/s)/2。
这里预留排针即可:
按键电路
预留了4路按键,实际不需要那么多。
需要消抖哦。
显示电路
模块立创采购,方便的很。
预留好排针即可,注意上拉电阻。
IIC接口非常好用。
PCB设计
采用LC EDA 设计。
双面板设计。
外壳设计
采用LC EDA 设计。
上下壳设计,需要注意螺丝哦。
程序设计
主程序设计如下:
#include
#include
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "oled.h"
#include "esp_timer.h"
#include "bsp_ultrasonic.h"
#include "driver/gpio.h"
#include "esp_adc_cal.h"
#include "driver/adc.h"
#include "bsp_key.h"
void app_main(void)
{
char ss[32];
float dis=0;
bool key2_flag = 0, key3_flag = 0;
KeyGpioConfig();
OLED_Init(); // 初始化OLED
OLED_Clear();
OLED_DisplayTurn(1);
OLED_Refresh(); // 更新显示
Ultrasonic_Init();
printf("SR04 Start....\r\n");
while(1)
{
uint8_t key = GetKeyValue();
switch (key)
{
case 2:
key2_flag = !key2_flag;
break;
case 4:
key3_flag = !key3_flag;
break;
default:
break;
}
if(key2_flag==0)
{
dis=Hcsr04GetLength();
printf("dis: %0.2f\n",dis);
sprintf(ss,"%7.2fcm",dis);
OLED_Clear();
OLED_ShowString(0, 0, (unsigned char *)ss, 24, 1); // 6*8
}else{
printf("hold-dis: %0.2f\n",dis);
sprintf(ss,"%7.2fcm",dis);
OLED_Clear();
OLED_ShowString(0, 0, (unsigned char *)ss, 24, 1); // 6*8
OLED_ShowString(48, 23, (unsigned char *)"HOLD", 8, 1); // 6*8
}
OLED_Refresh();
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
调试输出
总结
还可以增加无线传输功能
还可以增加本地存储功能
还可以增加电池供电功能
不管咋样,第一步走出来了,还需要继续努力哦。
缺点是误差还是有的,需要改进方法。
设计图

BOM


评论