码迷,mamicode.com
首页 > 其他好文 > 详细

Arduino示例教程超声波测距实验

时间:2014-10-25 11:48:13      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   ar   使用   sp   数据   

超声波传感器

    超声波是一种超出人类听觉极限的声波即其振动频率高于20 kHz的机械波。超声波传感器在工作的时候就是将电压和超声波之间的互相转换,当超声波传感器发射超声波时,发射超声波的探头将电压转化的超声波发射出去,当接收超声波时,超声波接收探头将超声波转化的电压回送到单片机控制芯片。超声波具有振动频率高、波长短、绕射现象小而且方向性好还能够为反射线定向传播等优点,而且超声波传感器的能量消耗缓慢有利于测距。在中、长距离测量时,超声波传感器的精度和方向性.都要大大优于红外线传感器,但价格也稍贵。

   超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。本实验利用超声波测得的距离从串口中显示。

 bubuko.com,布布扣

知识要点:

pulseIn():用于检测引脚输出的高低电平的脉冲宽度。
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Pin---需要读取脉冲的引脚
Value---需要读取的脉冲类型,HIGHLOW
Timeout---超时时间,单位微秒,数据类型为无符号长整型。
使用方法及时序图:
bubuko.com,布布扣
bubuko.com,布布扣
bubuko.com,布布扣
1、使用Arduino采用数字引脚给SR04Trig引脚至少10μs的高电平信号,触发SR04模块测距功能;
2、触发后,模块会自动发送840KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。
3、如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。此时,我们能使用pulseIn()函数获取到测距的结果,并计算出距被测物的实际距离。
bubuko.com,布布扣
 
/*
  日期:2014.10.24
  功能:利用SR04超声波传感器进行测距,并用串口显示测出的距离值
  方式:1、使用Arduino采用数字引脚给SR04的Trig引脚至少10μs的高电平信号,触发SR04模块测距功能;
        2、触发后,模块会自动发送8个40KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。
        3、如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。
        此时,我们能使用pulseIn()函数获取到测距的结果,并计算出距被测物的实际距离。
*/

// 设定SR04连接的Arduino引脚
const int TrigPin = 2; 
const int EchoPin = 3;
const int LedPin = 17;
float distance; 

void setup()                 // 初始化串口通信及连接SR04的引脚
{       
     Serial.begin(9600); 
      pinMode(TrigPin, OUTPUT);
     pinMode(TrigPin, OUTPUT);  
     pinMode(EchoPin, INPUT);  // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
    Serial.println("Ultrasonic sensor:");
} 

void loop() 
{ 
    // 产生一个10us的高脉冲去触发TrigPin 
    digitalWrite(LedPin,HIGH); 
    delayMicroseconds(2); 
    digitalWrite(TrigPin,HIGH); 
    delayMicroseconds(10);
    digitalWrite(TrigPin,LOW); 
    
    // 检测脉冲宽度,并计算出距离
    distance = pulseIn(EchoPin,HIGH);
    Serial.print(distance);
    Serial.print("ms");
    distance = distance/58; 
    distance = (int(distance*100.0))/100.0; //保留两位小数 

    Serial.print(".....distance is:");
    Serial.print(distance); 
    Serial.print("cm"); 
    Serial.println(); 
    delay(1000);  
}

  

Arduino示例教程超声波测距实验

标签:style   blog   http   color   os   ar   使用   sp   数据   

原文地址:http://www.cnblogs.com/wangh0802PositiveANDupward/p/4049863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!