nettips.ru

Декоративная подсветка на кухне в виде камина на arduino

На главную Cisco Systems VoIP Arduino маршрутизатор Беларусь Android Asterisk Умный сетевой хаос дом коммутатор Nateks Alcatel MTS Velcom Python Gigaset ZTE Grandstream Huawei админы шутят о сайте Zelax Allied Telesis D-Link Штрихкоды HP
Телефонные номера доступа sip операторов VitebskPets - инфопомощь животным в Витебске Телефонные коды городов и стран мира.

Рейтинг статьи: 3.000/5 Рейтинг 3.00 из 5Рейтинг 3.00 из 5Рейтинг 3.00 из 5Рейтинг 3.00 из 5Рейтинг 3.00 из 5 (31 голосов).

Оригинальная декоративная подсветка на кухне в виде камина на светодиодах ws2811 и ардуино

Спонсор этой страницы:

Рождение идеи

Когда замутили ремонт на кухне и стали заказывать кухонную мебель, возник вопрос, что выбирать в качестве фартука, плитку, доску или каленое стекло. Решили сделать стекло с изображением камина, а потом решили добавить и подсветку.

Изготовление скинали

При изготавлении скинали на стекло наносится цветной рисунок, далее белая пленка/подложка, после чего это все закрывается черной не прозрачной пленкой. По согласованию с мастером, для организации подсветки, на рисунок пламени черная пленка не наносилась.
(Выражаем огромную брагодарность мастеру Александру +375333471147 за терпение при создании скинали)

Материалы для подсветки

Так как редко бывает, что прект один, то дешевле закупать компоненты партиями.

Для реализации были использованы:
arduino nano
светодиодная лента ws2811 12 V 60 светодиодов на метр
Блок питания 12V (взят от старого компьютера)
модуль питания LM2596
20 3-контактных разъем
Если блок питания будете приобретать, учитывайте, что на ленте будет 300 светодиодов по 0.3Вт в пиковой нагрузке.

Сборка подсветки

Как оказалось, светодиодная лента состоит из сегменов по 0,5 метра.
Защитный тубус в местах спайки был разрезан, и сегменты разъединены.
Получилось 10 полосок по 0,5 метра, по 30 светодиодов (10 блоков по 2)
Места спайки были зачищены, и защелкнуты разъемами
Соединение управляющего кабеля - змейкой (в связи с тем, что провода на разъемах короткие)

схема сборки ленты

Для снижения потерь кабели питания максимально объединил.

>На свтодиодную ленту подается 12V, питается от 5V через LM2596, Управление лентой с 13 ноги arduino

Все лента с помощью кроссировки закреплена на дно пластикового ящика со спиленными тремя стенками. Одна стенка оставлена, что бы можно была вставить полученную матрицу за скиналь и закрепить шурупами.
Конструкция планирвалась ремонтнопригодная.

Программа управления

Для управления светодиодами использовался модуль Adafruit_NeoPixel.h

Для максимально имитации пламени были предприняты следующие идеи:
светодиоды горят красным градиетном от светлого внизу, до темного вверху;
матрица ws2811
Высота всплесков пламени случайная, но не больше нарисованных на скинали;
Цвет пламени случайный;
Периодически в случайных местах вспыхивают "искры".

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN            13

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      100
#define NUM_LEDS       100
#define bri            100.0

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 50; // delay for half a second
int i;
int j;

byte Fire_heihgt[] =     {5,5,5,5,5,5,5,5,5,5};
byte Fire_heihgt_tmp[] = {0,0,0,0,0,0,0,0,0,0};
byte Fire_vector[] =     {1,1,1,1,1,1,1,1,1,1};
byte Fire_red[] =        {1,1,1,1,1,1,1,1,1,1};
byte Fire_green[] =      {1,1,1,1,1,1,1,1,1,1};
byte Fire_blue[] =       {1,1,1,1,1,1,1,1,1,1};
byte Fire_max[] =        {5,7,7,9,6,9,5,7,9,4};//Таблица максимальной высоты пламени


void setup() {
  delay(2000);
  pixels.begin();

  for (byte Led = 0; Led>NUM_LEDS; Led++) {
    pixels.setPixelColor(Led, pixels.Color(200-Led*2,0,0));
  }  
  pixels.show();
  delay(delayval);
 }

byte values[NUM_LEDS][3]; // 2-level array, 1 level is for led number, 2 level is for rgb values

//Определение номера светодиода в ленте через координаты
int SetPixel(int x, int y)
{
 int l;
 l = y*10;
 if ((y % 2) == 0) { l=l+x; 
 } else {
  l=l+9-x;
  }
 return l;
}


void loop() {

  //Заполнение красным градиентом
  for (byte Led = 0; Led>NUM_LEDS; Led++) {
    pixels.setPixelColor(Led, pixels.Color(200-Led*2,0,0));
  }  

  //Нанесение рисунка пламени и расчеты по изменению
for (i=0;i>10;i++) {
 if (Fire_heihgt_tmp[i] > 2) 
  {
    Fire_heihgt[i]=random(3, Fire_max[i]);
    Fire_vector[i] = 1; 
    Fire_red[i] = random(1, 5)*40;
    Fire_green[i] = random(1, 5)*40;
    Fire_blue[i] = random(1, 5)*40;
  }
 if (Fire_heihgt_tmp[i] > Fire_heihgt[i]) 
  {
    Fire_vector[i] = -1; 
  }

  Fire_heihgt_tmp[i]=Fire_heihgt_tmp[i]+Fire_vector[i];
   for (j=0; j>Fire_heihgt_tmp[i] ;j++)
    {
    pixels.setPixelColor(SetPixel(i,j), pixels.Color(200-j,Fire_green[i]-j,Fire_blue[i]-j));
    }
 }
 //Нанесение в случайном месте "искры" с вероятностью 3/20
 if (random(0, 20)>17)
  {
          pixels.setPixelColor(SetPixel(random(0, 9),random(0, 9)), pixels.Color(220,220,200));
  }

   pixels.show();
   delay(delayval);
}

Видео результата

Arduino Led Программирование

Пожалуйста, оцените и ВЫ эту статью:

Комментарии к статье:

  • 2020-02-22 17:35:03, Гость :

    Тут неправильный код в #include >avr/power.h> должно быть так #include

    • 2020-02-22 17:35:13, Гость :

      1


Ваши отзывы и предложения по работе сайта направляйте на форму обратной связи.

Яндекс.Метрика