资讯详情

如何做一个炫酷的墨水屏电子钟?

82987ed53fd77853ab3e4fbda877fed9.png

本周,我将向您介绍一个具有气象站功能的漂亮墨水屏电子钟(可以通过GPS自动设置),用4节AAA电池寿命约为6个月,不需要任何网络连接,以确保安全和可靠性。

特点包括:

  • 自动设置(通过GPS)

  • 当前温度。

  • 当前湿度。

  • 压力图显示在过去25小时内。

  • 日出日落时间

  • 当前的月相

  • 选择12小时或24小时模式。

  • 选择英语和公制单位。

这个项目有两个不同的版本,即

是基于Arduino Nano是的。这个版本的目的是降低成本、零件数量和生产的复杂性;缺点是你需要使用一个USB 5V适配器为时钟供电。

使用一个32k振荡器以极小的功率保持精确的计时。振荡器允许时钟用电池运行。

第1步:"简易 "版零件清单

  • Arduino Nano

  • Waveshare 2.9 in EPaper模块

  • Adafruit MS8607压力/湿度/温度传感器

  • 任何带有9600 Baud TX的GPS模块

  • 电路板(可用于原型板或一块CNC的铜板)

  • 几个按钮开关(用来改变)UTC时间偏移和显示偏好)

  • 制作外壳的材料(文末将提供).3mf.scad.dxf文件)

  • USB充电器和充电线

第2步:"低功率 "版本

这些材料与上述简单版本相同:

  • Waveshare 2.9 in EPaper Module

  • Adafruit MS8607压力/湿度/温度传感器

  • 电路板

  • 几个按钮开关

  • 制作外壳的材料

另外,你还需要:

  • Atmega328P DIP版本(你也可以选择SMD但是32K焊接晶体会更难)

  • 32768 Hz晶体(这种振荡器是低功率设计的关键)

  • Adafruit GPS模块(这个模块比 "简易 "版本中的模块质量更高,因为它可以跟踪更多的卫星(以便更快地锁定),并提供一个引脚(低功耗)和一个端口来保持其内存活动(快速重新锁定)。如果所有这些功能都不值得为你增加成本,你可以添加自己的使能FET,魔改一个更便宜的模块来完成这项工作。以后会解释怎么做。

  • LED 电阻(光秃秃的Atmega328P没有办法告诉你它是否在工作,闪烁的灯可以提供1ms/秒的 "心跳",几乎不耗电,但提供了有用的反馈)

  • 几个10uF和100nF平滑电源电压的电容

  • 电池(我用的是AAA但任何能获得5-7伏电压的电池都可以使用)

  • (可选)用于通过ICSP编程芯片的3x2针(如果可以的话)Atmega328P重新编程,然后你可以跳过这个连接器)

  • (可选)一个用于UART调试的1x2针脚接头(只有板运行不稳定时才需要)

第3步:Arduino Mini版本

前面说有两个版本,这是一个额外的版本。之所以会有这样的额外版本,是因为我们现在在 "零件荒 ",像Atmega328P这种芯片会长期缺货。

你可以用 "简单 "如果您对自己的焊接技术有信心,可以在微控制器上焊接32个固件k使用32晶体(如上图所示)k固件版本(详见下节)。

上面的原理图是用一个 "便宜的GPS "解决方案是连接的,但如果你使用其他(例如Adafruit)设置替换原理图中的设置GPS你也可以使用其他部分(例如Adafruit的)GPS(如上一步原理图所示)。

第四步:便宜的GPS(可选)

与竞争对手(12美元)相比,Adafruit的GPS该设备非常昂贵(30美元)。如果您认为增加的功能(描述低功耗部件)不是 "值得",你可以用9600波特传输任何东西NMEA字符串的GPS把模块扔进去(大)GPS所有模块都可以)。

:这些单元中的大多数缺乏启用/禁用引脚GPS单元通常消耗30-100毫安的电力。我们可以使用一个N-MOSFET(或类似)黑掉一个禁用开关。上图显示了基本想法。我们也可以falstad[1]尝试。

