1、单片机超声波测距设计书 单片机设计超声波测距仪设计书1. 概述22. 超声波测距模块驱动3. 步进电机驱动模块4. 12864液晶显示模块5. 报警设置6. 程序7. 总结 11. 概述通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离了。这与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2)超声波指向性强,在介质中传播的距离较远
2、,因而超声波经常用于距离的测量,如测距仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移 动机器人的研制上也得到了广泛的应用。 为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。本文所介绍的三方向(前、左、右)超声波系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。2超声波测距模块驱动 超声波模块驱动线路图 2 超声波模块控制时序图超声波模块启动程序void StartModule() /启动模块TX=1; /启动一次模块_nop_();
3、_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); 3_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;超声波实物图3、步进电机驱动模块 42相6线步进电机驱动方式L298N步进电机驱动芯片 5驱动芯片原理图L298N实物图 步进电机实物图 64、12864显示模块读字节时序图写字节时序图 12864显示实物图 75声光报警系统蜂鸣器、二极管实物图 86、程序#inc
4、lude#include#define uint unsigned int#define uchar unsigned char#define p P3uchar dat8=0x01,0x05,0x04,0x06,0x02,0x0a,0x08,0x09;uchar da8=0x01,0x09,0x08,0x0a,0x02,0x06,0x04,0x05;sbit rs=P24;sbit rw=P25;sbit e=P26;sbit TX=P10;sbit RX=P11;sbit key=P17;sbit beep=P21;sbit dong=P20;uchar table=0123456789;
5、uchar table1=-发现UFO-; 9uchar table2=距离:CM;uchar s;void delay50us(uint t) uint j; for(;t0;t-) for(j=19;j0;j-);delay(uint t) while(t-);void delay50ms(uint t) uint j; for(;t0;t-) for(j=6245;j0;j-); 10void zl(uchar com) rs=0; rw=0; P0=com; delay50us(2); e=1; delay50us(10); e=0; delay50us(2);void sj(ucha
6、r com) rs=1; rw=0; P0=com; delay50us(2); e=1; delay50us(10); e=0; delay50us(2); 11void init() delay50ms(2); zl(0x30); delay50us(4); zl(0x30); delay50us(4); zl(0x0c); delay50us(4); zl(0x01); delay50us(240); zl(0x06); delay50us(10);/*/void StartModule() /启动模块 TX=1; /启动一次模块 12 _nop_(); _nop_(); _nop_()
7、; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; 13 uchar display() uint a,b,c,time; time=TH0*256+TL0; TH0=0; TL0=0; s=(time*1.7)/100; /算出来是CM a=s/100; b=s%100/10; c=s%10; zl(0x93
8、); delay50us(1); sj(tablea); delay50us(2); sj(tableb); delay50us(2); sj(tablec); delay50us(2); return s; 14void bj() beep=0; delay(5); dong=0; beep=1; delay(5); beep=0; delay(4); beep=1; delay(4); beep=0; delay(3); beep=1; delay(3); beep=0; delay(2); beep=1; delay(2); beep=0; 15 delay(1); beep=1; de
9、lay(1);void main(void) uint t; init(); zl(0x90); delay50us(1); for(t=0;t0;w-) 16 for(e=0;e8;e+) uint t; TMOD=0x01; /设T0为方式1,GATE=1; TH0=0; TL0=0; ET0=1; /允许T0中断 EA=1; StartModule(); while(!RX); /当RX为零时等待 TR0=1; /开启计数 while(RX); /当RX为1计数并等待 TR0=0; /关闭计数 display(); if(s10) zl(0x81); for(t=0;t12;t+) sj
10、(table1t); 17 delay50us(2); while(key) bj(); beep=1; dong=1; init(); zl(0x90); delay50us(1); for(t=0;t0;w-) for(e=0;e8;e+) uint t; TMOD=0x01; /设T0为方式1,GATE=1; TH0=0; TL0=0; ET0=1; /允许T0中断 EA=1; StartModule(); while(!RX); /当RX为零时等待 TR0=1; /开启计数 while(RX); /当RX为1计数并等待 TR0=0; /关闭计数 display(); if(s10) zl(0x81); for(t=0;t12;t+) 19 sj(table1t); delay50us(2); while(key) bj(); beep=1; dong=1; init(); zl(0x90); delay50us(1); for(t=0;t8;t+) sj(table2t); delay50us(2); if(t=5) zl(0x95); 20 p=dae; delay50ms(1); 21
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1