返回

七个可以在浏览器中构建并运行的万圣节项目

每年十月,Hackster、Instructables 和 element14 万圣节黑客松上都会重新出现同样那几个作品:一个带舵机下颌的骷髅,有人经过时就会尖叫;一对装在圆形显示屏上、会跟着你转的眼睛;一幅在你靠近时会做出反应的画;一个装满 NeoPixels 的南瓜;以及一个只有你伸出手才会给糖的糖果碗。

我们把其中七个重新制作为 Velxio 画廊中的示例,每个板卡系列一个,使用 Arduino 零件以及我们合作伙伴 Seeed Studio、DFRobot、M5Stack 和 Pimoroni 的模块。每一个都能在编辑器中打开,电路已经接好,草图也已经写好。按下 Run,它就会编译并在浏览器中启动,这样你就能在剪断一根线之前调整时序、颜色和阈值。

项目板卡主要零件打开它
惊吓骷髅Arduino UnoPIR、舵机、2 个 LED、蜂鸣器halloween-uno-jump-scare-skull
糖果分发器Arduino UnoHC-SR04、舵机、SSD1306 OLED、蜂鸣器halloween-uno-candy-dispenser
跟随你的眼睛Seeed XIAO ESP32-S3Seeed 圆形显示屏(GC9A01 + 触摸)halloween-round-display-eye
Grove 南瓜灯Seeed XIAO ESP32-S3Grove RGB LED 环、光传感器、PIR、无源蜂鸣器halloween-grove-pumpkin-ring
闹鬼肖像ESP32 DevKitDFRobot C4001 毫米波雷达、2 个 LED、蜂鸣器halloween-c4001-haunted-portrait
幽灵探测器M5Stack Core内置 LCD、按钮和扬声器halloween-m5stack-ghost-detector
LED 矩阵南瓜Pimoroni Stellar Unicorn16x16 RGB 矩阵、按钮halloween-stellar-unicorn-pumpkin

在示例页面搜索 halloween 即可列出全部七个。

其中五个小节顶部的图片是成品道具可能外观的插图,由 AI 生成。本文中其他所有图片都是示例在 Velxio 中运行的截图。

如何打开并运行其中任意一个

  1. 点击表格中的项目链接。编辑器会打开,板卡、零件、连线和草图都已就位。
  2. 按下工具栏中的绿色 Run 按钮。草图会在我们的服务器上编译(板卡的首次构建可能需要一分钟),然后在你的浏览器中运行。
  3. 打开底部的串口监视器。每个草图都会打印它正在做什么,所以即使关闭声音,你也能看到道具做出反应。
  4. 在仿真运行时点击画布上的传感器以打开其面板。距离、光照和存在感滑块就在那里。

1. 惊吓骷髅(Arduino Uno)

AI 插图:门廊上完成的惊吓骷髅——红色 LED 眼睛、舵机拉开下颌、前方有 PIR 传感器、后方有带蜂鸣器的 Arduino Uno

成品道具的插图,由 AI 生成。下面的电路才是 Velxio 中运行的那个。

经典的门廊道具。D2 上的 PIR 运动传感器监视着门口。有人经过时,D5 和 D6 上的两只红色 LED 眼睛会亮到最大亮度,D9 上的舵机会让下颌咔哒作响四次,D8 上的蜂鸣器会发出从 1.8 kHz 滑落到低吼的警报声。在访客之间,眼睛像余烬一样微微发光,四秒的冷却时间可以防止骷髅连续两次吓到同一个人。

Arduino Uno 上的惊吓骷髅:PIR 传感器、舵机下颌、两只红色 LED 眼睛和一个蜂鸣器

要试用它,请点击画布上的 PIR 传感器。输出会保持 HIGH 三秒,这正是真实的 HC-SR501 在延迟电位器调到最小时的行为。

整个惊吓就是一个简短的函数。注意 Uno 上的 tone() 使用 Timer2,而 Servo 库使用 Timer1,所以尖叫声和下颌永远不会争抢同一个定时器:

void scare() {
  eyes(255);
  for (int i = 0; i < 4; i++) {          // the jaw chatters four times
    jaw.write(JAW_OPEN);
    if (i == 0) scream(); else delay(160);
    jaw.write(JAW_CLOSED);
    delay(140);
  }
  eyes(40);
  lastScare = millis();
}