此电源开关电路有选择。如果您有兴趣了解更多细节,请参见附录B。

第五步:修改低功率硬件

假如你在做 "简易 "版本,你不需要阅读这部分。对于低功率版本,这些修改将大大提高电池寿命。

为了解释这个问题,我们将假设电源来自一组AAA可提供1000毫安的电池。假设你用的是32K的Adafruit版本,没有任何修改。以下是电源分解的例子。

  • "睡眠/关闭 " CPU、GPS、MS8607和EPaper:测量值为30-70uA(我们认为是50uA)。

  • 屏幕更新:5毫安,每分钟2秒一次:5 * 2 / 60 = 166 uA

  • GPS更新:每天一次,每次50毫安,每次10秒。50 * 10 / 86400 = 6 uA

  • MS8607 LED:100 uA

  • Adafruit GPS上拉电阻:500 uA

所以,我们有(50 166 6 100 500)= 822 uA平均电流消耗相当于约50天的功率。

如果去掉MS8607 LED和GPS上拉电阻,我们的用电量将减少到222 uA,也就是说,大约187天的用电量大大增加了使用时间。

1、首先,建议从MS8607上拆下LED(如上图所示)

2、Adafruit GPS上拉电阻是由Adafruit由设计师添加,使EN引脚成为一种选择。但是,当你把它拉到地上时,它也有一个缺点(禁止)GPS)时,大约有500uA上拉电阻消耗了电流。由于该设计的引脚是主动驱动的,因此可以去除电阻(如上图所示)

3.专业的迷你修改。搜索引擎搜索 "Arduino mini低功耗 "了解详情,基本上你会想去掉电压调节器和LED,为了减少电源的使用。MS8607电压调节器(3.3V,空闲时损失35-55uA的功率)为pro mini供电。

4、在pro mini在照片中,我还删除了32的晶体振荡器K准备晶体芯片。只有32K这种晶体只有在晶体版本的情况下才能去除,只有在正确的情况下pro mini重新编程后去除内熔丝,以后解释。

第6步:固件

在这一步中,我附上了nano和32k晶体版本的.hex文件(这两个版本都适用于pro-mini,如果您不确定使用哪个版本,请使用它nano版本)。

如果您想构建/修改源代码,可以访问GitHub:https://github.com/mattwach/epaper_clock

自己构建.hex固件文件(可选)

注意这个代码没有使用Arduino库,因为产生的代码太大,不能在Atmega328P安装(而且这是我个人的喜好)。它是用C语言编写的,用过Arduino[2]也使用的AVR基础库作为基础。要编译代码,需要安装(免费)avr-gcc工具[3],克隆epaper项目[4]的源码。然后进入firmware/[5]并输入目录。

make

如果建立了代码,可以打开Makefile[6],看看这些选项。

#ThisistheLow-powerstandalonechipconfiguration. CLOCK_MODE?=USE_32K_CRYSTAL UART_MODE?=HARDWARE_UART F_CPU?=&nbs;8000000

# This is the easy-to-build firmware that is based on an Ardino Nano
#CLOCK_MODE ?= USE_CPU_CRYSTAL
#UART_MODE ?= SOFTWARE_UART
#F_CPU ?= 16000000

如果你正在构建32k晶体固件,配置已经正确了。如果构建nano的版本,你需要注释32k那段,取消注释nano那段代码,然后再次make

还有一个特殊的调试模式,通过硬件UART以9600波特的速度转储日志信息。你现在可以忽略,但要记住它,因为它以后可能会有用。

# Uncomment to activate debug via the UART TX (9600 baud)
#DEBUG_CFLAG := -DDEBUG

最后,你可以通过改变几个变量来决定GPS应该多长时间被激活。默认每天运行一次,但如果GPS需要很长时间锁定,它会减少运行频率,从而减少电池的消耗。请在src/gps.c[7]中阅读所有相关内容。

第7步:使用ICSP上传固件

本节是为那些上传代码到独立的Atmega328P芯片的小伙伴准备的,如果你要上传到Arduino Nano,请跳到下一个步骤。

