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-SR04Arduino
VCC+5V
GNDGND
Echo3
Trig2
LCD1602Arduino
VCC+5V
GNDGND
SDAA4
SCLA5

④源代码


#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)

LabVIEW控制Arduino实现超声波测距(进阶篇—5)

LabVIEW控制Arduino实现超声波测距(进阶篇—5)