I2C超声波模块

来自YFRobotwiki
跳转至: 导航搜索
超声波I2C模块

产品简介


超声波模块采用IIC接口通讯模式,可提供 2cm-300cm的非接触式距离感测功能,测距精度可达高到 3mm。

注意:

1、此模块不宜带电连接,若要带电连接,则先让模块的 GND端先连接,否则会影响模块的正常工作。

2、测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则影响测量的结果


规格参数

  • 供电电压:DC3.3V-DC5V
  • 工作电流:约3mA
  • IIC通讯地址:0x57(不可更改)
  • 感应角度:约30度
  • 探测距离:2cm-300cm
  • 精度:3mm
  • 接口类型:PH2.0-4P
  • 外形尺寸:单位mm

乐高兼容模块外壳尺寸.png


工作原理

超声波I2C模块-IIC传输格式

超声波I2C模块-IIC命令格式


向模块写入 0X01,模块开始测距;等待 100mS(模块最大测距时间)以上。直接读出 3 个距离数据。BYTE_H,BYTE_M 与 BYTE_L。

距离计算方式如下(单位 mm):

  • 距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000


引脚说明

LEGO-IIC超声波-PINOUT


应用示例

电路连接

超声波模块 Arduino UNO
GND GND
VCC +5V
SDA A4/SDA
SCL A5/SCL


示例代码

#include <Wire.h> 
float               distance = 0;                       //距离数据十进制值
float               ds[3];                              //3个8BIT距离数据
 
void setup()
{
  Serial.begin(9600);                                   //定义串口波特率9600 出厂默认波特率9600
  Wire.begin();
  Serial.println("RCWL-1605-IIC 测距开始:"); 
}
 
void loop() 
{
   char i = 0;
    ds[0]=0;
    ds[1]=0;
    ds[2]=0;                                            //初始化3个8BIT距离数据为0
 
   Wire.beginTransmission(0x57);                        //地址为0X57 写8位数据为AE,读8位数据位AF
   Wire.write(1);                                       //写命令0X01,0X01为开始测量命令 
   Wire.endTransmission();                              //IIC结束命令 
 
   delay(120);                                          //测量周期延时,一个周期为100mS,设置120MS,留余量    
 
   Wire.requestFrom(0x57,3);                            //地址为0X57 读3个8位距离数据       
    while (Wire.available())
    {
     ds[i++] = Wire.read();
    }        
 
   distance=(ds[0]*65536+ds[1]*256+ds[2])/10000;        //计算成CM值     
   Serial.print("距离:"); 
 
   if ((1<=distance)&&(900>=distance))                  //1CM-9M之间数值显示 
    {
     #if 0
     Serial.println();    
     Serial.print(ds[0]);
     Serial.println();    
     Serial.print(ds[1]);
     Serial.println();    
     Serial.print(ds[2]);    
     Serial.println();      
     #endif                                             //#if 1,输出IIC的3个距离数据
 
    Serial.print(distance);
    Serial.print(" CM ");  
    }
   else 
    {
    Serial.print(" - - - - ");                          //无效数值数值显示 - - - - 
    }
 
    Serial.println();                                   //换行
 
    delay(30);                                          //单次测离完成后加30mS的延时再进行下次测量。防止近距离测量时,测量到上次余波,导致测量不准确。
    delay(100);                                         //延时100mS再次测量,延时可不要
}

程序运行结果:超声波对着墙,测出实时距离,串口打印测距结果:


参考资料







访问论坛 论坛邀请码获取 技术交流群
淘宝企业店 淘宝直营店 联系我们