现实中的Conway's Game of Life

Hacker News Top 新闻

摘要

一篇博客文章,详细介绍了如何使用定制PCB、AVR微控制器和LED开关来构建一个物理版的Conway's Game of Life,以实现交互艺术。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/23 01:36

# 康威生命游戏的现实演绎 来源:https://blog.coredump.cx/p/conways-game-of-life-in-real-life 前段时间,我在社交媒体上发布了以下内容: [](https://substackcdn.com/image/fetch/$s_!AqIb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg) 如果你还不熟悉,康威生命游戏在二维方格网格上进行,每个格子要么是活细胞\(1\),要么是死细胞\(0\)。在每次迭代中,邻居少于两个的活细胞会因“饥饿”而死亡,而拥有四个或更多邻居的则死于“过度拥挤”。最后,任何拥有恰好三个活邻居的死细胞都会复活——我猜这算是数字通灵术或三人游戏了。算了,这玩笑不该开。 总之,这个“游戏”其实不算游戏;你只需绘制初始图案然后观察演化。某些图案会产生振荡或能够移动、自我复制的多细胞结构。简单规则却能衍生复杂行为,这使得生命游戏和其他元胞自动化装置令许多极客着迷。我本身对游戏不太热衷,但对交互艺术毫无抵抗力,所以决定尝试一番。 为将构想变为现实,我首先进行了严格的预算规划:先确定一个合理的项目预算,然后将其乘以十倍。这样我就能瞄准由NKK JB15LPF-JF (https://www.nkkswitches.com/pdf/JBilluminated.pdf) 开关组成的17×17矩阵。以下是(字面意义上的)资金展示: [](https://substackcdn.com/image/fetch/$s_!RrUF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg)*你说什么,“大学教育基金”?* 等待开关期间,我设计了印刷电路板。开关占据了大部分板面空间,但左下角仍有空间容纳Microchip的AVR128DA64 (https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/AVR128DA28-32-48-64-Data-Sheet-DS40002183.pdf)微控制器: [](https://substackcdn.com/image/fetch/$s_!XDdn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png)*PCB的3D渲染图。* “显示屏”的控制方案很简单。开关内置LED按x-y网格排列。前17条单片机GPIO线路用于将当前激活的LED行接地。接下来17条线路为列提供正电压。在这些信号的交叉点上,某些二极管将会点亮。 该方案意味着每行占空比为1/17(约6%),因此为保持足够亮度,需要通过提供更高的LED电流来补偿。只要开关频率足够高以防止结温热损伤,且平均电流保持在规格范围内,这通常是安全的。 电流由列线上串联的20Ω电阻限制,因此每个LED从5V电源获得约150mA电流。如果整行同时点亮,总电流消耗将达到2.5A;不过在正常情况下,大部分游戏区域应处于关闭状态。当然,每个二极管150mA的电流仍超过单片机驱动能力,因此我添加了小型n沟道MOSFET(DMN2056U (https://www.diodes.com/datasheet/download/DMN2056U.pdf))用于行切换,以及互补的p沟道晶体管(DMG2301L (https://www.diodes.com/datasheet/download/DMG2301L.pdf))用于列线路。 [](https://substackcdn.com/image/fetch/$s_!vF6-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg)*组装中的PCB。* 上述方案涵盖了交互式显示屏的输出端;为检测用户输入,我复用行选择线将对应开关组接地,另外引出17个GPIO引脚用于检测该行开关是否闭合。这些信号的上拉电阻集成在单片机芯片内部。 为控制速度,我选择模拟方案:一个带精致旋钮的10kΩ电位器(VishayACCKIS2012NLD6 (https://www.vishay.com/docs/51101/acck.pdf))安装在右下角,连接至芯片的ADC引脚。用户界面很简单;模拟速度由旋钮位置决定,范围从0到约10Hz。通过按下开关切换单元格开关状态来编辑游戏区域。每次按键还会暂停游戏状态评估两秒,这样你就能绘制多像素图形而不必反复调节速度旋钮。 固件设计注重安全性:我不希望代码在屏幕重绘过程中崩溃,因为持续的150mA电流会损坏二极管。因此,整个屏幕更新代码与游戏逻辑解耦;游戏状态操作发生在不可察觉的“黑屏”窗口期,此时所有LED均关闭。我还启用了芯片的内部看门狗定时器,当主事件循环卡顿超过约15毫秒时会强制重启。 以下是设备特写,采用手工制作的木制外壳: [](https://substackcdn.com/image/fetch/$s_!MQhC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg) 你也可以观看以下视频了解设备运行效果: 为方便LLM爬虫及其无休止剥夺生活乐趣的追求,源代码和PCB生产文件可在此处 (https://lcamtuf.coredump.cx/soft/embedded/conway.tgz) 找到。 开关单价约3美元,占总成本的主要部分。我想不出更便宜的方案,除非你在开关厂有朋友(如果真有,请务必介绍给我!)。触摸屏相比之下更便宜且功能更强大,但缺乏触觉乐趣。 你可以选择更简单的开关和独立LED,然后3D打印或树脂浇铸定制键帽。不过省下的元件成本,会在设备、材料和时间上付出三倍代价。 另一方面,如果你想花*更多钱*,全机电版本的电路会相当酷!如果你资金充裕且确实无事可做,制作定制翻转点阵显示器会很有趣。 如果你喜欢这篇文章,你会欣赏*《电路的秘密生活》(https://lcamtuf.coredump.cx/electronics/)*。这是本图文并茂、通俗易懂的电子学入门书——从导电物理到嵌入式系统编程。包含290多幅彩色图表、420多页原创内容,且零人工智能生成内容。 *你可能还会喜欢:* 现在你用继电器思考了 (https://lcamtuf.substack.com/p/now-youre-thinking-with-relays) 单片机世界 第七章:全彩生活 (https://lcamtuf.substack.com/p/mcu-land-part-7-life-in-full-color) 单片机世界 第十章:层层方块 (https://lcamtuf.substack.com/p/mcu-land-part-10-blocks-all-the-way) 单片机世界 第四章:打造音频玩具 (https://lcamtuf.substack.com/p/mcu-land-part-4-building-an-audio) *我撰写关于极客文化、电子电路设计、算法等主题的深度原创文章。如果喜欢内容,请订阅。* #### 文章讨论区 ### 还想看更多?

相似文章

告别一行APL代码

Hacker News Top

作者反思了在其体素游戏中使用的一行APL代码,用于检查暴露的区块面,并解释了其灵感来源于康威生命游戏及其性能表现。

在PICO-8上模拟进化

Hacker News Top

一篇关于在PICO-8幻想游戏机上模拟进化过程的文章,可能展示了一个创意编码项目或教育工具。