你需要一个ISP(或ICSP)编程器。可以用一个备用的Aruino Uno/Nano自己做一个。可以在搜索引擎搜索"Arduino ISP Programmer" 请注意,这些指南中的很多内容都假定你的真正目的是安装一个引导程序,但对于我们来说,不需要引导程序,因为我们将直接用ICSP上传.hex文件。

断电检测

在我的Atmega328P上,断电检测设置为3.5V(貌似是旧版本),所以我用这个命令禁用断电检测。

/usr/bin/avrdude -patmega328p -cusbasp -Uefuse:w:0xFF:m

你的可能不一样,这取决于你的“ISP programmer”(-c选项)。也有可能你不需要设置,只是以防万一。

第8步:使用Avrdude

我们可以使用一个叫avrdude的免费工具,来把它创建的十六进制文件上传到你的Uno/Nano/。我们也可以直接用命令行下载并使用avrdude。

  • 用Arduino IDE在输出记录打开的情况下运行一个上传(点灯的demo或者其他的demo),然后复制它使用的命令。或者

  • 阅读官方的avrdude文档[8]或者

  • 阅读参考网上使用avrdude的教程

这里是我在nano版本中使用的avrdude命令(通过make上传)。

供参考:

/usr/bin/avrdude \
  -v \
  -patmega328p \
  -carduino \
  -P/dev/ttyUSB0 \
  -b57600 \
  -D \
  -Uflash:w:epaper_firmware_using_arduino_nano.hex:i

这个是我在ISP版本中使用的:

/usr/bin/avrdude \
  -v \
  -patmega328p \
  -cusbasp \
  -Uflash:w:epaper_firmware_using_32k_crystal.hex:i

这边使用的是Linux。Mac和Windows也能正常工作,但像-P这样的选项会有所不同(即在Windows中可能是-PCOM1)。

同样,这部分的文件可以在

第9步:32K晶振

如果你正在制作 "简易 "版本,请跳过这一步。如果你使用的是32k晶体固件,则需要安装晶体以使固件发挥作用。

 你还需要配置ATMega328P的内部内熔丝,以使用内部的8Mhz晶体。

先做这一步很重要,因为32K晶体将取代任何现有晶体。如果你不改变这些内熔丝,芯片会变得没有反应,直到你重新连接一个8或16Mhz的振荡器。

据我所知,Arduino pro mini也需要ISP来改变内熔丝(但我可能是错的)。我查找了 "Arduino ISP",来获得正确的引脚映射,以便将ISP连接器与面包板对接(如上图所示)。

在连接了我的ISP programmer后,可以用这个命令检查当前的内熔丝配置。

$ avrdude -patmega328p -cusbasp
...
avrdude: safemode: Fuses OK (E:FF, H:DE, L:E2)

L:E2是我们想要的内部8mhz的设置。如果你的值不一样,可以用类似于这个的命令来更新它。

/usr/bin/avrdude -patmega328p -cusbasp -Ulfuse:w:0xE2:m

然后重新检查。

内熔丝设置完毕后,你就可以焊接晶体了。建议将晶体直接连接到微控制器引脚上,以减少杂散电容。太多的电容会使晶体需要更长的时间来开始振荡(或无法启动)。

第10步:(可选)第一个步骤

请参考步骤1、步骤2或步骤3中你所选择的设计原理图。

  • 你可以在面包板上验证到目前为止的情况,只需将一个LED/Resistor从D5连接到地,然后上传固件。如果一切正常,LED将每秒短暂地闪烁一次;

  • 接下来,你可以添加EPaper显示屏。显示器上的数据都不会是正确的,但它应该显示一些一些数据;

  • 然后,添加PHT模块,并验证它是否工作;

  • 最后是GPS模块。

如果测试正常,我们可以把所有东西转移到一个更“永久”的固定装置上。

第11步:线路板组装

你可以选择使用perf板,用CNC切割板子,或者把设计送到工厂去制造。

Kicad设计文件可以在schematic/目录[9]中找到。有三种硬件可供选择(都是从后面显示的,因为这是你手工布线的方式)。

