US-100超声波测距模块在Arduino平台上的使用说明

更新时间:2023-05-23 03:07:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

US‐100超声波测距模块在Arduino 

平台上的使用说明 

1. 系统介绍 

1.1 US‐100介绍 

US-100超声波测距模块可实现2cm~4.5m的非接触测距功能,拥有2.4~5.5V的宽电压输入范围,静态功耗低于2mA,自带温度传感器对测距结果进行校正,同时具有GPIO,串口(波特率9600bps)等多种通信方式,内带看门狗,工作稳定可靠。通过模块背部的2Pin跳线来选择不同的模式,当拔掉跳线帽时,表示工作在GPIO模式下;当插上跳线帽时,表示工作在串口模式下,如图1.1所示。

图1.1:模式选择跳线接口

电平触发模式下(GPIO模式)只需要在Trig/TX管脚输入一个10US以上的高电平,US-100便可通过Echo端输出一高电平,可根据此高电平的持续时间来计算距离值。即距离值为:(高电平时间*340m/s)/2。此距离值已经经过温度校正,即不管温度多少,声速选择340m/s即可。

在串口模式下,通过Trig/TX管脚输入0X55(波特率9600),US-100便会通过Echo/RX管脚输出两字节的距离值,第一个字节是距离的高8位(HDate),第二个字节为距离的低8

位(LData),单位为毫米。即距离值为 (HData*256 +LData)mm。

在串口模式下,通过Trig/TX管脚输入0X50(波特率9600),US-100便会通过Echo/RX

管脚输出一个字节的温度值(TData), 实际的温度值为TData-45。例如通过TX发送

完0X50后,在RX端收到0X45,则此时的温度值为 [69(0X45的10进制值)-45] = 24

度。

1.2 Arduino介绍 

Arduino是源自意大利的一个开放源代码的硬件项目,该平台包括一片具备简单I/O

功效的电路板以及一套程序开发环境。Arduino 可以用来开发可独立运作、并具互动性

的电子用品,或者也可以开发出与PC相连的周边装置,同时能在运作时与PC上的软件

进行沟通。Arduino的硬体电路板可以自行焊接组装成,也可以购买已经组装好的,而

整合开发环境的软体则可以自网路上免费下载与使用。通过Arduino,可以做出很多令

人惊奇的互动作品。

本文以arduino duemilanove 2009为例进行说明,其他Arduino平台的使用方法

类似。

arduino duemilanove 2009如图1.2所示:

1.2:arduino duemilanove 2009

2. GPIO模式下US‐100与Arduino连线及例程 

2.1  GPIO模式下的连接 

连接前首先将US-100模块背面的跳线帽拔掉。

GPIO模式下US-100与Arduino的连接如表2.1和图2.1所示: US-100 管脚

VCC

Trig/TX

Echo/RX

GND

GND 连接到Arduino对应的管脚 5V (POWER) Pin 3 (DIGITAL IO 3) Pin 2 (DIGITAL IO 2) GND GND(GND可只连一个)

表2.1:GPIO模式下US-100与Arduino的连接

图2.1: US-100与Arduino的连接

2.2  GPIO模式下的使用例程 

unsigned int EchoPin = 2; //将Arduino的Pin2连接至US-100的Echo/RX

unsigned int TrigPin = 3; //将Arduino的Pin3连接至US-100的Trig/TX

unsigned long Time_Echo_us = 0;

unsigned long Len_mm = 0;

void setup()

{ //Initialize

Serial.begin(9600); //测量结果将通过此串口输出至PC上的串口监视器

pinMode(EchoPin, INPUT);//设置EchoPin为输入模式。

pinMode(TrigPin, OUTPUT); //设置TrigPin为输出模式。

}

void loop()

{ //通过Trig/Pin发送脉冲,触发US-100测距

digitalWrite(TrigPin, HIGH); //开始通过Trig/Pin发送脉冲

delayMicroseconds(50); //设置脉冲宽度为50us (>10us)

digitalWrite(TrigPin, LOW); //结束脉冲

Time_Echo_us = pulseIn(EchoPin, HIGH); //计算US-100返回的脉冲宽度

if((Time_Echo_us < 60000) && (Time_Echo_us > 1))//脉冲有效范围(1, 60000).

{

// Len_mm = (Time_Echo_us * 0.34mm/us) / 2 (mm)

Len_mm = (Time_Echo_us*34/100)/2; //通过脉冲宽度计算距离.

Serial.print("Present Distance is: ");//输出结果至串口监视器

Serial.print(Len_mm, DEC); //输出结果至串口监视器

Serial.println("mm"); //输出结果至串口监视器

}

delay(1000); //每秒(1000ms)测量一次

}

2.3  GPIO模式下测试及截图 

 在使用时,首先在Arduino的开发环境中编辑源代码,编辑完后将程序进行编译,

最后下载到Arduino开发板上,建议在下载程序到Arduino开发板上的过程中拔掉

US-100与Arduino的连线。

待程序下载完毕,首先断掉电源,将US-100模块背部的跳线拔掉,然后按表2.1

