版主: wanchong , wangyu , eepwwp , firedom

分享到:
共1条 1/1 1   

Arduino Uno +三个 HC-SR04超声波测距模块

    [您是本帖的第2916位阅读者]
张勤
我是MM
普通会员

最后登陆时间:2015-12-24 15:35:11

直达楼层
1# 发表于 2015-12-10 15:46:59

一、器件介绍
(1)器件名称:
      HC-SR04超声波测距模块
(2)主要技术参数:
      1、使用电压:DC5V;         
      2、静态电流:小于2mA;        
      3、电平输出:高5V;              
      4、电平输出:底0V;
      5、感应角度:不大于15度;
      6、探测距离:2cm-450cm  7:高精度可达0.2cm; 
      7、接线方式,VCC、trig(控制端)、echo(接收端)、GND。
(3)工作原理:
      1、采用IO触发测距,给至少10us的高电平信号;      
      2、模块自动发送8个40khz的方波,自动检测是否有信号返回;

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

         间。测试距离=(高电平时间*声速(340M/S))/2。
    超声波传感器主要利用多普勒原理,通过晶振向外发射超过人体能感知的高频超声波,
一般典型的选用25~40kHz波,然后控制模块检测反射回来波的频率,如果区域内有物体运动,反射波频率就会有轻微的波动,即多普勒效应,以此来判断照明区域的物体移动,从而达到控制开关的目的。
    超 声波的纵向振荡特性,可以在气体、液体及固体中传播且其传播速度不同;它还有折射和反射现象,在空气中传播其频率较低,衰减较快,而在固体、液体中则衰减 较小,传播较远。超声波传感器正是利用超声波的这些特性。超声波传感器有敏感范围大,无视觉盲区,不受障碍物干扰等特点,这项技术已经在商业和安全领域被 使用25年多了,已经被证
明是检测小物体运动最有效的方法。    ULTD5N-350超声波测距模块,可提供3cm--3.5m的非接触式距离感测功能,该模块包括了超声波发射器、接收器与控制电路。其基本工作原理为给予此超声波测距模块一触发信号后发射超声波,当超声波投射到物体而反射回来时,模块输出一回响信号,以触发信号和回响信号间的时间差,来判定物体的距离。[size=+0] 
(4)应用产品领域:
      飞行器测距、机器人避障、公共安防、停车场检测等。

(5)管脚图:


(4)运行代码:
const int echopin=5; // echo接5端口
const int trigpin=4; // trig接4端口  左侧超声波测距器

const int echopin2=3;
const int trigpin2=2;// 右侧超声波测距器

const int echopin3=6;
const int trigpin3=7;// 前方超声波测距器

void setup()
{
  Serial.begin(9600);  
  pinMode(echopin,INPUT); //设定echo为输入模式
  pinMode(trigpin,OUTPUT);//设定trig为输出模式
  pinMode(echopin2,INPUT);
  pinMode(trigpin2,OUTPUT);
  pinMode(echopin3,INPUT);
  pinMode(trigpin3,OUTPUT);

}

void loop()
{
  // *********************************** 左方测距******/
   digitalWrite(trigpin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigpin,HIGH);
 delayMicroseconds(10);
 digitalWrite(trigpin,LOW); //发一个10ms的高脉冲去触发TrigPin
 float distanceL = pulseIn(echopin,HIGH);//接收高电平时间
  distanceL = distanceL/58.0;//计算距离
  Serial.print("distanceL : ");  //输出距离
  Serial.print(distanceL);
  Serial.println("cm");  //输出单位
  delay(100);   //间隔100uS

 /*******************右方测距******************************************/

  digitalWrite(trigpin2,LOW);
  delayMicroseconds(2);
  digitalWrite(trigpin2,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigpin2,LOW); //发一个10ms的高脉冲去触发TrigPin
  float distanceR = pulseIn(echopin2,HIGH);//接收高电平时间
  distanceR = distanceR/58.0;//计算距离
  Serial.print("distanceR : ");
  Serial.print(distanceR);
  Serial.println("cm");

// *******************前方测距********************************************/
  digitalWrite(trigpin3,LOW);
  delayMicroseconds(2);
  digitalWrite(trigpin3,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigpin3,LOW); //发一个10ms的高脉冲去触发TrigPin 
  float distanceF = pulseIn(echopin3,HIGH);//接收高电平时间
  distanceF = distanceF/58.0;//计算距离
  Serial.print("distance3 : ");
  Serial.print(distanceF);
  Serial.println("cm");

delay(100);   //循环间隔100uS

}

(7)时序波形图:



  从上面的模块时序图可以看出,只需要提供一个短期的10uS脉冲触发信号,超声波即可进行距离测量工作。
    该模块被触发后,超声波发射头将发出8个40kHz周期电平,同时检测回波。一旦检测到有回波信号则输出回响信号。
    回响信号是一个脉冲的宽度成正比的距离对象。可通过发射信号到收到的回响信号时间间隔可以计算得到距离。
    公式: uS/58=厘米;或者uS/148=英寸。
    建议测量周期为60ms 以上,以防止发射信号对回响信号的影响。


此帖由nakey于2015-12-24 15:29:41最后编辑
共1条 1/1 1   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]