arduino-超声波测距

  

       Arduino是一款便捷灵活、方便上手的开源电子原型平台。如果玩过51或者stm32的同学肯定会认为arduino是一款非常非常简单的开发入门单片机。非常适合没有系统学过编程和电气知识的人群作为单片机入门的一个法宝,可以说是能够0基础上手。大笑


arduino不同于51或者stm32,它可以完全不需要了解其内部硬件结构和寄存器设置,仅仅知道它的端口作用即可,可以不懂硬件知识,只要会简单的C语言,就可用Arduino 单片机编写程序。


比如51单片机要设置一个寄存器要设置好多管脚,但是arduino全都给我们包装好了,我们只要知道端口作用即可,往往51单片机要写几十行甚至上百行的代码,arduino一句语句就搞定了。


但是正是arduino的简便性,内部硬件结构和寄存器设置都不需要自己来设置,大大限制了它的能力。大哭也注定了它的功能和效率是和其他单片机没办法比的。  很多工程师不喜欢arduino,因为它简单,很多功能都不能达到最优化。   生气 个人认为:arduino适合没有单片机基础的人用于学习51,stm32之前的入门和兴趣培养是非常非常好的一个平台,也是对于一些非本专业的人士自己DIY一些创意电子产品的最佳选择!!!


言归正传,今天来分享一个arduino超声波测距的做法:

         材料:arduino板子一块,1602显示屏,超声波模块(我用的是HC-SRO4),面包板,杜邦线若干........................

1.arduino



2.超声波模块



 3.1602显示屏




     采用IO触发测距,给至少10us的高电平信号;模块自动发送8个40KHz的方波,自动检测是否有信号返回;

有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间;       

测试距离=(高电平时间*声速(340m/s))/2。


接线图:


我们先讲超声波测距,

const int TrigPin = 2; //发出超声波
const int EchoPin = 3; //收到反射回来的超声波
float cm; //因为测得的距离是浮点型的
void setup() 
{ 
	Serial.begin(9600); //设置波特率
	pinMode(TrigPin, OUTPUT); 
	pinMode(EchoPin, INPUT); 
} 
void loop() 
{ 
	digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin 
	delayMicroseconds(2);       // delayMicroseconds在更小的时间内延时准确
	digitalWrite(TrigPin, HIGH); 
	delayMicroseconds(10); 
	digitalWrite(TrigPin, LOW); //通过这里控制超声波的发射
	
	cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm 
	cm = (int(cm * 100.0)) / 100.0; //保留两位小数 
	Serial.print("Distance:"); 
	Serial.print(cm); 
	Serial.print("cm"); 
	Serial.println(); 
	delay(1000); 
}

pulseIn函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平为止。

返回脉冲持续的时间长短, 单位为ms。如果超时还没有读到的话, 将返回0。  pulseIn()单位为微秒,声速344m/s,所以距离cm=344*100/1000000*pulseIn()/2约等于pulseIn()/58.0

将结果打印到窗口上效果会更明显。



      接下来讲1602液晶屏显示:

接线图:


脚位连接说明:以上图为例,是从左到右第一脚开始数起:

1 Vss 接地 (0V)

2 Vdd 电源 (+5V)

3 Vo或与Vee - 对比度调整(0-5V), 可接一颗1K的电阻或接一个5K的电位器    

4 RS Register Select:   参数:{1: D0 – D7 设置为1时当作资料解释   0: D0 – D7 设置为0时当作指令解释}

5 R/W Read/Write mode:   参数:{1: 从LCD读取资料   0: 写资料到LCD(一般情况下很少从LCD读取资料,把这个脚接地可省I/O脚位)}

6 E Enable

7 D0 Bit 0 LSB

8 D1 Bit 1

9 D2 Bit 2

10 D3 Bit 3

11 D4 Bit 4

12 D5 Bit 5

13 D6 Bit 6

14 D7 Bit 7 MSB

