Каждый октябрь на Hackster, Instructables и в хэллоуинском хакатоне element14 возвращается одна и та же горстка сборок: череп с сервоприводом челюсти, который вопит, когда кто-то проходит мимо; пара глаз на круглых дисплеях, следящих за вами; картина, реагирующая на приближение; тыква, набитая NeoPixel, и чаша для конфет, которая выдаёт сладости, только если протянуть руку.
Мы пересобрали семь из них как примеры в галерее Velxio — по одному на семейство плат — используя детали Arduino и модули наших партнёров Seeed Studio, DFRobot, M5Stack и Pimoroni. Каждый открывается в редакторе с уже собранной схемой и уже написанным скетчем. Нажмите Run — и он скомпилируется и запустится в браузере, так что вы сможете настроить тайминги, цвета и пороги, прежде чем отрежете хотя бы один провод.
| Проект | Плата | Основные детали | Открыть |
|---|---|---|---|
| Череп с внезапным испугом | Arduino Uno | PIR, сервопривод, 2 светодиода, зуммер | halloween-uno-jump-scare-skull |
| Автомат для конфет | Arduino Uno | HC-SR04, сервопривод, OLED SSD1306, зуммер | halloween-uno-candy-dispenser |
| Глаз, который следит за вами | Seeed XIAO ESP32-S3 | Seeed Round Display (GC9A01 + сенсор) | halloween-round-display-eye |
| Тыква-светильник Grove | Seeed XIAO ESP32-S3 | Grove RGB LED Ring, датчик света, PIR, пассивный зуммер | halloween-grove-pumpkin-ring |
| Портрет с привидением | ESP32 DevKit | Радар DFRobot C4001 mmWave, 2 светодиода, зуммер | halloween-c4001-haunted-portrait |
| Детектор призраков | M5Stack Core | встроенный LCD, кнопки и динамик | halloween-m5stack-ghost-detector |
| Тыква на светодиодной матрице | Pimoroni Stellar Unicorn | RGB-матрица 16x16, кнопки | halloween-stellar-unicorn-pumpkin |
Поиск по слову halloween на странице примеров
покажет все семь.
Фотография в начале пяти разделов — это иллюстрация того, как мог бы выглядеть готовый реквизит, сгенерированная с помощью ИИ. Все остальные изображения в этой статье — снимки примера, работающего в Velxio.
Как открыть и запустить любой из них
- Нажмите на ссылку проекта в таблице. Редактор откроется с платой, деталями, проводами и скетчем на своих местах.
- Нажмите зелёную кнопку Run на панели инструментов. Скетч скомпилируется на наших серверах (первая сборка для платы может занять минуту), а затем запустится в вашем браузере.
- Откройте монитор порта внизу. Каждый скетч выводит, что он делает, так что вы увидите реакцию реквизита даже с выключенным звуком.
- Щёлкните по датчику на холсте во время работы симуляции, чтобы открыть его панель. Именно там находятся ползунки расстояния, освещённости и присутствия.
1. Череп с внезапным испугом (Arduino Uno)

Иллюстрация готового реквизита, сгенерированная с помощью ИИ. Схема ниже — та, что работает в Velxio.
Классический реквизит для крыльца. PIR-датчик движения на D2 следит за дверным проёмом. Когда кто-то проходит мимо, два красных светодиодных глаза на D5 и D6 вспыхивают на полную яркость, сервопривод на D9 заставляет челюсть стучать четыре раза, а зуммер на D8 вопит сиреной, которая соскальзывает с 1,8 кГц вниз до рычания. Между посетителями глаза тлеют, как угли, а четырёхсекундная задержка не даёт черепу напугать одного и того же человека дважды подряд.

Чтобы попробовать, щёлкните по PIR-датчику на холсте. Выход переходит в HIGH на три секунды — именно так ведёт себя настоящий HC-SR501 с подстроечником задержки, выкрученным до минимума.
Весь испуг — это короткая функция. Обратите внимание, что tone() на Uno
использует 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)

Иллюстрация готового реквизита, сгенерированная с помощью ИИ. Схема ниже — та, что работает в Velxio.
Бесконтактная чаша для конфет. Ультразвуковой датчик HC-SR04 направлен вверх из-под лотка и ищет руку ближе 10 см. Когда он её находит, сервопривод открывает заслонку, выдаёт одну конфету и снова закрывает её, зуммер играет короткую мелодию, а OLED-дисплей SSD1306 отсчитывает оставшееся, с маленькой тыквой-светильником, нарисованной в углу. Когда запас заканчивается, экран показывает TRICK, и зуммер смеётся над вами вместо этого.

Щёлкните по HC-SR04 и перетащите ползунок расстояния ниже 10 см, чтобы протянуть руку. Затем скетч ждёт, пока руку уберут, так что одно движение — одна конфета, и никто не опустошит чашу, оставив руку на месте.
3. Глаз, который следит за вами (Seeed Round Display для XIAO)

Иллюстрация готовой пары глаз, сгенерированная с помощью ИИ. Пример в Velxio запускает один дисплей; пара — это два таких.
Глаза на круглых TFT-дисплеях были повсюду в прошлогоднем хэллоуинском хакатоне element14 — от напечатанных на 3D-принтере черепов до реквизитов, срабатывающих по радару. Этот использует Seeed Round Display для XIAO с XIAO ESP32-S3, установленной на его обратной стороне. 1,28-дюймовый GC9A01 показывает налитое кровью глазное яблоко с оранжевой радужкой.

