全部资料51hei下载地址:
超声波测距.zip
(2.58 MB, 下载次数: 133)
Arduino示例教程模块版——超声波测距实验超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。本实验利用超声波测得的距离从串口中显示。 元器件清单: Zduino UNO × 1;
OJ传感器扩展板× 1; USB数据线 × 1 ; 1p杜邦线 × 4 ; 超声波传感器 × 1;
知识要点:
pulseIn():用于检测引脚输出的高低电平的脉冲宽度。 pulseIn(pin, value) pulseIn(pin, value, timeout) Pin---需要读取脉冲的引脚 Value---需要读取的脉冲类型,HIGH或LOW Timeout---超时时间,单位微秒,数据类型为无符号长整型。 1、使用Arduino采用数字引脚给SR04的Trig引脚至少10μs的高电平信号,触发SR04模块测距功能; 2、触发后,模块会自动发送8个40KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。 3、如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。此时,我们能使用pulseIn()函数获取到测距的结果,并计算出距被测物的实际距离。 SR04与Arduino接线示意图: Arduino示例程序:
- /*
- IDE 版本:1.0.1
- 功能:利用SR04超声波传感器进行测距,并用串口显示测出的距离值
- */
- // 设定SR04连接的Arduino引脚
- const int TrigPin = 2;
- const int EchoPin = 3;
- float distance;
- void setup()
- { // 初始化串口通信及连接SR04的引脚
- Serial.begin(9600);
- pinMode(TrigPin, OUTPUT);
- // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
- pinMode(EchoPin, INPUT);
- Serial.println("Ultrasonic sensor:");
- }
- void loop()
- {
- // 产生一个10us的高脉冲去触发TrigPin
- digitalWrite(TrigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin, LOW);
- // 检测脉冲宽度,并计算出距离
- distance = pulseIn(EchoPin, HIGH) / 58.00;
- Serial.print(distance);
- Serial.print("cm");
- Serial.println();
- delay(1000);
- }
复制代码
连线实物图:
下载完程序后,打开串口监视器,并将超声波传感器对向需要测量的物体,即可看到当前超声波传感器距物体的距离,如下图:
第56讲Arduino入门教程实验16超声波实验
1实验原理 科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹(Hz)。我们人类耳朵能听到的声波频率为20Hz~20000Hz。当声波的振动频率小于20Hz或大于 20000Hz时,我们便听不见了。因此,我们把频率高于20000赫兹的声波称为“超声波”。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
超声波测距原理:超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。
测距的公式表示为: L=C×T
式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
这节课我们就介绍一下怎样使用SR04超声波模块来进行距离测量。会用到上节课脉冲计时所学到的知识,通过计算脉冲时常来算出来超声波传感器所感知到的距离.
图4-16-1SR04超声波模块参数 2硬件电路 超声波测距实验参考表4-16-2。
实验器件
| 数量 | landzoduino开发板 | 1 | 编程线 | 1 | 杜邦线 | 若干 | 面包板 | 1 | 超声波模块 | 1 |
图4-16-2超声波测距实验器件表 图4-16-3超声波测距实验电路图 3程序设计 测试程序如下: - /****************************************************
- 超声波测距实验程序
- 使用超声波传感器测距并串口显示距离值
- This example code is in the public domain.
- ****************************************************/
- const int TrigPin = 8;
- const int EchoPin = 9;
- float cm;
- /****************************************************
- 初始化部分_setup()函数
- ****************************************************/
- void setup()
- {
- Serial.begin(9600);
- pinMode(TrigPin, OUTPUT);
- pinMode(EchoPin, INPUT);
- }
- /****************************************************
- 执行部分_loop()函数
- ****************************************************/
- void loop()
- {
- //低高低电平发一个短时间脉冲去TrigPin
- digitalWrite(TrigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin, LOW);
- //将回波时间换算成cm
- cm= pulseIn(EchoPin, HIGH) / 58.0;
- Serial.print(cm);
- Serial.print("cm");
- Serial.println();
- delay(1000);
- }
复制代码 4实验操作 1) 按照图4-16-3将电路连接到landzoduino开发板上。 2) 插上编程线,把程序下载到Landzoduino控制板。 3) 观察运行情况。 5实验结果
通过超声波模块的收发,可以准确的检测3米之内事物到超声波模块的距离。
6实验视频
Arduino连接超声波传感器测距
注:方法已经过时,新方法使用timer去计时,请看https://code.google.com/p/arduino-new-ping/
超声波传感器适用于对大幅的平面进行静止测距。普通的超声波传感器测距范围大概是2cm~450cm,分辨率3mm(淘宝卖家说的,笔者测试环境没那么好,个人实测比较稳定的距离10cm~2m左右,超过此距离就经常有偶然不准确的情况发生了,当然不排除笔者技术问题。)
测试对象是淘宝上面最便宜的SRF-04超声波传感器,有四个脚:5v电源脚(Vcc),触发控制端(Trig),接收端(Echo),地端(GND)
模块工作原理:
- 采用IO触发测距,给至少10us的高电平信号;
- 模块自动发送8个40KHz的方波,自动检测是否有信号返回;
- 有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340m/s))/2;
电路连接方法:
Arduino程序例子:
- 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);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin, LOW);
- cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
- cm = (int(cm * 100.0)) / 100.0; //保留两位小数
- Serial.print(cm);
- Serial.print("cm");
- Serial.println();
- delay(1000);
- }
复制代码
Arduino教程(提高篇)——SR04超声波类库的使用SR04是最常见的超声波传感器之一,价格便宜,好用,是arduino开发的必备良品~
其工作原理如下
- 采用IO触发测距,给至少10us的高电平信号;
- 模块自动发送8个40KHz的方波,自动检测是否有信号返回;
- 有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.距离=(高电平时间*声速(340m/s))/2;
下面使用的是arduino官方推荐的SR04超声波传感器类库
- 将附件下载后解压到arduinoIDE下的libraries文件夹即可,如下图
- #include "SR04.h"
- #define TRIG_PIN 2
- #define ECHO_PIN 3
- SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
- long a;
- void setup() {
- Serial.begin(9600);
- Serial.println("Example written by Coloz From Arduino.CN");
- delay(1000);}
- void loop() {
- a=sr04.Distance();
- Serial.print(a);
- Serial.println("cm");
- delay(1000);}
复制代码#define TRIG_PIN 2 #define ECHO_PIN 3 |
TRIG接到arduino的第二脚
ECHO接到arduino的第三脚
VCC、GND接上
最后提供一个不用库直接驱动SR04的程序(上面库,就是把这个程序封装了一次) - const int TrigPin = 2;
- const int EchoPin = 3;
- float cm;
- void setup()
- {
- Serial.begin(9600);
- pinMode(TrigPin, OUTPUT);
- pinMode(EchoPin, INPUT);
- }
- void loop()
- {
- //发一个10ms的高脉冲去触发TrigPin
- digitalWrite(TrigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin, LOW);
- cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
- cm = (int(cm * 100.0)) / 100.0; //保留两位小数
- Serial.print(cm);
- Serial.print("cm");
- Serial.println();
- delay(1000);
- }
复制代码
|