2. 不给糖就捣蛋糖果分发器(Arduino Uno)

AI 插图:完成的糖果分发器——一个彩绘南瓜灯盒子,带糖果管、碗上方的超声波传感器、掉落糖果的滑道、OLED,以及侧窗后方的 Arduino Uno

成品道具的插图,由 AI 生成。下面的电路才是 Velxio 中运行的那个。

一个无需接触的糖果碗。HC-SR04 超声波传感器从滑道下方朝上,寻找距离小于 10 cm 的手。一旦找到,舵机就会打开闸门,掉落一颗糖果然后再次关闭,蜂鸣器播放一段短促的旋律,SSD1306 OLED 会倒计时剩余数量,角落里还画着一个小南瓜灯。当库存耗尽时,屏幕会显示 TRICK,蜂鸣器则会转而嘲笑你。

Arduino Uno 上的糖果分发器,闸门打开,OLED 正在计数糖果

点击 HC-SR04 并将其距离滑块拖到 10 cm 以下,即可伸出一只手。草图随后会等待手被收回,所以挥一次手就是一颗糖果,没人能通过一直把手放在那里来清空糖果碗。

3. 跟随你的眼睛(用于 XIAO 的 Seeed 圆形显示屏)

AI 插图:一个骷髅道具,两只 Seeed 圆形显示屏作为它的眼睛,每只都显示着一只带竖瞳的血丝眼睛

一对完成的眼睛的插图,由 AI 生成。Velxio 中的示例运行一个显示屏;一对就是两个这样的显示屏。

圆形 TFT 显示屏上的眼睛在去年的 element14 万圣节黑客松上随处可见,从 3D 打印的骷髅到雷达触发的道具。这个示例使用 用于 XIAO 的 Seeed 圆形显示屏,背面装着一块 XIAO ESP32-S3。1.28 英寸的 GC9A01 显示着一只带橙色虹膜的血丝眼球。

Seeed 圆形显示屏上的血丝眼球,瞳孔正看向玻璃被触摸的位置

按压玻璃,瞳孔就会追逐你的指针。持续按压,它会收窄成猫一样的竖瞳。松开后,它会恢复自行环顾房间,并每隔几秒眨一次眼。

触摸控制器是扩展板上的 CHSC6X,读取方式与 Seeed 自家驱动相同:D7 上的下降沿表示手指按下,在 0x2E 处进行五字节 I2C 读取会返回位置。每一帧都绘制到离屏 sprite 中,然后一次性推送到玻璃上,因此面板永远不会显示画了一半的眼睛。只有虹膜可能到达的 174 像素方形区域会被重绘;带血管的边缘只绘制一次,并在每次眨眼后重绘:

static void drawEye() {
  frame.fillScreen(TFT_BLACK);
  drawSclera(frame, BX, BY);           // the part of the sclera inside the box
  ...                                  // iris, streaks, pupil, glint, eyelids
  frame.pushSprite(BX, BY);
}

引脚就是扩展板自身的引脚,所以同一份草图可以在真实的硬件组合上运行。

要制作一对眼睛,就做两个:骷髅或雕刻的南瓜在它的眼窝里装两块圆形显示屏,每块都配有自己的 XIAO 运行这份草图。它们会独立地环顾和眨眼,这比两只完全同步的眼睛看起来更有生气。

4. 黄昏时分苏醒的 Grove 南瓜灯(Seeed XIAO ESP32-S3)

一幅 AI 插画,展示完成后的 Grove 南瓜灯:雕刻南瓜内部有一圈发出绿紫色光芒的 LED 环,旁边是 XIAO 开发板、PIR 和光敏传感器,通过 Grove 线缆连接

完成道具的插画,由 AI 生成。下方电路即为在 Velxio 中运行的电路。

XIAO ESP32-S3 上的四个 Grove 模块组成了一个可放入雕刻南瓜的内胆。 Grove 光敏传感器让 42 颗 LED 的 Ultimate RGB LED 环在白天保持熄灭。 天黑之后,灯环会像蜡烛一样闪烁橙黄色光芒,每颗 LED 都有自己的火焰。 当 Grove PIR 检测到有人靠近时,南瓜就会被”附身”: 绿紫色的漩涡绕着灯环旋转,Grove 无源蜂鸣器 奏响几小节诡异的旋律。

