如何使用ATtiny85制作便携式超声波数字尺

测量仪表

1485人已加入

描述

  人、设备或车辆或移动物体的路径中物体的距离测量被用于机器人运动控制、车辆控制、盲人手杖、医疗设备等大量应用中。有很多可用于距离测量的方法,但使用超声波传感器进行测量是其他选项中最便宜的方法之一。在这个项目中,我们将使用HC-SR04 超声波传感器与 ATtiny85 微控制器 IC 和 OLED 显示模块来构建数字超声波尺。

  超声波尺所需组件

  阁楼85 IC

  HC-SR04 超声波传感器

  I 2 C OLED显示模块

  AMS1117 5V 稳压器

  3×10KΩ电阻

  1× 10 µf 电容器

  9V电池

  超声波数字尺电路图

  使用 ATtiny85的超声波尺原理图如下:

微控制器

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

  注意:按照我们之前的教程使用 Digispark Bootloader 直接通过 USB 编程 ATtiny85 IC 或使用 Arduino 编程 ATtiny85对 ATtiny85 IC 进行编程。

  超声波尺PCB制作

  现在我们有了原理图,我们可以继续使用 ATtiny85 为超声波测距仪布置 PCB 。您可以使用您选择的任何 PCB 软件来设计 PCB。

  下面是超声波标尺PCB顶层和底层的3D模型视图:

微控制器

  组装 Attiny85 超声波标尺 PCB

  几天后,我们收到了整齐包装的 PCB,PCB 质量一如既往地好。板子的顶层和底层如下图所示:

微控制器

  在确保轨道和脚印是正确的之后。我继续组装PCB。完全焊接的板如下所示:

微控制器

  ATtiny85超声波尺码说明

  文档末尾给出了完整的 Arduino 计步器代码。在这里,我们将解释代码的一些重要部分。

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

微控制器

  而TinyOzOLED.h库可以从给定的链接下载。

  将库安装到 Arduino IDE 后,通过包含所需的库文件来启动代码。

 

#include "TinyWireM.h"
#include "TinyOzOLED.h"

 

在接下来的几行中,定义超声波传感器引脚。我们已经定义了超声波传感器的触发和回波引脚,如下所示。

 

常量 int trigPin = 4; //P4
int echoPin = 3; //P3

 

然后是setup()函数。这是我们将 ATtiny85 引脚定义为输入/输出并开始 ATtiny85 和 OLED 之间的通信的地方。

 

无效设置(){
  TinyWireM.begin();
  ozOled.init();
  OzOled.clearDisplay();
  OzOled.setNormalDisplay();
  OzOled.sendCommand(0xA1);      
  OzOled.sendCommand(0xC8);
  pinMode(trigPin,输出);
}

 

现在在loop()函数中,我们首先使用超声波传感器测量距离,然后将其显示在 OLED 显示屏上。要使用超声波传感器测量距离,首先,您必须将触发引脚设置为LOW 状态 2 µs 以确保清晰。现在要生成超声波,将trigPin设置为高电平 10 µs。之后,使用pulseIn()函数读取行程时间并将读数存储到名为“duration”的变量中。pulseIn()函数有2个参数,第一个是echo pin的名字,第二个是echo pin的状态。然后在获得距离后,我们将其显示在 OLED 显示屏上。

 

数字写入(trigPin,低);
延迟微秒(2);
digitalWrite(trigPin, HIGH);
延迟微秒(10);
数字写入(trigPin,低);
pinMode(echoPin,输入);
持续时间=脉冲输入(回声针,高);
cm = 微秒到厘米(持续时间);
OzOled.printString("距离:", 3, 4);
OzOled.printNumber(cm, 0, 12, 4);

 

  测试我们的超声波标尺

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

微控制器

  #include “TinyWireM.h”

  #include “TinyOzOLED.h”

  const int trigPin = 4; //P4

  int echoPin = 3; //P3

  int 持续时间,cm;

  void setup() {

  TinyWireM.begin();

  ozOled.init();

  OzOled.clearDisplay();

  OzOled.setNormalDisplay();

  OzOled.sendCommand(0xA1); // 设置方向

  OzOled.sendCommand(0xC8);

  pinMode(trigPin,输出);

  }

  void loop()

  {

  //OzOled.clearDisplay();

  数字写入(trigPin,低);

  延迟微秒(2);

  digitalWrite(trigPin, HIGH);

  延迟微秒(10);

  数字写入(trigPin,低);

  //设置输入引脚,并在uS

  pinMode(echoPin,INPUT)中接收持续时间;

  持续时间=脉冲输入(回声针,高);

  // 将脉冲传播时间转换为距离

  cm = microsecondsToCentimeters(duration);

  显示OLED();

  延迟(1000);

  OzOled.clearDisplay();

  }

  void displayOLED() {

  OzOled.printString(“距离:”, 3, 3);

  OzOled.printNumber(cm, 0, 12, 3);

  OzOled.printString(“(在 CM 中)”, 5, 5);

  }

  long microsecondsToCentimeters(long microseconds)

  {

  // 声速为 340 m/s (29 us/cm)

  return microseconds / 29 / 2;

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分