Arduino小车-超声波测距实验
介绍
- 本文介绍智能小车超声波测距功能
电气参数
超声波模块参数
- 1、典型工作用电压:5V。
- 2、超小静态工作电流:小于2mA。
- 3、感应角度:不大于15 度。
- 4、探测距离:2cm-400cm
- 5、高精度:可达0.3cm。
- 6、盲区(2cm)超近
- 7、测距的公式表示为:L=C×T
式中L 为测量的距离长度;C 为超声波在空气中的传播速度;T 为测量距离传播的时间差(T 为发射到接收时间数值的一半)。已知超声波速度C=344m/s (20℃室温)
1602LCD主要技术参数
- 显示容量为16×2个字符;
- 芯片工作电压为4.5~5.5V;
- 工作电流为2.0mA(5.0V);
- 模块最佳工作电压为5.0V;
- 字符尺寸为2.95×4.35(W×H)mm。
连接图
- 超声波模块引脚
1.Vcc
2.Trig(触发端)
3.Echo(回声端)
4.Gnd
备注:触发端发一个10US 以上的高电平,就可以在回声端等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了。
在J2插口插上超声波模块。
注意:插好后测一下超声波模块的VCC/GND引脚是否和小车的VCC/GND引脚通路
超声波模块的Echo和Trig引脚通过J2插口连接到P2.0和P2.1,再连接到Arduino
Echo回声脚 → P2.0/IN5 → Arduino/A0
Trig 触发脚 → P2.1/IN6 → Arduino/A11602采用标准的16脚接口,其中:
第1脚:VSS为地电源
第2脚:VDD接5V正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光电源正极
第16脚:背光电源负极
- 1602液晶连接图
1602/pin1_VSS → GND
1602/pin2_5V → 5V
1602/pin3_V0 → 通过10k的变阻器连接到GND,可用3k~5k的电阻代替
1602/pin4_RS → Arduino/pin11
1602/pin5_RW → GND 保持写入状态
1602/pin6_EN → Arduino/pin2
1602/pin7-10_D0-D3 → NC
1602/pin11-14_D4-D7 → Arduino/pin3-pin4-pin7-pin8 四线数据模式
1602/pin15 → 5V
1602/pin16 → GND
样例代码
//===============================================================
// 智能小车超声波测距实验
//===============================================================
#include <LiquidCrystal.h> //申明1602液晶的函数库
//申明1602液晶的引脚所连接的Arduino数字端口,8线或4线数据模式,任选其一
LiquidCrystal lcd(11,2,3,4,7,8); //4数据口模式连线声明,
//===============================================================
//LCD的接口:各个引脚连接的I/O口编号,格式为
// LiquidCrystal(rs, enable, d4, d5, d6, d7)
// LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
// LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
// LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
//===============================================================
int Echo = A0; // Echo回声脚(P2.0)
int Trig =A1; // Trig 触发脚(P2.1)
int Distance = 0;
void setup()
{
Serial.begin(9600); // 初始化串口
//初始化电机驱动IO为输出方式
//初始化超声波引脚
pinMode(Echo, INPUT); // 定义超声波输入脚
pinMode(Trig, OUTPUT); // 定义超声波输出脚
lcd.begin(16,2); //初始化1602液晶工作 模式
//定义1602液晶显示范围为2行16列字符
}
void Distance_test() // 量出前方距离
{
digitalWrite(Trig, LOW); // 给触发脚低电平2μs
delayMicroseconds(2);
digitalWrite(Trig, HIGH); // 给触发脚高电平10μs,这里至少是10μs
delayMicroseconds(10);
digitalWrite(Trig, LOW); // 持续给触发脚低电
float Fdistance = pulseIn(Echo, HIGH); // 读取高电平时间(单位:微秒)
Fdistance= Fdistance/58; //为什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
Serial.print("Distance:"); //输出距离(单位:厘米)
Serial.println(Fdistance); //显示距离
Distance = Fdistance;
}
void loop()
{
Distance_test();
if((2<Distance)&(Distance<400))//超声波测距范围2cm到400cm
{
lcd.home(); //把光标移回左上角,即从头开始输出
lcd.print(" Distance: "); //显示
lcd.setCursor(6,2); //把光标定位在第2行,第6列
lcd.print(Distance); //显示距离
lcd.print("cm"); //显示
}
else
{
lcd.home(); //把光标移回左上角,即从头开始输出
lcd.print("!!! Out of range"); //显示超出距离
}
delay(250);
lcd.clear();
}
测试结果
- 用手在超声波模块前面不断移动,1602液晶不断显示超声波模块到手的距离
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号