本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

自制基于Attiny85的接触式数字温度计

发布时间:2021-07-08
分享到:

自制基于Attiny85的接触式数字温度计

发布时间:2021-07-08
分享到:

随着当前的技术科技的先进发展,您可能会觉得这个设计用途不大,您甚至可能会说“啧!温度计?”

但是有很多基于温度(水温、室温等)的实验,因此考虑到其他替代方案和成本/性能比,数字温度计成为温度测量的关键仪器。它从测量人体温度到测量化学物质的温度。因此,在这个 Instructable 中,我们将构建一个数字温度计,它可以在单个 CR2032 电池上运行近 140 天!(用创客的话说,这太棒了!)并且还通过优化代码和电路以低功耗运行。

另外为了添加一些怀旧元素,我使用压电传感器重置了人们通常使用水银玻璃温度计所做的温度计。

那么,让我们开始制作吧。

补给品(均采购于亚马逊)

  • ATTINY 85:https ://amzn.to/3bB8t8p
  • ATTINY 开发板:https ://amzn.to/3bC1cp3
  • 压电:https : //amzn.to/2S6yo0V
  • Arduino Nano:https : //amzn.to/3tY8I3E
  • PETG 灯丝:https : //amzn.to/3w6bB46
  • DS18B20:https : //amzn.to/3ylGRy0
  • OLED 显示屏:https : //amzn.to/2VcEATc
  • CR2032:https : //amzn.to/3ysFiOX
  • CR2032 电池座:https : //amzn.to/3fsFhl8
  • 电阻套件:https : //amzn.to/3frj4nx
  • 3d 打印机:https : //amzn.to/3trVWKw
  • 打印机升级:https : //amzn.to/3hbK3Ga

第 1 步:温度传感器 DS18B20

让我们从项目的核心部分开始,温度传感器。

为什么是DS18B20?

根据精度、类型以及它们将数据传输到微控制器的方式,有不同的传感器可供选择。但我选择了 DS18B20,因为它设计得非常好,可以从外部物体读取温度,而且只需要一根电线就可以从这个传感器读取数据。此外,由于金属探针,这对这个项目更好,或者很难制作自定义金属探针来制作接触点,其他主要原因是,该传感器由带有 Arduino 的各种库支持并且仅消耗处于睡眠模式时为 5uA。

第 2 步:将 DS18B20 与微控制器连接

来接口这个。您可以使用任何微控制器,因为传感器使用一种称为单线的协议,该协议完全依赖于软件而不是硬件,您只需要微控制器的单个 GPIO 引脚。

只是为了这个例子,我将使用 Nodemcu。电路连接很容易。将电源即红色线连接到+3.3V,黑色线接地,黄色数据线连接到NodeMCU的D2,就是这样。最后别忘了这重要的一步,在3.3v和data pin之间加一个4.7k的上拉电阻。如果没有,微控制器将不会从传感器读取数据。

第 3 步:测试 DS18B20

现在我们可以对 Nodemcu 进行编程,只需转到您的 Arduino IDE 并下载达拉斯温度传感器库和单线库。一旦安装完成。转到示例并打开简单的温度传感器示例并更改连接传感器的引脚,在我的情况下它是引脚 D2,即 GPIO 4。

编译并上传代码。

上传代码后,您可以打开串行监视器。您会看到此处显示了传感器数据,但是此 DS18B20 传感器不会立即显示与商业温度计相同的准确温度读数,需要一段时间才能稳定在正确的值上,您还可以看到这对最终构建的影响。所以,为了这个实验,我把测量时间减少到 15 秒。但是,如果您需要更高的精度,您可以随时增加代码中的测量时间。

第 4 步:连接 128X32 OLED 显示器

由于我们现在可以读取温度,让我们尝试将其显示在 OLED 显示器上。

我使用了一个 0.91 英寸 4 针 OLED 显示器,将显示器的 SCL 连接到 D1,将显示器的 SDA 连接到 D2,因为 D1 和 D2 是 NodeMCU 的默认 I2C 引脚,并且为显示器供电,连接 VCC 和模块的接地到 3.3v 和 NodeMCU 的接地。

第 5 步:测试 OLED

要测试 OLED 显示器是否正常工作,请转到您的 Arduino IDE 并从库管理器下载 Adafruit SSD1306 库。

[转到 Sketch -> 包含库 -> 管理库 -> Adafruit SSD1306]

现在打开草图 Hardware_test.ino,编译并将代码上传到您的 Nodemcu。现在,我们可以读取温度并将其显示在 OLED 显示屏上。大功告成!

Hardware_test.ino

第 6 步:Peizo 传感器

但是当前设置会连续读取传感器值。我希望它在一段时间后停止读取温度并在我们提供一些输入时重新启动。为此,您可以使用按钮,但在介绍中,您会看到温度计是由砰的一声触发的。这比您预期的更容易实现。我既没有使用复杂的传感器,也没有使用复杂的编码。相反,我使用了一个非常简单的压电传感器。

