基于arduino超声波测距学习
``# HC-SRO4 超声波测距
VCC 是HC-SR04超声波距离传感器的电源,我们连接了Arduino上的5V引脚。
Trig (Trigger) 引脚用于触发超声波脉冲。(A0)
Echo 回声当接收到反射信号时,引脚产生一个脉冲。脉冲的长度与检测发射信号所需的时间成正比。(A1)
GND 应该连接到Arduino的地。
int TrgPin = A0;
int EcoPin = A1;
float dist;
void setup()
{
Serial.begin(9600);
//设置TrgPin为输出状态
pinMode(TrgPin, OUTPUT);
// 设置EcoPin为输入状态
pinMode(EcoPin, INPUT);
}
void loop()
{digitalWrite(TrgPin, LOW);
delayMicroseconds(8);
digitalWrite(TrgPin, HIGH);
// 维持10毫秒高电平用来产生一个脉冲
delayMicroseconds(10);
digitalWrite(TrgPin, LOW);
// 读取脉冲的宽度并换算成距离
dist = pulseIn(EcoPin, HIGH) / 58.00;
Serial.print("Distance:");
Serial.print(dist);
Serial.println("cm");
delay(300);
}
PULSEIN
读引脚的脉冲信号, 被读取的脉冲信号可以是 HIGH 或 LOW. 例如我们要检测HIGH脉冲信号, Arduino将在引脚变为高电平时开始计时, 当引脚变为低电平时停止记时,并返回脉冲持续时长(时间单位:微秒)。如果在超时时间内没有读到脉冲信号的话, 将返回0.
根据经验发现,pulseIn()函数在检测脉冲间隔过短的信号时会产生错误。Arduino可检测的脉冲间隔时间范围是10微秒到3分钟。请留意假如调用pulseIn()函数时读取信号的引脚上已经为高电平,此时Arduino将等待该引脚变为低电平以后再开始检测脉冲信号。另外只有Arduino的中断是开启时,才能使用pulseIn()。
先了解arduino的功能
找到超声波接口
了解LCD1602显示屏
LCD1602
是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
转接板
SDA----数据线 SCL-----控制线
是SCL\SDA是I2C总线的信号线.
SDA是双向数据线,SCL是时钟线SCL.在I2C 总线上传送数据,首先送最高位,由主机发出启动信号
SDA在SCL 高电平期间由高电平跳变为低电平,然后由主机发送一个字节的数据.
数据传送完毕,由主机发出停止信号,SDA在SCL 高电平期间由低电平跳变为高电平.
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
// include the library code
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>LiquidCrystal_I2C lcd(0x27,16,2)#define TRIGGER_PIN 2 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 3 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.void setup() {Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.lcd.init(); lcd.backlight();
}void loop() {delay(100); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).Serial.print("Ping: ");Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)Serial.println("cm");lcd.setCursor(0, 0);lcd.print("Distance:");lcd.setCursor(0, 1);lcd.print(" ");lcd.setCursor(9, 1);lcd.print(uS / US_ROUNDTRIP_CM);lcd.setCursor(12, 1);lcd.print("cm");
}
显示屏
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); //配置LCD地址及行列void setup()
{lcd.init(); //初始化LCDlcd.backlight(); //打开背光
}void loop()
{lcd.setCursor(0,0);//设置显示位置lcd.print(" HELLO WORLD!");//显示字符数据lcd.setCursor(0,1);//设置显示位置lcd.print("ARDUINO.NXEZ.COM");//显示字符数据
}
尝试使用带有转接板的LCD1602显示超声波测距的数据
#include <LiquidCrystal_I2C.h>#define LM35 A0
#define Trig 2 //引脚Tring 连接 IO D8
#define Echo 3 //引脚Echo 连接 IO D9float cm; //距离变量LiquidCrystal_I2C lcd(0x27,16,2); //构造一个LiquidCrystal的类成员。使用数字IO ,12,11,5,4,3,2int val = 0; //存放AD变量值
float temp = 0; //存放温度值的10倍void setup()
{lcd.init();lcd.backlight(); lcd.print("Welcome to use!"); //液晶显示Welcome to use!delay(1000); //延时1000mslcd.clear(); //液晶清屏pinMode(Trig, OUTPUT);pinMode(Echo, INPUT);
}void loop()
{//给Trig发送一个低高低的短时间脉冲,触发测距digitalWrite(Trig, LOW); //给Trig发送一个低电平delayMicroseconds(2); //等待 2微妙digitalWrite(Trig,HIGH); //给Trig发送一个高电平delayMicroseconds(10); //等待 10微妙digitalWrite(Trig, LOW); //给Trig发送一个低电平temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时//返回脉冲的长度//声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000//因为发送到接收,实际是相同距离走了2回,所以要除以2//距离(厘米) = (回波时间 * (34 / 1000)) / 2//简化后的计算公式为 (回波时间 * 17)/ 1000cm = (temp * 17 )/1000; //把回波时间换算成cmlcd.setCursor(0,0); //设置液晶开始显示的指针位置lcd.print("Now Distance:"); //液晶显示“LM35 temp =”lcd.setCursor(0,1); //设置液晶开始显示的指针位置,在下一行显示lcd.print(cm); //液晶显示距离delay(1000); //延时1000ms
}
基于arduino超声波测距学习相关推荐
- 基于单片机超声波测距
预期目标: 1.超声波模块测定发送源至障碍物的距离 2.数码显示管显示发送源到障碍物的距离 3.通过按键设定报警距离,当障碍物在一定超声范围内,蜂鸣器报警 硬件实物图及演示: 使用 HC6800-MS ...
- 基于cc2530超声波测距报警系统
基于cc2530超声波测距报警系统 1. 关于超声波传感器 简介:超声波传感器是将超声波信号转换成其他能量信号的传感器.超声波是振动频率高于20kHz的机械波超声波测距主要应用于一些工业现场的位置监控 ...
- 基于单片机的TLC稳压电源系统设计-基于单片机大脑运算能力智力测试仪-基于单片机超声波测距系统仿真设计(报告 PCB 原理图)-基于单片机超高精度电参数测试设计-基于单片机变电站变压器运行参数监测仿真
1316基于单片机的TLC稳压电源系统设计-毕设课设仿真资料 三极管射极电压是稳压电源的输出电压,可以接用电器或负载,这个电压值通过TLC549(A/D,同TLC548)数据转换后,送往单片机处理并显 ...
- 【在线仿真】Arduino 超声波测距+LCD1602显示
[在线仿真]Arduino 超声波测距+LCD1602显示 程序代码 /*LiquidCrystal Library - Hello WorldThis sketch prints "Hel ...
- Arduino超声波测距模块控制蜂鸣器
Arduino超声波测距模块控制蜂鸣器 超声波传感器 蜂鸣器 电路连接.接线 源码 超声波传感器 超声波传感器是利用超声波的特性研制而成的传感器.超声波是一种振动频 率高于声波的机械波,由换能晶片在电 ...
- arduino 超声波测距原理_超声波测距灯
介绍硬件准备 本篇文章专门介绍用Arduino制作超声波测距灯,需要的材料是: 1. Arduino开发板 2. HC-SR04超声波模块 3. LED灯 4. 杜邦线若干 注意事项 之所以要写这 ...
- 基于arduino的ESP32 学习笔记(一) 基于ESP32的智能花盆
前言 本文的目的是为了给将要制作的ESP32手环做技术储备 准备学习下ESP32,还有嵌入式GUI框架LVGL,通过做几个小项目练手是不错的选择,最终目标是做一个ESP32的手环 做一个ESP32手环 ...
- arduino超声波测距接线图详细_Arduino系列之超声波测距模块代码(一)
这里我将简单介绍超声波测距模块 SR04超声波传感器: 是利用超声波特性检测距离的传感器,其带有两个超声波探头,分别用作于发射和接收超声波.范围在3-450cm. 工作原理: 超声波发射器向某一方向发 ...
- Arduino 超声波测距 LCD1602A
arduino 实现超声波测距 涉及模块:四线超声波测距模块,LCD1602A LCD1602连接 实验代码: #include <LiquidCrystal.h> LiquidCryst ...
最新文章
- h3c服务器安装linux,H3C服务器安装Ubuntu操作系统
- 实现物体绕不同轴旋转,并可以外部调用的函数
- 计算机控制系统开卷试卷,13自动化计算机控制技术考试A卷
- 在C++中可以用3种方法访问一个字符串
- P3242 [HNOI2015] 接水果(整体二分、扫描线、dfs序)
- coreboot学习10:coreboot第一阶段学习小结
- 在过去的12个月(2016)里,你用到的最多的算法或方法是什么?
- 【Android】两种动画介绍(Tween动画、Frame动画)
- GO语言学习之路26
- 50款PS完美汉化插件一键安装,win+mac
- 计算机无法连接到wifi但手机可以使用,电脑连不上wifi但是手机可以连得上怎么解决...
- PHP 图片合成、仿微信群头像
- 无秘app android2.2.3.5能用么,关于“无秘”APP的竞品分析
- Rate Limiting Algorithms (限流算法)
- 唯品会的服务化[转]
- 利用mybatis拦截器注解处理sql
- ng 无法加载文件 C:\Users\hl\AppData\Roaming\npm\ng.ps1 解决方法
- linux进程与服务管理,linux基础之进程管理与服务
- 马斯克宣布特斯拉车主可以免费试用Autopilot
- [BOI2003]团伙