之前在学校的毕业设计就是这个,当时找资料感觉还真的贼费劲,虽然多但是代码全的还是少,现在又看到了稍作修改分享给大家.
1.基本原理
STM32F407正点原子的开发板加超声波模块HC-SR04,基本原理不多废话,两张图解释下吧,之前写的仅供参考
2.连接方式
连接方式:VCC–> +5V TRIG–>PF15 ECHO–>PA0 GND–>GND
3.主要功能
通过模块的返回信号测距,我加上了一个蜂鸣器报警,当距离低于5厘米的时候蜂鸣器报警,有按键控制,但是好像有点问题,所以就是开机自动测距,间隔为200ms,每次测量一次距离LED就闪烁一次,距离低于5cm时报警,测距模块精确到0.3cm,我感觉还是挺靠谱的,但是不适合运用于精确测量.上图
测量的到屋顶的距离,和用手遮挡的距离(忽略界面,应该要改进的).
4.驱动程序
程序简单主要是通过原子的代码修改的,原理就是输入捕获,给模块一个10us以上的高电平,然后捕获模块接收到回波然后给单片机的高电平,然后用公式distance=340*temp/2就得到了距离.
main函数
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "lcd.h"
#include "beep.h"
#include "key.h"
extern u8 TIM5CH1_CAPTURE_STA; //ÊäÈ벶»ñ״̬
extern u32 TIM5CH1_CAPTURE_VAL; //ÊäÈ벶»ñÖµ
int main(void)
{
//u8 key; //±£´æ¼üÖµ
float distance=0.0;
long long temp=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÖжÏÓÅÏȼ¶·Ö×é
delay_init(168); //ÑÓʱº¯Êý³õʼ»¯
uart_init(115200); //´®¿Ú²¨ÌØÂÊ115200
LED_Init();
KEY_Init();
BEEP_Init();
LCD_Init(); //LCD³õʼ»¯
LCD_Clear(WHITE);
LCD_ShowString(50,40,210,24,24," Distance is : ");
LCD_ShowString(60,80,140,24,24," xxxxx ");
LCD_ShowString(60,120,160,24,24,"m m");
TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1);
while(1)
{
//key=KEY_Scan(0); //µÃµ½¼üÖµ
//if(key)
//{
delay_ms(10);
GPIO_SetBits(GPIOF,GPIO_Pin_15);
delay_us(20);
GPIO_ResetBits(GPIOF,GPIO_Pin_15);
if(TIM5CH1_CAPTURE_STA&0X80) //³É¹¦²¶»ñµ½Ò»´Î¸ßµçƽ
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=0XFFFFFFFF; //Òç³öʱ¼ä×ܺÍ
temp+=TIM5CH1_CAPTURE_VAL; //µÃµ½×ܵĸߵçƽʱ¼ä
distance=340*temp/2000.0; //¾àÀëÖµ
LCD_ShowxNum(60,80,((u32)(distance)),10,24,0); //LCDÏÔʾʵ¼Ê²âÁ¿Öµ
TIM5CH1_CAPTURE_STA=0; //¿ªÆôÏÂÒ»´Î²¶»ñ
delay_ms(100);
if(distance<50) //¾àÀëСÓÚ5ÀåÃ×·äÃùÆ÷±¨¾¯
{
GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_ms(500);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
}
GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10); //ÿ²¶»ñÒ»´ÎLEDÉÁ˸һ´Î
delay_ms(200);
GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
TIM5CH1_CAPTURE_STA=0; //¿ªÆôÏÂÒ»´Î²¶»ñ
}
}
// }
}
定时器程序,就是正点原子的例程,定时器5通道1,代码注释有点问题,老是卡死,还是截图吧
led.c
beep.c
主要就这么多还有个LCD屏的驱动程序,就是原子的不用改直接用都行,代码太多了不贴了,不过有个问题,就是在模块的触发脚不连接单片机的时候模块也能工作,没加按键控制这倒是不影响,有兴趣的可以加一下按键控制,但是我感觉这样测得的值有可能不准.希望对你们有帮助吧最后祝大家毕业快乐.