DIY POV-сфера: LED-световизуализация на Arduino Mega
Компоненты и материалы
- Arduino Mega 2560 — 1 шт.
- Adafruit NeoPixel Ring (WS2812 5050 RGB LED) — 1 шт. (58 LED на полусферу, всего 116)
- Резистор 330 Ом — 1 шт. (на линию данных)
- Датчик приближённости (Hall-сенсор или оптический) — 1 шт. (синхронизация)
- DC-мотор — 1 шт.
- Подшипник 625 2RS (5×16×5 мм) — 1 шт.
- 3D-печатанные детали (корпус, держатели) — 1 комплект
Инструменты
- 3D-принтер
- Паяльник
О проекте
POV (Persistence of Vision) — эффект «задержки зрения». Любая лампа на переменном токе мерцает 50/60 Гц, но мозг видит постоянный свет. Используя один ряд быстро вращающихся LED, можно «нарисовать» сферическое изображение.
Используется 58 LED на полусферу (всего 116). Круг печатается на 3D-принтере. Подробности — в видео.
Код
Скетч d_nya.ino использует библиотеку FastLED. Массив kalp[40][75] хранит кадры анимации (сердечко и др.). Прерывание от датчика Холла (пин 3, INT1) синхронизирует вывод кадров с вращением.
#include "FastLED.h"
#define NUM_LEDS 58
#define DATA_PIN 6
unsigned char i, m;
unsigned int wait = 1;
unsigned int wait2 = 10;
byte hall = 0;
CRGB leds[NUM_LEDS];
// 40 кадров × 75 столбцов — битмап анимации
bool kalp[40][75] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
// ... (остальные 38 строк массива опущены для краткости)
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
void setup() {
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
attachInterrupt(1, LEDiyak, RISING); // INT1 на пине 3 (Mega)
for (int i = 0; i < 58; i++) leds[i] = CRGB::Black;
FastLED.show();
}
void LEDiyak() {
hall++;
if (hall > 2) hall = 0;
}
void loop() {
if (hall > 0) {
for (m = 0; m < 75; m++) {
for (i = 0; i < 40; i++) {
if (kalp[i][m] == 1) leds[i + 7] = CRGB::Green;
else leds[i + 7] = CRGB::Blue;
}
FastLED.show();
delayMicroseconds(wait);
}
// заполнение остальных LED
for (int i = 0; i < 58; i++) leds[i] = CRGB::Blue;
FastLED.show(); delayMicroseconds(wait2);
for (int i = 0; i < 58; i++) leds[i] = CRGB::White;
FastLED.show(); delayMicroseconds(wait2);
}
}
Схемы

Производственный процесс
- Arduino POV-часы: сборка дисплея на эффекте сохранения образа
- Визитка-PCB с игрой «Крестики-нолики» 4×4: руководство по проектированию, сборке и программированию
- Многопозиционная система датчиков температуры для интеграции в умный дом
- DIY-контроллер паяльника 862D+ — точность и надёжность
- MotionSense: умная система обнаружения проникновения на Arduino и ESP8266
- Пожарная безопасность 3D-принтера: умная система обнаружения дыма
- Сборка портативного дисплея на основе эффекта сохранения изображения с Arduino UNO и ATtiny85
- Веб-управляемый IoT-индикатор на Arduino, Yaler и IFTTT
- Магнитная левитация на отталкивании с Arduino: Простая схема и DIY-руководство
- CoroFence: термический детектор на GridEye + PIR с IoT