天南地北客
发表于: 2017-1-19 11:10:25 | 显示全部楼层

HD44780HC-SR04.jpg


1、  HC-SR04:一款廉价的超声波传感器

HC-SR04是一种常用的超声波传感器,能够探测2-300厘米范围内的障碍物。 传感器看起来像一个小PCB,前面有两个金属圆柱,背面有一个小电路。

HC_SR04-front.jpg

在本文中,我们将提供一个简单的演示来使用HC-SR04。 首先简单阅读一下传感器的用户手册:HC-SR04 User Manual


该传感器有4个引脚:

●    VCC,该引脚需要连接到5V;

●    Trig,输入引脚,触发测量;

●    Echo,输出引脚,发出方波;

●    GND,该引脚需要连接到地。


2、  工作原理

两个圆柱实际上是超声波接收器(R)和超声波发射器(T),由电路驱动。 工作原理很简单:当触发时,发射器发射一些脉冲。 当声音遇到障碍物时,其被反射回来并由接收器检测。

HC-SR04.jpg

由于声速几乎恒定,距离的计算与从发射到接收的经过时间严格相关。 事实上,声音必须行进两倍的距离(往返)。 已知经过的时间,到障碍物的距离:

latex.png

其中:

●    d是障碍物和传感器之间的距离

●    v是声速(约340m / s)

●    t是经过的时间


注意,在这里我们不讨论测量的精度,这会受到不同因素的影响:

●    声速不恒定:取决于材料介质、温度、压力和湿度。

●    时间测量精度:测量由电路板上的电路执行,我们没有控制这方面。

●    障碍物可能没有平坦表面,并且可能存在多个衍射或伪回波。


3、  使用方法

如果Trig设置为高电平并保持至少10us,传感器将发出8个脉冲的声波。 对于声波产生回声所需的整个时间内,Echo为高电平。


测量距离的逻辑步骤如下:

●    设置输入捕捉单元来测量Echo引脚上方波的高电平周期;

●    上拉Trig信号至少10 us;

●    使用上一公式将测量时间转换为距离。


4、  简单演示

在第一个演示中,我们将使用STM32 Nucleo-F401RE开发板和ChibiOS来检测障碍物,并在ST-Link虚拟串口上打印输出距离。 为此,我们将使用chprintf()和ICU驱动程序。


引脚连接如下:

●    VCC连接到5V;

●    Trig连接到PB10;

●    Echo连接到PA8;

●    GND连接到地。


通过查看main.c,我们可以看到这个演示是如何工作的。 经过一些初始化后,代码开始捕获PA8上的方波。

  1. #define ICU_TIM_FREQ 1000000
  2. #define SPEED_OF_SOUND 343.2f

  3. static float lastdistance = 0.0;

  4. static void icuwidthcb(ICUDriver *icup) {

  5. icucnt_t width = icuGetWidthX(icup);
  6. lastdistance = SPEED_OF_SOUND * width / 10000.0;
  7. }


  8. static ICUConfig icucfg = {
  9. ICU_INPUT_ACTIVE_HIGH,
  10. ICU_TIM_FREQ, /* 1MHz ICU clock frequency. */
  11. icuwidthcb,
  12. NULL,
  13. NULL,
  14. ICU_CHANNEL_1,
  15. 0
  16. };
复制代码

如上所述,距离体现在方波的宽度上:通过计算先前描述的公式,可以从宽度获得开始的距离。距离存储在main使用的变量中。

  1.   while (true) {
  2.     /* Triggering */
  3.     palWriteLine(LINE_TRIGGER, PAL_HIGH);
  4.     chThdSleepMicroseconds(10);
  5.     palWriteLine(LINE_TRIGGER, PAL_LOW);
  6. #if ANSI_ESCAPE_CODE_ALLOWED
  7.     chprintf(chp, "\033[2J\033[1;1H");
  8. #endif
  9.     chprintf(chp, "Distance: %.2f cm\n\r", lastdistance);
  10.     chThdSleepMilliseconds(100);
  11.   }
复制代码

主循环通过在Trig上提供上升沿触发一次测量,并在STLink虚拟串口上打印输出上一个测量数据。


这些演示已经在ChibiOS 16.1.7进行过测试,并且可以与每个ChibiOS 16.1.x版本配合使用。代码下载地址:RT-STM32F401RE-NUCLEO-HC-SR04

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 37 | 回复: 55



手机版|

GMT+8, 2024-4-20 01:39 , Processed in 0.152931 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表