宜昌老张

动手制作超声波测距仪

0
阅读(6799)

这 个超声波型号为URM37 V3.2的测距传感器是一种智能传感器,所谓智能传感器就是信号采集,数字处理,和信息传送为一体。用户只要通过单片机TTL电平串口,向传感器发出四个 字节的信息读取命令,传感器接收命令后,会向单片机发回四个字节的信息,这四个字节里有两个字节就是16位被测距离信息。如果高位字节和低位字节都是 0xFF,这意味着测量无效,超出测量范围,否则,高位字节乘以256再加上低位字节就是被测距离,单位是厘米。

 本实验的Arduino设备源于DFrobot官方旗舰店: http://dfrobot.taobao.com/

请看URM37V3.2超声波测距传感器文章:http://www.roboticfan.com/blog/user_2005/1229/201047153354.shtml

实验照片:


通过Labview前面板显示的距离信息与卷尺对比,测量比较精确。URM37V3.2超声波测距模块与单片机是通过TTL模式的串口连接的,只需四根线:VCC、GND、TXD,RXD具体接线图如下:


其实这个智能传感器除了测距,还有一些附加的实用功能,这样我把它的说明书给大家看,请下载

20990613756993.rar

URM37V3.2超声波测距传感器与Arduino控制器的串口连线,可通过4根杜邦线一端插在传感器的引针上,另一端插在层叠在Arduino控制器的传感器扩展板的引针上。如图所示:


注意:当通过USB,下载Arduino程序,传感器的RXD和TXD这两根杜邦线要拔掉,否则无法下载程序。

讲到这里,另外再提一个话题,Arduino用户需特别注意,我曾经出现过类似下载故障:

在 使用Arduino的过程中,最令人头痛的估计就是bootloade毁坏,需要重新烧写bootloader了。最常见的一种情况就是,在 Arduino IDE环境中下载程序的时候,较长时间没有反应,这时很多人就直接选择断开USB连接线或者电源,然后就会出现无法再上传程序的错误。其实出现这种情况时 正确的做法是一直等到Arduino超时返回出错信息,直接断电的做法往往会导致bootloader毁坏。如果bootloader毁坏,唯一的办法就 是通过ISP下载线重新烧写bootloader。

这个实验的Arduino程序的任务是:

    向传感器发出“读取距离信息”的命令,Ardiuno控制器马上接收传感器返回的距离信息,并把两个字节的距离信息换算为十进制数据,如果该数据小于等于30厘米,则连接在控制器数字接口的LED灯亮,否则熄灭。然后向上位机发送即将上传距离值的标志和两个字节的距离信息,上位机当接受到标志后,马上就接受两个字节的距离信息,再运算后把传感器所测距离实时显示在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[i],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(10,BYTE);//上传即将发送距离值的标志
         Serial.print(highbyte,BYTE);//向上位机LABVIEW软件
         Serial.print(lowbyte,BYTE);//输出距离
         flag=false;
       }
    }
    delay(100); //

 

上位机Labview前面板:


上位机Labview框图程序:


 

程序下载:10513969584274.zip

采用Labview、Arduino控制器和超声波智能传感器,象搭积木一样很快组建出自己的超声波测距仪。

实验时,把手掌当做障碍物,伸入到超声波传感器的视野里,前后晃动手掌,Labview前面板的滑动杆上的游标也跟着晃动,蛮有意思的!