Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Покажу, как сделать потрясающую LED-фоторамку в форме сердца на Arduino. На первый взгляд — обычная рамка, но стоит нажать выключатель сзади — и она оживает. Отличный подарок на 14 февраля, день рождения или годовщину.

Подготовка фоторамки


LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Нужен простой фоторамку 18×13 см и кусок волокнистой плиты под её размер. На плите делают отверстия под 32 светодиода в форме сердца — по напечатанному шаблону дريلлют отверстия.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Вставляют светодиоды с одной стороны, аноды (длинные ножки) наружу, чтобы согнуть и пропаять их вместе.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

После пайки проверяют каждый светодиод: +5 В через резистор 220 Ом на общий анод, земля — по очереди на каждый катод.

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


Управление 32 светодиодами — через два драйвера TLC5940 (16-канальные, с ШИМ). Arduino Nano управляет ими по последовательному интерфейсу. Подробнее о TLC5940 — в отдельном туториале.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Комплектующие


  • Arduino Nano
  • Сверхяркие красные светодиоды (32 шт.)
  • Выключатель
  • Джек питания
  • Блок питания 5 В >1 А
  • 2 × TLC5940 LED Driver
  • 2 × резистора 2 кОм
  • Конденсаторы 1 мкФ и 0.1 мкФ

Сборка электроники


На макетную плату устанавливают сокеты для TLC5940, пин-хедеры для Arduino Nano, дополнительные хэдеры для питания (VCC, GND) и два конденсатора для развязки.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Много проводов — паяйте аккуратно. После сборки загружают скетч для проверки.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Код Arduino


Используем библиотеку TLC5940 (автор Alex Leone). После установки в файле tlc_config.h меняют NUM_TLCS на 2 (количество каскадированных драйверов). Теперь адреса светодиодов — 0–31.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

В setup() инициализируют TLC. В loop() реализовано 9 сцен (stage) с разными световыми эффектами через switch.

Пример 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.

/* 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;
  }
}

Финальные штрихи


Светодиоды клеят к плите клеевым пистолетом. Коробку для электроники собирают из 4-х кусков волокнистой плиты.

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Подключают питание от выключателя и джека, вставляют фото, крепят коробку к рамке. Готово!

LED фоторамка в форме сердца на Arduino: пошаговый DIY-гид

Полное демо-видео ниже.

Вопросы — в комментариях!

Производственный процесс

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