基于cc2530超声波测距报警系统

1. 关于超声波传感器
简介:超声波传感器是将超声波信号转换成其他能量信号的传感器。超声波是振动频率高于20kHz的机械波超声波测距主要应用于一些工业现场的位置监控、移动机器人的自动避障行走、汽车倒车、建筑施工工地,可在潮湿高温。多尘等恶劣环境下工作。例如:液位、厚度、管道长度等场合。
技术特点:超声波具有指向性强、能量消耗缓慢且在介质中传播的距离较远的优点,因而经常用于距离的测量。相比于其它定位技术而言,超声波定位技术成本低、精度高、操作简单、工作稳定可靠,非常适合于短距离测量定位。cc2530单片机为许多控制提供了高度灵活和低成本的解决办法。

2 系统分析与设计
2.1 需求分析
2.1.1 系统概要
基于cc2530单片机超声波传感器测距报警系统利用人耳听不到的超声波(20000Hz以上)来作为探测源进行探测的设备称为超声波探测器,一般用于探测移动物体。超声波探测器的工作原理是利用超声波发射, 通过被测物体的反射、回波接收后的时差来测量被测距离的,当单片机接收到传感器测量的距离,通过双机通信把所测量的距离传到另一块单片机,通过另一块单片机根据不同的测距距离来驱动调光灯模块的灯光闪烁情况,来实现简单的基于超声波传感器测距的警报系统(也可使用蜂鸣器等其他硬件来实现报警应答。
2.1.2 系统简易流程图
2.1.2简易流程图


3 系统实现
3.1 硬件系统
超声波测距系统:
基于单片机的超声波测距系统,是利用单片机编程产生的高频率方波,经过发射驱动电路放大,使超声波传感器发射端震荡,发射超声波。超声波经过反射回来后,由传感器接收,再经接收电路放大、整形,控制单片机中断口。其系统框图3.1.1所示。


图3.1.1超声波测距系统框图
基本工作原理: (1)采用IO口TRIG触发测距,给至少10us的高电平信号; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2; 本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,即可以达到你移动测量的值(图3.1.2传感器原理图)

图3.1.2超声波传感器原理图
单片机为核心的超声波测距系统通过单片机记录超声波发射的时间和收到反射波的时间。当收到超声波的反射波时,接收电路输出端产生一个负跳变,在单片机的外部中断源输入口产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离

双机通讯系统:
通过杜邦线连接把两个实验板连接起来,把控制超声波的传感器的实验板的发送端口TXD与控制调光灯传感器的实验板接受端口RXD通过杜邦线连接起来组成简单的双机通信系统同步通信中,所有设备使用同一个时钟,以数据块为单位传送数据,每个数据块包括同步字符、数据块和校验字符。同步字符位于数据块的开头,用于确认数据字符的开始;接收时,接收设备连续不断地对传输线采样(如图3.1.4所示)说明本系统的双机通讯时是单向通讯

                    图3.1.4双机通讯原理图

报警提示系统:
本警报提示模块用调光灯的灯光闪烁状态来代替警报提示,对于cc2530而言,其I/O口可配置为输入或是输出,其控制寄存器为:PxDIR,设置其对应位为0则为输入,置位则为1,芯片复位时初始化为输入状态。为了控制LED,需要将其设置为输出引脚在分析电路图知道,当输出口为高电平时,灯不亮;当输出口为低电平时,灯会亮,那么在初始化时只要控制输出口的电平就可以控制调光灯的状态

图3.1.5调光灯原理图
3.2 软件设计
配置超声波传感器关键代码说明:
设置窗口发送函数,字符型窗口发送函数UartTX_Send_String数字型窗口发送函数UartTX_Send_Data,由于本次使用的是双机通讯,只需要用到数字窗口发送函数,把超声波的数据存放于 U0DBUF寄存器(U0DBUF = Data);设置定时器中断函数__interrupt void Timer1,这里设置成48us发生一次中断,用参数counter来记录定时器1发生中断的次数,然后根据超声波传感器的工作原理:distance = (distance48/1000000340/2*100);来计算出超声波所测到的距离,并通过data=distance语句把distance的值赋予data,然后通过UartTX_Send_Data函数发送数据。
配置双机通讯关键代码说明:
在cc2530开发板由于要实现双机通讯,所以要两块cc2530要保持相同的晶振频率CLKCONCMD &= ~0x40;选择32M晶振,CLKCONCMD = 0xb8TICHSPD 128分频,CLKSPD 不分频,用U0GCR |= 10; U0BAUD |= 216;将波特率设为57600,设置串口中断函数__interrupt void uart0,并通过uart_buffer = U0DBUF语句来接受寄存器的数据。
配置调光灯状态关键代码说明:
通过语句P0DIR |= (0x01 << 0) | (0x01 << 4);来设置设置P0.0为输出方式;P0.4方式,T1IE=0关闭定时器时调光灯调光灯呈现最亮状态,T1IE=1开启定时器时调光灯呈现微亮状态;当P0_4= 0开启调光灯,当P0_4= 1关闭调光灯

#include "ioCC2530.h"
#define uint8 unsigned char
unsigned char counter;
unsigned char buf[3];
float distance;
uint8 data;
void SendASignal(void)
{unsigned char i;P1 &= ~(1<<0);P1 |= (1<<0);  for(i=0;i<33;i++){asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");}P1 &= ~(1<<0);
}
void delay(void)
{unsigned int i;unsigned char j;for(i=0;i<5000;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
}
void UartTX_Send_String(unsigned char *Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = *Data++;   while(UTX0IF == 0);UTX0IF = 0;}
}void UartTX_Send_Data(unsigned char Data,int len)   //串口发送函数
{int j;for(j=0;j<len;j++){U0DBUF = Data;   while(UTX0IF == 0);UTX0IF = 0;}
}
#pragma vector=URX0_VECTOR   //uart0中断函数
__interrupt void uart0(void){URX0IF = 0; //清中断标志
}#pragma vector=T1_VECTOR   //定时器1中断函数 50us
__interrupt void Timer1(void){counter++;//P0_0=~P0_0;
}void main( void )
{P0DIR |= 0x01;  //设置P0.0为输出方式P2DIR |= 0x01;  //设置P2.0为输出方式P1SEL &= ~((1<<0)|(1<<1));//P1.0,P1.1为GPIO        P1DIR |= ((1<<0));        //P10为OUTPUTP1DIR &= ~(1<<1);         //P11为INPUTP1 &= ~(1<<0);P0_0 = 1; P2_0 = 1;                    //熄灭LEDcounter = 0;CLKCONCMD &= ~0x40;          //选择32M晶振while(!(SLEEPSTA & 0x40));   //等待XSOC稳定CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器T1CC0L = 6;T1CC0H = 0x00;               //比较值T1CTL = 0x33;                //通道0,不分频,up/down模式PERCFG = 0x00;               //位置1 P0 口P0SEL = 0x3c;                //P0 用作串口U0CSR |= 0x80;               //UART 方式U0GCR |= 10;                 //baud_e = 10;U0BAUD |= 216;               //波特率设为57600UTX0IF = 1;U0CSR |= 0X40;               //允许接收IEN0 |= 0x84;                //开总中断,接收中断   EA = 1;                      //开总中断T1IE = 1;                    //开定时器T1中断while(1){        P2_0=~P2_0;SendASignal();while(1){if(P1_1==1) break;}counter = 0;while(1){if(P1_1==0) break;}distance = counter;distance = (distance*48/1000000*340/2*100);counter = (unsigned int)distance;data=distance;if(data>30){UartTX_Send_Data('h',2);delay();}else{if(data>10&&data<30){UartTX_Send_Data('n',2);delay();}else{UartTX_Send_Data('l',2);}}}} // end of main()
#include "ioCC2530.h"     unsigned int counter;
char uart_buffer;void delay(void)
{unsigned int i;unsigned char j;for(i=0;i<1500;i++){for(j=0;j<200;j++){asm("NOP");asm("NOP");asm("NOP");}}
} #pragma vector=URX0_VECTOR   //uart0中断函数__interrupt void uart0(void){P2_0 = 0;URX0IF = 0; //清中断标志uart_buffer = U0DBUF;//UartTX_Send_Data('h',10);}void main( void )
{P0DIR |= (0x01 << 0) | (0x01 << 4);  //设置P0.0为输出方式;P0.4输出方式P2DIR |= 0x01;  //设置P2.0为输出方式P0_4 = 1;       //熄灭P0_0 = 1; P2_0 = 1;       counter = 0;CLKCONCMD &= ~0x40;          //选择32M晶振while(!(SLEEPSTA & 0x40));   //等待XOSC稳定CLKCONCMD = 0xb8;            //TICHSPD 128分频,CLKSPD 不分频SLEEPCMD |= 0x04;            //关闭不用的RC 振荡器T1CC0L = 0x00;   T1CC0H = 0x02;              //比较值T1CTL = 0x33;               //通道0,不分频,up/down模式PERCFG = 0x00;               //位置1 P0 口//   P0SEL = 0x3c;                //P0 用作串口U0CSR |= 0x80;              //UART 方式U0GCR |= 10;                //baud_e = 10;U0BAUD |= 216;              //波特率设为57600UTX0IF = 1;U0CSR |= 0X40;              //允许接收IEN0 |= 0x84;                //开总中断,接收中断  EA = 1;                     //开总中断while(1){if( uart_buffer=='l'){P0_4= 0;delay();P0_4= 1;delay();P0_4= 0;}if( uart_buffer=='n'){P0_4= 0;delay(); delay();}else {P0_4= 1;delay(); delay();}}
}

效果我用简单的流程图表示:
(10cm-20cm应改为10-30cm)

***本文章为我这个物联网小白所写,有错误的地方请各位大神多多指正
最近有太多同学私信问我拿这篇博客的源码啦,太多人问我很容易漏发给同学们,所以我把源码放在我的资源里啦有兴趣的同学可以花点积分下载哦(没有积分的可以去某宝搜csdn下载 doge)实在没有积分可以多次私信我,下载链接:https://download.csdn.net/download/weiweiweiIT/19759732

基于cc2530超声波测距报警系统相关推荐

  1. 基于单片机的TLC稳压电源系统设计-基于单片机大脑运算能力智力测试仪-基于单片机超声波测距系统仿真设计(报告 PCB 原理图)-基于单片机超高精度电参数测试设计-基于单片机变电站变压器运行参数监测仿真

    1316基于单片机的TLC稳压电源系统设计-毕设课设仿真资料 三极管射极电压是稳压电源的输出电压,可以接用电器或负载,这个电压值通过TLC549(A/D,同TLC548)数据转换后,送往单片机处理并显 ...

  2. 基于单片机超声波测距

    预期目标: 1.超声波模块测定发送源至障碍物的距离 2.数码显示管显示发送源到障碍物的距离 3.通过按键设定报警距离,当障碍物在一定超声范围内,蜂鸣器报警 硬件实物图及演示: 使用 HC6800-MS ...

  3. 基于arduino超声波测距学习

    ``# HC-SRO4 超声波测距 VCC 是HC-SR04超声波距离传感器的电源,我们连接了Arduino上的5V引脚. Trig (Trigger) 引脚用于触发超声波脉冲.(A0) Echo 回 ...

  4. 基于单片机超声波测距系统设计

    百度网盘下载地址(978):点击下载 摘要: 超声波指向性强,能量消耗缓慢,在介质中传播的距离比较远,因此超声波常用于障碍物的距离测量.由于超声波可以做到无接触检测距离,这一特性在人体获其他物体高度的 ...

  5. 基于VHDL超声波测距实验

    共有两个代码文件detect_distance_3和process_4添加到quartus II 9.0 工程文件中, 这两个文件分别对应作业中3和4 按照软件使用流程,编译,仿真添加激励信号,出波形 ...

  6. 基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真

    资料编号:145   下面是相关功能视频演示: 145-基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真(源码+原理图+仿真+论文) 设计内容 本次嵌入式课程设计综合实验的内 ...

  7. 汽车距离报警系统c语言编程,基于单片机的超声波汽车报警系统的设计

    目前汽车报警装置已被广泛应用,并种类繁多,但大多报警装置均有其局限性.如早期出现的红外报警系统,最大的缺点是红外线波易受干扰,整个系统的警示音常呈现不稳定的乱鸣状态,另外对深黑色粗糙表面物体的反应也较 ...

  8. 基于单片机的超声波测距

    设计简介: 本设计是基于单片机的超声波测距系统,主要实现以下功能: 可通过LCD1602显示温度.距离和最小距离: 可通过按键设置最小距离: 可通过蜂鸣器和LED进行不同频率的声光报警: 标签:51单 ...

  9. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发

    基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...

最新文章

  1. 查看linux是多少位的
  2. MATLAB 1\n\n
  3. JavaScript Book Plan
  4. python翻译成matlab_matlab语言转译成python
  5. Python 数据科学入门
  6. 爬虫基础12(框架Scrapy中间件)
  7. oracle应用程序开发,关于Oracle 数据库应用程序开发问题
  8. 【BZOJ4818】序列计数(动态规划,生成函数)
  9. CAD曲线快捷键是什么?CAD画曲线教程
  10. 怎样使用计算机解方程,【教程】用计算器解方程(牛顿法)
  11. hightopo学习笔记--2D编辑器使用
  12. CEILING_2_POWER
  13. pytorch中repeat方法
  14. js 重置表单 reset form
  15. 达芬奇密码 第七十一章
  16. 每天一个小技巧———idea恢复误删文件
  17. python matplotlib 绘制布林带
  18. 京东商城暂停所有地铁自提点:或因租金成本高
  19. 解读ChatGPT背后的技术重点:RLHF、IFT、CoT、红蓝对抗
  20. android引导页图片全屏适配,关于图片适配不同尺寸的image View(实战)

热门文章

  1. matlab径向基网络,MATLAB——径向基网络拟合曲线和分类
  2. 女神节,CRMEB向女神致敬!官方特别设计免费ui小图标来了!
  3. 制作商品详情页面案例
  4. Oracle Functions快速入门
  5. KubeSphere安装redis集群,全程超带劲
  6. 如何打造自己有创意的平面设计灵魂作品
  7. 腾讯云服务器的简单使用
  8. arduino双按钮同时点灯
  9. java常见单词汇总3(非常使用哦)
  10. 看看清华人是如何学习和生活的