学习日志(十)

基于Linux算时差——超声波测距原理及代码实现

测距原理基本说明

超声波测距模块:是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。

选型:HC-SR04

接线参考:模块除了两个电源引脚外,还有Trig,Echo引脚。

怎么让它发波

Trig信号:给Trig端口至少10us的高电平

怎么知道开始发了

Echo信号:由低电平跳转到高电平,表示开始发送波(个人理解:这里看时序,好像是先发完波才由低电平跳到高电平,其实发波和低电平跳到高电平是同时进行的)

怎么知道接收了返回波

Echo信号:由高电平跳转回低电平,表示波回来了

怎么算时间

Echo引脚维持高电平的时间!
波发出去的那一下,开始启动定时器
波反回来的那一下,我们开始停止定时器,计算出中间经过多少时间

怎么算距离

距离=速度(340m/s)*时间/2

时序参考

直接撸代码

  1 #include "sys/time.h"2 #include "wiringPi.h"3 #include "stdio.h"4 #include "unistd.h"56 #define Trig 07 #define Echo 18910 double getDistance()11 {12     double dis;13     struct timeval start;14     struct timeval stop;1516     pinMode(Trig,OUTPUT);17     pinMode(Echo,INPUT);1819     digitalWrite(Trig,LOW);20     usleep(5);21     digitalWrite(Trig,HIGH);22     usleep(10);23     digitalWrite(Trig,LOW); //以上是维持10微妙的高电平; 用来发波24     /*above init CSB*/2526     while(!digitalRead(Echo));27     gettimeofday(&start,NULL);//开始计时28     while(digitalRead(Echo));// 接受到反回的波,电平由高变低29     gettimeofday(&stop,NULL);//停止计时3031     long difftime = 1000000*(stop.tv_sec-start.tv_sec)+(stop.tv_usec-start.tv_usec);//计算时间32     dis = (double)difftime /1000000 *34000/2;//计算距离  单位是cm3334     return dis;35 }3637 int main()38 {39     double dis;4041     if(wiringPiSetup()==-1){42         fprintf(stderr,"%s","init wiringpi error");43     }44     while(1){    // 每500ms测距一次45         dis = getDistance();46         printf("distance = %lf cm\n",dis);47         usleep(500);48     }4950     return 0;51 }

注:获取距离的时候,各个变量类型的转换,距离的单位cm还是m

执行现象:

超声波此时距离天花板大概2.6 -2.7m ,数据没毛病。

(十)基于Linux算时差——超声波测距原理及代码实现相关推荐

  1. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发

    基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...

  2. (九)Linux算时差的方法

    学习日志(九) Linux算时差的方法 时间函数 函数原型及头文件 #include<sys/time.h> int gettimeofday(struct timeval *tv,str ...

  3. 基于51单片机HC-SR04超声波测距带温度补偿

    基于51单片机HC-SR04超声波测距带温度补偿 1 开发环境 2 功能说明介绍 3 程序 3.1 工程文件 3.2 代码 4 原理图 5 元器件清单 6 PCB 7全部资料 1 开发环境 仿真图:p ...

  4. Wemos D1 Arduino超声波测距原理讲解加代码、超声波驱动SG90电机(垃圾桶感应开关)

    先介绍一下超声波模块: 总共有四个端子,分别为VCC.GND.Trig.Echo. VCC一般接5V电压:GND接地 Trig为输出接口,Echo为输入接口 Trig和Echo与超声波测距原理有关, ...

  5. Arduino的光敏传感器和超声波测距传感器测试代码

    光敏传感器测试代码 使用的是一个未知名4pin模块, 4pin依次为Vcc, Gnd, DO, AO, 板载一个可调电阻以及一个LED, 调节电阻大小, 可以控制LED亮灭和DO输出变化对光亮的灵敏度 ...

  6. 基于52单片机的超声波测距模块(hc-sr04超声波测距模块+1602液晶显示器)

    二年级课设做了超声波测障仪,用的是hc-sr04超声波测距模块+1602液晶显示器和52单片机. 由于自己之前的学习很是不牢固,在课设的时候没少走弯路,最后在第二个周的星期五做了出来,浪费了很多的时间 ...

  7. 树莓派超声波测距原理及例子

    超声波原理 HC-SR04超声波测距模块: 工作电压电流:5V/15mA; 功能:约2cm-400cm的非接触式距离感测功能,测距精度可达高到3毫米:感知角度≤15°,被测物体面积不小于50cm²且平 ...

  8. 基于51单片机的超声波测距模块

    实现功能 通过超声波模块进行测距显示在LCD1602上并通过设在程序上设置上下限进行进行超出上下限的报警蜂鸣器 模块 1.89c51 2.lcd1602 3.超声波测距模块 4,蜂鸣器 作者用的是51 ...

  9. 基于51单片机的超声波测距及温度补偿

    具体实现功能 系统由STC89C52单片机+超声波测距传感器(HC-SR04)+DS18B20温度传感器+LCD1602液晶显示屏+按键+蜂鸣器+电源构成 具体功能:1.LCD1602液晶显示测量的距 ...

最新文章

  1. CentOS7下Firewall 开放指定端口
  2. dbunit使用_摆脱困境:在DbUnit数据集中使用空值
  3. spring-data-jpa 查询视图
  4. 如何转换并压缩png格式图片
  5. canvas绘制视频封面
  6. SQL大全------之 oracle关于insert all的用法
  7. style样式包(HTML、CSS)
  8. android重要的对象
  9. python xlwings api_python xlwings API接口之NumberFormat用法
  10. vector获取缓冲区指针
  11. 8. COM编程——CoCreateInstance创建COM对象
  12. 【ps小技巧】内容识别, 1分钟去掉图片上的文字
  13. access通过身份证号提取性别_身份证号码男女函数(excel中关于18位身份证号的提取性别公式)...
  14. 华为多屏互动看学英语
  15. 评价的等级优良差_小学生期末评语-等级优良合格(最佳版本)
  16. 如果不懂 numpy,请别说自己是 python 程序员
  17. java群发邮件_JAVA邮件群发 - Java-Android-jwebee - BlogJava
  18. 搭建dubbo监控中心
  19. Python制作自己的第一人称射击游戏
  20. OC引导安装Mac Big Sur教程

热门文章

  1. 加州旅馆 Hotel California (The Eagles)
  2. ECDS是电子商业汇票系统
  3. echart与百度地图实现省、市、县地图
  4. PHP新版个人发卡网站源码+全开源版本
  5. 读书笔记-别说你懂写网文
  6. 变频器按启动没反应_变频器常见故障及处理
  7. 硬件描述语言VHDL之顺序语句基本使用介绍
  8. ibm服务器无显示器,[维修经验]图解IBM 17液晶显示器黑屏的维修
  9. pytorch教程之nn.Module类详解——使用Module类来自定义模型
  10. 给女朋友的微信小程序之情侣手账本(含源码)