这是一个相当有趣的传感器。它在 2 个金属板之间包含一个小晶体,当对这个晶体施加压力时,传感器会输出一个小电流。因此,我们可以构建一个非常简单的电路来测量该电流并根据读数执行一些任务。

第 7 步:连接和测试 Peizo 传感器

同样,电路非常简单,只需使用 5.6kresistor 和压电传感器构建一个分压器。然后将结点连接到 NodeMCU 的引脚 A0。对于代码,只需进行模拟读取并将其显示在串行监视器上。

当我们向传感器施加不同的压力时,您可以看到值的变化。现在我们将其添加到我们现有的电路中,并为代码中的传感器值添加一个阈值,因此无论压电体何时达到该值,代码都会重置,温度读数将重新开始。(上传上一步中的 Hardware_test.ino 文件)

您可以看到这完全符合我们的预期!但这与我们将在最终构建中用于传感器的逻辑不同,但略有不同,我们稍后将对此进行更多讨论。

第 8 步:寻找微控制器替代品

假设我们希望整个电路只与这个 CR2032 电池一起工作。这几乎是不可能的,因为这个单电池 (3.3V / 210mah) 甚至不足以运行 Arduino UNO/Nano 或 NodeMCU(ESP8266),因此它无法运行带有温度传感器的整个电路,压电和显示器。

我们需要一个替代的微控制器,它不需要太多功率,并且可以用这个单电池运行显示器、温度传感器和压电。这可能问得太多,但幸运的是有一个微控制器可以做到这一切!认识 ATTINY 85。

第 9 步:ATTINY 85

这是一个具有 8 个引脚的 8 位微控制器,具有我们完全需要的所有功能,一个用于驱动 OLED 显示器的 I2C,一个用于读取温度读数的输入引脚以及一个用于读取压电读数的模拟输入。最重要的是,这可以在仅由一个 3.3v 电池供电的情况下完成所有这些工作。

但它也有其自身的缺点。编程有点复杂,存储限制为 8kb,ram 仅为 512 字节,而且只有 5 个可用引脚。我们可以将复位引脚用作 GPIO,但它只会使事情比最初复杂得多。因此,决定微控制器纯粹是基于几个简单的问题:这就够了吗?我们能把所有东西都放进去吗?我有吗?我可以编程吗?是的,没错!


第 10 步:连接 ATTINY 85

那么,让我向您展示如何对这个attiny 85进行编程,为此我们需要一个支持ISP的arduino,arduino nano或uno都可以使用。我将使用 nano 作为示例来展示如何对该微控制器进行编程。

第一步是准备arduino。只需将电路板连接到您的计算机并打开 arduino IDE。现在,转到示例并打开 Arduino ISP 示例。只需编译并将此代码上传到您的 arduino nano。这就是我们需要的所有设置,接下来从 arduino nano 和 attiny 85 之间的连接开始,将电源 VCC 连接到 3.3v 并接地。然后将引脚 D13 连接到引脚 7,引脚 D12 连接到引脚 6,引脚 D11 连接到引脚 5,最后引脚 D10 连接到引脚 1。并在arduino nano reset和地之间加一个电解电容。如果您想继续学习,可以查看连接电路图说明中的链接。

第 11 步:测试 ATTINY 85

连接完成后,打开 Arduino IDE,转到首选项并粘贴此链接。

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

这将让 Arduino IDE 下载 Attiny 核心。

转到板管理器并搜索 Attiny,然后安装板。现在将电路板、处理器更改为 Attiny 85,时钟更改为 8Mhz,最后更改连接 Arduino Nano 的端口。完成此设置后,转到工具并单击刻录引导加载程序。

这样就完成了 ATTINY 85 的编程设置。我们可以通过运行一个简单的闪烁草图来测试它。在 85 的引脚 3 上连接一个 LED,然后编写并修改闪烁草图以驱动该引脚,在我们的案例中,我已将 LED 连接到引脚 3 的 GPIO D4。

然后确保在工具下选择了ATTINTY 85设置并上传代码。

就这样,成功地对 ATTINY85 进行了编程!

第 12 步:验证电路的功耗

在深入使用其他组件之前,让我们先验证一下这个 3V 电池提供的电流是否足以驱动所有组件。

所以我使用的电池是 CR2032。该电池的容量为 210mAh,峰值电流为 30mA。所以我们必须将所有东西都保持在至少 20mA 下才能完美工作。

ATTINY 85 在 3.3V 和 8Mhz 下运行时需要几乎 4mA [数据表],温度传感器 DS18B20在读取温度时需要 1.5mA [数据表],而在屏幕上显示所有像素时,oled 显示器需要 20mA [数据表]。将所有这些结合在一起,我们仍然小于 30mA 的峰值电流。

注意:
不要像图中那样用镊子夹住锂电池!(仅用于示意)。我用的镊子有1.5ohms的电阻,当电池与镊子短路时,电池必须放电3.3v/1.5ohm = 2.2A(欧姆定律)。但是该电池的峰值电流消耗仅为 30mA,因此这会严重损坏电池或显着缩短电池的使用寿命。