我用我的CNC机器制作ATMega328P版本。如果你没有用CNC切割过PCB而又感兴趣,可以尝试在搜索引擎上搜索 "3018 PCB",你会发现很多关于这个主题的视频和文章。

间隙设置0.4毫米,但你可以更窄(可能不会更宽)。我使用Flatcam将Kicad的Gerber输出转换为G代码。

相关文件可以在到。

第12步:案例设计

你可以设计你想要的任何类型的外观,非常鼓励大家发挥创意!

这里分享一下我是怎么制作的(所有的设计文件都可以在到)。

我的设计使用了一个3D打印的支撑结构和两个CNC部件:一个顶盖和前面板。数控部件是用木头做的,因为我认为它比塑料看起来更漂亮。我在OpenSCAD中预先设计了整个东西。

我用0.2毫米的层高打印了主要结构。在我的3D打印机上,打印花了5个小时多一点。

我使用OpenSCAD的 "projection"[10] 功能,为顶盖和前板创建了2D DXF文件。

我通常会使用一个名为 "Carbide Create"[11]的免费程序,为数控机床制作G代码。但面板有一个45度的倒角,而Carbide Create是一个太基本的程序,不能很好地处理这个问题(至少我通过谷歌搜索他们网站上的论坛,得出了这个结论)。所以我尝试了一个不同的程序,叫做"CamBam"[12],它的效果非常好。(CamBam不是免费的,但可以免费使用40次)

第13步:附录A:时钟漂移校正(可选)

你的32k/CPU晶体不会是完美的。当GPS开启时,它将修正漂移。但是如果漂移不好或者你的GPS信号不好,你也可以在固件中应用一个校正。目前这需要构建代码。在main.c的顶部,有一些被注释掉的定义。

// Clock drift correction
// If your clock runs too fast or too slow, then you can enable these
//#define CORRECT_CLOCK_DRIFT
// number of seconds that a second should be added or removed
//#define CLOCK_DRIFT_SECONDS_PER_CORRECT 1800
// define this if the clock is too slow, otherwise leave it commented out
//#define CLOCK_DRIFT_TOO_SLOW

你可以取消对上面两个#define语句的加注,以启用校正。

只需取消对CLOCK_DRIFT_TOO_SLOW的注释(你的时钟已经慢了的话)。

如果你的时钟太快了,就不要注释。唯一要做的是设置CLOCK_DRIFT_SECONDS_PER_CORRECT...

数学方法

等了大约一天,然后看看时钟漂移了多少。例如,你可能要等23个小时。如果这时你看到时钟慢了10秒,那么你的修正将是。

(3600 * 23) / 10 = 8280秒,每次修正。

#define CORRECT_CLOCK_DRIFT
#define CLOCK_DRIFT_SECONDS_PER_CORRECT 8280
#define CLOCK_DRIFT_TOO_SLOW

非数学的方法

只需尝试一个像5000这样的数字,并在你注意到时钟仍然过快或过慢时对其进行完善。还是太慢?试试2,500。太快了?试试10,000。保持记录,并反复完善到可接受的数值,就像你在某些时候可能玩过的猜数字游戏一样。

第14步:附录B:廉价的GPS电源控制(关于BS170 N-MOSFET)

重温一下 里描述的电源控制电路,上面的电源切断电路被称为 "low side switch"。它的好处是比较容易理解,而且零件数量少。尽管如此,还是有一些设计上的问题。

  • GPS的地线并不与GND相连,而是与MOSFET相连。这意味着从GPS到微控制器的UART信号会有MOSFET的压降加在上面(Vds),增加了噪声的敏感性,并可能造成的错误。

  • 如果你的微控制器的输入被规定为3.3V的最大值,你就不会想使用这种设计(我选择的ATMega328P没有这个限制)。

  • 3.3V(上面的EN引脚)对每个MOSFET来说都不是一个很强的开启电压。

