美文网首页
超声波模块 AJ-SR04M

超声波模块 AJ-SR04M

作者: Mr_White | 来源:发表于2018-09-10 21:21 被阅读0次

2018年9月10日

image.png
        /*
        乱码记录
        01 00 CC 00 00 03 E3 
        7F 01 12 01 00 C7 00 00 03 DE
      原因是打印的时候出的%02X 问题,改成%03X 就好了

根本原始是没有延时
delay_ms(100); //超声波接受和处理字符需要延时
*/

image.png

实现功能:
串口先发送一段数据过去,然后返回一串数据,对数据首先进行分割,核对帧头帧尾,然后计算和校验,如果相等,就提取距离进行判断,后续为了提高准确率,可能多次后取平均值。
举例子:

  • 读取站号1距离信息:
    7F 01 12 00 00 00 00 00 03 16
  • 站号1返回距离信息:
    7F 01 12 01 01 04 00 00 03 1c
/* 

接受串口数据:
1. 直接读数据data0 ~ data3;
2. 校验帧头、和校验(帧尾参与计算), 再读数据data0 ~ data3;
3. 校验帧头、帧尾、和校验, 再读数据data0 ~ data3.

通讯在受到干扰的时候会乱码,本来是1接受方读到是0,或者本来是0接受方读到是1
串口通讯硬件那一层就可以加上奇偶校验,可以解决一部分问题
不过想可靠还是靠自己在协议上增加复杂的校验方式
根据你的实际情况考虑校验方式
一般来说就是一组数据之中加上校验位,要求越高校验位越长

https://bbs.csdn.net/topics/392167834?page=1

接受方收到数据后重新计算一下校验位,如果和发送方不一样就认为数据错误
发请求要求发送方重新发送。

串行协议为啥要校验?
*/

#include "stdio.h"
#include "string.h"

int main()
{//10个字节(起始+站号+命令+数字方向+data0+data1+data2+data3+结束码+和校验)
 //从“站号”即第二位加到结束码 0X03 为 BCC 值, 不包含启始位0X7F.
    int a[]={0X7F, 0X01, 0X12, 0X01, 0X01, 0X04, 0X00, 0X00, 0X03, 0X1C};
    int i, xor=0, data=0;
    if(a[0]==0x7F && a[8]==0X03) //校验帧头、帧尾
        for(i=1; i<9; i++) //和校验
            xor+=a[i];
    if(xor == a[9]) //校验完成
    {
        data = a[4]*0x100 + a[5]; //计算距离
        printf("距离=%dmm\n", data);
    }
    return 0;
}

串结束符null对应ASC码值0x00定义:“(字符串)” 在末尾自动添加 ,百度写的比较清楚:在ASCII码的第一个字符是NULL,它的数值是0,占用1字节;C语言把它作为字符串的最后一个字符,以表示字符串到此结束."\0"

串行不加crc校验就是不负责任,校验不过就要求重发,串行协议。

https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-15011569605.6.5f3c6518nnoDwr&id=566408829462
https://item.taobao.com/item.htm?spm=a230r.1.14.23.e37d4716JVjbsx&id=574905987374&ns=1&abbucket=3#detail
JSN-SR04T一体化超声波测距模块]倒车雷达防水型ARDUINO可定做-淘宝网 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.324f2e8d45giUW&id=40676752180&_u=bkn1qed09da

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.324f2e8d45giUW&id=40676752180&_u=bkn1qed09da

https://item.taobao.com/item.htm?spm=a230r.1.14.34.618f3ee9sQxeGW&id=546597144185&ns=1&abbucket=3#detail

相关资料下载: pan.baidu.com/s/1dF1XNqT

  • 型号:AJ-SR04M 超声波模块
    AJ-SR04M 是单头,AJ-SR04K 是双头。
  • 工作电压:DC 3.0 ~ 5.5V
  • 距离测量范围:20cm ~ 8m
  • 电位器:调节探头发散角度
    软件参数调节探头发散角度
  • 测量角度:75°

五种工作模式:

模式 R19阻值
兼容 SR-04 模式 开路(默认)
低功耗 SR-04 模式 300kΩ
自动串口模式 120kΩ
触发串口模式 47kΩ
PC打印模式 0kΩ

时序图:

时序图

模块接收到串口触发信号,每次输出一帧,含4个8位数据,帧格式为:OXFF+H_ DATA+L_ DATA+ SUM。

各位解释如下:

  1. 0XFF:为一帧开始数据,用于判断;
  2. H_ DATA: 距离数据的高8位;
  3. L_ DATA: 距离数据的低8位;
  4. SUM: 数据和,用于效验.其0XFF为开始侦不参与校验, H_ DATA+L _DATA=SUM (仅低8位);
  5. H_DATA与L__DATA合成16位数据,即以毫米为单位的距离值。

例如:
产品应答:FF 07 A1 A7

  • 校验码SUM=A8=(0x07+0xA1)&0x00ff;(+代表或运算)
  • 0x07:为距离的高位数据;
  • 0xA1:为距离的低位数据;
  • 距离值为0x07A1,转换成十进制为1953,单位:毫米。

通过R19选中模块的启动模式,选择好模式后模块收到有效触发信号后,内部将发出 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号或者对应串口讯号,回响信号的脉冲宽度与所测的距离成正比。

由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者uS/148=英寸,或是:距离=高电平时间*声速(340M/S) /2。

模式三、四:FF 01 56 57 (每串数字后有一个空格)
模式五:Gap=0342mm
模式五就是模式三、四转换后的结果,所以怎么处理都行。

相关文章

网友评论

      本文标题:超声波模块 AJ-SR04M

      本文链接:https://www.haomeiwen.com/subject/veeegftx.html