15 A+ 背光(串联一个1K的电阻接地或串联一个5K的电位器调整背光)

16 K- 背光(GND)


由于这里的两条背光现接到了2,3管脚,占用了刚刚的超声波管脚,所以我们等下把两个合起来的时候,把超声波的两个管脚接到8,9,脚


代码:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);  //定义脚位
void setup()
{
  lcd.begin(16,2); //设置LCD显示的数目。16 X 2:16格2行。
  lcd.print("hello,world!"); //将hello,world!显示在LCD上
}
void loop()
{
  lcd.setCursor(0,1);  //将闪烁的光标设置到column 0, line 1 (注释:从0开始数起,line 0是显示第一行,line 1是第二行。)
  lcd.print(millis()/1000); //开机后屏幕现实以秒几时的时间
}


这样就可以实现1602显示的功能了。


最后把他们合起来:


这么短的代码能够实现这些功能也就arduino了

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //定义脚位
const int TrigPin = 8;
const int EchoPin = 9;
float cm;

void setup()
{
  Serial.begin(9600);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
  lcd.begin(16, 2); //设置LCD显示的数目。16 X 2:16格2行。
  lcd.print("yuan pei!"); //将hello,world!显示在LCD上
}
void loop()
{
  digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
  delayMicroseconds(2);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);

  cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
  cm = (int(cm * 100.0)) / 100.0; //保留两位小数
  Serial.print("Distance:");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
  delay(1000);
  lcd.setCursor(0, 1); //将闪烁的光标设置到column 0, line 1 (注释:从0开始数起,line 0是显示第一行,line 1是第二行。)
  lcd.print("Dis:"); 
  lcd.setCursor(5, 1);
  lcd.print(cm); 
  lcd.setCursor(11, 1);
   lcd.print("cm");
}







  • 58
    点赞
  • 339
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
使用LCD和Arduino制作超声波测距仪说明: 在这个Arduino教程中,我将向您展示如何使用HC-SR04超声波传感器,并将其与LCD显示器集成,以便显示传感器与特定物体之间的距离。 所需材料: Arduino UNO 面包板 16 x 2液晶显示器 HC-SR04超声波传感器 10K电位器(与上面连接的LCD显示器一起) 跨接电缆 第一步:连接HC-SR04超声波传感器 HC-SR04超声波传感器有4个引脚:VCC引脚,触发引脚,回波引脚和GND引脚。如上图所示,VCC引脚连接到面包板上的+ 5V,GND引脚连接到面包板上的GND,trig引脚连接到Arduino的数字引脚11,echo引脚连接到数字引脚10 Arduino的。 第二步:连接LCD和电位器 为了将LCD连接到面包板,我建议您将引脚连接头焊接到显示器的连接器上。LCD显示器的连接如下: LCD VSS引脚到面包板上的Arduino GND 在面包板上将LCD VDD引脚连接到Arduino 5V LCD VO引脚至10k电位器中心引脚 LCD RS引脚连接到数字引脚1 在面包板上将LCD RW引脚连接到Arduino GND LCD使能引脚到数字引脚2 LCD D4引脚连接到数字引脚4 LCD D5引脚至数字引脚5 LCD D6引脚到数字引脚6 LCD D7引脚至数字引脚7 LCD面板上的一个针脚+ 5V 面包板上的LCD K引脚连接到GND 10K电位器的其余引脚连接到面包板和GND上的+ 5V。 第三步:供电 对于这个项目,我们可以通过任何+ 5V电源为Arduino供电。您可以使用计算机上的USB端口为Arduino供电,但在此项目中,我将使用便携式电池。在将电源连接到Arduino之前,确保Arduino上的+ 5V端口连接到面包板上的+ 5V。做同样的事情,将Arduino的GND端口连接到面包板的GND。 第四步:获取代码 具体代码见附件。 第五步:观看视频 使用LCD和Arduino制作超声波测距仪视频: https://v.youku.com/v_show/id_XMzIzMjg4NTQ4MA==.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值