但是,UART是一个数字信号,地线的差异并不大,所以也许它无论如何都会工作?我试过了,而且工作得很好......起初,但随着时间的推移,我逐渐发现它并不可靠。为了了解原因,我们参考一下我最初选择的BS170作为我的N-MOSFET的特性曲线[13]

在X轴的3.3V时,我们将坐在图上的3.0和4.0V线之间。因此,也许我们会得到100mA?也许足够?

万用表告诉我,GPS消耗40-60mA,但我认为这是一个平均值。根据GPS试图做什么,它只是需要比晶体管能够允许的更多的电流,因此GPS的地(MOSFET漏极)电压会上升。这既造成了UART错误,又降低了GPS装置的整体电压,而GPS装置有时仍然可以工作,有时则进入复位循环。

一个解决方案是使用一个 "high side"电源电路,在上面增加一个P-MOSFET来实现这个目标。见上面的原理图。这消除了单独接地的问题,并提供一个完整的5V(电池)栅极电压波动,这将使相关的P-MOSFET完全打开。

这里[14]是falstad中的一个高边设计实例。

目前我已经订购了带有低端布线的PCB,所以我的次要解决方案是放弃BS170,而用FQP30N06L代替。这种较高电流的MOSFET(最大30A!)似乎严重过剩,而且确实如此,但其曲线看起来要好得多。在3.3V电压下,大约有10A的电流余量,比BS170改进了100倍,现在应该足够了;而且确实没有恢复不稳定。

参考资料

[1]

falstad: http://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgoqoQFMBaMMAKADMLiUQUAWKwvx5Ds3MNCQwELAEoUMhEIIphuyqlSGSoUCSwBOSoczVCUfHZRYAPJQnJpeIDJAeuQTiwHEACgGUWACMlfHAUPGcwRRQwJ0gWAHd5RWVBATjEo3Ss8FUoFgBzHJQEFJFIOPzDBC5hTWJooSoweFkPZT5NUTqdTSpsaGxe3WkAZ3bPIV4GnuaQNgBDABtRugMPGc6NxVENZHg4Qu2QXePsbEUNFiA

[2]

Arduino: https://www.arduino.cc/

[3]

avr-gcc工具: https://www.pololu.com/docs/0J61/6.3

[4]

epaper项目: https://github.com/mattwach/epaper_clock

[5]

firmware目录: https://github.com/mattwach/epaper_clock/tree/main/firmware

[6]

Makefile: https://github.com/mattwach/epaper_clock/blob/main/src/Makefile

[7]

src/gps.c: https://github.com/mattwach/epaper_clock/blob/main/src/gps.c

[8]

https://www.nongnu.org/avrdude/: https://www.nongnu.org/avrdude/

[9]

schematic/: https://github.com/mattwach/epaper_clock/tree/main/schematic

[10]

projection功能: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#3D_to_2D_Projection

[11]

Carbide Create: https://carbide3d.com/carbidecreate/

[12]

CamBam: http://www.cambam.info/

[13]

N-MOSFET的特性曲线: https://www.onsemi.com/pdf/datasheet/mmbf170-d.pdf

[14]

falstad中的一个高边设计实例: http://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgoqoQFMBaMMAKADMLiUQUAWKwvx5Ds3MNCQxIKdiEFUwGQnKFgUeELwjjJsGQCcVCpRULHlC+JBYB3OX3DrTCp9bsIzjjR-NQWAJWcvTWJlNQ0qKiFJKCgJFkMMNHATJKp1CJoWAA8QHHIiDQw8AowIXmEQAHEABQBlFgAjOTwNMC480J5ivwBzPOSMgapRSL87Qg9gtOC3YenkxQtbIxTleR4Ha36NlCmN3ArIhM5uPiiu89iweADNQWEo0UfYqJHobFe4hBYAZ3uKldeJchAoQGwAIYAG1+dBYQA

原文链接:https://www.instructables.com/E-Paper-Clock/
原文作者:mattwach

译文首发:DF创客社区

转载请注明原作者及出处

标签: 传感器材料知多少3600电阻电容能替2uffqp8n60晶体管5公制压缩电缆连接器接头f头d5d电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台