zoukankan      html  css  js  c++  java
  • 【雕爷学编程】Arduino动手做(58)---SR04超声波传感器

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

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

    实验五十八: HC-SR04超声波测距传感器模块(5针宽电压)

    超声波探头
    是在超声波检测过程中发射和接收超声波的装置。探头的性能直接影响超声波的特性,影响超声波的检测性能。在超声检测中使用的探头,是利用材料的压电效应实现电能、声能转换的换能器。探头中的关键部件是晶片,晶片是一个具有压电效应的单晶或者多晶体薄片,它的作用是将电能和声能互相转换。

    菲律宾眼镜猴会用超声波进行交流
    菲律宾眼镜猴因为一双又圆又大且水汪汪的茶色大眼睛而被人们所知,在人们的印象中它有着让人难以置信的小型身材,在它们小小的脸庞上,长着两只圆溜溜的特别大的眼睛,眼珠的直径可以超过1厘米,和它的小身体很不相称,好像戴着一副特大的旧式老花眼镜。所以,人们给它起了一个十分形象的名字:眼镜猴。它们大多时候都是“沉默寡言”的形象。但来自加利福尼亚洪堡加州州立大学的科学家近日研究发现,其实菲律宾眼镜猴是不折不扣的“话匣子”,它们时刻都在发出一种超声波,只不过捕食者无法听到而已。据了解,研究人员发现这种眼镜猴发出声音的“最小频率”可达到67千赫,比陆地上任何一种啮齿动物和蝙蝠发出的音量都要高很多,甚至偶尔还能飙升到70千赫。众所周知,任何声音只要达到20千赫以上,就很难被人们所听见,就连听力一向很敏锐的狗,也只能听到23千赫的声音。而眼镜猴甚至可以直接听到90千赫的声音。最为特别的是,在眼镜猴的群体中彼此传递着一种秘密的语言,这种语言会提醒对方注意捕食者的危险。研究人员表示,超声波的音频对信号发出者和接受者都十分有用,因为这样捕食者就很难从声音的来源进行定位,这样寻找起来就十分有难度了。甚至眼镜猴还可以在猎物旁“窃窃私语”,它们所捕捉的典型猎物为蟋蟀、螳螂、以及蛾子等昆虫,最为特别的是,眼镜猴还能自动屏蔽使它们分散注意力的低周波丛林噪音。研究人员表示,在动物王国不仅眼镜猴有这样的超能力,鲸鱼和猫也同样能够在超声波范围内彼此沟通交流。

    超声波
    蝙蝠和某些海洋动物都能够利用高频率的声音进行回声定位或信息交流。它们能通过口腔或鼻腔把从喉部产生的超声波发射出去,利用折回的声波来定向,并判定附近物体的位置、大小以及是否在移动。超声波是一种频率高于20000赫兹的声波,它的方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用。超声波因其频率下限大于人的听觉上限而得名。科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹(Hz)。我们人类耳朵能听到的声波频率为20Hz-20000Hz。因此,我们把频率高于20000赫兹的声波称为“超声波”。通常用于医学诊断的超声波频率为1兆赫兹-30兆赫兹。理论研究表明,在振幅相同的条件下,一个物体振动的能量与振动频率成正比,超声波在介质中传播时,介质质点振动的频率很高,因而能量很大.在中国北方干燥的冬季,如果把超声波通入水罐中,剧烈的振动会使罐中的水破碎成许多小雾滴,再用小风扇把雾滴吹入室内,就可以增加室内空气湿度,这就是超声波加湿器的原理。如咽喉炎、气管炎等疾病,很难利用血流使药物到达患病的部位,利用加湿器的原理,把药液雾化,让病人吸入,能够提高疗效。利用超声波巨大的能量还可以使人体内的结石做剧烈的受迫振动而破碎,从而减缓病痛,达到治愈的目的。超声波在医学方面应用非常广泛,可以对物品进行杀菌消毒。

    超声效应

    当超声波在介质中传播时,由于超声波与介质的相互作用,使介质发生物理的和化学的变化,从而产生一系列力学的、热学的、电磁学的和化学的超声效应,包括以下4种效应:

    ①机械效应。超声波的机械作用可促成液体的乳化、凝胶的液化和固体的分散。当超声波流体介质中形成驻波时,悬浮在流体中的微小颗粒因受机械力的作用而凝聚在波节处,在空间形成周期性的堆积。超声波在压电材料和磁致伸缩材料中传播时,由于超声波的机械作用而引起的感生电极化和感生磁化(见电介质物理学和磁致伸缩)。

    ②空化作用。超声波作用于液体时可产生大量小气泡。一个原因是液体内局部出现拉应力而形成负压,压强的降低使原来溶于液体的气体过饱和,而从液体逸出,成为小气泡。另一原因是强大的拉应力把液体“撕开”成一空洞,称为空化。空洞内为液体蒸气或溶于液体的另一种气体,甚至可能是真空。因空化作用形成的小气泡会随周围介质的振动而不断运动、长大或突然破灭。破灭时周围液体突然冲入气泡而产生高温、高压,同时产生激波。与空化作用相伴随的内摩擦可形成电荷,并在气泡内因放电而产生发光现象。在液体中进行超声处理的技术大多与空化作用有关。

    ③热效应。由于超声波频率高,能量大,被介质吸收时能产生显著的热效应。

    ④化学效应。超声波的作用可促使发生或加速某些化学反应。例如纯的蒸馏水经超声处理后产生过氧化氢;溶有氮气的水经超声处理后产生亚硝酸;染料的水溶液经超声处理后会变色或退色。这些现象的发生总与空化作用相伴随。超声波还可加速许多化学物质的水解、分解和聚合过程。超声波对光化学和电化学过程也有明显影响。各种氨基酸和其他有机物质的水溶液经超声处理后,特征吸收光谱带消失而呈均匀的一般吸收,这表明空化作用使分子结构发生了改变。

    超声探头
    是利用超声波的特性而研制的传感器,超声波传感器的典型结构如图所示。它是把成正方形的两个压电晶片(亦称双晶振子)按照相反的极性粘贴在一起,再引出两个电极。压电晶片上面有金属震动板和圆锥形振子。圆锥形振子具有很强的方向性,便于发送和接收超声波。超声波传感器采用金属或塑料外壳,其顶部有屏蔽栅。

    超声探头性能指标
    探头的核心是其塑料外套或者金属外套中的一块压电晶片。构成晶片的材料可以有许多种。晶片的大小,如直径和厚度也各不相同,因此每个探头的性能是不同的,我们使用前必须预先了解它的性能。超声波传感器的主要性能指标包括:
    1、工作频率
    工作频率就是压电晶片的共振频率。当加到它两端的交流电压的频率和晶片的共振频率相等时,输出的能量最大,灵敏度也最高。
    2、工作温度
    由于压电材料的居里点一般比较高,特别是诊断用超声波探头使用功率较小,所以工作温度比较低,可以长时间地工作而不失效。医疗用的超声探头的温度比较高,需要单独的制冷设备。
    3、灵敏度
    主要取决于制造晶片本身。机电耦合系数大,灵敏度高;反之,灵敏度低。
    4、指向性
    超声波传感器探测的范围。

    测距原理
    超声波具有频率较高,沿直线传播、方向性好、绕射小、穿透力强、传播速度慢(约340m/s,与声速相同)等特点。超声波对固体和液体的穿透能力强,尤其对于在阳光下不透明的固体,可以穿透几十m的深度。超声波遇到杂质或分界面时会产生反射波,利用这一特性可构成超声波探伤仪或测距仪。超声波遇到移动物体时会产生多普勒效应(DopplerEffect),使接收到的频率发生变化,由此可制成多普勒测距系统。超声波测距原理是超声波发射探头发出的超声波脉冲,经媒质(空气)传到物体表面,反射后通过媒质(空气)传到接收探头,测出超声脉冲从发射到接收所需的时间,根据媒质中的声速,求得从探头到物体表面之间的距离。设探头到物体表面的距离为L,超声在空气中的传播速为v,从发射到接收所需的传播时间为t,则有:L=vt/2。由此可见,被测距离L与传播时间之间具有确定的函数关系,只要能测出时间t,即可求出距离L,通过软件实现直接在显示器上显示L的值。

    位差测距
    超声波传感器与单片机系统进行接口构成距离检测的硬件系统,在系统软件的控制下,单片机向位差超声波传感器发送的一个触发脉冲,位差超声波传感器被此脉冲触发后会产生一道短40 kHz的脉冲电信号,此40 kHz的脉冲电信号通过激励换能器处理以后,将转换成机械振动的能量,其振动频率约在20 kHz以上,由此形成了超声波,该信号经锥形"辐射口"处将超声波信号在空气中以每秒约1 130英尺的速度向外发射出去。当发射出去的超声波信号遇到障碍物以后,立即被反射回来。接收器接收到反射回来的超声波信号后,通过其内部转换,将超声波变成微弱的电振荡,并将信号进行放大,就可得到所需的脉冲信号,此脉冲信号再返回给单片机,表示回波被探测,这个脉冲宽度就是对应于爆裂回声返回到传感器所需时间,其时序如图所示。

    HC-SR04超声波测距传感器模块(5针宽电压)

    主要技术参数

    1:使用电压:DC---5V  

    2:静态电流:小于2mA     

    3:电平输出:高5V    

    4:电平输出:底0V      

    5:感应角度:不大于15度   

    6:探测距离:2cm-450cm 

    7:  高精度 可达0.2cm   

    8:  接线方式:VCC、trig(控制端)、 echo(接收端)、 GND

    模块电原理图

    模块特征
    HC-SR04超声波测距模块具有测距距离精确,能和SRF05,SRF02等超声波测距相媲美,测量距离 ** 2cm~450cm (小编实测:10cm~300cm)。工作原理——1)采用IO触发测距,给至少10us的高电平信号。2)模块自动发送8个40KHz的方波,自动检测是否有信号返回。3)有信号返回,通过IO输出一高电平,高电平持续时间就是超声波从发射到返回的时间。只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S) /2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
    注:
    1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。
    2、测距时,被测物体的面积不少于05平方米且平面尽量要求平整,否则影响测量的结果。

    使用高电平触发

    超声波测距模块接脚:

    VCC -> 5V

    GND -> GND

    Trig (控制端)-> 2

    Echo (接收端)-> 3

    注: TRIP引脚是内部上拉10K的电阻,用单片机的IO口拉低TRIP引脚,然后给一个10us以上的脉冲信号。模块应先插好在电路板上再通电,避免产生高电平的误动作,如果产生了,重新通电方可解决。

    /*
    
    【Arduino】168种传感器模块系列实验(58)
    
    实验五十八: HC-SR04超声波测距传感器模块(通用款)
    
    Echo接Digital 3口,接收距离信号
    
    Trig接Arduino板的Digital 2口,触发测距
    
    上电后预热稳定大约需要60秒钟
    
    */
    
     
    
    float      distance;
    
    const int  echo=3;                          //echO接D3脚
    
    const int  trig=2;                          //echO接D2脚
    
    void setup()
    
    {
    
      Serial.begin(9600);                       //波特率9600
    
      pinMode(echo,INPUT);                       //设置echo为输入脚
    
      pinMode(trig,OUTPUT);                      //设置trig为输出脚
    
      Serial.println("HC-SR04-2019.7.14测距开始:");
    
    }
    
    void loop()
    
    {
    
     digitalWrite(trig,LOW);
    
     delayMicroseconds(20); 
    
     digitalWrite(trig,HIGH);
    
     delayMicroseconds(20);
    
     digitalWrite(trig,LOW);                     //发一个20US的高脉冲去触发Trig
    
     
    
     distance  = pulseIn(echo,HIGH);             //计数接收高电平时间
    
     distance  = distance*340/2/10000;           //计算距离 1:声速:340M/S  2:实际距离1/2声速距离 3:计数时钟为1US
    
     Serial.print("距离: ");
    
     Serial.print(distance);
    
     Serial.println("cm");
    
     delay(20);                                   //单次测离完成后加20mS的延时再进行下次测量。防止近距离测量时,测量到上次余波,导致测量不准确。
    
     delay(500);                                  //500mS测量一次
    
    } 
    

      

    /*
    
    【Arduino】168种传感器模块系列实验(58)
    
    实验五十八: HC-SR04超声波测距传感器模块(通用款)
    
    程序之二,阙值50厘米控制板载LED
    
    Echo接Digital 3口,接收距离信号
    
    Trig接Arduino板的Digital 2口,触发测距
    
    上电后预热稳定大约需要60秒钟
    
    HC-SR04为简单通用款,没有温度补偿,实测200CM段误差约3CM
    
    */
    
    intinputPin=3;// 定义超声波信号接收接口
    
    intoutputPin=2;// 定义超声波信号发出接口
    
    intledpin=13;
    
    void setup()
    
    {
    
    Serial.begin(9600);
    
    pinMode(ledpin,OUTPUT);
    
    pinMode(inputPin, INPUT);
    
    pinMode(outputPin, OUTPUT);
    
    }
    
    void loop()
    
    {
    
    digitalWrite(outputPin, LOW);// 使发出发出超声波信号接口低电平2μs
    
    delayMicroseconds(2);
    
    digitalWrite(outputPin, HIGH);// 使发出发出超声波信号接口高电平10μs,这里是至少10μs
    
    delayMicroseconds(10);
    
    digitalWrite(outputPin, LOW);// 保持发出超声波信号接口低电平
    
    intdistance = pulseIn(inputPin, HIGH);// 读出脉冲时间
    
    distance= distance/58;// 将脉冲时间转化为距离(单位:厘米)
    
    Serial.println(distance);//输出距离值
    
    delay(50);
    
    if(distance >=50)
    
    {//如果距离大于50厘米小灯亮起
    
    digitalWrite(ledpin,LOW);
    
    }//如果距离小于50厘米小灯熄灭
    
    else
    
    digitalWrite(ledpin,HIGH);
    
    }
    

    /*
    
    【Arduino】168种传感器模块系列实验(58)
    
    实验五十八: HC-SR04超声波测距传感器模块(通用款)
    
    程序之三,串口输出等待时间的原始数据
    
    Echo接Digital 3口,接收距离信号
    
    Trig接Arduino板的Digital 2口,触发测距
    
    上电后预热稳定大约需要60秒钟
    
    HC-SR04为简单通用款,没有温度补偿,实测200CM段误差约3CM
    
    */
    
    #define Trig 2
    
    #define Echo 3
    
    floatcm;//距离变量
    
    floattemp;
    
    void setup() {
    
    Serial.begin(9600);
    
      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)/ 1000
    
    
    
    cm = (temp *17)/1000;//把回波时间换算成cm
    
    Serial.print("Echo =");
    
    Serial.print(temp);//串口输出等待时间的原始数据
    
    Serial.print(" | | Distance = ");
    
    Serial.print(cm);//串口输出距离换算成cm的结果
    
    Serial.println("cm");
    
    delay(500);
    
    }
    

      

    实验图形编程(Mind+,编玩边学)

    实验仿真编程(linkboy3.6)

    网上搜索了一下,超声波模块的型号还不少,比如还有HY-SRF05(五针高精度);US-025和US-026(苏州顺憬志联CS100芯片,距离6米稳定性好些);US-100(同时具有GPIO,串口等多种通信方式,内带看门狗,工作稳定可靠);RCWL-1601(宽电压,对棉质及不规则物体探测精度高于SR-04);RCWL-1603(含有UART,PWM,GPIO及UART AUTO OUT等多种接口模式,专业MCP9700温度补偿);US-015(目前市场上分辨率最高,重复测量一致性最好的超声波测距模块)等,以后待手头有实物了再做后续实验。

  • 相关阅读:
    new和base的语法
    js常用代码
    无法识别connectionStrings
    DataTable
    字符串的操作时间格式化
    Facade外观模式(转载cnblogs)
    ArrayList下的循环绑定和循环删除
    自定义属性与事件委托相结合的实例
    泛型 开放类型和构造类型(基础学习)
    C#策略模式 摘自jspcool
  • 原文地址:https://www.cnblogs.com/eagler8/p/12200154.html
Copyright © 2011-2022 走看看