超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s×t / 2 。这就是所谓的时间差测距法。 pulseIn函数知识要点: 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()函数获取到测距的结果,并计算出距被测物的实际距离。代码如下: 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); } pulseIn函数其实就是一个简单的测量脉冲宽度的函数,默认单位是us。也就是说 |
|
来自: 旭日东升4k165w > 《文件夹1》