• 【雕爷学编程】Arduino动手做(106)---US026超声波测距


    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

    实验一百零六:US-026超声波测距传感器模块 代替HC-SR04 工业级 3V~5.5V

    在这里插入图片描述

    CS100
    是苏州顺憬志联推出的一款工业级超声波测距芯片,CS100 内部集成超声波发射电路,超声波接收电路,数字处理电路等,单芯片即可完成超声波测距,测距结果通过脉宽的方式进行输出,通信接口兼容现有超声波模块。CS100 配合使用 40KHZ 的开放式超声波探头,只需要一个 22MR 的下拉电阻和 8M 的晶振,即可实现高性能测距功能。更少的器件使用,可以大幅减少电路板面积,提高可靠性;同时,较少的外围器件使得布线更为简单,在成本敏感的引用场景下,使用单面PCB即可实现超声波测距功能,大幅降低成本。

    在这里插入图片描述

    在这里插入图片描述

    模块采用苏州顺憬志联的高性价比超声波测距芯片 CS100;测距可达 6 米以上,测距精度高;测量一致性好,测距稳定可靠。US-025/US-026 超声波测距模块可实现 2cm~6m 的非接触测距功能,工作电压为 3V-5.5V,工作电流为 5.3mA,支持 GPIO通信模式,工作稳定可靠。US-025 与 US-026 性能相同,尺寸大小相同,原理相同。区别:
    ⚫ US-025 采用的是双面板,US-026 采用的是单面板;US-025 的 4Pin 排针在正面焊接(探头一侧),
    ⚫ US-026因是单面板,正面(探头一侧)无焊盘,焊盘在背面(芯片一侧)焊接。

    在这里插入图片描述

    模块电原理图

    在这里插入图片描述

    测距工作原理
    US-025/US-026 测距时序图

    在这里插入图片描述

    只需要在 Trig 管脚输入一个 10US 以上的高电平,系统便可发出 8 个 40KHZ 的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过 Echo 管脚输出。根据 Echo 管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间*340m/s)/2。

    超过测量范围时返回值及测量周期
    当测量距离超过 US-025/US-026 的测量范围时,仍会通过Echo 管脚输出高电平的信号,高电平的宽度约为 66ms。

    在这里插入图片描述

    测量周期:当接收到 US-025/US-026 通过 Echo 管脚输出的高电平脉冲后,便可进行下一次测量,所以测量周期取决于测量距离,当距离被测物体很近时,Echo 返回的脉冲宽度较窄,测量周期就很短;当距离被测物体比较远时,Echo 返回的脉冲宽度较宽,测量周期也就相应的变长。最坏情况下,被测物体超出超声波模块的测量范围,此时返回的脉冲宽度最长,约为 66ms,所以最坏情况下的测量周期稍大于 66ms 即可(取 70ms 足够)。

    在这里插入图片描述
    接口说明
    模块有一个接口:4 Pin 供电及通信接口,US-025 与US-026 接口相同。 4 Pin 接口为 2.54mm 间距的弯排针,如图 所示: 4 Pin 接口从左到右依次编号 1,2,3,4。它们的定义如下:
    ⚫ 1 号 Pin:接 VCC 电源(直流 3V-5.5V)。
    ⚫ 2 号 Pin:接外部电路的 Trig 端,向此管脚输入一个
    10uS 以上的高电平,可触发模块测距。触发信号 10US高电平 发射探头发出信号 输出回响信号 循环发出8个40KHZ脉冲 脉冲宽度为超声 波往返时间之和
    ⚫ 3 号 Pin:接外部电路的 Echo 端,当测距结束时,此管脚会输出一个高电平,电平宽度为超声波往返时间之和。
    ⚫ 4 号 Pin:接外部电路的地。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    实验开源代码(Arduino 1.8.19)

    /*
    
    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    
    实验一百零六:US-026超声波测距传感器模块 代替HC-SR04 工业级 3V~5.5V
    
    1、实验项目:US-025/US-026高精度测距例程
    
    2、实验接脚:
    
    EchoPin = D2
    
    TrigPin = D3
    
    GND = GND
    
    VCC  = 5V
    
    */
    
    
    
    unsigned int EchoPin = 2;
    
    unsigned int TrigPin = 3;
    
    unsigned long Time_Echo_us = 0;
    
    unsigned long Len_mm_X100 = 0;
    
    unsigned long Len_Integer = 0;
    
    unsigned int Len_Fraction = 0;
    
    
    
    void setup(){
    
    Serial.begin(9600);
    
    pinMode(EchoPin, INPUT);
    
    pinMode(TrigPin, OUTPUT);
    
    }
    
    
    
    void loop(){
    
    digitalWrite(TrigPin, HIGH);
    
    delayMicroseconds(50);
    
    digitalWrite(TrigPin, LOW);
    
    Time_Echo_us = pulseIn(EchoPin, HIGH);
    
    if((Time_Echo_us < 60000) && (Time_Echo_us > 1))
    
    {
    
    Len_mm_X100 = (Time_Echo_us*34)/2;
    
    Len_Integer = Len_mm_X100/100;
    
    Len_Fraction = Len_mm_X100%100;
    
    Serial.print("Present Length is: ");
    
    Serial.print(Len_Integer, DEC);
    
    Serial.print(".");
    
    if(Len_Fraction < 10)
    
    Serial.print("0");
    
    Serial.print(Len_Fraction, DEC);
    
    Serial.println("mm");
    
    }
    
    delay(1000);
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    实验串口返回情况

    在这里插入图片描述
    实验开源代码(Arduino 1.8.19)之二

    /*
    
    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    
    实验一百零六:US-026超声波测距传感器模块 代替HC-SR04 工业级 3V~5.5V
    
    1、实验项目之二:US-025/US-026高精度测距例程2
    
    2、实验接脚:
    
    EchoPin = D2
    
    TrigPin  = D3
    
    GND = GND
    
    VCC  = 5V
    
    */
    
    
    
    unsigned int EchoPin = 2;        // connect Pin 2(Arduino digital io) to Echo at US-025/US-026
    
    unsigned int TrigPin = 3;        // connect Pin 3(Arduino digital io) to Trig at US-025/US-026
    
    unsigned long Time_Echo_us = 0;
    
    unsigned long Len_mm  = 0;
    
    
    
    void setup(){  //Initialize
    
      Serial.begin(9600);                //Serial: output result to Serial monitor
    
      pinMode(EchoPin, INPUT);              //Set EchoPin as input, to receive measure result from US-025,US-026
    
      pinMode(TrigPin, OUTPUT);            //Set TrigPin as output, used to send high pusle to trig measurement (>10us)
    
    }
    
    
    
    void loop(){
    
      digitalWrite(TrigPin, HIGH);          //begin to send a high pulse, then US-025/US-026 begin to measure the distance
    
      delayMicroseconds(20);              //set this high pulse width as 20us (>10us)
    
      digitalWrite(TrigPin, LOW);          //end this high pulse
    
      
    
      Time_Echo_us = pulseIn(EchoPin, HIGH);          //calculate the pulse width at EchoPin,
    
      if((Time_Echo_us < 60000) && (Time_Echo_us > 1))    //a valid pulse width should be between (1, 60000).
    
      {
    
        Len_mm = (Time_Echo_us*34/100)/2;    //calculate the distance by pulse width, Len_mm = (Time_Echo_us * 0.34mm/us) / 2 (mm)
    
        Serial.print("Present Distance is: ");  //output result to Serial monitor
    
        Serial.print(Len_mm, DEC);        //output result to Serial monitor
    
        Serial.println("mm");            //output result to Serial monitor
    
      }
    
      delay(1000);                  //take a measurement every second (1000ms)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    实验开源代码(Arduino 1.8.19)之三

    /*
    
    【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    
    实验一百零六:US-026超声波测距传感器模块 代替HC-SR04 工业级 3V~5.5V
    
    1、实验项目之三:用串口显示测出的距离值
    
    2、实验接脚:
    
    EchoPin = D2
    
    TrigPin  = D3
    
    GND = GND
    
    VCC  = 5V
    
    */
    
    
    
    // 设定US-026连接的Arduino引脚
    
    const int TrigPin = 3;
    
    const int EchoPin = 2;
    
    float distance;
    
    
    
    void setup(){  // 初始化串口通信及连接的引脚
    
          Serial.begin(9600);
    
          pinMode(TrigPin, OUTPUT);
    
      // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
    
          pinMode(EchoPin, INPUT);
    
      Serial.println("Ultrasonic sensor:");
    
    }
    
    
    
    void loop(){
    
      // 产生一个10us的高脉冲去触发TrigPin
    
          digitalWrite(TrigPin, LOW);
    
          delayMicroseconds(2);
    
          digitalWrite(TrigPin, HIGH);
    
          delayMicroseconds(10);
    
          digitalWrite(TrigPin, LOW);
    
      // 检测脉冲宽度,并计算出距离
    
          distance = pulseIn(EchoPin, HIGH) / 58.00;
    
          Serial.print(distance);
    
          Serial.print("cm");
    
          Serial.println();
    
          delay(1000);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    实验串口返回情况
    在这里插入图片描述
    实验开源图形编程(Mind+、编玩边学)

    在这里插入图片描述
    实验串口返回情况
    在这里插入图片描述
    实验开源图形编程(Mind+、编玩边学)之二

    在这里插入图片描述
    实验串口返回情况(距离小于50厘米时LED点亮)

    在这里插入图片描述
    实验开源图形编程(Mind+、编玩边学)之三

    在这里插入图片描述
    实验开源仿真编程(Linkboy V4.63)
    在这里插入图片描述
    实验开源仿真编程(Linkboy V4.63)之二

    在这里插入图片描述

    实验开源仿真编程(Linkboy V4.63)之三

    在这里插入图片描述

    实验场景图
    在这里插入图片描述

  • 相关阅读:
    Qt QWidget 简约美观的加载动画 第五季 - 小方块风格
    【WSN通信】基于Matlab模拟(AODV)路由协议
    GitHub上火到糊!这份阿里内部10W字Java面试内卷,让你薪资翻倍
    秋招面经第十二弹:东方航空一面-数据工程师
    Jenkins的corn表达式
    (二十三)数据结构-交换排序
    连连看游戏页面网站源码
    ECCV 2022 | FPN:You Should Look at All Objects
    把前端HTML+CSS+JavaScript脚本嵌入WP的页面中
    带CAD转换的的坐标计算程序代码
  • 原文地址:https://blog.csdn.net/weixin_41659040/article/details/126297752