ARDUINO Огненый светильник. Обсуждение проекта

VIt-Wap

✩✩✩✩✩✩✩
9 Мар 2019
5
2
Просто я действительно не понимаю, как оно так работает??? Какая конкретно мелкосхема получает сигнал первой и котокая будет следующей???
Работает все параллельно. все ленты получают одинаковый сигнал и включают одинаковые светодиоды, если я правильно понял вопрос.
По поводу подключения каждого отрезка на свой пин ардуино, хорошая идея, можно написать более сложные и интересные эффекты, но думаю потребует значительной переделки кода ну и кончено знаний в программировании :) Если кто возьмется это сделать, получит большой и жирный плюс в карму :)
Хотел бы видеть имитацию "Лавовой лампы" на этом светильнике... Светлячки как по мне, слишком банальны. Хоть бы уже цвет меняли... что ли. Я к сожалению в программировании ноль.
 
Изменено:

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
Работает все параллельно. все ленты получают одинаковый сигнал и включают одинаковые светодиоды, если я правильно понял вопрос.
По поводу подключения каждого отрезка на свой пин ардуино, хорошая идея, можно написать более сложные и интересные эффекты, но думаю потребует значительной переделки кода ну и кончено знаний в программировании :) Если кто возьмется это сделать, получит большой и жирный плюс в карму :)
Хотел бы видеть имитацию "Лавовой лампы" на этом светильнике... Светлячки как по мне, слишком банальны. Хоть бы уже цвет меняли... что ли. Я к сожалению в программировании ноль.
Да вопрос именно в этом и заключался..
Просто почему не объявить 1-2-3-4 ленты, каждая на своём пине, каждая может иметь свою длину и тд...
И дальше уже всё зависит от фантазии программиста, что куда бежит (вверх, вниз или по кругу) и каким цветом.
Ну например как-то так...
#define PIN_1 6 // пин DI
#define NUM_LEDS_1 10 // число диодов
#define PIN_2 7 // пин DI
#define NUM_LEDS_2 20 // число диодов
#define PIN_3 8 // пин DI
#define NUM_LEDS_3 30 // число диодов
#define PIN_4 9 // пин DI
#define NUM_LEDS_4 40 // число диодов
#include "Adafruit_NeoPixel.h"
Adafruit_NeoPixel strip_1 = Adafruit_NeoPixel(NUM_LEDS_1, PIN_1, NEO_BRG + NEO_KHZ800);
Adafruit_NeoPixel strip_2 = Adafruit_NeoPixel(NUM_LEDS_2, PIN_2, NEO_BRG + NEO_KHZ800);
Adafruit_NeoPixel strip_3 = Adafruit_NeoPixel(NUM_LEDS_3, PIN_3, NEO_BRG + NEO_KHZ800);
Adafruit_NeoPixel strip_4 = Adafruit_NeoPixel(NUM_LEDS_4, PIN_4, NEO_BRG + NEO_KHZ800);
void setup() {
strip_1.begin();
strip_2.begin();
strip_3.begin();
strip_4.begin();
strip_1.setBrightness(50); // яркость, от 0 до 255
strip_2.setBrightness(100); // яркость, от 0 до 255
strip_3.setBrightness(150); // яркость, от 0 до 255
strip_4.setBrightness(200); // яркость, от 0 до 255
strip_1.show(); // отправить на ленту 1
strip_2.show(); // отправить на ленту 2
strip_3.show(); // отправить на ленту 3
strip_4.show(); // отправить на ленту 4
}
void loop() {
for (int i = 0; i < NUM_LEDS_1; i++ ) { //
strip_1.setPixelColor(i, 0xff0000); // залить красным
}

for (int i = 0; i < NUM_LEDS_2; i++ ) { //
strip_2.setPixelColor(i, 0x00FF00); // залить green
}

for (int i = 0; i < NUM_LEDS_3; i++ ) { //
strip_3.setPixelColor(i, 0x0000FF); // залить blue
}

for (int i = 0; i < NUM_LEDS_4; i++ ) { //
strip_4.setPixelColor(i, 0xffFF00); // залить белый
}
strip_1.show(); // отправить на ленту 1
strip_2.show(); // отправить на ленту 2
strip_3.show(); // отправить на ленту 3
strip_4.show(); // отправить на ленту 4
delay(50);
}
 

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
@Dmitry Markov, Ты не понимаешь, более того, тебя коробит! Хороший повод взять и разобраться как оно работает.
Вот, читай: https://alexgyver.ru/ws2812_guide/
Уважаемый модератор, мы разве с вами уже вместе выпивали???
А "коробит" потому, что на самом деле не известно, на какой конкретно диод уходит сигнал.
Поэтому и пишу, что такое соединение не совсем корректно.
При этом я ни коим образом, не хотел никого обидеть.
И если уж кого обидел, то извиняюсь.
 

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
нашел ремейк в инете...
https://www.ionline.by/diy/arduino/...vam-proekta-aleksa-gajvera-remejk-12-02-2019/

