ARDUINO Гирлянда на ёлку на основе Гайверовой

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Приветствую всех. Собирал гирлянду неделей ранее по оригинальной схеме до этого проекта https://alexgyver.ru/christmaslights/. Ее работа мне понравилось!
С прошивкой Алекса появилась возможность управлять кнопкой. Долго думал из чего сделать корпус, и случайно наткнулся на ненужный контроллер светодиодной RGB-ленты с пультом, по случаю купленный за 80₽ три года назад на Али в "Горящих товарах" ))) Сейчас его можно приобрести примерно за 120₽ в обычных магазинах.

Изначально нужна была коробочка, но, как оказалось, пультик вполне рабочий(!!!) да и фотоприемник подошел к этой гирлянде. )))

Для включения пульта в скетче нужно указать (видимо):
#define IR_ON 1 // Если равен 1 используется пульт
----------
#define IR_RC5 1 // пульт RC5,
#define IR_RC6
1 // пульт RC6,

Далее расскажу еще несколько лайфхаков и доработок этой гирлянды
 

Вложения

Изменено:
  • Лойс +1
Реакции: shtrlz

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Немного доработал работу управление кнопкой:
- появился режим включения/выключения подсветки "ночное небо" (темно-синий фон, заместо черного) -- 5-кратное нажатие
- появился режим включения/выключения "свечей" (яркое мерцание отдельных светодиодов) -- 6-кратное нажатие

В скетче 1main строки 310-313 меняем (зеленым показано добавляемое):
if (btn.hasClicks()) {
if (btn.getClicks() == 4) glitter = !glitter;

if (btn.getClicks() == 5) background = !background;
if (btn.getClicks() == 6) candle = !candle;

}

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

if (btn.isStep()) {
stepFlag = true;
max_bright += (brightDir ?
16 : -16);
max_bright = constrain(max_bright,
15, 255);
FastLED.setBrightness(max_bright);
}
 
Изменено:

adm503

★✩✩✩✩✩✩
2 Ноя 2019
47
23
Красноярск
easyeda.com
А можно еще допилить прошивку чтобы количество диодов определялось автоматически при подключении питания с нажатой кнопкой? Разумеется, конец Dout ленты нужно подключить к arduino. Я использую последовательно две ленты 30led\м = 10м 300led и на дальний конец ленты я подаю дополнительно напряжение. Т.е. подключить Dout к arduino легко + полезно по питанию. Такая прошивка стала бы народной т.к. настраивалась бы без компьютера (без пуско-наладочных работ).
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
А можно еще допилить прошивку чтобы количество диодов определялось автоматически при подключении питания с нажатой кнопкой? Разумеется, конец Dout ленты нужно подключить к arduino. Я использую последовательно две ленты 30led\м = 10м 300led и на дальний конец ленты я подаю дополнительно напряжение. Т.е. подключить Dout к arduino легко + полезно по питанию. Такая прошивка стала бы народной т.к. настраивалась бы без компьютера (без пуско-наладочных работ).
Изначально думал над этим и предлагал Алексу реализовать принцип еще до того, когда он сделал эту переделку... По сути, нужно установить задатчик на основе DIP-переключателя. а основываясь на уже полученных знаниях предположу, что конфигурацию проще реализовать определяя цепи по 50 светодиодов (китайцы делают цепи такой длины) и максимумом 250... Далее просто в прошивке нужно будет выходить за определение байта к слову адресации.
Для знающих, такой допил будет легко организовать. Я, к сожалению, так далеко в программировании Ардуинки еще не заходил ))
 

adm503

★✩✩✩✩✩✩
2 Ноя 2019
47
23
Красноярск
easyeda.com
на основе DIP-переключателя
Я по началу тоже думал именно так задавать, но потом посоветовавшись пришел к мысли что не нужно ничего такого городить. Проще считывать количество светодиодов с ленты.
50 светодиодов (китайцы делают цепи такой длины) и максимумом 250...
Если брать ленту 30 led \ м, как у меня, то стандартные отрезки 30\60\90\120\150\180\210\240\270\300 led. Плюс другие гирлянды по 50 led, плюс возможность делать самому любой длинны. Если не считывать с последнего диода, то в пору ставить кнопки +\- и числовой индикатор. К тому же, реально не все могут перемножить 30 led x 5м. Каждый второй тупит в магазине при покупке ленты.
 
  • Лойс +1
Реакции: Ded_vonzai

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Я по началу тоже думал именно так задавать, но потом посоветовавшись пришел к мысли что не нужно ничего такого городить. Проще считывать количество светодиодов с ленты.

Если брать ленту 30 led \ м, как у меня, то стандартные отрезки 30\60\90\120\150\180\210\240\270\300 led. Плюс другие гирлянды по 50 led, плюс возможность делать самому любой длинны. Если не считывать с последнего диода, то в пору ставить кнопки +\- и числовой индикатор. К тому же, реально не все могут перемножить 30 led x 5м. Каждый второй тупит в магазине при покупке ленты.
когда много кнопок, то уже не народная... ))) со считыванием последнего тоже будут дополнительные сложности

на счет dip:
По идее можно сгруппировать в четыре основные группы конфигурации (2 бита):
1 - 30 кратная 30/60/90/120/180/210/240
2 - 50 кратная 50/100/150/200/250
3 - побитная 32/64/96/128/160/192/224/256
4 - "квадратная" (для матричных эффектов) 16/25/64/100/144/256
- это еще 3 бита, итого 5 полозковый конфигуратор

Как говорил, более 256 диодов - это уже другая программа должна будет заливаться.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Прикрутил пультик - делюсь как:
Датчик использовал тот, что перешел с коробочки. Пультик прикупил от управления освещением (см. фото), так как штатный потерялся.
IMG_20191229_175636.jpg Вообще, можно использовать старый любой от любой техники!!!
Чтобы посмотреть систему команд, нужно прошить гирлянду скетчем от библиотеки
C:\Users\%USERNAME%\Documents\Arduino\libraries\Arduino-IRremote-master\examples\IRtest2\IRtest2.ino

В этом скетче меняем номер пина куда подключена гирлянда:
int RECV_PIN = 8; (<= переносим из прошивки гирлянды [notamesh4_gyver.ino] #define PIN_IR 8 // Номер пина, куда подключен датчик пульта,)

Компилируем, Прошиваем, Запускаем (не вынимая из дата-кабеля), Включаем "Монитор Порта" Ctrl+Shift+M
Теперь нажимая клавиши на жертвенном пульте в мониторе можем видеть декодированную команду а так же сам тип пульта. В моем случае система кодирования оказалась NEC. Нужно теперь последовательно нажимать на все клавиши и переписать в таблицу значения команд, затем их нужно будет перенести в прошивку гирлянды.

Возвращаемся к скетчу гирлянды. В ней нужно разрешить работу с ДУ (для моего случая настройки будут такими):
#define IR_ON 1 // Если равен 1 используется пульт
--------------------------------
#define IR_RC5 0 // пульт RC5,
#define IR_RC6 0 // пульт RC6,
#define IR_NEC
1 // пульт NEC,
#define IR_SONY 0 // пульт SONY,
#define IR_PANASONIC 0 // пульт PANASONIC,
#define IR_JVC 0 // пульт JVC,
#define IR_SAMSUNG 0 // пульт SAMSUNG,
#define IR_WHYNTER 0 // пульт WHYNTER,
#define IR_AIWA 0 // пульт AIWA_RC_T501,
#define IR_LG 0 // пульт LG,
#define IR_SANYO 0 // пульт SANYO,
#define IR_MITSUBISHI 0 // пульт MITSUBISHI,
#define IR_DENON 0 // пульт DENON
#define IR_REPEAT
1 //Включить повтор, при долгом нажании на кнопку пульта будет повтор клавиши

Далее идем в раздел скетча commands.h и прописываем желаемые команды (частичный пример):
#define IR_Key_Reset 0xFF629D // pp-Select // Сброс всех настроек и перезагрузка
-----------------------------
#define IR_Key_Demo_MyMode
0 // // Включит демо режим (перебор)
#define IR_Key_Demo_MyMode_Random
0xFF6897 // pp-Auto // Включит демо режим (Случайно)
-----------------------------
#define IR_Key_Glitter
0xFF22DD // pp-D // Включить/выключить сверкание
#define IR_Key_BackGround
0xFF02FD // pp-W // Включить/выключить заполнение фона
#define IR_Key_Candle
0xFFC23D // pp-L // Включить/выключить свечки
-----------------------------
#define IR_Key_Previous_mode
0xFFA857 // pp-Left // Предыдущий эффект. Отключает демонстрационный режим
#define IR_Key_Next_mode
0xFF906F // pp-Right // Следующий эффект. Отключает демонстрационный режим
....................

Обязательно прописываем 0, там где процедуры не обрабатываются кнопками.

Сохраняем, Компилируем, Загружаем... и Вуаля - Пультик прикручен! )))
 
  • Лойс +1