所示连接US-100与Arduino上的相应管脚。连接好后给Arduino开发板上电,系统便

可运行。

此时打开Arduino开发环境中自带的串口监视器,便可查看运行的结果。

GPIO模式下,2.2中使用例程的测试截图如图2.2所示:

 

图2.2: GPIO模式下US‐100测试截图 

3. 串口模式下US‐100与Arduino连线及例程 

3.1串口模式下的连接 

连接前首先将US-100模块背面的跳线帽插上。

串口模式下US-100与Arduino的连接如表3.1和图3.1所示: US-100 管脚

VCC

Trig/TX

Echo/RX

GND

GND 连接到Arduino对应的管脚 5V (POWER) Pin 1 (TX,DIGITAL IO 1) Pin 2 (RX,DIGITAL IO 2) GND GND(GND可只连一个)

表3.1:GPIO模式下US-100与Arduino的连接

注意事项:在串口模式下,首先将程序下载到Arduino开发板上,然后将Arduino

断电,将US-100和Arduino按照表3.1所示连接,连好后再给Arduino上电。

如果先将US-100与Arduino连好,再给Arduino下载程序,在下载程序时会出错,

因为US-100与Arduino的通信和Arduino下载程序时使用的同一个串口,会相互干扰。

 

图3.1:串口模式下US‐100与Arduino的连接 

3.2 串口模式下测距使用例程 

unsigned int HighLen = 0;

unsigned int LowLen = 0;

unsigned int Len_mm = 0;

void setup()

{ //将Arduino的RX与TX(Digital IO 0和1)分别于US-100的Echo/Rx 和Trig/Tx

相连,确保连接前已经使US-100处于串口模式。

Serial.begin(9600); //设置波特率为 9600bps.

}

void loop()

{

Serial.flush(); // 清空串口接收缓冲区

Serial.write(0X55); // 发送0X55,触发US-100开始测距

delay(500); //延时500毫秒

if(Serial.available() >= 2) //当串口接收缓冲区中数据大于2字节

{

HighLen = Serial.read(); //距离的高字节

LowLen = Serial.read(); //距离的低字节

Len_mm = HighLen*256 + LowLen; //计算距离值

if((Len_mm > 1) && (Len_mm < 10000)) //有效的测距的结果在1mm到

10m之间

{

Serial.print("Present Length is: "); //输出结果至串口监视器

Serial.print(Len_mm, DEC); //输出结果至串口监视器 Serial.println("mm"); //输出结果至串口监视器

}

}

delay(500); //等待500ms

}

3.3 串口模式下测温使用例程 

int Temperature45 = 0;

void setup()

{ //将Arduino的RX与TX(Digital IO 0和1)分别于US-100的Echo/Rx 和Trig/Tx

相连,确保连接前已经使US-100处于串口模式。

Serial.begin(9600); //设置波特率为 9600bps.

}

void loop()

{

Serial.flush(); // 清空串口接收缓冲区t

Serial.write(0X50); // 发送0X50,触发US-100开始测温

delay(500); //延时500毫秒

if(Serial.available() >= 1) //当串口接收缓冲区中数据大于1字节

{

Temperature45 = Serial.read(); //读出US-100返回的结果

if((Temperature45 > 1) && (Temperature45 < 130)) //返回的有效值在

1到130之间

{

Temperature45 -= 45; //实际温度值等于返回值减45

Serial.print("Present Temperature is: "); //输出结果至串口监视

Serial.print(Temperature45, DEC); //输出结果至串口监视器

Serial.println(" degree centigrade."); //输出结果至串口监视器

}

}

delay(500); //等待500ms

}

3.3 串口模式下测试及截图 

在使用时,首先在Arduino的开发环境中编辑源代码,编辑完后将程序进行编译,最后下载到Arduino开发板上,在下载程序到Arduino开发板上的过程中需要拔掉US-100与Arduino的连线。

待程序下载完毕,首先断掉电源,同时确保US-100模块背部的跳线已经插上,US-100工作在串口模式下,然后按表3.1所示连接US-100与Arduino上的相应管脚。连接好后给Arduino开发板上电,系统便可运行。

此时打开Arduino开发环境中自带的串口监视器,便可查看运行的结果。

串口模式下测距截图如图3.2所示:

 

图3.2:串口模式测距截图 

从图3.2中可以看到,在串口测距时,每一行前多一个字符‘U’,这是因为Arduino与US-100通信和Arduino与PC机通信使用的是同一个串口,当Arduino向US-100发送0X55触发测距时,0X55同时被PC机接收到,所以显示‘U’(U的ASCII码为0X55)。

串口模式测温截图如图3.3所示

 

图3.3:串口模式测温截图 

从图3.3中可以看到,在串口测温时,每一行前多一个字符‘P’,这是因为Arduino与US-100通信和Arduino与PC机通信使用的是同一个串口,当Arduino向US-100发送0X50触发测距时,0X50同时被PC机接收到,所以显示‘P’(P的ASCII码为0X50)。

 

本文来源:https://www.bwwdw.com/article/xoh4.html

Top