Grove 南瓜灯:Ultimate RGB LED 环像蜡烛一样闪烁,旁边是 XIAO ESP32-S3、光敏传感器、PIR 和无源蜂鸣器

想试一试的话,点击光敏传感器并把滑块拖低来模拟夜晚, 然后点击 PIR 并触发它。

同一电路,在 PIR 触发后灯环旋转出绿紫色漩涡

在真实硬件上,请从 XIAO 的 5 V 焊盘为灯环供电(示例就是这样接线的), 并保持低亮度:42 颗 WS2813 LED 全白全亮时的电流远超 USB 端口 能提供的水平。

5. 闹鬼肖像(DFRobot C4001 毫米波雷达)

一幅 AI 插画,展示完成后的闹鬼肖像:镀金画框中的古老油画,眼睛发出红光,画布背面是毫米波雷达、ESP32 开发板和蜂鸣器

完成道具的插画,由 AI 生成。下方电路即为在 Velxio 中运行的电路。

眼睛会跟随房间的油画是游乐场的老把戏,而雷达能让它更胜一筹。 DFRobot C4001(SEN0610)是一款 24 GHz 毫米波传感器,可以测量人的距离, 其信号能直接穿透画布和木质画框。藏在画作背后, 完全不会暴露。

示例程序将雷达设为速度模式,此时它会同时报告距离和存在状态。 你站得越近,肖像的两只 LED 眼睛就越亮,蜂鸣器上的心跳声也越快, 从六米处每 1.5 秒一跳,到近处几乎每秒三跳。走进一米之内, 它就会尖叫。

闹鬼肖像电路:ESP32 DevKit、DFRobot C4001 雷达、两只红色 LED 眼睛和一个蜂鸣器

点击雷达并拖动距离滑块,走向画作。

// 6 m away: a dim glow. Right in front: full blaze.
float closeness = constrain((FAR_M - range) / (FAR_M - SHRIEK_M), 0.0f, 1.0f);
eyes(10 + (int)(closeness * 245));

6. 幽灵探测器(M5Stack Core)

与其说是道具,不如说是个游戏,也是唯一一个无需接线的项目。M5Stack Core Basic 绘制一个指针仪表,读取房间的”幽灵场”。 指针会自行游走,时不时猛冲进红色的 HAUNT 区域;这时 一个幽灵就会飘上屏幕,扬声器开始发出噼啪声。

M5Stack Core 上的幽灵探测器:指针仪表指向红色区域,屏幕上出现一个幽灵

三个正面按钮就是控制键:

仪表绘制到 8 位 M5Canvas 精灵中并一次性推送,这样 指针就不会闪烁。全屏 16 位精灵放不下: Core Basic 没有 PSRAM。

7. LED 矩阵南瓜(Pimoroni Stellar Unicorn)

最后一个纯粹是装饰。Pimoroni Stellar Unicorn 的 16x16 RGB 矩阵变成一个带棱纹的南瓜灯,眼睛、鼻子和锯齿状嘴巴 被内部的烛光照亮。按 A 触发一道闪电,随后滚动显示 HAPPY HALLOWEEN;按 B 让一个幽灵飘过脸庞;LUX + 和 - 调节亮度。

Pimoroni Stellar Unicorn 的 16x16 LED 矩阵上的南瓜灯面孔

面孔是示例程序中一个 16 乘 16 的字符网格,每颗 LED 对应一个字母, 所以改变表情只需编辑文本。

移植到真实硬件

这些示例程序针对的库和引脚与你在实验台上使用的一致, 因此从模拟器迁移到真实搭建主要涉及 供电和机械结构:

局限

打开一个,改一改,构建出能吓到自家门口的版本。 万圣节快乐。


分享到:
David Montero

作者

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

相关文章


上一篇
浏览器中的模拟电子学:七个可运行、可测量的电路
下一篇
可爱的桌面机器人:ESP-VoCat 上会倾听的脸,以及浏览器中的模拟器