第 13 步:将所有东西放在一起

我在面包板上构建了整个电路。完整的电路图和代码将在我的Github 上提供。

在编写代码时,我确保在代码中添加了一些延迟,只是为了添加一些启动画面,如果您不喜欢,可以通过在代码中注释以下行来完全忽略它。

  OzOled.clearDisplay();
  OzOled.printString(" ATTINY 85 ",0,0);
  OzOled.printString("温度计!",0,2); 
  延迟(5000);
  OzOled.clearDisplay();
  OzOled.printString("测量在",0,0);
  OzOled.printString(" 3 秒 ",0,2);
  延迟(3000);
  OzOled.clearDisplay();
  OzOled.printString("测量中...",0,2);
  lastMeausreTime = 毫秒();

       第 14 步:测试电路
图23

接通电源后,您可以看到设备开始运行。我还附上了万用表,以查看电路消耗了多少电流。它在测量温度前后平均消耗6.5mA,在显示温度数据时它会在几秒钟内达到峰值11mA。我还实施了深度睡眠,以显着降低电池消耗。您可以看到屏幕关闭,电路进入深度睡眠。这里的电路消耗小于 60uA。这听起来很棒!

使用当前设置,我们可以运行近 134 天,每天 100 次!设备从启动画面到温度测量结束需要 25 秒。如果我消除不必要的延迟并将时钟降低到 1Mhz,我们可以用一个单元再压缩 4-5 天。我们将在 PCB 上构建电路后尝试。

第 15 步:构建穿孔板电路

所以,理论和数学已经足够了,让我们在穿孔板上构建电路!

从穿孔板开始,形状可能看起来有点奇怪,但这是完全需要的设计,因为稍后当我们开始设计外壳时,我们需要尽可能地减小尺寸。我将使用 SMD 版本而不是使用 DIP IC,这不应该对性能产生很大影响,同时它应该给我们一个非常小的占用空间!除此之外,电路的其余部分与我们在面包板上所做的相同。

第 16 步:在 Perfboard 上编程 Attiny 85

要上传代码,将跳线暂时焊接到 ATTINY 85 (SMD) 的引脚 [1,4,5,6,7,8] 并将这些引脚连接到 Arduino Nano,与步骤 10相同。然后将时钟速度更改为在 Arduino IDE 中使用 1Mhz 并上传代码,就像我们在步骤 11 中所做的那样。

第 17 步:测试穿孔板电路

这种现在看起来很奇怪,但是一旦我们设计了外壳,它应该看起来很不错!但在此之前,让我们看看这个电路消耗了多少电流,因为在使用面包板电路进行测试时,与 8Mhz 不同,我已将时钟速度降低到 1Mhz。

这看起来很不错!我们将电路功耗降低了一半!它在操作期间平均只需要不到 3mA,在睡眠期间需要 58uA。因此,通过此设置,理论上我们可以使用大约 140 天!但在实践中,它会少得多。考虑到所有部件都是现成的,并且没有对电路进行重大修改,这仍然很棒。

降低 1Mhz 的速度可能会导致屏幕更新速度变慢,您可以在视频中看到这一点,但我真的很高兴结果是这样,我不认为屏幕更新速度变慢是一个大问题。

第 18 步:使用 PCBWay 打印 PCB

 

您可以使用最终构建的电路图制作该设备的抛光版本,但由于简单,我现在不打算为该项目打印 PCB,但是如果您确实希望我设计一个并制作视频我很乐意这样做!

第 19 步:3D 模型 - 3D 打印

我在fusion 360中设计了模型,它看起来并不复杂。

如果你喜欢这个设计,你可以在这一步的最后查看Github repo或下载 STL 文件。我有 STL 文件以及电路图和代码。好的,模型已经准备好了,让我们打印吧!我使用的 PETG 层高为 0.2 毫米,喷嘴温度为 245 摄氏度,热床温度为 70 摄氏度,速度为 40 毫米/秒。即使速度较慢,我也很难使用 PETG 并在模型中造成大量拉线。如果你们有任何提示/技巧,请将它们放在下面!

Thermometer_bottom_case.stl

Thermometer_Top_case.stl

环.stl

第 20 步:组装

组装再简单不过了。只需在焊点上使用一点胶水或绝缘材料,这样压电就不会使电路短路。然后将电路放在底壳上并关闭顶壳。现在使用环关闭另一侧。这样我们就完成了!

第 21 步:最后的想法说明

您需要了解这绝不是商业温度计的合适替代品。这只是一个有趣的小项目,您可以在其中了解电子产品和其他 DIY 东西。

您可以进行大量升级来改进项目。首先,我喜欢外壳设计,但它不是很坚固,所以更好的设计方法会很棒!其次是更长的测量时间,正如我所说,我只是为了视频而缩短了时间以获得更准确的结果。尝试在代码中更改 45seconds+。最后,一个带有所有组件的合适的 PCB 被有效地完成了!

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论