这个超声波型号为URM37 V3.2的测距传感器是一种智能传感器,所谓智能传感器就是信号采集,数字处理,和信息传送为一体。用户只要通过单片机TTL电平串口,向传感器发出四个字节的信息读取命令,传感器接收命令后,会向单片机发回四个字节的信息,这四个字节里有两个字节就是16位被测距离信息。如果高位字节和低位字节都是0xFF,这意味着测量无效,超出测量范围,否则,高位字节乘以256再加上低位字节就是被测距离,单位是厘米。
实验照片:
通过Labview前面板显示的距离信息与卷尺对比,测量比较精确。URM37V3.2超声波测距模块与单片机是通过TTL模式的串口连接的,只需四根线:VCC、GND、,具体接线图如下:
其实这个智能传感器除了测距,还有一些附加的实用功能,这样我把它的说明书给大家看,请下载:
URM37V3.2超声波测距传感器与Arduino控制器的串口连线,可通过4根杜邦线一端插在传感器的引针上,另一端插在层叠在Arduino控制器的传感器扩展板的引针上。如图所示:
注意:当通过USB,下载Arduino程序,传感器的RXD和TXD这两根杜邦线要拔掉,否则无法下载程序。
讲到这里,另外再提一个话题,Arduino用户需特别注意,我曾经出现过类似下载故障:
在使用Arduino的过程中,最令人头痛的估计就是bootloade毁坏,需要重新烧写bootloader了。最常见的一种情况就是,在Arduino IDE环境中下载程序的时候,较长时间没有反应,这时很多人就直接选择断开USB连接线或者电源,然后就会出现无法再上传程序的错误。其实出现这种情况时正确的做法是一直等到Arduino超时返回出错信息,直接断电的做法往往会导致bootloader毁坏。如果bootloader毁坏,唯一的办法就是通过ISP下载线重新烧写bootloader。
这个实验的Arduino程序的任务是:
向传感器发出“读取距离信息”的命令,再马上接收传感器返回的距离信息,并把两个字节的距离信息换算为十进制数据,如果该数据小于等于30厘米,则连接在控制器数字接口的LED灯亮,否则熄灭。然后把两个字节的距离信息上传给上位机的Labview软件,以便Labview前面板实时显示传感器所测距离。
int USValue
= 0;//定义存放超声波测量距离
int ledpin =11; //定义灯作显示,小于30CM,灯亮
boolean
flag=true;
byte DMcmd[4] = {0x22, 0x00, 0x00, 0x22};
//距离命令
void
setup() {
Serial.begin(9600); //串口波特率设置
pinMode(ledpin,OUTPUT); //初始化,把灯熄灭
digitalWrite(ledpin,HIGH);
delay(200);
}
void loop(
)
{
flag=true;
for(int i=0;i<4;i++)
{
Serial.print(DMcmd,BYTE);//发送超声波测距命令
}
delay(75); //一个延时
while(flag)
{
if(Serial.available()>0) //查询串口有无数据
{
byte header=Serial.read(); //0x22开始接收距离数据
byte
highbyte=Serial.read();//距离数据高8位
byte
lowbyte=Serial.read();//距离数据低8位
byte
sum=Serial.read();//sum校验和
if(highbyte==255) //数据无效
{
USValue=65525; //
}
else
{
USValue =
highbyte*256+lowbyte;
if (USValue <=30)
{//如果距离小于30厘米小灯亮起
digitalWrite(ledpin,LOW);
}//如果距离大于30厘米小灯熄灭
else
digitalWrite(ledpin,HIGH);
}
Serial.print(highbyte,BYTE);//向上位机LABVIEW软件
Serial.print(lowbyte,BYTE);//输出距离
flag=false;
}
}
delay(100); //
}
上位机Labview前面板:
上位机Labview框图程序:
从上图Labview框图程序看出,程序中“索引数组”VI,被索引出第4、5个元素就是超声波智能传感器提供的那两个字节的距离信息,为啥第4、5个元素是距离信息那?你仔细看看Arduino程序,每一次主程序,即void loop( )循环,它首先从串口向传感器发出了四个字节的距离采集命令,Arduino控制器与传感器连接的TTL模式的串口和Arduino控制器与PC机连接的串口是一个串口,接着主程序又向串口发出了采集到的两个字节的距离信息给Labview。所以每次void loop( )循环,Labview要读取六个字节,所以0~5个元素的数组里,第4、5个元素才是距离信息。
采用Labview、Arduino控制器和超声波智能传感器,象搭积木一样很快组建出自己的超声波测距仪。
实验时,把手掌当做障碍物,伸入到超声波传感器的视野里,前后晃动手掌,Labview前面板的滑动杆上的游标也跟着晃动,蛮有意思的!
文章评论(0条评论)
登录后参与讨论