第十课:树莓派超声波测距

本文详细介绍了HC-SR04超声波传感器的工作原理,提供了相应的时序图,并给出了一段树莓派上的C语言代码实现超声波测距功能。通过测量回波信号的高电平时间,计算并输出距离信息,适用于物联网和机器人避障等应用。
摘要由CSDN通过智能技术生成

目录

一、HC-SR04简介 

①:实物图    ​

二、时序图 

三、软件代码

四、效果


一、HC-SR04简介 

①:实物图

    

二、时序图 

解读时序图表明首先ECHO引脚需要提供一个10uS以上脉冲触发信号,然后该模块内部将自动发出8个40kHz周期电平并检测回波。TRIG引脚一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。通过发射信号到收到的回响信号时间间隔可以计算得到距离。

公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S/2

测量周期60ms以上。

 三、软件代码

 /*
 功能:树莓派超声波测距
 */
 
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
 
typedef unsigned char uint8_t;
typedef unsigned int  uint32_t;
typedef unsigned long uint32;
  
 int ECHO = 1;	
 int TRIG = 7;
 
 /*********************
 函数:超声波测距函数
 
 阐述:根据超声波的时序图、编写超声波模块工作
 
 return:计算的距离(测试距离=高电平时间*声速(340m/s)/2)
 *********************************************/
 uint32_t Wave_gave_diastance()
 {
	 uint32_t t=0;
	 
	 //1:通信开始
	 digitalWrite(ECHO, 1);  //Pin29输出高电平  
	 delayMicroseconds(20);  //延时10us
	 digitalWrite(ECHO, 0);  //Pin29输出低电平  
	 
	 //2.等待超声波模块测距完毕,标志性的动作就是回响信号引脚从输出低电平变为输出高电平	 
	 while(digitalRead(TRIG)==0)
	 {	 
		 delayMicroseconds(1);		 
		 t++;		 
		 //超时处理
		 if(t >= 1000000)
		 {
			 return -1;
		 }			 
	 }
	 //3.测量引脚的高电平时间,该高电平的持续时间就是超声波模块的传输时间	 
	 t=0;
	 while(digitalRead(TRIG))
	 {	 
		 delayMicroseconds(9); //9us == 3mm
		 t++;		 
		 //超时处理
		 if(t >= 1000000)
		 {
			 return -2;
		 }				 
	 }
	 //4.将时间转换为距离
	 return t*3/2;
 }
 
 int main(void)
 {
	 uint32_t distance=0; //距离变量
	 if(wiringPiSetup()==-1) 
	 {
	   return 1;
	 }
	 pinMode(ECHO,OUTPUT); 
	 pinMode(TRIG,INPUT);  
	 while(1)
	 {			 			 
		 distance=Wave_gave_diastance();//距离赋值
		 if(distance>20&&distance<4000)
		 {
			 printf("距离:%dmm\r\n",distance);
		 }
		 else
		 {
			printf("distance error\n");
		 }	 
		 delay(1000);		 				 
	 }	 
	 return 0;
 }
 
 

四、效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值