【雕爷学编程】Arduino动手做(114)---US-015高分辨超声波模块

发布时间 2023-06-18 11:19:22作者: 行者花雕

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十四:US-015 高分辨超声波测距模块 超声波传感器 US-020升级版

 

 

超声波

是一种频率高于20000赫兹的声波,它的方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用。超声波因其频率下限大于人的听觉上限而得名。科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹(Hz)。我们人类耳朵能听到的声波频率为20Hz-20000Hz。因此,我们把频率高于20000赫兹的声波称为“超声波”。通常用于医学诊断的超声波频率为1兆赫兹-30兆赫兹。

 

 

 

拉扎罗·斯帕拉捷(Lazzaro Spallanzani,1729—1799)
在人类对自然的认识还没有达到一定高度之前,人们理所当然地认为所有的动物都是靠眼睛来识别物体的方向和位置的。后来事实证明,这种想法是错误的。首先揭开这个秘密的是拉扎罗·斯帕拉捷(Lazzaro Spallanzani,1729—1799),他是意大利著名的博物学家、生理学家和实验生理学家。他曾经做过四个关于蝙蝠的实验,揭示了蝙蝠靠耳朵而不是眼睛识别物体和捕捉猎物的事实,为超声波的研究提供了理论基础。

斯帕拉捷习惯晚饭后在附近的街道上散步,他常常看到,很多蝙蝠灵活地在空中飞来飞去,能在非常黑暗的条件下灵巧地躲过各种障碍物去捕捉飞虫,这个现象引起了他的好奇,蝙蝠凭什么特殊本领在夜空中自由自在地飞行呢,难道是因为它有一双可以在黑夜中洞悉一切的敏锐眼睛吗?

为了验证自己的猜想,他做了第一个蝙蝠实验。1793年夏季的一个夜晚,斯帕拉捷走出家门,放飞了关在笼子里做实验用的几只蝙蝠。只见蝙蝠们抖动着带有薄膜的肢翼,轻盈地飞向夜空,并发出自由自在的“吱吱”叫声。斯帕拉捷见状,不禁大叫出声,因为在放飞蝙蝠之前,他已经蒙上了蝙蝠的双眼,“蒙上眼的蝙蝠怎么能如此敏捷地飞翔呢?”他感到百思不得其解,下决心一定要解开这个谜。

斯帕拉捷想到: “既然不是靠眼睛来辨别障碍物,那么会不会是鼻子在发挥作用呢?”于是他又做了第二个实验。这一次他把蝙蝠的鼻子堵住,在夜晚放了出去,结果,蝙蝠还是照样飞得轻松自如。“既然眼睛和鼻子都完全没有对蝙蝠的飞翔产生影响,那么蝙蝠又是依靠什么来躲避障碍物和捕捉食物呢?奥秘会不会在翅膀上呢?”于是斯帕拉捷又做了第三次实验。他这次在蝙蝠的翅膀上涂了一层油漆。然而,和前两次一样,这也丝毫没有影响到它们的飞行。“眼睛、鼻子、翅膀都不是蝙蝠辨别物体的因素,那到底会是什么呢?”斯帕拉捷感到非常困惑。最后,斯帕拉捷又把蝙蝠的耳朵塞住,进行了第四次实验。这一次,飞上天的蝙蝠再也没有了之前矫健的身手,而是和一个喝醉酒的人一样,东碰西撞的,很快就跌了下来。斯帕拉捷这才恍然大悟,原来,蝙蝠是靠听觉来确定方向,捕捉目标的。

斯帕拉捷的新发现引起了人们的震动,这完全打破了人们的常规认识。从此,许多科学家进一步研究了这个课题。最后,人们终于弄清楚: 蝙蝠是利用超声波(频率高于20000Hz的声波)在夜间导航的(图3.21)。它的喉头发出一种超过人耳听阈的高频声波,这种声波沿着直线传播,一旦碰到物体就迅速返回来,它们用耳朵接收了这种返回来的超声波,使它们能够做出准确的判断,引导它们飞行。超声波的科学原理现已广泛地运用到航海探测、导航和医学中。

 

 

超声波测距原理
超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t(秒),就可以计算出发射点距障碍物的距离(s),即:s=340t/2)
 
 

US-015超声波测距模块

US-015是目前市场上分辨率最高,重复测量一致性最好的超声波测距模块;US-015的分辨率高于1mm,可达0.5mm,测距精度高;重复测量一致性好,测距稳定可靠。US-015超声波测距模块可实现2cm~4m的非接触测距功能,供电电压为5V,工作电流为2.2mA,支持GPIO通信模式,工作稳定可靠。

 

Arduino实验开源代码

 

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十四:US-015 高分辨超声波测距模块 超声波传感器 US-020升级版

项目:测试距离(单位mm)

原理:声波在空气中传播速度为340m/s,根据计时器记录时间t,即可算出发射点距离障碍物的距离S,即S=340m/s*t/2,这就是所谓的时间差测距法。

*/



unsigned int EchoPin = 2;        // connect Pin 2(Arduino digital io) to Echo at US-015

unsigned int TrigPin = 3;        // connect Pin 3(Arduino digital io) to Trig at US-015

unsigned long Time_Echo_us = 0;

unsigned long Len_mm  = 0;



void setup(){  //Initialize

  Serial.begin(9600);      //Serial: output result to Serial monitor

  pinMode(EchoPin, INPUT);  //Set EchoPin as input, to receive measure result from US-015

  pinMode(TrigPin, OUTPUT);  //Set TrigPin as output, used to send high pusle to trig measurement (>10us)

}



void loop(){

  digitalWrite(TrigPin, HIGH);  //begin to send a high pulse, then US-015 begin to measure the distance

  delayMicroseconds(20);      //set this high pulse width as 20us (>10us)

  digitalWrite(TrigPin, LOW);    //end this high pulse

  Time_Echo_us = pulseIn(EchoPin, HIGH);          //calculate the pulse width at EchoPin,

  if((Time_Echo_us < 60000) && (Time_Echo_us > 1))    //a valid pulse width should be between (1, 60000).

 {

    Len_mm = (Time_Echo_us*34/100)/2;    //calculate the distance by pulse width, Len_mm = (Time_Echo_us * 0.34mm/us) / 2 (mm)

    Serial.print("Present Distance is: ");  //output result to Serial monitor

    Serial.print(Len_mm, DEC);        //output result to Serial monitor

    Serial.println("mm");            //output result to Serial monitor

  }

  delay(1000);                  //take a measurement every second (1000ms)

}

  

实验串口返回情况

 

 

Arduino实验开源代码之二

 

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十四:US-015 高分辨超声波测距模块 超声波传感器 US-020升级版

项目:超声波测距(单位cm)

*/



const int TrigPin = 3; //发出超声波

const int EchoPin = 2; //收到反射回来的超声波

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

}

  

实验串口返回情况

 

Arduino实验场景图

 

 

实验开源图形编程(Mind+、编玩边学)

 

 

实验串口返回情况

 

实验开源图形编程(Mind+、编玩边学)

 

 

实验开源仿真编程(Linkboy V4.62)