LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид
Покажу, как сделать потрясающую LED-фоторамку в форме сердца на Arduino. На первый взгляд — обычная рамка, но стоит нажать выключатель сзади — и она оживает. Отличный подарок на 14 февраля, день рождения или годовщину. Нужен простой фоторамку 18×13 см и кусок волокнистой плиты под её размер. На плите делают отверстия под 32 светодиода в форме сердца — по напечатанному шаблону дريلлют отверстия. Вставляют светодиоды с одной стороны, аноды (длинные ножки) наружу, чтобы согнуть и пропаять их вместе. После пайки проверяют каждый светодиод: +5 В через резистор 220 Ом на общий анод, земля — по очереди на каждый катод. Управление 32 светодиодами — через два драйвера TLC5940 (16-канальные, с ШИМ). Arduino Nano управляет ими по последовательному интерфейсу. Подробнее о TLC5940 — в отдельном туториале. На макетную плату устанавливают сокеты для TLC5940, пин-хедеры для Arduino Nano, дополнительные хэдеры для питания (VCC, GND) и два конденсатора для развязки. Много проводов — паяйте аккуратно. После сборки загружают скетч для проверки. Используем библиотеку TLC5940 (автор Alex Leone). После установки в файле В Пример stage 0: случайные адреса 0–31, зажигают по одному светодиоду с максимальной яркостью (4095), каждые 1.5 сек. После 8 светодиодов переход к stage 1. Stage 2: последовательно зажигают все 32 светодиода, пауза 0.5 сек, гасят все. Повторяют 7 раз. Stage 3: симметричное зажигание пар с краёв к центру и обратно. Stage 4: «бегущий огонь» с двух сторон к центру. Stage 5: плавное нарастание и угасание яркости всех светодиодов (ШИМ 0–4095). Stage 6: чередование чётных/нечётных светодиодов. Stage 7: «хвост» из 9 светодиодов с затухающей яркостью, движущийся по кольцу. Stage 8: финальное заполнение всех светодиодов, пауза 8 сек, сброс к stage 0. Светодиоды клеят к плите клеевым пистолетом. Коробку для электроники собирают из 4-х кусков волокнистой плиты. Подключают питание от выключателя и джека, вставляют фото, крепят коробку к рамке. Готово! Полное демо-видео ниже. Вопросы — в комментариях!Подготовка фоторамки



Схема подключения

Комплектующие
Сборка электроники