Делитесь своими 3д файлами)
Там я не совсем понимаю под что сделан разъем круглый?

Посмотреть вложение 3095Посмотреть вложение 3096
Наверное под кабель питания. Сам напечатал и не понял сначала :)
 

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
Alex. а зачем в проекте исполользуется патченная либа FastLED вместо стандартной от Daniel Garcia?
 

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
Да вопрос именно в этом и заключался..
Просто почему не объявить 1-2-3-4 ленты, каждая на своём пине, каждая может иметь свою длину и тд...

[skip]
delay(50);
}
не нужно там от разных пинов. все 4 отрезка включаются последовательно по data-линии. просто в софте переделать адресацию диодов и все дела.
но надо переписывать эффекты.
сделаю - закину сюда.
 

Zvagon

✩✩✩✩✩✩✩
18 Апр 2019
1
0
Здравствуйте, подскажите пожалуйста. Собрал светильник, залил прошивку на ардуино нано, лента горит белым светом и на кнопку никак не реагирует. Хотя эта же лента прекрасно работает в динамической подсветке монитора. Прошивка залилась без ошибок и сбоев.
 

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
не нужно там от разных пинов. все 4 отрезка включаются последовательно по data-линии. просто в софте переделать адресацию диодов и все дела.
но надо переписывать эффекты.
сделаю - закину сюда.
Да, спасибо. Можно конечно и так.
Я собрал на попробовать... Использовал одну ленту ws2811 и профиль не квадратного а круглого сечения, лента намотана по спирали.
Ну как бы ничего.. Красиво.
 

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
Переделал проект, 4 отрезка ленты включены последовательно, что дает возможность управлять любым пикселем в любой ленте отдельно, что определенно дает больше возможностей для эффектов. Отрезки включены так - (1) IN внизу (1) OUT вверху соединяем с (2) IN внизу и так далее.
Добавил:
- совершенно новый эффект огня, который похож на огонь в отличии от существующего :)
- снежинки падающие
Модифицировал светящихся жучков, сейчас они независимо по 4 лентам бегают.
Для конкретных размеров меняем (у меня 4 отрезка по 24 LED):
#define X_NUM_LEDS 24 // num leds in strip
#define X_NUM_STRIPS 4 // num strips

тут обязательно 1 оставляем
#define NUM_STRIPS 1

Файлы проекта прикреплены.


Небольшой видосик с новым эффектом тут: Fire Effect



Алексу спасибо за идею и за исходный код.

Всем добра :)
 

