首页 » 科学 » 制作一个漂亮的墨水屏电子钟(附两种版本)_版本_晶体

制作一个漂亮的墨水屏电子钟(附两种版本)_版本_晶体

落叶飘零 2024-12-18 11:28:05 0

扫一扫用手机浏览

文章目录 [+]

这周和大家先容一个俊秀的墨水屏电子钟,兼具气候站功能(可以通过GPS自动设置),用4节AAA电池可以续航6个月旁边,而且,为了担保安全和可靠性,它不须要任何网络连接。

特点包括:

制作一个漂亮的墨水屏电子钟(附两种版本)_版本_晶体 科学

自动设置(通过GPS)当前温度。
当前的湿度。
显示过去25小时内压力的压力争。
日出和日落韶光当前的月相在12小时或24小时模式之间选择。
在英文和公制单位之间选择。

这个项目有两个不同的版本,分别是 “大略单纯”版本 和 “低功率”版本。

“大略单纯”版本是基于Arduino Nano的。
这个版本的目的是只管即便减少本钱、零件数量和制作的繁芜性;缺陷是你须要用一个USB 5V适配器来给时钟供电。

“低功率”版本利用一个32k的振荡器,以极小的功率保持精确的计时。
这个振荡器让时钟可以用电池运行。

第1步:"大略单纯 "版零件清单

Arduino NanoWaveshare 2.9 in EPaper模块Adafruit MS8607压力/湿度/温度传感器任何带有9600 Baud TX的GPS模块电路板(可以是一块原型板或一块用于CNC的铜板)几个按钮开关(用来改变UTC韶光偏移和显示偏好的)制作外壳的材料(文末会有供应.3mf、.scad和.dxf文件)USB充电器和充电线第2步:"低功率 "版本

这些材料和上面的大略单纯版本一样:

Waveshare 2.9 in EPaper ModuleAdafruit MS8607压力/湿度/温度传感器电路板几个按钮开关制作外壳的材料

此外,你还须要:

Atmega328P DIP版(你也可以选择SMD封装版本,但在32K晶体上焊接会更难)32768 Hz晶体(这个振荡器是设计中低功率的关键)Adafruit GPS模块(这个模块比 "大略单纯 "版中的模块质量要高一些,由于它可以跟踪更多的卫星(以便更快地锁定),供应一个使能引脚(用于低功耗)和一个用于保持其内存活动的端口(用于快速重新锁定)。
如果所有这些功能对你来说不值得增加本钱,你可以通过添加你自己的使能FET,魔改一个更便宜的模块来完成这项事情。
后面会阐明怎么做)LED+电阻(光秃秃的Atmega328P没有办法见告你它是否在事情,闪烁的灯可以供应一个1ms/秒的 "心跳",险些不耗电,但供应了有用的反馈)几个10uF和100nF的电容来平滑电源电压电池(我用的是4个AAA电池,但任何能可以得到5-7伏电压的电池都可以利用)(可选)一个用于通过ICSP对芯片进行编程的3x2针头(如果你可以拆下Atmega328P重新编程,那么你可以跳过这个连接器)(可选)一个用于UART调试的1x2针脚接头(只有在板子运行不稳定的情形下才须要这个)第3步:Arduino Mini版本

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

你可以用 "大略 "版本的固件运行这个版本,或者,如果你对自己的焊接技能有信心,你可以在微掌握器上焊接一个32k的晶体(如上图所示),并利用32k版本的固件(更多细节见下节)。

上面的事理图是用一个 "便宜的GPS "办理方案来连接的,但是如果你用了别的(比如Adafruit)的设置来更换事理图中的GPS部分,你也可以利用别的(比如Adafruit的)GPS(如上一步的事理图所示)。

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

与竞争对手(12美元)比较,Adafruit的GPS装置很贵(30美元)。
如果你认为增加的功能(在低功耗部件部分有描述)不 "值得",你可以把任何能以9600波特传输NMEA字符串的GPS模块丢进去(大多数的GPS模块都可以)。

但现在有一个新的问题须要办理:这些单元中的大多数缺少一个启用/禁用引脚,而GPS单元常日花费30-100毫安的电力。
我们可以用一个N-MOSFET(或类似的)黑掉一个禁用开关。
上面的事理图显示了基本的想法。
我们也可以在falstad[1]中进行考试测验。

这个电源开关电路是有取舍的。
如果你有兴趣理解更多细节,请拜会附录B。

第5步:低功率硬件修正

如果你正在制作 "大略单纯 "版本,你不须要阅读这一部分。
对付“低功率”版本,这些改装将大大改进电池寿命。

为相识释问题,我们将假设电源来自一组AAA电池,可以供应1000毫安时。
让我们假设你利用的是32K的Adafruit版本,并且没有做任何修正。
下面是一个电源分解的例子。

"就寝/关闭 " CPU、GPS、MS8607和EPaper:丈量值为30-70uA(我们认为是50uA)。
屏幕更新:5毫安,每分钟2秒一次:5 2 / 60 = 166 uAGPS更新:每天一次,每次50毫安,每次10秒。
50 10 / 86400 = 6 uAMS8607 LED:100 uAAdafruit 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的照片中,我还去掉了晶体振荡器,为32K晶体的芯片做准备。
只有在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],看看这些选项。

# This is the Low-power stand alone chip configuration.CLOCK_MODE ?= USE_32K_CRYSTALUART_MODE ?= HARDWARE_UARTF_CPU ?= 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)

重温一下第四步"便宜GPS " 里描述的电源掌握电路,上面的电源割断电路被称为 "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创客社区 https://mc.dfrobot.com.cn/thread-313226-1-1.html

转载请注明原作者及出处

标签:

相关文章

高频PCB构造布线支招_暗记_旗子

有资料显示,同种材料时,四层板要比双面板的噪声低20dB。但是,同时也存在一个问题,PCB半层数越高,制造工艺越繁芜,单位本钱也就...

科学 2024-12-20 阅读0 评论0