Код Arduino
tlc_config.h меняют NUM_TLCS на 2 (количество каскадированных драйверов). Теперь адреса светодиодов — 0–31.
setup() инициализируют TLC. В loop() реализовано 9 сцен (stage) с разными световыми эффектами через switch./* LED Heart Photo Frame - Arduino Project
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
#include "Tlc5940.h"
int stage = 0;
int randomNumber;
int count = 0;
int brightness = 3500;
int brightUp = 50;
int dir = 1;
void setup() {
Tlc.init();
}
void loop() {
switch(stage) {
case 0:
randomNumber = (int)random(0,31);
Tlc.set(randomNumber, 4095);
delay(1500);
Tlc.update();
if(count >= 8) { stage = 1; count = 0; }
else { ++count; }
break;
case 1:
delay(75);
for(int i=31; i>=0; i--) {
Tlc.set(i, 4095);
delay(100);
Tlc.update();
}
delay(500);
Tlc.clear(); Tlc.update();
stage = 2; delay(500);
break;
case 2:
for(int i=0; i<=31; i++) Tlc.set(i, 4095);
Tlc.update(); delay(500);
Tlc.clear(); Tlc.update(); delay(350);
if(count > 6) { stage = 3; count = 0; }
else { ++count; }
break;
case 3:
for(int i=0; i<=15; i++) {
Tlc.set(i, 4095); Tlc.set(31-i, 4095); Tlc.update(); delay(70);
}
delay(50);
for(int i=15; i>=0; i--) {
Tlc.set(i, 0); Tlc.set(31-i, 0); Tlc.update(); delay(70);
}
for(int i=15; i>=0; i--) {
Tlc.set(i, 4095); Tlc.set(31-i, 4095); Tlc.update(); delay(70);
}
for(int i=0; i<=15; i++) {
Tlc.set(i, 0); Tlc.set(31-i, 0); Tlc.update(); delay(70);
}
delay(50);
Tlc.clear(); Tlc.update(); delay(100);
if(count > 1) { stage = 4; count = 0; }
else { ++count; }
break;
case 4:
for(int i=15; i>=count; i--) {
Tlc.set(32-i, 4095); Tlc.update(); delay(5);
Tlc.set(32-i-1, 0); Tlc.update(); delay(5);
Tlc.set(i, 4095); Tlc.update(); delay(5);
Tlc.set(i+1, 0); Tlc.update(); delay(50);
}
if(count > 15) { Tlc.set(16, 4095); Tlc.update(); delay(2000); stage = 5; count = 0; }
else { ++count; }
break;
case 5:
for(int i=0; i<=31; i++) { Tlc.set(i, brightness); Tlc.update(); }
Tlc.update();
brightness += brightUp;
if(brightness >= 3500) { brightUp = -50; ++count; }
if(brightness <= 150) { brightUp = 50; }
if(count > 6) { stage = 6; count = 0; brightness = 3500; Tlc.clear(); Tlc.update(); }
delay(40);
break;
case 6:
for(int i=0; i<=30; i+=2) { Tlc.set(i, 4095); Tlc.set(i+1, 0); }
Tlc.update(); delay(500);
for(int i=0; i<=30; i+=2) { Tlc.set(i, 0); Tlc.set(i+1, 4095); }
Tlc.update(); delay(500);
if(count > 20) { stage = 7; count = 0; }
else { ++count; }
break;
case 7:
for(int i=31; i>=16; i--) {
Tlc.clear(); Tlc.update(); delay(2);
Tlc.set(i, 4095); Tlc.set(i+1, 2000); Tlc.set(i+2, 1000); Tlc.set(i+3, 500);
Tlc.set(i+4, 300); Tlc.set(i+5, 200); Tlc.set(i+6, 100); Tlc.set(i+7, 50);
Tlc.set(i+8, 0); Tlc.set(i-16, 4095); Tlc.set(i-15, 2000); Tlc.set(i-14, 1000);
Tlc.set(i-13, 500); Tlc.set(i-12, 300); Tlc.set(i-11, 200); Tlc.set(i-10, 100);
Tlc.set(i-9, 50); Tlc.set(i-8, 0); Tlc.update(); delay(50);
}
if(count > 8) {
for(int i=31; i>=0; i--) { Tlc.set(i, 4095); Tlc.update(); delay(50); }
stage = 8; count = 0;
} else { ++count; }
break;
case 8:
for(int i=31; i>=0; i--) {
Tlc.set(i+8, 4095); Tlc.set(i+7, 2000); Tlc.set(i+6, 1000); Tlc.set(i+5, 500);
Tlc.set(i+4, 300); Tlc.set(i+3, 200); Tlc.set(i+2, 100); Tlc.set(i+1, 50);
Tlc.set(i, 0); Tlc.update(); delay(50);
}
for(int i=31; i>=0; i--) { Tlc.set(i, 4095); }
Tlc.update(); delay(10);
if(count > 8) { delay(8000); Tlc.clear(); Tlc.update(); stage = 0; count = 0; }
else { ++count; }
break;
}
}Финальные штрихи


Производственный процесс
- Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
- Надежный ИК-датчик пульса на Arduino: пошаговое руководство
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino
- Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun
- Arduino RGB-микшер цветов: Простой проект для начинающих
- DIY Arduino Radionics EMR Treatment Device — радионическое устройство