Вложения

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
Переделал проект, 4 отрезка ленты включены последовательно, что дает возможность управлять любым пикселем в любой ленте отдельно, что определенно дает больше возможностей для эффектов. Отрезки включены так - (1) IN внизу (1) OUT вверху соединяем с (2) IN внизу и так далее.
Добавил:
- совершенно новый эффект огня, который похож на огонь в отличии от существующего :)
- снежинки падающие
Модифицировал светящихся жучков, сейчас они независимо по 4 лентам бегают.
Для конкретных размеров меняем (у меня 4 отрезка по 24 LED):
#define X_NUM_LEDS 24 // num leds in strip
#define X_NUM_STRIPS 4 // num strips

тут обязательно 1 оставляем
#define NUM_STRIPS 1

Файлы проекта прикреплены.


Небольшой видосик с новым эффектом тут: Fire Effect



Алексу спасибо за идею и за исходный код.

Всем добра :)
С моей стороны однозначно респект и уважуха.
Единственное, что я, наверно 2-й и 4-й отрезок ленты ставил бы IN - сверху, а OUT - снизу, мне кажется что так, меньше возни с проводами. При этом кусок кода выглядел бы наверное как-то так (только радуга):

// ****************************** РАДУГА ******************************
void rainbow() {
hue += 2;
byte u;
// for (byte i = 0; i < NUM_LEDS; i++)
for (byte i = 0; i < X_NUM_LEDS; i++)
u=i
leds = CHSV((byte)(hue + i * float(255 / NUM_LEDS)), 255, 255);
leds[2*X_NUM_LEDS-1-u] = CHSV((byte)(hue + i * float(255 / NUM_LEDS)), 255, 255);
leds[2*X_NUM_LEDS+u] = CHSV((byte)(hue + i * float(255 / NUM_LEDS)), 255, 255);
leds[4*X_NUM_LEDS-1-u] = CHSV((byte)(hue + i * float(255 / NUM_LEDS)), 255, 255);
}

На практике правда не проверял...
Но ты пошёл гораздо дальше и потому ещё раз респект и уважуха.
И в данном конкретном случае, у меня вопрос - как проложен провод-кабель от 1-го OUT ко 2-му IN???
Я имею ввиду, что сильно ли ты заморачивался длиной этого провода.
Или как вариант первого вопроса второй - какой максимальной длины кабель приходилось использовать, интересует расстояние от контроллера до ленты.
Ну и за одно уже

Serial.begin(9600);
Serial1.begin(9600);
это чего???
 
  • Лойс +1
Реакции: Diman

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
С моей стороны однозначно респект и уважуха.
Единственное, что я, наверно 2-й и 4-й отрезок ленты ставил бы IN - сверху, а OUT - снизу, мне кажется что так, меньше возни с проводами. При этом кусок кода выглядел бы наверное как-то так (только радуга):

[skip]

На практике правда не проверял...
Но ты пошёл гораздо дальше и потому ещё раз респект и уважуха.
И в данном конкретном случае, у меня вопрос - как проложен провод-кабель от 1-го OUT ко 2-му IN???
Я имею ввиду, что сильно ли ты заморачивался длиной этого провода.
Или как вариант первого вопроса второй - какой максимальной длины кабель приходилось использовать, интересует расстояние от контроллера до ленты.
Ну и за одно уже


Serial.begin(9600);
Serial1.begin(9600);
это чего???
На самом деле такое расположение лент упрощает несколько рендер картинки на ленту, так как порядок следования сохраняется и нужно только добавлять офсет кратный длине куска ленты чтобы получить реальную позицию в следующей колонке (ленте). Можно конечно сделать как ты предлагаешь, но это лишние полчаса кодинга. Проще и быстрее прокинуть провод сверху вниз. Длина тут роли не играет, скорость света решает все проблемы с задержками :)
Выглядит это так, и совершенно не мешает
photo_2019-04-20_23-06-26.jpg

А про Serial1 - я собирал это на Pro Micro , он на ATmega32u4, там есть независимый от USB порт, который я планирую использовать для управления лампой. Подключить ESP8266 и рулить лампой с умного дома по MQTT. Но это в планах, думаю завтра сделаю :)
 
  • Лойс +1
