HC-SRO4测距模块的程序设计
来源:互联网 发布:java如何防止xss攻击 编辑:程序博客网 时间:2024/05/12 07:58
主要技术参数:
1:使用电压:DC5V 2:静态电流:小于2mA
3:电平输出:高5V 4:电平输出:底0V
5:感应角度:不大于15度 6:探测距离:2cm-450cm
7:高精度:可达0.3cm
板上接线方式,VCC、trig(控制端)、 echo(接收端), GND
工作原理:
(1)采用IO触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;
一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了~~
当时卖家声称该模块探测距离2-450cm,但是我在实验的时候发现探测距离最大为110cm,也有网友出现了和我类似的情况,个人感觉很可能是模块的问题,同时该模块的测距误差挺大的(声称精度高达0.3cm,实际精度远远低于0.3cm,3块钱能买到多好的东西呢?)
代码如下(该代码试验过,没有问题,大家可以根据自己的管脚设置,稍作修改即可):
#include<reg52.h>#define speed 340 //预定义声速(m/s)char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit INPUT=P3^2; //回声接收端口sbit OUTPUT=P3^1; //超声触发端口sbit wx=P2^6; //数码管锁存器(74hc573)段选,sbit dx=P2^7; //数码管锁存器(74hc573)位选long int distance; //定义距离unsigned int temp;void delay() //延时10us{ unsigned char a,b; for(b=1;b>0;b--) for(a=2;a>0;a--);}void delayms(unsigned int i) //延时(ms){ unsigned int j,k; for(j=0;j<i;j++) for(k=0;k<110;k++); }void Init() //定时器初始化{ TMOD=0x01; //选择定时器2,设置为16位自动重装模式 TL0=0x18; TH0=0xfc; //1ms ET0=1; //开定时器2 EA=1; //总中断使能}void Init_IO() // I/O初始化函数{ OUTPUT =1; INPUT = 1; temp = 0; distance = 0;}void ClrData() //清理数码管 { P0 = 0xff; //发送要显示的段码 dx = 1; dx = 0; P0 = 0xff; //发送要显示的位码,只显示一位数字 wx = 1; wx = 0; }void Display(unsigned char adress,unsigned char number) //显示函数,adress显示的是地址,number是要显示的数字(共阴极数码管) { unsigned char i; i=~(0x01<<adress); P0=i; wx=1; wx=0; P0=number; dx=1; dx=0; delayms(1); } void Trig_emit() //出发声波{OUTPUT = 1;delay(); //延时10usOUTPUT = 0;}void Measure_Distance() //测距函数{unsigned char l;unsigned int h,y;TR0 = 1;while(INPUT) { ; } TR0 = 0; //当input低电平时,说明一次接受完毕,开始计算距离。l = TL0;h = TH0;y = (h << 8) + l;y = y - 0xfc18; distance = y + 1000 * temp; //计算总时间(us)TL0 = 0x18; //重新为定时器赋值,为下次接收做准备TH0 = 0xfc;delayms(3);distance = speed * distance / 20000; //单位cm}void main(){ unsigned int b,c,d,e; while(1){Trig_emit(); //触发超声波发射while(INPUT == 0) //等待回声 { ; }Measure_Distance(); //计算脉宽并转换为距离 b=(distance/1000); c=(distance/100)%10; d=(distance/10)%10; e=distance%10;ClrData(); //清理数码管Display(1,table[b]);delayms(1);Display(2,table[c]);delayms(1);Display(3,table[d]-0x80); //减去0x80,显示小数点delayms(1);Display(4,table[e]);delayms(1); Init_IO(); // 参数重新初始化delayms(10); //延时,两次发射之间要至少有10ms间隔} }void timer0 (void) interrupt 1 //定时器中断函数{TF0 = 0;TL0 = 0x18;TH0 = 0xfc;temp++;if(temp==18) //超声波回声脉宽最多18ms{TR0 =0;TL0 = 0x18;TH0 = 0xfc;temp = 0;} }
0 0
- HC-SRO4测距模块的程序设计
- 基于HC-SRO4与nrf24l01的超声波对射实时测距系统
- HC-SR04 超声波测距模块/硬件/软件
- STM32f407驱动hc-sr04超声波测距模块
- STM32控制超声波测距模块HC-SR04
- 树莓派 超声波测距模块HC-SR04
- 树莓派之HC-SR04超声波测距模块
- HC-SR04 超声波测距模块说明
- Banana Pi的GPIO应用以及驱动HC-SR04超声波测距模块
- 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块
- HC-SR04 超声波测距模块 51串口读取代码
- HC-SR04 超声波测距模块 51串口读取代码
- Arduino 小玩意之 HC-SR04 超声波测距模块
- (17)用树莓派B+连接HC-sr04超声模块测距
- 树莓派-超声波测距(HC-SR04)的使用
- Wolf32F031 Freedom评估板上HC-SR04 超声波测距模块设计
- 单片机控制雷达测距模块HC-SR04测量距离(通过测试)
- 51单片机驱动HC-SR04超声波测距模块(LED1602显示结果)
- Tachyon:Spark生态系统中的分布式内存文件系统
- (HTML5)phonegap的基础入门(一)
- Codeforces_71A
- 蓝牙HC-05与Arduino Pro mini实现蓝牙防远离
- weblogic和tomcat的区别
- HC-SRO4测距模块的程序设计
- Windows环境下Android Studio v1.0安装教程
- 安卓从相机取出图片,并截图,然后对bitmap转换成base64的处理,和对base64转为bitmap的处理
- 高德地图——路线规划
- MySQL锁定状态查看命令
- Codeforces_158A
- 基于MFC的简单计算器
- 自定义控件(六)更改RatingBar的星星颜色
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd