电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册
搜索: 您现在的位置: 电子开发网 >> 基础入门 >> Arduino开发学习 >> 正文

Arduino项目式编程教学第四章——超声波测距_arduino超声波测距,HCSR04超声波传感器

作者:佚名    文章来源:网络整理    点击数:    更新时间:2024/11/2

硬件清单
一、超声波测距原理
二、HCSR04超声波传感器的使用
三、LCD1602液晶显示屏的使用
1.Arduino上的I2C通信协议
2.使用LCD1602液晶显示屏显示“Hello World!”字符
四、完成超声波测距
五、总结

硬件清单

 

一、超声波测距原理

超声波测距原理详解 
我们所使用的超声波传感器型号为HCSR04,可观察到他有两个“眼睛”状的部件,两个部件的作用一样,均可发射接收超声波,并且按照上述原理图进行工作。
首先传感器发射超声波,并计时,当超声波接触到障碍物会被反射,当传感器接收到反射波,计时结束,然后利用距离、速度、时间公示进行计算,得到传感器到障碍物间的距离。
其具体工作原理简单了解即可,并不影响后述对超声波传感器的使用。
HCSR04超声波传感器 
因此HCSR04超声波传感器的四个引脚的作用就比较明显了,除了VCC接正极、GND接负极外,还有两个引脚“Trig”及“Echo”,其中“Trig”用于控制发射超声波,“Echo”用于接收反射波,所以“Trig”所接引脚应为输出,“Echo”所接引脚应为输入,因此在后续接线时可以把两个引脚分别接到两个数字端口,在端口初始化时分别设置输入和输出即可。

二、HCSR04超声波传感器的使用

接下来将HCSR04超声波传感器与Arduino进行连接,除了VCC及GND分别接正负极外,这里“Trig”与数字端口D5连接,“Echo”与数字端口D4连接,如下图所示:
HCSR04超声波传感器与Arduino进行连接 

并且确定安装的库文件是否一致,不同的开发者贡献的库文件不同,调用方法的名称也就不同,因此如果与本文按装的库文件不同的话,大概率会报错,建议安装与下图一致的库文件。
 

将超声波传感器与Arduino板连接之后,继续完成以下程序:

//此程序功能为将SR04超声波传感器测的的距离数值,通过串口进行输出
#include<HCSR04.h>  //导入超声波SR04库
HCSR04 ultrasonic(5,4);  //声明一个对象,其名为ultrasonic(自定义的名称)
                      //4号为“Echo”,5号为“Trig”
void setup()
{
 pinMode(4, INPUT);  //设置“Echo”接入的引脚为输入
 pinMode(5, OUTPUT);  //设置“Trig”接入的引脚为输出
 Serial.begin(9600);  //串口监视器初始化
}
int distance;  //定义一个名为“distance”的变量,用于存放检测的距离数值
void loop()
{
 distance = ultrasonic.dist();  //调用了超声波库里的“dist()”方法,获得检测距离数值
 Serial.print(distance);  //输出distance数值,且不换行
 Serial.println(" cm");  //紧接着输出单位,且换行
}

将程序上传之前先对以上程序的部分代码块进行解释:
1.“HCSR04 ultrasonic(4, 5)”我们称之为对象的实例化,即HCSR04为超声波库的名称,在其后自定义一个名称“ultrasonic”(即超声波的英文,可自定义任意名称),并且不同的实例化过程有不同的参数要输入,比如HCSR04后需要加入“Trig”和“Echo”所接引脚的端口号,从而在后述程序中,如果要调用HCSR04库内的方法的话,仅需使用“ultrasonic.方法名()”,即可。
2.“distance = ultrasonic.dist()”这一代码块是调用了超声波传感器中获取距离的方法“dist()”,与前面int定义的distance截然不同,int定义的变量可取任意名称,仅为变量名,但“Distance()”为超声波传感器固定的方法。
接下来将上述程序上传至Arduino板,并且打开串口监视器,观测所测的数值是否准确。
 

另外HCSR04型号的超声波传感器的测量范围官方声称为2cm ~ 450cm,因此超出这个范围的数值会不准确。

三、LCD1602液晶显示屏的使用

LCD1602液晶显示屏 
LCD1602液晶显示屏 
首先观察LCD1602显示屏的正反面(其中反面为实物图),当前LCD显示屏的驱动板(即黑色的电路板)上共6个引脚,左侧两个相邻的引脚直接连接即可,连接后便打开了背光;右侧的引脚“GND接负极”“VCC接正极”已经比较熟悉了,对于“SDA”及“SCL”引脚,我们先对此进行详细介绍。

1.Arduino上的I2C通信协议

 
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
每种不同的硬件都有不同的I2C地址,因此对于I2C通信的工作原理我们可以理解为:SCL(时钟线)用于规定当前时刻是否要传输数据,就如同红绿信号灯的作用,防止数据传输混乱;SDA(数据线)用于在给定时间内给不同地址的硬件传输数据,并且双向传输。当前我们仅需了解不同硬件的I2C地址即可轻松使用I2C通信。

2.使用LCD1602液晶显示屏显示“Hello World!”字符

 
在Arduino拓展板的复位键旁边设有专门的I2C引脚,可直接对应连接,当然也可以“SDA - A4”“SCL - A5”的线序连接。
连接好之后观察屏幕,在未写入程序之前,LCD显示屏的第一行应该是可以显示16个小方块的,如果未显示,则使用十字螺丝刀来拧动显示屏背板蓝色的旋钮,直到小方块清晰可见。这也就是为什么LCD1602显示屏标有“1602”——此显示屏可显示16列2行字符(英文)。
本章使用的LCD显示屏为I2C通信,因此使用的库文件也需要对应,可看下图使用的库文件:
 

接下来完成下列程序:

//此程序功能为使用LCD1602输出“Hello World!”字符
#include <Wire.h>  //导入I2C通信库
#include <LiquidCrystal_I2C.h>  //导入LCD显示屏库
LiquidCrystal_I2C lcd(0x27,16,2);  //实例化一个名为“lcd”的对象,并且内部有三个参数
                                   //分别为(I2C通信地址,显示列数,显示行数)
void setup()
{
  lcd.init();  //显示屏初始化
  lcd.backlight();  //开启显示屏背光
  lcd.setCursor(0,0);  //设置显示光标位置(列,行)
  lcd.print("Hello, world!");  //显示字符
  lcd.setCursor(0,1);  //在第一列,第二行开始显示
  lcd.print("Successful!");  //显示字符
}
void loop()
{
}

将以上程序上传,并观察是否显示了两行字符,分别是“Hello, world!”及“Successful!”;接下来对部分代码块进行解释:
1.“#include <Wire.h>”为导入I2C通信库。
2.“#include <LiquidCrystal_I2C.h>”为导入本程序使用的基于I2C通信协议的LCD显示屏库。
3.“LiquidCrystal_I2C lcd(0x27,16,2)”为实例化了一个名为“lcd”的对象,并规定了LCD的I2C地址“0x27”,以及显示屏显示的列行数。
其他的代码作用均已在程序中进行了注释解释,则不再赘述。

四、完成超声波测距

超声波测距_arduino超声波测距 
按照上图将“SR04超声波传感器”及“LCD1602显示屏”与Arduino板进行连接;“Trig”与数字端口D5连接,“Echo”与数字端口D4连接,LCD显示屏的引脚连接到IIC区域;然后完成以下程序:

//此程序功能为将超声波传感器测得的数值使用LCD进行显示
//并且在2cm-450cm内正常显示,超出范围则输出错误提示
#include<HCSR04.h>  //导入超声波SR04库
#include<Wire.h>  //导入I2C通信库
#include<LiquidCrystal_I2C.h>  //导入LCD显示屏库
LiquidCrystal_I2C  lcd(0x27,16,2);  //声明使用LCD库的对象
HCSR04 ultrasonic(5,4);  //声明一个对象,其名为ultrasonic(自定义的名称)
                      //4号为“Echo”,5号为“Trig”
void setup()      
{
  lcd.init();  //显示屏初始化
  lcd.backlight();  //开启LCD显示屏背光
  pinMode(4,INPUT); //Echo引脚
  pinMode(5,OUTPUT); //Trig引脚
}
int distance;  //定义一个变量用于存储超声波测量的数值
void loop()
{
  distance = ultrasonic.dist();  //将超声波测得的数值赋值给变量
  if(distance >= 2 && distance <= 450)  //判断测得数值是否在测量范围内
  {
    lcd.setCursor(0,0);  //设置LCD显示光标位置
    lcd.print(distance);  //使用LCD显示屏显示distance的数值
    lcd.print(" cm");  //显示单位“cm”
    delay(200);  //延时200毫秒
    lcd.clear();  //LCD显示屏清屏,用于显示下一个数值
  }
  else  //如果超出范围
  {
    lcd.print("Wrong!");  //输出“Wrong!”
    delay(200);
    lcd.clear();
  }
}

上述程序是对超声波传感器及LCD显示屏的综合应用,并且使用了“if判断”,其代码块的作用均已标柱到代码区域,不再详细解释。
将上述代码进行上传,并测试是否可实现超声波测距功能。

五、总结

本章使用SR04超声波传感器结合LCD液晶显示屏来实现了超声波测距的功能;并且对于超声波传感器及显示屏都需要调用相应的库文件进行控制,这里需要注意的是一定要使用正确的库文件,因为各类硬件的库文件均来自于不同的开发者,不同的开发者贡献的库会存在库文件名称及方法名不同的情况,当然理论上不同的库文件都能实现对硬件的控制,所以最好使用与本文相同的库文件。完成本章的超声波测距功能之后,不妨联想汽车的倒车雷达原理,其功能也是可以通过Arduino平台来实现的,后续还会带来更多硬件的使用方法及组合成完整功能的教学。

Tags:arduino,超声波测距,超声波  
责任编辑:admin
  • 上一个文章:
  • 下一个文章: 没有了
  • 请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
    1分 2分 3分 4分 5分

    还可以输入 200 个字
    [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
    返回顶部
    刷新页面
    下到页底
    晶体管查询