I code it

Code and Life

Arduino超声波测距模块使用

上一篇文章中试验了最简单的一个Arduino:LED的闪烁,这个文章里来讨论如何使用URM37超声波模块来进行距离测试。

环境搭建:

  1. Arduino基板一块
  2. 扩展板Expansion v4一块
  3. URM37 V3.2模块一块
  4. 排线4根
  5. 基板自带的USB连接线一根

图 URM37 V3.2

图 电路连接图

URM37 V3.2的串口通信协议下的测距命令如下:

0x22+Degree+NC+SUM,degree为控制电机的角度,此处设置为0,NC设置为0,响应格式为0x22+High(distance)+Low(distance)+SUM,如果读取的值非法,则返回0x22+0xFF+0xFF+SUM。

URM37 V3.2支持两种模式的串口通信:RS232及TTL。我们在这个实验中,使用TTL模式,其跳线配置如下:

图 TTL模式

接线方式很简单,URM37的1号线接5V,2号线接GND, 8号线RXD接基板的1号I/O口(TX),9号线TXD接基板的0号I/O口(RX),这个是串口通信的标准接法。

应该注意的是,如果使用扩展板(我用的是DFRduino的扩展板Expansion V4)的话,需要将URM37的RXD和TXD与基板的Data行连接,用以传输数据。

   1: int usval = 0;
   2: int timecount = 0;
   3: int ledpin = 13;
   4: boolean flag = true;
   5:  
   6: uint8_t DMCmd[4] = {0x22, 0x00, 0x00, 0x22};
   7:  
   8: void setup(){
   9:   Serial.begin(9600);
  10:   pinMode(ledpin, OUTPUT);   //设置13号口为输出
  11:   digitalWrite(ledpin, LOW); //灭掉LED
  12:   delay(200);
  13: }
  14:  
  15: void loop(){
  16:   flag = true;
  17:   
  18:   for(int i = 0; i < 4; i++){
  19:     Serial.write(DMCmd[i]);//发送命令
  20:   }
  21:   
  22:   delay(100);
  23:   
  24:   while(flag){
  25:     if(Serial.available() > 0){
  26:       int header = Serial.read(); //读头,一个字节,下同
  27:       int high = Serial.read();   //读高位
  28:       int low = Serial.read();    //读低位
  29:       int sum = Serial.read();    //读校验值
  30:       
  31:       if(high == 255){//invalid
  32:         usval = 65525;
  33:       }else{
  34:         usval = high * 255 + low;
  35:         
  36:         //如果距离超过50厘米,则点亮LED
  37:         if(usval > 50){
  38:           digitalWrite(ledpin, HIGH);
  39:         }else{
  40:           digitalWrite(ledpin, LOW);
  41:         }
  42:         
  43:         //实时输出距离信息
  44:         Serial.print("distance = ");
  45:         Serial.println(usval);
  46:         flag = false;
  47:       }
  48:     }
  49:     delay(100);
  50:   }
  51: }

 

图 测试效果

URM37 V3.2的还具有RS232串口通信方式,温度测试等,我将在随后的实验中逐一记录。

Comments