单片机
返回首页

如何使用ATtiny85单片机制作便携式超声波测距仪

2022-07-25 来源:csdn

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


所需的组件

●    ATtiny85单片机

●    HC-SR04 超声波传感器

●    I2C OLED 显示模块

●    AMS1117 5V 稳压器

●    3× 10KΩ 电阻

●    1× 10 µf 电容

●    9V电池


超声波测距仪的电路图

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



上图显示了将超声波传感器和 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视图:


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


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

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

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显示屏上。您可以使用刻度尺或卷尺来检查测量的距离是否正确。


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 双极性电源

  • LM350 3安培可调稳压器

  • 30V/10A可调式台式直流稳压电源

  • DIY USB 5V 太阳能电源包

  • 铃声发生器

  • 电容式传感器

    相关电子头条文章