Реакции: viktorM и Dmitry Markov

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
На самом деле такое расположение лент упрощает несколько рендер картинки на ленту, так как порядок следования сохраняется и нужно только добавлять офсет кратный длине куска ленты чтобы получить реальную позицию в следующей колонке (ленте). Можно конечно сделать как ты предлагаешь, но это лишние полчаса кодинга. Проще и быстрее прокинуть провод сверху вниз. Длина тут роли не играет, скорость света решает все проблемы с задержками :)
Выглядит это так, и совершенно не мешает
Посмотреть вложение 3129

А про Serial1 - я собирал это на Pro Micro , он на ATmega32u4, там есть независимый от USB порт, который я планирую использовать для управления лампой. Подключить ESP8266 и рулить лампой с умного дома по MQTT. Но это в планах, думаю завтра сделаю :)
Я повторяю-интерпритирую этот проект для своего кореша. Делаю два фонаря. Они будут стоять у него на колонках, которые стоят справа слева от муз.центра. Поэтому я и задавал вопрос о длине провода от контроллера до ленты. Дилема-вопрос собственно в том, что подключать две ленты к одному контроллеру (тогда лампы привязаны к кабелю), или поставить в каждую лампу по контроллеру??? Поскольку всё это связано с музыкой, буду прицеплять ещё режимы типа свето-цвето-музыки. Т.к. колба-стакан-лампа у меня достаточно высокие, думаю получится неплохо.
Правда пока нет всех деталей. Жду сенсорные кнопки, пока подключена обычная кнопка и она сцукко "дребезжит", и т.н. электретные микрофоны.
Уже скоро два месяца будет как отправлено... всё в дороге...
 

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
Я повторяю-интерпритирую этот проект для своего кореша. Делаю два фонаря. Они будут стоять у него на колонках, которые стоят справа слева от муз.центра. Поэтому я и задавал вопрос о длине провода от контроллера до ленты. Дилема-вопрос собственно в том, что подключать две ленты к одному контроллеру (тогда лампы привязаны к кабелю), или поставить в каждую лампу по контроллеру??? Поскольку всё это связано с музыкой, буду прицеплять ещё режимы типа свето-цвето-музыки. Т.к. колба-стакан-лампа у меня достаточно высокие, думаю получится неплохо.
Правда пока нет всех деталей. Жду сенсорные кнопки, пока подключена обычная кнопка и она сцукко "дребезжит", и т.н. электретные микрофоны.
Уже скоро два месяца будет как отправлено... всё в дороге...
Я бы сделал контроллер в каждой лампе, плюс командный процессор отдельно, и завязал все это по Wi-Fi.
Впрочем как всегда все это уже сделано до нас.
Вот тут как раз то что ты хочешь.
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,162
414
Москва
wan-derer.ru
@Dmitry Markov, Т.к. эта проблема не относится к типичным, то вряд ли тебе здесь ответят наверняка. Поэтому твой путь - эксперимент. Ничто не мешает тебе взять контроллер, ленту, соединить их 3-метровым кабелем и испытать.
В группе товарищ делал подсветку лестницы на адреске, тоже мучился с длинными проводами, в конце концов как-то победил.
А вообще, непонятно в чём суть вопроса. Сэкономить 200 руб?
 

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
@Dmitry Markov, Т.к. эта проблема не относится к типичным, то вряд ли тебе здесь ответят наверняка. Поэтому твой путь - эксперимент. Ничто не мешает тебе взять контроллер, ленту, соединить их 3-метровым кабелем и испытать.
В группе товарищ делал подсветку лестницы на адреске, тоже мучился с длинными проводами, в конце концов как-то победил.
А вообще, непонятно в чём суть вопроса. Сэкономить 200 руб?
Спасибо.
 

Dmitry Markov

