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

2023-12-24 01:20

本文主要是介绍【雕爷学编程】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.5V1、实验项目:US-025/US-026高精度测距例程2、实验接脚:EchoPin = D2TrigPin = D3GND = GNDVCC  = 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)之二

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百零六:US-026超声波测距传感器模块 代替HC-SR04 工业级 3V~5.5V1、实验项目之二:US-025/US-026高精度测距例程22、实验接脚:EchoPin = D2TrigPin  = D3GND = GNDVCC  = 5V*/unsigned int EchoPin = 2;        // connect Pin 2(Arduino digital io) to Echo at US-025/US-026unsigned int TrigPin = 3;        // connect Pin 3(Arduino digital io) to Trig at US-025/US-026unsigned long Time_Echo_us = 0;unsigned long Len_mm  = 0;void setup(){  //InitializeSerial.begin(9600);                //Serial: output result to Serial monitorpinMode(EchoPin, INPUT);              //Set EchoPin as input, to receive measure result from US-025,US-026pinMode(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 distancedelayMicroseconds(20);              //set this high pulse width as 20us (>10us)digitalWrite(TrigPin, LOW);          //end this high pulseTime_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 monitorSerial.print(Len_mm, DEC);        //output result to Serial monitorSerial.println("mm");            //output result to Serial monitor}delay(1000);                  //take a measurement every second (1000ms)}

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

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百零六:US-026超声波测距传感器模块 代替HC-SR04 工业级 3V~5.5V1、实验项目之三:用串口显示测出的距离值2、实验接脚:EchoPin = D2TrigPin  = D3GND = GNDVCC  = 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的高脉冲去触发TrigPindigitalWrite(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)
在这里插入图片描述
实验开源仿真编程(Linkboy V4.63)之二

在这里插入图片描述

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

在这里插入图片描述

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

这篇关于【雕爷学编程】Arduino动手做(106)---US026超声波测距的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530126

相关文章

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]