“I2C超声波模块”的版本间的差异
来自YFRobotwiki
(未显示1个用户的18个中间版本) | |||
第1行: | 第1行: | ||
− | + | [[Image:超声波-IIC.png|400px|thumb|超声波I2C模块]] | |
− | + | ||
− | + | ||
− | + | ||
− | [[Image:超声波-IIC.png|400px|thumb|超声波I2C模块]] | + | |
− | + | ||
− | + | ||
− | + | ||
=== 产品简介 === | === 产品简介 === | ||
<br> | <br> | ||
第19行: | 第12行: | ||
+ | === 规格参数 === | ||
+ | *供电电压:DC3.3V-DC5V | ||
+ | *工作电流:约3mA | ||
+ | *IIC通讯地址:0x57(不可更改) | ||
+ | *感应角度:约30度 | ||
+ | *探测距离:2cm-300cm | ||
+ | *精度:3mm | ||
+ | *接口类型:PH2.0-4P | ||
+ | *外形尺寸:单位mm | ||
+ | |||
+ | [[Image:乐高兼容模块外壳尺寸.png|400px]] | ||
=== 工作原理 === | === 工作原理 === | ||
+ | [[Image:IIC传输格式.png|600px|超声波I2C模块-IIC传输格式]] | ||
+ | |||
+ | [[Image:IIC命令格式.png|600px|超声波I2C模块-IIC命令格式]] | ||
+ | |||
<br> | <br> | ||
向模块写入 0X01,模块开始测距;等待 100mS(模块最大测距时间)以上。直接读出 3 个距离数据。BYTE_H,BYTE_M 与 BYTE_L。 | 向模块写入 0X01,模块开始测距;等待 100mS(模块最大测距时间)以上。直接读出 3 个距离数据。BYTE_H,BYTE_M 与 BYTE_L。 | ||
距离计算方式如下(单位 mm): | 距离计算方式如下(单位 mm): | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | *'''距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000''' | ||
=== 引脚说明 === | === 引脚说明 === | ||
− | + | [[Image:IIC超声波-pinout.png|600px|LEGO-IIC超声波-PINOUT]] | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== 应用示例 === | === 应用示例 === | ||
− | |||
'''电路连接''' | '''电路连接''' | ||
− | + | {|border="1" cellspacing="0" cellpadding="5" width="600px" | |
− | + | ||
− | {|border="1" cellspacing="0 | + | |
|- | |- | ||
|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"| | + | |align="center"|SDA |
− | |align="center"| | + | |align="center"|A4/SDA |
|- | |- | ||
− | |align="center"| | + | |align="center"|SCL |
− | |align="center"| | + | |align="center"|A5/SCL |
− | + | ||
− | + | ||
− | + | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
第93行: | 第66行: | ||
<br> | <br> | ||
<source lang="c"> | <source lang="c"> | ||
− | |||
− | + | #include <Wire.h> | |
− | + | float distance = 0; //距离数据十进制值 | |
− | float | + | float ds[3]; //3个8BIT距离数据 |
void setup() | void setup() | ||
{ | { | ||
− | Serial.begin(9600); | + | Serial.begin(9600); //定义串口波特率9600 出厂默认波特率9600 |
− | + | Wire.begin(); | |
− | + | Serial.println("RCWL-1605-IIC 测距开始:"); | |
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | void loop() | |
− | + | { | |
− | + | char i = 0; | |
− | + | ds[0]=0; | |
− | Serial.println(); | + | 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再次测量,延时可不要 | ||
} | } | ||
</source> | </source> | ||
− | |||
− | 程序运行结果:超声波对着墙,测出实时距离 | + | 程序运行结果:超声波对着墙,测出实时距离,串口打印测距 结果: |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===参考资料=== | ===参考资料=== | ||
<br> | <br> | ||
− | * [https:// | + | * [https://pjfcckenlt.feishu.cn/wiki/wikcnkV8lr33YFQTfaHyMogLhUg 超声波 芯片 手册] |
− | + | <!-- | |
<p>'''垃圾桶安装视频教程'''</p> | <p>'''垃圾桶安装视频教程'''</p> | ||
第140行: | 第140行: | ||
<script type="text/javascript"> document.getElementById("rb").style.height=document.getElementById("rb").scrollWidth*0.7+"px"; </script> | <script type="text/javascript"> document.getElementById("rb").style.height=document.getElementById("rb").scrollWidth*0.7+"px"; </script> | ||
</html> | </html> | ||
+ | --> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
2024年4月24日 (三) 11:25的最后版本
产品简介
超声波模块采用IIC接口通讯模式,可提供 2cm-300cm的非接触式距离感测功能,测距精度可达高到 3mm。
注意:
1、此模块不宜带电连接,若要带电连接,则先让模块的 GND端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则影响测量的结果
规格参数
- 供电电压:DC3.3V-DC5V
- 工作电流:约3mA
- IIC通讯地址:0x57(不可更改)
- 感应角度:约30度
- 探测距离:2cm-300cm
- 精度:3mm
- 接口类型:PH2.0-4P
- 外形尺寸:单位mm
工作原理
向模块写入 0X01,模块开始测距;等待 100mS(模块最大测距时间)以上。直接读出 3 个距离数据。BYTE_H,BYTE_M 与 BYTE_L。
距离计算方式如下(单位 mm):
- 距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000
引脚说明
应用示例
电路连接
超声波模块 | 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再次测量,延时可不要 }
程序运行结果:超声波对着墙,测出实时距离,串口打印测距结果:
参考资料
访问论坛 | 论坛邀请码获取 | 技术交流群 |
淘宝企业店 | 淘宝直营店 | 联系我们 |