发作品签到
专业版

超声测距仪器

工程标签

224
0
0
1

简介

基于立创地文星的超声测距仪

简介:基于立创地文星的超声测距仪
基于立创开发板电子设计征集令

开源协议

GPL 3.0

创建时间:2024-10-12 11:43:37更新时间:2024-10-31 02:07:49

描述

立创地文星开发板(CW32C8T8)测距尺子

需求和设计

实时监测障碍物距离并显示在oled屏幕上

image.png

物料成本

  1. 立创地文星开发板(CW32F030C8T6)      9.9元,活动价1元
  2. 0.96寸oled          7.9元
  3. HC-SR04模块        4.98元
  4. IP5306         1.53元
  5. 微动按键       忽略不计
  6. 电容电阻若干      忽略不计
  7. PCB板       免费打样
  8. 3D打样外壳       免费打样

原理

超声波

超声波是频率高于人类听觉极限的高音调声波,人耳可以听到的声波振动范围从每秒20次左右(隆隆的隆隆声)到每秒20,000次左右(尖锐的啸叫声)。但是,超声波的频率超过20,000 Hz,因此人类听不到。

image.png
HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。HC-SR04超声波测距模块提供2cm~400cm的测距功能,精度达3mm

以我们可以直接通过GPIO口来输出以及输入时序所需的电平信号。脉冲被反射回去,则在收到信号后,Echo引脚就会变低。这会产生一个脉冲,其宽度在150 µS至25 mS之间变化,具体取决于接收信号所花费时间。众所周知,声音的速度为340m/s,因此我们将回响电平的时间除340再除2之后得到的就是单位为米的测距结果。

v2-4531511ce54ac2a86f2addf57987bbb8_b.webp
通过时序图我们可以知道,我们给HC-SR04发送长达10us的TTL脉冲,然后模块就会进行测距,测距的结果通过回响信号传达,回响的TTL电平信号时间即是超声波从HC-SR04模块发出,触碰到障碍物后返回到HC-SR04模块的时间总和。

```C
float Hcsr04GetLength(void)
{
	/*测5次数据计算一次平均值*/
	float length = 0;
	float t = 0;
	float sum = 0;
	unsigned int  i = 0;
	while(i != 10)
	{
									
		SR04_TRIG(1);//trig拉高信号,发出高电平
		delay_1us(20);//持续时间超过10us
		SR04_TRIG(0);//trig拉低信号,发出低电平
		/*Echo发出信号 等待回响信号*/
		/*输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;
		(此时应该启动定时器计时);当超声波返回被模块接收到时,回波引 脚端的电平会由1变为0;
		(此时应该停止定时器计数),定时器记下的这个时间即为
										超声波由发射到返回的总时长;*/
		
		while(SR04_ECHO() == GPIO_Pin_RESET);//echo等待回响
		
		Open_Timer();   //打开定时器 

		i++;
		
		while(SR04_ECHO() == GPIO_Pin_SET);
		
		Close_Timer();   // 关闭定时器  
		
		t = Get_TIMER_Count();   // 获取时间,分辨率为1us
		length = (float)t / 58.0f;   // cm  
		sum += length;    
	}
	
	length = sum/10;//五次平均值
	distance = length;
	return length;
}
![image.png](//image.lceda.cn/oshwhub/5e6ea37113ec43a8add19086763ed349.png)

### 最后把数据显示在oled上
```C
 OLED_Init();    //初始化OLED
    OLED_Clear();
  	Ultrasonic_Init();
	  float length = 0.0;
  	char len[6];
	  delay_ms(1000);
    while(1) 
    {
				length = Hcsr04GetLength();	
			  snprintf(len, sizeof(len), "%.2f", length);
			  OLED_ShowString(46,0,(uint8_t *)"length",16,1);
        OLED_ShowString(0,22,(uint8_t *)len,24,1);
			  OLED_ShowString(64,22,(uint8_t *)"CM",24,1);
			  
        OLED_Refresh();
        delay_ms(500);
    }

image.png

源码与烧录文件已经上传

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
WeChat_20241026224926.mp4
2
2
Project.hex
2
3
CW32F030C8T6_ProjectTemplate.7z
8
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航