Raspberry Pi 400 扩展坞





5.00/5 (5投票s)
DIY 树莓派 400 扩展坞,带电池、实时时钟和电池状态显示小部件
引言
树莓派 400 是一款内置在键盘里的小型计算机。而普通的树莓派是你可以集成到项目中的一块电路板,Pi 400 更像是一款成品消费级产品——正如他们在官网上所说的,“一台集成在紧凑键盘里的完整个人电脑”。因此,你只需连接显示器(或电视)、电源和鼠标,就能获得一台拥有 4GB RAM 和四核处理器,价格不到 100 美元的个人电脑。听起来很棒,对吧?嗯,如果你想用它作为主力电脑,你可能会有点失望(例如,可以看这里),但对于许多任务来说,它非常出色。不过,它也确实缺少一些东西。
对我来说,我首先想到的缺失功能是实时时钟(RTC)。如果你从未听说过,RTC 是计算机(和其他设备)中用来保持时间的微小电路。它有一个备用电池,所以电脑关机时不会丢失时间。当电脑再次开机时,它可以从 RTC 电路读取日期和时间。这就是它在电脑和笔记本电脑上的工作方式。
在树莓派 400 中,设计师决定不包含 RTC。因此,Pi 应该从互联网获取日期和时间。只要你在网上,这都能正常工作。你可能只是注意到 Pi 启动时时钟不正确,但几秒钟后就会更新。但如果你没有连接到互联网怎么办?是的,我知道现在你几乎无时无刻不在网上,而且实际上你用电脑做的大多数事情都需要互联网,没有它就无法计算。但如果你的 Wi-Fi 坏了,而你只是想处理你的文档呢?我不喜欢在系统时间错误的情况下处理事情。即使离线,也能拥有正确的日期和时间会很好。
第二个缺失的功能是电池供电。由于 Pi 400 非常小巧,能够便携使用,而无需 AC 电源会很方便。实际上,即使它放在桌子上,也可能希望在 AC 电源意外断开时有备用电源。
所以,基本上,我从这两个需求开始:电池供电和 RTC,最终得到了这里展示的“Pi 400 扩展坞”。它的功能是:
- 电池供电和 AC 供电,可无缝切换(类似笔记本电脑)
- 显示电池状态
- RTC 提供日期和时间
看起来像这样:
这是正面视图
扩展坞主体
我的第一个想法是将所有东西都安装在原装 Pi 400 外壳内。事实证明这是不现实的——你根本无法将所有电路和电池都装进原装外壳。下一个选择是更换外壳的底部红色部分,用定制外壳来提供更多空间。这很有吸引力,但对我来说不可行,原因有:1)我不想拆开 Pi 400(这并不简单),2)新的底部必须精确打印,以便顶部可以卡上去。我对我的 3D 打印技术不太自信。
所以我的解决方案是制作一个“扩展坞”,将完整的 Pi 400 插入其中。它看起来不太好,但制作简单,并且为电路提供了大量额外的空间。
这是扩展坞的 3D 模型
外壳打印成两部分(它太大了,无法放入普通家用 3D 打印机)。我为原型使用了黑色 PLA+ 耗材和 10% 的填充密度,在我的 GeeTech A10 打印机上,每个部分大约需要 5 小时打印。
左侧
右侧
两部分用聚氨酯胶水粘合在一起。有两个孔用于 4 毫米的 rod 来对齐零件并增强连接强度。
Pi 400 从背面的边缘插入,并通过 Kensington 锁孔用一个 3D 打印的螺栓固定。这个螺栓应该尽可能坚固。我用相同的 PLA+ 耗材以 100% 填充密度打印了它,但效果并不理想。前面部分很容易断裂。更好的选择可能是用 ABS 打印,或者用一小块铝制作前面部分并将其粘在螺栓的孔内。你可以自由尝试。
锁定螺栓的详细视图
你可能还会注意到前面的燕尾槽导轨。这些是用来连接显示器的,可以将扩展坞变成一个笔记本电脑。这项工作将在以后完成……
在扩展坞底部贴上一些自粘缓冲垫(橡胶脚),以改善散热。
实时时钟
为 Pi 添加实时时钟很容易。你可以购买便宜的带 I2C 接口的模块,并将其连接到 Pi 的 GPIO 插针。我使用了 PCF8563 breakout 板,价格大约为 2 美元。
它连接到 GPIO 插针 1 (3.3V)、2 (SDA)、3 (SCL) 和 5 (GND)。
然后你需要配置你的操作系统,使其在启动时从 RTC 加载时间。这在很多教程中都有描述,我使用了这个教程。
PCF8563 不在教程提到的 RTC 之列,但它工作正常。需要在 boot/config.txt 中添加的行是:
dtoverlay=i2c-rtc,pcf8563
电源
首先,我将描述我使用的最终配置。有关我尝试过的其他选项的信息,请参阅下面的电源选项部分。
这是展示所有组件如何连接在一起的框图
我使用了一个集成了 TP4056 锂离子充电器和 MT3608 升压模块的 breakout 板。TP... 和 MT... 的名称标识了电路板上使用的芯片;你可以在其数据手册中找到规格。简而言之,这个电路板通过 USB micro 连接器接收输入电压,在需要时为连接的电池充电,并在输出端提供一个从电池电压(3 到 4.2V)“升压”而来的 5V。最大输出电流为 2A,但建议仅使用 1A。这是电路板的样子:
充电器+升压板连接到一个单节 5000 mAh 的锂聚合物电池。当然,你可以使用不同容量的电池,前提是它能装在 Pi 400 下方的扩展坞内,这意味着它不应该比 10 毫米厚。我的电池尺寸为 100 x 60 x 6 毫米,价格约为 16 美元。
电路板的输出需要一个 USB-C 连接器,该连接器插入 Pi 400 的电源输入。如果你在为 GPIO 插针供电时感到困惑,Pi 400 不支持此功能,见此处。
你可以购买一根一端是 USB-C 连接器、另一端是导线的电缆,或者只购买连接器并使用自己的导线。我尝试了这两种选择。我的最终设置使用的是焊接到细扁平线上的 USB-C 连接器,这样更容易在扩展坞内布线。
充电器和升压板插入一个 3D 打印的框架中,然后从左侧插入主外壳。可拆卸“抽屉”的设计是为了提供灵活性——如果你需要使用不同的充电器和升压板,你无需打印整个扩展坞外壳,只需打印为你的电路定制的抽屉即可。
抽屉里还有一个电源开关,可以断开 USB-C 输出。这是必需的,因为即使 Pi 400 关闭,它也会从电源消耗约 50mA 的电流。所以,如果你只是关闭系统而不拔掉 USB-C 电源连接器,你仍然会从电池消耗 50mA 的电流,大约 3 天后,电池就会耗尽。
这是抽屉的 3D 模型
这是实物
电池测量
当你的 Pi 由电池供电时,你不会希望在工作过程中耗尽电量。所以你需要某种方式来测量电池。我研究了各种项目,对我来说最好的选择是使用 INA219 电流传感器。你可以以大约 4 美元的价格购买一个 breakout 板,它可以测量电压和电流,并通过 I2C 发送结果,因此可以通过 GPIO 端口连接到 Pi 的 I2C 接口。
你可以使用 Arduino 或类似的设备来测量电池,但这比连接 INA219 会花费更多的工作和金钱。而且,使用 INA219,你还可以测量电流,而不仅仅是电压。如果你测量从电池流出/流入的电流,你可以判断电池是正在充电还是放电,并比仅从电压估算剩余时间更精确。
这是所有组件的连接示意图
INA219 和 RTC 共享 Pi 400 GPIO 插针的同一 I2C 和电源引脚。我为此制作了一个定制的 Y 型电缆,它将 3.3V、GND、SDA 和 SCL 引脚连接到 RTC 和 INA219。
这是扩展坞中组件的布局
- 1 – 充电器和升压电路
- 2 – 电池
- 3 – 锁定螺栓
- 4 – USB-C 连接器
- 5 – RTC 电路
- 6 – INA219 传感器
- 7 – RTC 和 INA219 的 I2C 和电源线
关于 INA219 传感器的一点说明:你可以通过接线端子或插针连接测量的电流。最好使用接线端子,因为从电池中提取的电流相当大,而普通的跳线连接不足。仅因此原因,你可能会遇到各种低电压问题。
电池电量指示器
你在笔记本电脑上见过这个——一个显示剩余容量或时间的图标。为我们的 Pi 扩展坞拥有这个功能会不会很棒?我找到了 pi-battery-widget 项目,它正好可以做到这一点。GitHub 上有很多这个项目的分支,我Fork 了这个分支,它有估算剩余容量的不错方法(尽管还有改进空间,稍后会详细介绍)。
该小部件是用 C 语言编写的,但使用 Python 脚本读取传感器的数据,该传感器测量电池。这样做的好处是你可以轻松修改脚本以使用你的传感器,但我不喜欢每 5 秒启动一个 Python 脚本来做 C 程序本身就能完成的事情。这似乎是在浪费计算能力(和电池的电量)。
因此,我决定移除 Python 脚本,直接读取 INA219 传感器。有一个 C++ 库可以做到这一点,但由于它是 C++,我不得不将项目从 C 切换到 C++,并修复 C++ 编译器不喜欢的那些东西。同时,我还对代码进行了一些(希望是更好的)更改,并为我喜欢的 Twister OS(我在 Pi 400 上使用的操作系统)创建了安装脚本。
我的小部件版本包含在此文章的 zip 文件中,并且也在此处 GitHub 上可用。请参阅软件包中的 Readme 以获取有关构建和安装小部件的说明。
关于电源选项和限制的一些思考
推荐用于 Pi 400 的官方电源是 5V 3A。我在某处读到,空闲时的功耗为 2.5W,这意味着电流为 0.5A(0.5A x 5V = 2.5W)。根据我的经验,从电池提取的电流从最低的约 0.6A(空闲)到满负荷 CPU 时约 1.5A 不等。请注意,这是电池的电流,电压不是 5V 而是较低的,约 3.8V。因此,这些电流对应于 2.3W 到 5.7W 的功耗(0.6A x 3.8V = 2.3W)。
考虑到这些数字,你应该选择你的组件——电池、充电器和升压器、开关、电缆、电流传感器。我在下面的图表中列出了限制,并标出了感兴趣的编号点。
点 1:电池
我的电池内置保护电路,如果电压低于 3V 或电流超过 3A,则会将其断开。设置 pi-battery-widget 中的低电压限制时,电压很重要。通常,可以使用 2.9V 左右,但如果电池在 3V 时自行关闭,而小部件仍然认为电压正常,你可能会丢失数据。为了让小部件正常工作,我将空电池电压设置为 3.1V(参见代码中的 BATTERY_VMIN
)。
3A 的最大电流也可能是一个问题——随着电池放电,电池电压会下降,所以如果电池几乎没电了,比如 3.2V,而允许的最大电流是 3A,那么最大功率就是 9.6W(功率 = 电压 x 电流)。或者换句话说,在 5V 输出到 Pi 的最大电流只能是 1.9A(电流 = 功率 / 电压 = 9.6 / 5)。从上面的电流范围来看,1.9A 几乎没有额外的电流留给 Pi 本身以外的任何东西(例如,如果你将外部硬盘连接到你的 Pi)。
建议
- 考虑连接外部设备(如外部硬盘)到电池供电的 Pi 时的功耗。如果不确定,请使用 AC 电源。
- 购买具有足够额定值或无保护功能的电池(但请使用带保护功能的充电器!)。
点 2:电流传感器
INA219 传感器板的额定电流为 3A。由于我们测量的是电池电流,这实际上等同于我电池的限制——你不应该让超过 3A 的电流通过传感器,这大约是 10W 的功率,反过来,在 5V 输出上的电流不超过 2A。似乎我们只能接受在此配置下的 10W 限制。
如果你需要更多的外设功率,一个解决方法是限制最大 CPU 速度,从而限制 Pi 本身的消耗。这可以在启动时加载的配置文件中完成(我尝试过),但如果它也能在系统运行时动态进行(我还没有研究过),那就更好了。实际上,这意味着如果从电池提取的电流过高,我们可以自动切换到较低的 CPU 速度。这里还有很多进一步改进的空间,欢迎加入。:)
点 3:充电器和升压器
我使用的电路板最大输出电流为 2A,但推荐仅使用 1A。如前所述,Pi 400 的电流消耗从空闲时的约 0.6A 到全速时的约 1.5A 不等。所以我们超过了推荐的 1A,但考虑到 CPU 负载是变化的,它应该能工作。到目前为止,在我的原型机上它是能工作的。当从 AC 电源运行并同时给电池充电时,电路板似乎会特别热。将电路板放在一块(绝缘的)金属上,并在外壳的电路板下方设置通风孔可能会有帮助。我在原型机上用钻头打了这些孔,但 3D 模型中还没有。
电源选项
在进行此项目时,我尝试了各种为 Pi 400 供电的选项,以下是我在此过程中收集的一些注意事项,供您参考实验。
选项 1 - 移动电源
可能是第一个想到的就是使用移动电源。这效果很好,但你可能无法在给移动电源充电的同时用它给 Pi 供电(大多数移动电源不支持此功能)。如果你的电池没电了,你需要关闭 Pi 并给移动电源充电。如果你只是随身携带移动电源,它就是需要连接的另一根线,并且会增加桌面的杂乱。所以,移动电源易于使用,但不太舒适。我可以想象将移动电源集成到扩展坞中,但我仍然希望能够像笔记本电脑一样,同时使用壁式电源和电池为 Pi 供电。
选项 2 - 电池、充电器和升压器
当你想到电池时,你可能会意识到你需要一个充电器。你可能没有意识到,你还需要升压电池电压。Pi 需要 5V,而锂聚合物电池充满电时只有 4.2V,当接近空电时降至约 3V。
幸运的是,有一些小巧且便宜的电路板集成了充电器和升压电路。
我遇到了两种这样的电路板。
- 来自移动电源的电路板
- 非来自移动电源的电路板
移动电源电路板
这些似乎是移动电源的组件,单独出售给 DIY 用户。这些电路板通常包含几个 LED 来指示电池剩余电量,并在放电电流低于约 50mA 时自动关断。它们可以在输出端提供 2A 甚至更多的电流。这听起来很棒——你获得了电池电量计和高输出功率,但有一个巨大的缺点。当它在电池和 AC 电源之间切换时,输出会有短暂的断电。它只持续大约 20 毫秒,但足以让 Pi 检测到并重启。
我想如果你大部分时间都使用电池供电,并且记住在 Pi 运行时永远不要插墙上充电器,你就可以接受这个限制。但如果你想像使用笔记本电脑一样使用你的 Pi,随时在电池和 AC 电源之间切换,这种电路板就不是正确的解决方案。想象一下,你正在进行某项工作,电池电量即将耗尽。所以你连接墙壁适配器,然后……你的 Pi 重启了。反之,你正在使用市电供电,突然你家里的断路器跳闸了。你的 Pi 关闭了,你丢失了所有未保存的工作。
我不能说所有的“移动电源电路板”都有这种断电“功能”,但我尝试了两种不同类型,它们都有。所以我决定使用别的东西——我称之为“非移动电源电路板”的那种。
非移动电源电路板
当连接或断开 AC 电源时,这些电路板不会断电。但它们也没有 LED 来指示电池电压;只有充电/已充电 LED。它们似乎也只提供相对较低的输出额定值。这不理想,但可以工作。
结论
这里介绍的 Pi 400 扩展坞仍处于开发阶段,所以请做好实验和即兴发挥的准备。有些事情我已知可以改进,当然,还有很多其他事情需要改进,而我尚不清楚。
以下是一些可以改进的地方:
- 电源板(带充电器和升压器的抽屉)下方的通风孔,以提高散热效果。
- 在扩展坞主体中加深“抽屉”的边缘,使其不会突出。
- 更好的电源开关(具有更高的电流额定值;2A 是理想的)。
- 更坚固的燕尾槽支架,用于连接显示器。外部应该有更多的材料,或者使用不同的设计,也许用螺母和螺栓固定显示器铰链。
- 电源小部件对剩余电池容量的估算可以改进。它似乎没有考虑到当电流较高时电池电压会下降,所以你可能会在某一刻看到 50% 的剩余电量,当时 Pi 正在进行一些繁重的计算,而片刻之后,它可能会显示 55%,因为功耗较低,电压升高了。
历史
- 2022 年 5 月 9 日 - 初始版本