“I2C超声波模块”的版本间的差异

来自YFRobotwiki
跳转至: 导航搜索
 
(未显示1个用户的12个中间版本)
第1行: 第1行:
 
+
[[Image:超声波-IIC.png|400px|thumb|超声波I2C模块]]
<img src="http://www.yfrobot.com.cn/wiki/images/f/f8/%E8%B6%85%E5%A3%B0%E6%B3%A2-IIC.png" style="float:right; margin: 15px;" width="30%" alt="yfrobot_vc_kit_v"/>
+
 
+
<!--
+
[[Image:超声波-IIC.png|400px|thumb|超声波I2C模块]]-->
+
 
+
 
+
 
+
 
=== 产品简介 ===
 
=== 产品简介 ===
 
<br>
 
<br>
第17行: 第10行:
  
 
2、测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则影响测量的结果
 
2、测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则影响测量的结果
 
 
 
 
=== 工作原理 ===
 
 
 
[[Image:IIC传输格式.png|600px|超声波I2C模块-IIC传输格式]]
 
 
 
[[Image:IIC命令格式.png|600px|超声波I2C模块-IIC命令格式]]
 
 
 
<br>
 
向模块写入 0X01,模块开始测距;等待 100mS(模块最大测距时间)以上。直接读出 3 个距离数据。BYTE_H,BYTE_M 与 BYTE_L。
 
 
距离计算方式如下(单位 mm):
 
 
*'''距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000'''
 
 
  
  
 
=== 规格参数 ===
 
=== 规格参数 ===
<br>
 
 
*供电电压:DC3.3V-DC5V  
 
*供电电压:DC3.3V-DC5V  
 
*工作电流:约3mA
 
*工作电流:约3mA
第53行: 第25行:
  
  
 +
=== 工作原理 ===
 +
[[Image:IIC传输格式.png|600px|超声波I2C模块-IIC传输格式]]
  
 +
[[Image:IIC命令格式.png|600px|超声波I2C模块-IIC命令格式]]
  
=== 引脚说明 ===
 
 
<br>
 
<br>
 +
向模块写入 0X01,模块开始测距;等待 100mS(模块最大测距时间)以上。直接读出 3 个距离数据。BYTE_H,BYTE_M 与 BYTE_L。
  
[[Image:LEGO声音传感器-PINOUT.png |LEGO-声音传感器-PINOUT]]
+
距离计算方式如下(单位 mm):
  
 +
*'''距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000'''
 +
 +
 +
=== 引脚说明 ===
 +
[[Image:IIC超声波-pinout.png|600px|LEGO-IIC超声波-PINOUT]]
  
  
 
=== 应用示例 ===
 
=== 应用示例 ===
<br>
 
 
'''电路连接'''
 
'''电路连接'''
<br>
+
{|border="1" cellspacing="0" cellpadding="5" width="600px"
<br>
+
{|border="1" cellspacing="0" align="center" cellpadding="5" width="800px"
+
 
|-
 
|-
 
|align="center"|超声波模块
 
|align="center"|超声波模块
 
|align="center"|Arduino UNO
 
|align="center"|Arduino UNO
 +
|-
 +
|align="center"|GND
 +
|align="center"|GND
 
|-
 
|-
 
|align="center"|VCC
 
|align="center"|VCC
 
|align="center"|+5V
 
|align="center"|+5V
 
|-
 
|-
|align="center"|Trig
+
|align="center"|SDA
|align="center"|A2
+
|align="center"|A4/SDA
 
|-
 
|-
|align="center"|Echo
+
|align="center"|SCL
|align="center"|A3
+
|align="center"|A5/SCL
|-
+
|align="center"|GND
+
|align="center"|GND
+
 
|}
 
|}
<br>
 
'''示意图'''
 
<br>
 
<img src="http://yfrobot.gitee.io/wiki/img/超声波测距.png"  alt="超声波" />
 
 
  
  
第94行: 第66行:
 
<br>
 
<br>
 
<source lang="c">
 
<source lang="c">
//HC_SR04 Test
 
  
const int TrigPin = A2;
+
#include <Wire.h>
const int EchoPin = A3;
+
float              distance = 0;                       //距离数据十进制值
float cm;
+
float               ds[3];                             //3个8BIT距离数据
  
 
void setup()
 
void setup()
 
{
 
{
   Serial.begin(9600);
+
   Serial.begin(9600);                                   //定义串口波特率9600 出厂默认波特率9600
   pinMode(TrigPin, OUTPUT);
+
   Wire.begin();
   pinMode(EchoPin, INPUT);
+
   Serial.println("RCWL-1605-IIC 测距开始:");  
 
}
 
}
void loop()
+
 
 +
void loop()  
 
{
 
{
  digitalWrite(TrigPin, LOW);  
+
  char i = 0;
  delayMicroseconds(2);
+
    ds[0]=0;
  digitalWrite(TrigPin, HIGH);
+
    ds[1]=0;
  delayMicroseconds(10);
+
    ds[2]=0;                                            //初始化3个8BIT距离数据为0
  digitalWrite(TrigPin, LOW);
+
   
 
+
  Wire.beginTransmission(0x57);                       //地址为0X57 写8位数据为AE,读8位数据位AF
  cm = pulseIn(EchoPin, HIGH) / 58.0;   //echo time conversion into a distance
+
  Wire.write(1);                                       //写命令0X01,0X01为开始测量命令
  cm = (int(cm * 100.0)) / 100.0;       //keep two decimal places
+
  Wire.endTransmission();                             //IIC结束命令
  Serial.print(cm);
+
         
  Serial.print("cm");
+
  delay(120);                                         //测量周期延时,一个周期为100mS,设置120MS,留余量   
   Serial.println();
+
 
  delay(1000);
+
  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再次测量,延时可不要
 
}
 
}
 
</source>
 
</source>
程序下载地址:[https://eyun.baidu.com/s/3jHDcxYu HC_SR04_Test]
 
  
 程序运行结果:超声波对着墙,测出实时距离 结果 如图
+
 程序运行结果:超声波对着墙,测出实时距离,串口打印测距 结果:
<br>
+
<br>
+
[[Image: 超声波测试结果图.png|400px|center|超声波测试结果图]]
+
<br>
+
  
  
第142行: 第141行:
 
</html>
 
</html>
 
-->
 
-->
 +
 +
 +
 +
 +
 +
 +
  
 
----
 
----

2024年4月24日 (三) 11:25的最后版本

超声波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再次测量,延时可不要
}

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


参考资料







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