Реакции: konoev и Lesha43rus

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Очередная доработка для шлейфов ws2612b
Сами шлейфы были прикуплены заранее, еще до окончательной реализации проекта, поэтому столкнулся с проблемой одностороннего рассеивания. Долго думал как реализовать светорассеиватель. Кембрики и кусочки акрила были отметены из-за низкой эффективности. Пробовал примерять пластиковые стразы, но и их пришлось бы дорабатывать, но опять же без действенного результата. Тогда решил поискать в области швейной фурнитуры... Сразу скажу, что у меня был выход на оптовую фирму, где удалось не только выбрать пуговицы нужной формы, но и закупить оные за сущие копейки.
Выбор пал на такой экземпляр:
IMG_20191227_010405.jpg - акриловые блузочные пуговицы диаметром 12мм.
Основное достоинство их в том, что они имеют граненый венец по типу "кристалл", что в итоге оказалось существенным приемуществом!

Крепил обычным термоклеем, причем этот клей сослужил еще интересную службу - при придавливании пуговицы к светодиоду он просачивался сквозь отверстия для пришивания, и застывая создал некий рассеивающий световод, что позволило переизлучить свет внутрь толщи акрила. И что в свою очередь заставил светится пуговицу во всех направлениях, даже назад! А грани преломляли этот свет по типу искрящегося снега!

IMG_20191227_010257.jpgIMG_20191227_010559.jpgIMG_20191227_010626.jpgIMG_20191227_010633.jpgIMG_20191227_010714.jpg

Дополнительно залил термоклеем заднюю площадку с наплывами на проводники 2-3мм для укрепления этих проводов и пайки а также для изоляции от короткого замыкания.
 

Вложения

25kostik

✩✩✩✩✩✩✩
31 Июл 2018
9
0
Дня три прожила гирлянда и ... Умерла ардуинка. Возможно сам виноват - не было резистора. Это была единственная Ардуино нано. Есть ещё две платки Ардуино про мини. Подключился аналогично нано, но гирлянда не работает, лишь светит белым цветом. Количество светодиодов соответствует указанному в скетче. Возможно ли без существенных изменений заставить работать гирлянду? Может на другой пин подключить? Дочка переживает - при ней гирлянда сломалась.
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,130
412
Москва
wan-derer.ru
@25kostik, Возможно, сдохла не Ардуино, а первый диод в ленте. Проверить выход Ардуино: подключить на него обычный светодиод с резистором и помигать им.
 

25kostik

✩✩✩✩✩✩✩
31 Июл 2018
9
0
@25kostik, Возможно, сдохла не Ардуино, а первый диод в ленте. Проверить выход Ардуино: подключить на него обычный светодиод с резистором и помигать им.
Все же скорее всего дело в ардуино. Раньше светодиод на ардуино светился, сейчас нет и компом не определяется.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Palpalych, Этот проект уже стал полноценным форком, поэтому ветки объединять не будем. Пусть живёт своей жизнью. Дай ссылку на это обсуждение в основной ветке по проекту.
А смысл? Все построено на прошивке от Алекса... Поэтому это один и тот же проект, только доработанный. )))
 

25kostik

✩✩✩✩✩✩✩
31 Июл 2018
9
0
Попробуй перекинуть выход, если сама плата подает признаки жизни
Вечером с работы тестер возьму что бы хоть что то померять. А так, признаков жизни нет. Компом не определяется, светодиод power не светится.
Возможно ли перенести скетч на про мини лёгким путем? А если проц перекинуть с про мини на нано? Определяться как будет? Или и загрузчик надо переписывать?
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Вечером с работы тестер возьму что бы хоть что то померять. А так, признаков жизни нет. Компом не определяется, светодиод power не светится.
Возможно ли перенести скетч на про мини лёгким путем? А если проц перекинуть с про мини на нано? Определяться как будет? Или и загрузчик надо переписывать?
Не знаю, пока опыта мало в Ардуине... сам эту тему прочухал второй неделей.. ))) Варианта 2 - либо сам камень, либо стабилизатор. Второй, в принципе лечится заменой. Если не горелое (не пахнет), то смотри на то, что больше греется. По идее портирование, особенно в смежных девайсах не составляет сложности.
 

Fortunate

★✩✩✩✩✩✩
10 Янв 2020
41
28
Москва
Прикрутил пультик - делюсь как:
У меня проблема. Компилирую для WEMOS D1 mini. Выдает ошибку
C++:
In file included from \ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:16:0:

IRremote.h:24:25: error: IRremoteInt.h: No such file or directory

 #include "IRremoteInt.h"

                         ^

compilation terminated.

exit status 1
IRremoteInt.h: No such file or directory

Библиотека IRremote подключена.
Если вручную скопировать IRremoteInt.h из подпапки \src\private в папку \src
то выдает вообще что-то невообразимое

C++:
In file included from \ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:13:0:

C:\Program Files (x86)\Arduino\libraries\FastLED/FastLED.h:14:21: note: #pragma message: FastLED version 3.002.009

 #    pragma message "FastLED version 3.002.009"

                     ^

In file included from C:\Program Files (x86)\Arduino\libraries\FastLED/FastLED.h:65:0,

                 from \ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:13:

C:\Program Files (x86)\Arduino\libraries\FastLED/fastspi.h:115:23: note: #pragma message: No hardware SPI pins defined.  All SPI access will default to bitbanged output

 #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"

                       ^

In file included from \Documents\Arduino\libraries\IRremote\src/IRremoteInt.h:27:0,

                 from sketch\IRremote.h:24,

                 from \ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:16:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h: In function 'void timerConfigForSend(uint16_t)':

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:512:5: error: 'TCCR1A' was not declared in this scope

     TCCR1A = _BV(WGM11);

     ^

In file included from sketch\notamesh4_gyver_v1.1.ino.cpp:1:0:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:512:18: error: 'WGM11' was not declared in this scope

     TCCR1A = _BV(WGM11);

                  ^

\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266/Arduino.h:168:25: note: in definition of macro '_BV'

 #define _BV(b) (1UL << (b))

                         ^

In file included from \Documents\Arduino\libraries\IRremote\src/IRremoteInt.h:27:0,

                 from sketch\IRremote.h:24,

                 from \Desktop\ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:16:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:513:5: error: 'TCCR1B' was not declared in this scope

     TCCR1B = _BV(WGM13) | _BV(CS10);

     ^

In file included from sketch\notamesh4_gyver_v1.1.ino.cpp:1:0:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:513:18: error: 'WGM13' was not declared in this scope

     TCCR1B = _BV(WGM13) | _BV(CS10);

                  ^

\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266/Arduino.h:168:25: note: in definition of macro '_BV'

 #define _BV(b) (1UL << (b))

                         ^

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:513:31: error: 'CS10' was not declared in this scope

     TCCR1B = _BV(WGM13) | _BV(CS10);

                               ^

\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266/Arduino.h:168:25: note: in definition of macro '_BV'

 #define _BV(b) (1UL << (b))

                         ^

In file included from \Documents\Arduino\libraries\IRremote\src/IRremoteInt.h:27:0,

                 from sketch\IRremote.h:24,

                 from \Desktop\ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:16:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:514:5: error: 'ICR1' was not declared in this scope

     ICR1 = pwmval;

     ^

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:515:5: error: 'OCR1A' was not declared in this scope

     OCR1A = pwmval * IR_SEND_DUTY_CYCLE / 100;

     ^

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h: In function 'void timerConfigForReceive()':

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:519:5: error: 'TCCR1A' was not declared in this scope

     TCCR1A = 0;

     ^

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:520:5: error: 'TCCR1B' was not declared in this scope

     TCCR1B = _BV(WGM12) | _BV(CS10);

     ^

In file included from sketch\notamesh4_gyver_v1.1.ino.cpp:1:0:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:520:18: error: 'WGM12' was not declared in this scope

     TCCR1B = _BV(WGM12) | _BV(CS10);

                  ^

\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266/Arduino.h:168:25: note: in definition of macro '_BV'

 #define _BV(b) (1UL << (b))

                         ^

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:520:31: error: 'CS10' was not declared in this scope

     TCCR1B = _BV(WGM12) | _BV(CS10);

                               ^

\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266/Arduino.h:168:25: note: in definition of macro '_BV'

 #define _BV(b) (1UL << (b))

                         ^

In file included from \Documents\Arduino\libraries\IRremote\src/IRremoteInt.h:27:0,

                 from sketch\IRremote.h:24,

                 from \Desktop\ChristmasLights-master\firmware\notamesh4_gyver_v1.1\1main.ino:16:

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:521:5: error: 'OCR1A' was not declared in this scope

     OCR1A = SYSCLOCK * MICROS_PER_TICK / 1000000;

     ^

\Documents\Arduino\libraries\IRremote\src/IRremoteBoardDefs.h:522:5: error: 'TCNT1' was not declared in this scope

     TCNT1 = 0;

     ^

exit status 1
Ошибка компиляции для платы LOLIN(WEMOS) D1 R2 & mini.
Помогите, пожалуйста - не знаю что делать
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Fortunate, На Wemos идет своя библиотека для работы с пультом, если не ошибаюсь IRemote8266
там совершенно другая логика управления, и скорее всего придется переделывать модуль.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Я не смогу переделать - не настолько понимаю в программировании Arduino :(
Под Wemos сам спишу сделать скетч своей гирлянды пока, правда, без пультика. По идее, там уже есть прописанный модуль ДУ, можно будет попробовать подкрутить...
 

Fortunate

★✩✩✩✩✩✩
10 Янв 2020
41
28
Москва
Под Wemos сам спишу сделать скетч своей гирлянды пока, правда, без пультика. По идее, там уже есть прописанный модуль ДУ, можно будет попробовать подкрутить...
Если будут успехи - дашь знать?
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405