Нажмите на стекло, и зрачок последует за вашим указателем. Продолжайте нажимать, и он сузится в кошачью щель. Отпустите — и он вернётся к тому, чтобы самостоятельно оглядывать комнату и моргать каждые несколько секунд.
Контроллер касаний — это CHSC6X на шилде, считываемый так же, как его читает собственный драйвер Seeed: падающий фронт на D7 означает, что палец опущен, а пятибайтовое чтение по I2C по адресу 0x2E возвращает позицию. Каждый кадр рисуется в закадровый спрайт и выталкивается на стекло за один раз, так что панель никогда не показывает наполовину нарисованный глаз. Перерисовывается только квадрат 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);
}
Выводы — собственные выводы шилда, поэтому один и тот же скетч работает на реальном стеке.
Для пары глаз соберите два: череп или вырезанная тыква принимает два Round Display в свои глазницы, каждый со своей XIAO, запускающей этот скетч. Они оглядываются и моргают независимо, что выглядит более живым, чем два глаза в идеальном синхроне.
4. Тыква-светильник Grove, которая просыпается в сумерках (Seeed XIAO ESP32-S3)

Иллюстрация готового реквизита, сгенерированная ИИ. Схема ниже — та, что работает в Velxio.
Четыре модуля Grove на XIAO ESP32-S3 образуют вставку для вырезанной тыквы. Датчик освещённости Grove держит 42-светодиодное кольцо Ultimate RGB LED Ring выключенным днём. Когда темнеет, кольцо мерцает оранжевым и жёлтым, как свеча, причём каждый светодиод горит своим пламенем. Когда PIR-датчик Grove видит кого-то, тыква становится одержимой: зелёно-фиолетовый вихрь закручивается по кольцу, а пассивный зуммер Grove играет несколько тактов жуткой мелодии.

Чтобы попробовать, щёлкните по датчику освещённости и перетащите его ползунок вниз, чтобы наступила ночь, затем щёлкните по PIR-датчику и сработайте им.

На реальном железе питайте кольцо от контакта 5 В платы XIAO (в примере разводка именно такая) и держите яркость низкой: 42 светодиода WS2813 на полной белой яркости потребляют гораздо больше, чем готов отдать USB-порт.
5. Портрет с привидениями (радар DFRobot C4001 mmWave)

Иллюстрация готового реквизита, сгенерированная ИИ. Схема ниже — та, что работает в Velxio.
Картина, чьи глаза следят за комнатой, — старый трюк с аттракционов, а радар делает его ещё лучше. DFRobot C4001 (SEN0610) — это 24-гигагерцевый датчик mmWave, который измеряет расстояние до человека, и его сигнал проходит прямо сквозь холст и деревянную раму. Спрятанный за картиной, он ничем себя не выдаёт.
Скетч переводит радар в режим скорости, где он сообщает и дальность, и присутствие. Чем ближе вы стоите, тем ярче горят два светодиодных глаза портрета и тем быстрее стучит сердце на зуммере — от одного удара каждые 1,5 секунды на шести метрах до почти трёх в секунду вблизи. Подойдите ближе одного метра — и он завопит.

Щёлкните по радару и перетащите ползунок расстояния, чтобы подойти к картине.
// 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; именно тогда на экран выплывает призрак, а динамик начинает трещать.

Три кнопки на передней панели — это элементы управления:
- A усиливает сканирование на три секунды, так что призраки появляются чаще.
- B делает снимок. Поймайте призрака, пока он на экране, и счётчик в углу увеличится.
- C включает и выключает звук.
Индикатор рисуется в 8-битный спрайт M5Canvas и выводится за один раз, что
не даёт стрелке мерцать. Полноэкранный 16-битный спрайт не поместился бы: у
Core Basic нет PSRAM.
7. Тыква на LED-матрице (Pimoroni Stellar Unicorn)
Последний проект — чистое украшение. 16x16 RGB-матрица Pimoroni Stellar Unicorn превращается в ребристую тыкву-светильник, чьи глаза, нос и зубчатый рот светятся от свечи внутри. Нажмите A для удара молнии, за которым прокручивается HAPPY HALLOWEEN, B — чтобы пустить призрака, плывущего по лицу, а LUX + и - задают яркость.

Лицо — это сетка 16 на 16 символов в скетче, по одной букве на светодиод, так что изменить выражение — вопрос редактирования текста.
Перенос на реальное железо
Скетчи написаны под те же библиотеки и контакты, которые вы использовали бы на столе, поэтому переход от симулятора к реальной сборке — в основном вопрос питания и механики:
- Серводвигатели создают импульсы тока, которые не нравятся 5-вольтовому стабилизатору Uno. Для черепа и раздатчика подайте на сервопривод отдельное питание 5 В и соедините земли.
- Настоящему PIR-датчику нужно около минуты, чтобы стабилизироваться после включения, и в течение этой минуты он несколько раз сработает сам по себе.
- Для светодиодного кольца подайте питание 5 В и держите
setBrightness()низкой, если у вас нет блока питания, рассчитанного на него. - C4001 видит сквозь тонкое дерево, картон и ткань, но не сквозь металл, так что учитывайте крепёж рамы.
Ограничения
- Радар, датчик освещённости и ультразвуковой датчик управляются ползунками. Они дают скетчу числа, которые выдал бы настоящий датчик, а не физическую сцену.
- Звук воспроизводится через браузер. Партии зуммера следуют частоте, которую выдаёт контакт; они не моделируют громкость или тембр настоящего пьезо.
- Откройте один из проектов, измените его и соберите версию, которая напугает ваше собственное крыльцо. Счастливого Хэллоуина.