1.Arduino入门项目1-超声波测距仪(附项目源码库文件电路图材料清单等资料)
Posted 村头陈师傅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.Arduino入门项目1-超声波测距仪(附项目源码库文件电路图材料清单等资料)相关的知识,希望对你有一定的参考价值。
1.Arduino入门项目1-超声波测距仪
(项目源码、库文件、电路图、材料清单等可在文末获取)
设计者:STCode(公众号同名)
后台回复:入门项目1
获取完整资料
1.Arduino入门项目1-超声波测距仪(附项目源码、库文件、电路图、材料清单等资料)
①项目描述
本项目使用Arduino、超声波传感器、lcd1602液晶显示屏等器件,实现超声波传感器检测距离,通过Arduino数据分析和处理后,将距离数值显示到lcd1602液晶显示屏上。
②元件介绍
①HC-SR04超声波传感器
模块描述:
本模块性能稳定,测度距离精确。能和国外的SRF05,SRF02等超声波测距模块相媲美。模块高精度,盲区(2cm)超近,采用IO触发测距,给至少10us的高电平信号。模块自动发送8个40KHz的方波,自动检测是否有信号返回;有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。距离=(高电平时间X声速(340m/s))/2。
技术参数:
-
使用电压:DC5V
-
静态电流:小于2mA
-
电平输出:高5V
-
电平输出:底0V
-
感应角度:不大于15度
-
探测距离:2cm-450cm
作用:
该模块在本项目中的作用为进行测距。
②lcd1602液晶显示器
模块描述:
- 标准版:LCD1602字符液晶板,主板采用全新优质 2 行 16 个字符液晶,1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都是一致的。
- IIC版:由于Arduino的I/O口数量有限,如果直接用Arduino的I/O口直接驱动LCD1602,会占用较多的I/O口资源,也不利于连接更多的其他设备。IIC LCD1602转接板可以大大减少需要使用的IO接口,原来的1602屏需要7个IO口才能驱动起来,这个模块可以帮你节省5个IO口。对于 Arduino初学者来说,不必为繁琐复杂液晶驱动电路连线而头疼了,只需两根线就可以实现数据显示,还可以与其它IIC设备连接,可轻松实现数据的记录显示。
技术参数:
- 供电电压:+5V
- 支持I2C协议
- 具有背光灯,和对比度调节电位器
- 4线输出更简单
- 设备地址:0x27 或 0x3F或其他
作用:
本项目使用的为IIC版的lcd1602模块,原因为IIC方式节省引脚,接线比较方便。该模块在本项目中的作用为进行距离数值的显示。
③电路连接
HC-SR04 | Arduino |
---|---|
VCC | +5V |
GND | GND |
Echo | 3 |
Trig | 2 |
LCD1602 | Arduino |
---|---|
VCC | +5V |
GND | GND |
SDA | A4 |
SCL | A5 |
④源代码
#include <Wire.h> //引入库文件
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //定义lcd对象
int TrigPin = 2; //定义超声波传感器引脚
int EchoPin = 3;
float distance; //定义距离变量
void setup()
Serial.begin(9600); //开启串口
lcd.init(); //初始化lcd
lcd.backlight(); //开启lcd背光
pinMode(TrigPin, OUTPUT); //设置超声波传感器引脚模式
pinMode(EchoPin, INPUT);
lcd.setCursor(0,0); //设置光标位置
lcd.print("Distance test"); //显示内容
void loop()
get_dis(); //获取距离函数
lcd_display(); //lcd显示函数
delay(500); //延时
void get_dis() //获取距离子函数
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
distance = pulseIn(EchoPin, HIGH) / 58.0;
Serial.print(distance);
Serial.println("cm");
void lcd_display() //lcd显示子函数
int dis = int(distance);
lcd.setCursor(0,1);
if(dis >= 0 && dis < 1000)
lcd.print("Dis:");
lcd.print(dis);
if(dis < 100) lcd.print(' ');
lcd.setCursor(8,1);
lcd.print("cm");
关键代码解释:
LiquidCrystal_I2C lcd(0x27,16,2); //定义lcd对象
该行代码定义了lcd对象,其中0x27为该lcd1602模块的IIC地址,不同商家购买的lcd1602,其地址可能会有所不同,大部分lcd1602的IIC地址为0x27或者0x3F,可以两个地址都进行尝试,如果还是不能显示的话可以咨询商家;代码中的16表示一行有16个位,2表示一共有两行。(还有其他型号的lcd,其显示的行数和列数可以不相同,但是能用同一个库文件,比如lcd2004A等。)
distance = pulseIn(EchoPin, HIGH) / 58.0;
将距离算成厘米,声音的速度340m/s或29us/cm,脉冲传播出来再折返回来,所以所求对象的距离行程为(高电平时间)/29/2,即/58.
if(dis >= 0 && dis < 1000)
lcd.print("Dis:");
lcd.print(dis);
因为在测距的时候,偶尔会出现测出大于1000cm的情况,正常情况下,HC-SR04的测距在200cm以内,所以大于三位数的数值肯定是不正常的,因此在此做一个限制,在0-1000数值以内的值才会进行显示。
if(dis < 100) lcd.print(' ');
在显示大于三位数的距离数值时,占用了lcd1602的三个位,因此三个位上都有数据,但是当距离变为两位数时,由于在代码中没有编写清屏的语句,因此在显示了两位数时,第三位会仍然显示之前显示的数值,对测距数值形成一定的干扰,因此在这里,当测距为两位数时,在后边显示一个’ ',即显示一个空格,这样就可以覆盖掉之前显示三位数时的个位数数值。
更多创意作品及源码获取欢迎关注公众号:STCode
后台回复:入门项目1
以上是关于1.Arduino入门项目1-超声波测距仪(附项目源码库文件电路图材料清单等资料)的主要内容,如果未能解决你的问题,请参考以下文章
LabVIEW控制Arduino实现超声波测距(进阶篇—5)