风筝
发表于: 2021-7-30 11:22:00 | 显示全部楼层

在很多应用中,经常需要测量物体与人、设备或车辆等之间的距离,例如机器人运动控制、车辆控制、盲人手杖、医疗设备等。测量距离有多种方法,其中使用超声波传感器进行测距是最便宜的方法之一。在本篇文章中,我们将使用ATtiny85单片机和OLED显示模块以及HC-SR04超声波传感器来制作一款超声波数字测距仪。我们在自制了PCB电路板,该电路板可用于距离测量、物体检测和许多其他应用。


所需的组件

●    ATtiny85单片机

●    HC-SR04 超声波传感器

●    I2C OLED 显示模块

●    AMS1117 5V 稳压器

●    3× 10KΩ 电阻

●    1× 10 µf 电容

●    9V电池


超声波测距仪的电路图

使用 ATtiny85 的超声波测距仪示意电路图如下:

Ultrasonic-Digital-Ruler-Circuit.png


上图显示了将超声波传感器和 OLED 显示屏以及 Attiny85单片机连接的电路图。 OLED显示屏和 ATtiny85 之间使用 I2C 协议连接。因此,将ATtiny85的SCL引脚 (PB2) 连接到OLED显示屏的SCL引脚。同样,将ATtiny85的SDA引脚(PB0) 连接到OLED显示屏的SDA引脚。超声波传感器的Echo和Trig引脚分别连接到ATtiny85的PB3和PB4。最后,为了给所有组件供电,我们使用了 9V 电池。然后使用AMS117-5V稳压器将9V转换为5V。


制作超声波测距仪的PCB电路板

现在我们有了原理图,可以继续超声波测距仪制作PCB。您可以使用任何PCB软件来设计 PCB。


以下是超声波测距仪PCB顶层和底层的3D视图:

Ultrasonic-Ruler-PCB-Fabrication.jpg


组装并焊接PCB电路板。完整的电路板如下所示:

Attiny85-Ultrasonic-Ruler.jpg


ATtiny85超声波测距仪的代码说明

该代码使用了 TinyWireM.h TinyOzOLED.h 库。 TinyWireM 库可以从 Arduino IDE 中的库管理器下载并安装。为此,打开 Arduino IDE 并转到 Sketch -> Include Library -> Manage Libraries。搜索 TinyWireM.h 并安装Adafruit提供的TinyWireM库。

TinyWireM-library.jpg


TinyOzOLED.h库可以从以下链接下载:https://github.com/SensorsIot/TinyOzOled/blob/master/TinyOzOLED.cpp


将库安装到Arduino IDE后,首先在代码中包含所需的库文件。

  1. #include "TinyWireM.h"
  2. #include "TinyOzOLED.h"
复制代码

接下来,定义超声波传感器的引脚。我们定义了超声波传感器的Trig和Echo引脚,如下所示。

  1. const int trigPin = 4; //P4
  2. int echoPin = 3; //P3
复制代码

setup() 函数中,我们将ATtiny85引脚定义为输入/输出,并开始ATtiny85和OLED之间的通信。

  1. void setup() {
  2.   TinyWireM.begin();
  3.   OzOled.init();
  4.   OzOled.clearDisplay();
  5.   OzOled.setNormalDisplay();
  6.   OzOled.sendCommand(0xA1);      
  7.   OzOled.sendCommand(0xC8);
  8.   pinMode(trigPin, OUTPUT);
  9. }
复制代码

loop() 函数中,我们首先使用超声波传感器测量距离,然后将其显示在OLED显示屏上。要使用超声波传感器测量距离,首先,您必须将Trig引脚设置为低电平,并保持2 µs。要产生超声波,请将Trig引脚设置为高电平,并保持10 µs。之后,使用pulseIn() 函数读取飞行时间,然后将读数存储到变量duration的中。 pulseIn() 函数有2个参数,第一个是echo引脚的名称,第二个是echo引脚的状态。在获得距离后,我们将其显示在OLED显示屏上。

  1. digitalWrite(trigPin, LOW);
  2. delayMicroseconds(2);
  3. digitalWrite(trigPin, HIGH);
  4. delayMicroseconds(10);
  5. digitalWrite(trigPin, LOW);
  6. pinMode(echoPin, INPUT);
  7. duration = pulseIn(echoPin, HIGH);
  8. cm = microsecondsToCentimeters(duration);
  9. OzOled.printString("Distance:", 3, 4);
  10. OzOled.printNumber(cm, 0, 12, 4);
复制代码

测试超声波测距仪

组装好PCB并对ATtiny85进行编程后,我们现在可以测试超声波测距仪了。使用 9V 为电路板供电并等待测量的距离显示在OLED显示屏上。您可以使用刻度尺或卷尺来检查测量的距离是否正确。

Portable-Ultrasonic-Digital-Ruler.jpg


希望您喜欢本篇文章并学到了一些有用的东西,如果你有任何问题,请随时在本帖下面进行回复。


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

本版积分规则

主题 32 | 回复: 41



手机版|

GMT+8, 2024-11-21 17:01 , Processed in 0.062711 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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