查看“超声波测距”的源代码
←
超声波测距
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 目的 == 在做项目的时候,很多时候需要避障或者距离的测量。今天以一个常用的超声波测距传感器HC-SR04为例做一个距离测量的实验,并把测量的距离显示在串口监视界面上。 == 设备 == *[[ Microduino-CoreSTM32]] Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。 *其他硬件设备 **面包板跳线 一盒 **面包板 一块 **超声波测距传感器 一个 **USB数据连接线 一根 == 原理 == 超声波是一种超出人类听觉极限的声波即其振动频率高于20 kHz的机械波。超声波传感器在工作的时候就是将电压和超声波之间的互相转换,当超声波传感器发射超声波时,发射超声波的探头将电压转化的超声波发射出去,当接收超声波时,超声波接收探头将超声波转化的电压回送到单片机控制芯片。超声波具有振动频率高、波长短、绕射现象小而且方向性好还能够为反射线定向传播等优点,而且超声波传感器的能量消耗缓慢有利于测距。在中、长距离测量时,超声波传感器的精度和方向性.都要大大优于红外线传感器,但价格也稍贵。 [[File:advance4_1.jpg|600px|center|thumb]] 超声波测距传感器有四个脚:5v电源脚(Vcc),触发控制端(Trig),接收端(Echo),地端(GND) '''HC-SR04技术参数:''' :*典型工作用电压:5V。 :*超小静态工作电流:小于 2mA。 :*感应角度:不大于 15 度 。 :*探测距离:2cm-400cm :*高精度:可达 0.3cm。 :*盲区(2cm)超近。 '''HC-SR04工作原理''' 超声波测距模块能提供2cm-450cm非接触式感测距离,测距的精度可 高达3mm,能很好的满足我们正常的要求。 触发测距超声波发射器后向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。本实验利用超声波测得的距离从串口中显示。 超声波测距传感器的操作信号时序图如下所示: [[File:advance4_2.jpg|600px|center|thumb]] '''操作顺序:''' :*先拉低TRIG,然后至少给10us的高电平信号去触发; :*触发后,模块会自动发射8个40KHZ的方波,并自动检测是否有信号返回。 :*如果有信号返回,通过ECHO输出一个高电平,高电平持续的时间便是超声波从发射到接收的时间。那么测试距离=高电平持续时间*340m/s*0.5或者us/58=cm,us/148=英寸。 '''注意:1、不宜带电连接,如果要带电连接,则先让模块的 Gnd 端先连接。否则会影响模块工作。''' '''2、测距时,被测物体的面积不少于 0.5 平方米且要尽量平整。否则会影响测试结果。''' '''原理图''' [[File:advance4_3.jpg|600px|center|thumb]] == 程序 == <source lang="cpp"> int inputPin= 2; //echo pulse input pin int CTLPin=3; //trigger pin int32 t0,t1,deltaT; void setup() { pinMode(inputPin, INPUT); pinMode(CTLPin, OUTPUT); digitalWrite(CTLPin,LOW); } void loop() { digitalWrite(CTLPin,HIGH); delayMicroseconds(15); digitalWrite(CTLPin,LOW); while(digitalRead(inputPin)==LOW); //waiting for high pulse t0=micros(); while(digitalRead(inputPin)==HIGH); //waiting for low t1=micros(); SerialUSB.print(t1); SerialUSB.print("-"); SerialUSB.print(t0); SerialUSB.print("="); deltaT=t1-t0; SerialUSB.println(deltaT); SerialUSB.print("Distance:"); SerialUSB.print(deltaT/58); SerialUSB.println("cm"); t0=0; t1=0; delay(1000); } </source> 语句while(digitalRead(inputPin)==LOW); 和语句while(digitalRead(inputPin)==HIGH);用来获取超声波从发射出去到收到响应信号之间的时间差。 == 调试 == 步骤一:按照原理图连接电路图。如下所示: [[File:advance4_4.jpg|600px|center|thumb]] 步骤二:复制程序到Maple IDE,编译、下载后打开串口监视界面。 [[File:advance4_5.jpg|600px|center|thumb]] 步骤三:转动超声波测距传感器的位置,使之对着不同距离的障碍物,观察串口监视界面距离的变化。 == 结果 == 改变传感器位置后,测量的距离随之变化,如下图所示: [[File:advance4_6.jpg|600px|center|thumb]] == 视频 ==
返回至
超声波测距
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息