超声波测距(含报警,PWM控制LED呼吸)

摘要

         本系统硬件部分由电源模块、控制模块、OLED显示模块、报警模块、测距模块组成。电源模块采用78M05稳压芯片模块,目的是给单片机提供5V的稳定电压;控制模块用的是STM32F103C8T6芯片,用于控制整个测距系统的运行;显示模块用的OLED显示屏,用于显示系统所测的距离的值和报警值,单位mm和m;报警模块用的是蜂鸣器模块,在系统所测的距离值低于报警值时发出声光警报;测距模块采用的是HC-SR04超声波传感器模块,收到单片机的信号后会进行超声波的发射与接收。软件部分主要是配置各个模块的管脚及其输入输出方式,以及在何时启动各个模块的报警、采集数据的处理及传输。

 

功能描述:

1、采用STM32F103C8T6最小系统板。

2、OLED显示屏实时显示超声波测到的距离。

3、当超声波测出的实际距离小于设定的报警距离时就会使得蜂鸣器发出声音报警。

4、PWM输出控制LED亮暗程度。

5、测量范围:2cm--4m。

需要关注私聊!!!

实物成品图

f439bc57185a4546b6218167328552e8.jpeg

主要程序:

#include "stm32f10x.h"                 
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"
#include "HCSR04.h"
#include "PWM.h"
#include "BEEP.h"

uint64_t numlen(uint64_t num)//计算数字的长度
{
    uint64_t len = 1;        // 初始长度为1
    for(; num > 9; ++len)    // 判断num是否大于9,否则长度+1
        num /= 10;	         // 使用除法进行运算,直到num小于1
    return len;              // 返回长度的值
}

int main(void)
{	
	OLED_Init();		
	Timer_Init();		
	HC_SR04_Init();		
	PWM_Init();
	BEEP_Init();
	OLED_ShowString(1, 1, "Distance:");		

	while (1)
	{
		
		
		int Distance_mm=sonar_mm();			//获取距离测量结果,单位毫米(mm)		
		int Distance_m=Distance_mm/1000;	//转换为米(m)为单位,将整数部分放入Distance_m
		int Distance_m_p=Distance_mm%1000;	//转换为米(m)为单位,将小数部分放入Distance_m_p

		OLED_ShowNum(2, 1,Distance_m,numlen(Distance_m));	//显示测量结果的整数部分
		OLED_ShowChar(2, 1+numlen(Distance_m), '.');		//显示小数点
		if(Distance_m_p<100){								//判断是否小于100毫米
			OLED_ShowChar(2, 1+numlen(Distance_m)+1,'0');								//因为单位是米,所以小于10cm时要加0
			OLED_ShowNum(2, 1+numlen(Distance_m)+2,Distance_m_p,numlen(Distance_m_p));	//显示测量结果的小数部分
			OLED_ShowChar(2, 1+numlen(Distance_m)+2+numlen(Distance_m_p), 'm');			//显示单位
		}else																			
		{
			OLED_ShowNum(2, 1+numlen(Distance_m)+1,Distance_m_p,numlen(Distance_m_p));	//显示测量结果的小数部分
			OLED_ShowChar(2, 1+numlen(Distance_m)+1+numlen(Distance_m_p), 'm');			//显示单位
		}

		OLED_ShowNum(3, 1,Distance_mm,numlen(Distance_mm));		//显示单位为毫米的距离结果
		OLED_ShowString(3, 1 + numlen(Distance_mm), "mm");
		Delay_ms(100);						
    PWM_SetCompare3(Distance_mm/10);
		Delay_ms(10);	
		
		

	}
	
}

 

 

 

 

 

 

 

 

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白_往北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值