DIY Теневой театр на Arduino и адресной LED-ленте: световое шоу к праздникам
Компоненты и материалы
| Arduino 101 (встроенный BLE) | 1 |
| Адресная RGB-лента (SparkFun или любая WS2812B) | 1 |
| Разъемы barrel jack (male + female) | 1+1 |
| Короб для 3×AA с выключателем (SparkFun) | 1 |
| AA батарейки | 3 |
| Step-up преобразователь 12В (Pololu) — питание Arduino 101 от тех же батарей | 1 |
| Обычная бумага A4 (4 листа) — шаблоны фом-кора | 1 |
| Картон 100 lb (4 листа A4) — силуэты и домики | 1 |
| Фом-кор 3/16" (4 листа 8.5×11") — сцена | 1 |
Инструменты
- Клеевой пистолет, паяльник
- Канцелярский нож (X-Acto) + запасные лезвия #11
- Обкусыватель, отвертка под клеммы barrel jack
- Принтер (печать на картоне)
Приложения и библиотеки
- Arduino IDE
- Blynk (iOS/Android) — управление по BLE
- Библиотека Adafruit NeoPixel
- Библиотека Blynk (BLE)
О проекте
Обзор
Arduino 101 + адресная LED-лента + фом-кор + картон = телефонно-управляемый анимированный теневой театр. Электроника не повреждается — потом можно переиспользовать. Wishlist SparkFun с 99% электроники.
Принцип: Лента наматывается на фом-кор в центре сцены. Нижние LED (под сгибом) последовательно зажигаются и светят через отверстия-дырочки — создается анимация «падающего снега». Средние LED направлены в домики наверху (задний и передние). Последний LED (хвост ленты) светит на всю сцену — создает главный тень.
Arduino 101 имеет BLE. Управление через Blynk: цвет в домиках, мерцание огня, яркость главного света.
Часть 1: Электроника
- Отрежьте концевой разъем ленты (~1 см), обделайте провода.
- Припаяйте к зеленому и желтому проводам прямые pin-разъемы (для Arduino).
- Красный провод → VIN стабилизатора Pololu. В GND и VOUT стабилизатора впаяйте pin-разъемы.
- Barrel jack male: красный → +, черный → - (от батарейника). Закрутите клеммы.
- Barrel jack female: желтый → -, красный → + (от начала ленты).
- Подключение к Arduino 101: зеленый → D6, желтый → GND (у пина 13). Стабилизатор: GND → GND, VOUT → Vin Arduino. Не перепутайте! Обратная полярность = дым и запах жженого.
Часть 2: Сборка сцены из фом-кора
- Распечатайте шаблоны фом-кора (4 листа А4) и картона (4 листа). Вырежьте детали фом-кора по контурам (ножом переносите линии).
- Соберите держатель ленты: наклейте первый LED на дно, намотайте ленту змейкой (3 витка), хвост оставьте свободным, верх зафиксируйте.
- Нумерация LED: адресные LED нумеруются от 0. Нижние (анимация) — например, 0,1,2, 20,21,22, 40,41,42. Между сгибом и первым делителем — LED для заднего домика (23). Перед вторым делителем — «огненный» LED (24/25). Сделайте карту нумерации под вашу ленту!
- Приклейте держатель на основание фом-кора (центр по длине). Приклейте боковые изогнутые стенки.
- Установите световые перегородки (большую у сгиба, меньшую выше — между ними минимум 1 LED). Приклейте верхнюю крышку.
- Последний LED ленты приклейте на верхний передний край — это главный теневоющий свет.
Часть 3: Прошивка и Blynk
- Подключите USB, соберите схему (батарейник ВЫКЛ). Нужен Arduino IDE с ядром Intel Curie, библиотеки Adafruit NeoPixel и Blynk.
- В скетче поменяйте номера LED под вашу карту:
int pos[] = {0,1,2,20,21,22,40,41,42};— анимационные LED (порядок = направление снега)int numLeds = 9;int shadowPixel = 59;(последний на 60-LED ленте)int lightHousePixel = 23;(между перегородками)int firePixel = 24;(перед меньшей перегородкой)
- Компилируйте, загрузите, отключите USB, включите батарейник. Должен загореться shadowPixel, анимация побежит. Домики и огонь — по Blynk.
- Blynk: установите приложение, нажмите «Scan», отсканируйте QR-код из проекта — интерфейс загрузится сам (BLE виджет + 3 слайдера V0/V1/V2 0-100). Или создайте вручную.
- В Blynk: подключитесь к «ShadowTheatre», нажмите Play. После сна телефона может потребоваться переподключение.
Часть 4: Картонные силуэты и финал
- Вырежьте фоновый силуэт из картона (острое лезвие! Меняйте часто).
- Соберите домики: заднюю стенку на клей, лицевую сторону — наружу (без чернил).
- Установите домики на сцену (клей/скотч), задевайте щели — свет должен идти внутрь, а не боком.
- Согните боковые части силуэта, приклейте низ к заднему краю основания (печатная сторона от зрителя).
- Снежная сцена на задней стенке: вырежьте узоры/дырочки (зубчики, зубочистки, сложные вырезки). Приклейте на изогнутые края — проекционный экран.
- Приклейте левую и переднюю стенки. Правую — на скотч (чтобы добраться к выключателю батарейника).
Готово! Найдите темное место со стеной. При включении — тень сцены + падающий снег. В Blynk управляйте главным светом, домиками, огнем.
Скетч (Arduino)
/* Copyright (c) 2016 Intel Corporation. GNU LGPL v2.1+ */
/////////////////////// НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ ///////////////////////
int pos[] = {0, 1, 2, 20, 21, 22, 40, 41, 42}; // LED для анимации снега
int numLeds = 9;
int shadowPixel = 59; // главный теневоющий LED (последний)
int lightHousePixel = 23; // LED в заднем домике
int firePixel = 24; // LED для огня в передних домиках
///////////////////////////////////////////////////////////////////////
#include <Adafruit_NeoPixel.h>
#include <BlynkSimpleCurieBLE.h>
#include <CurieBLE.h>
#define PIN 6
int v0=0, v1=0, v2=0; // значения из Blynk
int fadeup=0, fadedown=0;
int firetimer=0, fireinterval=50, flicker=0;
unsigned long lightcounter=0, timer=0;
int stp=0, stpOld=0, interval=350;
char auth[] = "YourAuthToken"; // для BLE не используется, но оставьте
BLEPeripheral blePeripheral;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); // 60 = длина ленты
void setup() {
delay(1000);
timer = millis();
strip.begin(); strip.show();
blePeripheral.setLocalName("ShadowTheatre");
blePeripheral.setDeviceName("ShadowTheatre");
blePeripheral.setAppearance(384);
Blynk.begin(auth, blePeripheral);
blePeripheral.begin();
interval = 350;
}
void loop() {
Blynk.run();
blePeripheral.poll();
// Главный тень (shadowPixel) — теплый белый, яркость по V2
strip.setPixelColor(shadowPixel, 200-v2, 160-v2, 160-v2);
// Огонь (firePixel) — мерцание
if (millis() - firetimer > fireinterval) {
firetimer = millis();
flicker = random(0, 40);
}
if (v0 > 1) strip.setPixelColor(firePixel, 80+v0+flicker, v0+flicker, 0);
else strip.setPixelColor(firePixel, 0,0,0);
// Свет в заднем домике (lightHousePixel)
if (v1 > 1) strip.setPixelColor(lightHousePixel, 200-v1, v1, 0);
else strip.setPixelColor(lightHousePixel, 0,0,0);
// Анимация снега
if (millis() - timer > interval) {
stpOld = stp;
timer = millis();
lightcounter++;
stp = lightcounter % numLeds;
fadeup = 0; fadedown = 170;
}
fadeup += 2; fadeup = constrain(fadeup, 0, 170);
fadedown -= 2; fadedown = constrain(fadedown, 0, 170);
for (int i=0; i
Шаблоны для резки (Schematics)
- Фом-кор: 4 листа А4 — распечатайте, перенесите ножом, вырежьте.
- Картон: 4 листа A4 — домики, боковины, силуэты.
- Векторный SVG для лазерной/виниловой резки:
30bn6Le68V1Lpp2spRMw.svg
Производственный процесс
- Эволюция и мастерство новогодних гирлянд: от древних традиций к современной инженерии
- Светодиоды (LED): от зарождения к 100-летнему ресурсу
- Проект Arduino: мелодия Coffin Dance — сборка и воспроизведение вирусного трека
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- DIY-костюм «Облако»: LED-лента, Arduino Nano и детали SparkFun
- Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Умная бутылка для воды на Arduino: мониторинг и напоминания в реальном времени
- Звукоактивируемый светодиодный дисплей 8 LED на Arduino
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino