【雕爷学编程】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)
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 | /* 【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); } |
实验开源代码(Arduino 1.8.19)之二
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】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) } |
实验开源代码(Arduino 1.8.19)之三
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 | /* 【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); } |
实验串口返回情况
实验开源图形编程(Mind+、编玩边学)
实验串口返回情况
实验开源图形编程(Mind+、编玩边学)之二
实验串口返回情况(距离小于50厘米时LED点亮)
实验开源图形编程(Mind+、编玩边学)之三
实验开源仿真编程(Linkboy V4.63)


实验场景图
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性