✩✩✩✩✩✩✩
9 Апр 2019
10
1
Рига, Латвия
Я бы сделал контроллер в каждой лампе, плюс командный процессор отдельно, и завязал все это по Wi-Fi.
Впрочем как всегда все это уже сделано до нас.
Вот тут как раз то что ты хочешь.
Боюсь что если всё это навесить на ардуино нано, то она уйдёт в себя и не вернётся....
Поставлю по одной в каждый светильник...
Только вчера жалился что деталей нет, а оно сегодня раз, и пришло...
Ща буду опыты ставить.
 

Kyrios

✩✩✩✩✩✩✩
24 Апр 2019
2
0
Собрал,не коротит,питание на всех лентах,прошита Дуина,блок питания-лабораторный.но не работает. Реагирует сенсор и и светится индикатор ардуины- все.Лампы не светятся.Алекс говорил ,что подпаиваться можно где угодно,я не правильно понял-не на любой высоте отрезка ленты?Может по этому?
 

Bespilotnik

✩✩✩✩✩✩✩
25 Апр 2019
2
0
Переделал проект, 4 отрезка ленты включены последовательно, что дает возможность управлять любым пикселем в любой ленте отдельно, что определенно дает больше возможностей для эффектов. Отрезки включены так - (1) IN внизу (1) OUT вверху соединяем с (2) IN внизу и так далее.
Добавил:
- совершенно новый эффект огня, который похож на огонь в отличии от существующего :)
- снежинки падающие
Модифицировал светящихся жучков, сейчас они независимо по 4 лентам бегают.
Для конкретных размеров меняем (у меня 4 отрезка по 24 LED):
#define X_NUM_LEDS 24 // num leds in strip
#define X_NUM_STRIPS 4 // num strips

тут обязательно 1 оставляем
#define NUM_STRIPS 1

Файлы проекта прикреплены.


Небольшой видосик с новым эффектом тут: Fire Effect



Алексу спасибо за идею и за исходный код.

Всем добра :)
Спасибо, мне очень нравится эффект огня и снега тоже, да , но есть пара вопросов.
1. В 96 строке кода Serial1.begin(9600); при компиляции скетча позникает ошибка 'Serial1' was not declared in this scope;
и если эту строку исключить, то всё компилируется нормально. Зачем эта строка?

2. В железе скетч начинается с эффекта огня, всё ок, затем переключением снег, тоже ок, а вот при переключении на третий (который нулевой) эффект блуждающий огонёк доходит до 9го диода и останавливается. Дальше переключиться не удаётся, возможно менять яркость и перейти в тежим белого света по тройному тапу. Выйти из него уже не получится. Яркость всё так же регулируется. Вкл/выкл так же продолжает работать. Плата Ардуино нано. В чем может быть загвоздка?
Спасибо.
 

VictorS

★✩✩✩✩✩✩
16 Апр 2019
10
17
Спасибо, мне очень нравится эффект огня и снега тоже, да , но есть пара вопросов.
1. В 96 строке кода Serial1.begin(9600); при компиляции скетча позникает ошибка 'Serial1' was not declared in this scope;
и если эту строку исключить, то всё компилируется нормально. Зачем эта строка?

2. В железе скетч начинается с эффекта огня, всё ок, затем переключением снег, тоже ок, а вот при переключении на третий (который нулевой) эффект блуждающий огонёк доходит до 9го диода и останавливается. Дальше переключиться не удаётся, возможно менять яркость и перейти в тежим белого света по тройному тапу. Выйти из него уже не получится. Яркость всё так же регулируется. Вкл/выкл так же продолжает работать. Плата Ардуино нано. В чем может быть загвоздка?
Спасибо.
1. Serial1 это второй аппаратный порт в Pro Micro на ATmega32U4. Сейчас он у меня используется для управления лампой через Wi-Fi, там через этот порт подключенн ESP8266. Эту строчку можно безболезненно удалить.
2. А ты изменил X_NUM_LEDS в define в скетче на правильное значение? Сколько у тебя дидов в одном отрезки ленты? И сколько отрезков?