16-канальный DMX диммер
- Войдите на сайт для отправки комментариев
Сб, 16/03/2013 - 17:01
Светооператоры, цените.
Блока питания нет, просто снаружи подводится 12 В. Делалось для светодиодных лент, но дешевизна начинки позволяет спаять полноценный фонарик. Расширяется путём добавления регистров, то есть примерно ещё +150 руб, и он станет 24-канальным. Только помним про порядок байт.
Плата Arduino внутри находится в силу девайсостроения для театра - спишут спектакль, и можно дуину снять, замутить другой проект. Вообще вещь вполне законченная, поэтому можно сделать на одной плате с Atmega, без FTDI. Трансивер RS-485 тем не менее, надлежит устанавливать в кроватке - они иногда горят. Оптической изоляции интерфейс не имеет, и это минус. Но китайские фонарики делают так же.
Детали - светодиодный 4х-значный экран Grove (http://devicter.ru/goods/Grove-4-Digit-Display), 4 кнопки, переключатель или джампер, трансивер (ADM485, MAX451, SN75176 - что вам по вкусу), 7805, два разъема XLR25, два регистра 74HC595.
ПО:
1. либа для экрана
http://www.seeedstudio.com/wiki/File:DigitalTube.zip (называется DigitalTube, у меня каталог для порядка переименован в TM1637)
2. DMXSerial
3. ShiftPWM
Суть синтеза BAM. Понятна по картинке:

Светодиоды ведут себя при таком виде модуляции так же, как при ШИМ. Теоретически, чаще происходят переключения транзисторов, но реально незаметно. Существует артефакт модуляции - дырка из нулей величиной в полный цикл, при переходе с уровня 127 на 128. На частотах выше 75 Гц тоже не заметно.
Базовый адрес DMX используется для управления общим уровнем яркости. 16 адресов, следующих после базового, отвечают за каждый канал. Т. о. всего он занимает 17 DMX каналов. В случае, если граница последнего адреса выходит за предел 512, следующий адрес начинается с 1, например если базовый 504, то последний будет на канале 8.
При нажатии в режиме изменения адреса кнопки Set новый адрес сохраняется, при нажатии Mode - не сохраняется. В режиме приема DMX отображается тот адрес, который назначен в качестве базового. Пишется только тот байт адреса, который изменился - если изменить адрес, например с 327 на 476, то перепишется только второй байт.
Маленькая хитрость, связанная с DMXSerial - ShiftPWM использует сериал для вывода отладочной информации (в любом случае, даже если не просить об этом), поэтому при сборке будет получено сообщение об ощибке в классе HardwareSerial. Идем в каталог ShiftPWM, открываем файл CShiftPWM.c и убираем оттуда или комментируем все упоминания о Serial.
Обязательные выводы - 11 и 13 (если хотим использовать аппаратный SPI, что в 2.5 раза быстрее софтварного); 0 (Rx) - для ввода DMX информации с RS-485 трансивера. Если подпаиваем к дуине - то через выключатель, чтобы на время перешития можно было отключить её от трансивера. Иначе не пишется. Остальные выводы - любые.
Провода A и B, идущие от платы к разъемам, скручены. Оба провода отводятся от платы, т. е. на каждый контакт разъема идет только один провод. Это сделано для правильной работы DMX терминатора, подавляющего отражение сигнала.
Корпус, точнее стенки - из ПВХ. Верхняя и нижняя крышки вырезаны из алюмопластикового композита. Вообще, это так, для театра - выдержит, если встать на него ногами. Кнопки вклеены в отверстия. С экрана отпаивается разъем, потом как обычно - приклеиваем два куска ПВХ, и к стенке на саморезы. Монтаж МГТФом, отводы от выходов платы - МГШВ.
Программа:
// uses hardware SPI: clock - D13, data - D11 const int ShiftPWM_latchPin=8; const bool ShiftPWM_invertOutputs = false; const bool ShiftPWM_balanceLoad = false; #include <ShiftPWM.h> // include ShiftPWM after setting the pins! #include <DMXSerial.h> // DMX-512 lib #include <TM1637.h> // LDM display TM1637 lib #include <EEPROM.h> // EEPROM lib #define MODEPIN 4 // mode input pin #define UPPIN 5 // inc. DMX address input pin #define DOWNPIN 6 // dec. DMX address input pin #define SETPIN 7 // set input pin #define KEYSPEED 200 // buttons action trheshold, ms unsigned char maxBrightness = 255; // top ShiftPWM threshold unsigned char pwmFrequency = 100; // ShiftPWM BAM synth. frequency int numRegisters = 2; // 74HC595 amount in chain boolean setaddr = false, // DMX process/set address flag btn_up = true, // button flags btn_down = true, btn_set = true, btn_mode = true; unsigned long last_btn; // buttons press timestamps byte ticks, // movement buttons handled actions deltadmx; // movement step int dmxaddr = 1, // DMX address mult = 0; // all channels light multiplicator uint8_t dmxh,dmxl; // EEPROM DMX record int8_t brightness = 4; // screen brightness level TM1637 tm1637(2,3); // CLK & DIO input pin from TM1637 void dmxdisp(){ int tmp; // temp int8_t digit[3]; // address output tmp=dmxaddr-(dmxaddr%100); digit[0]=tmp/100; tmp=dmxaddr-(dmxaddr%10)-(digit[0]*100); digit[1]=tmp/10; digit[2]=dmxaddr-(digit[0]*100)-(digit[1]*10); if(setaddr){ tm1637.display(0,0x0A); // setup address tm1637.display(1,digit[0]); tm1637.display(2,digit[1]); tm1637.display(3,digit[2]); }else{ tm1637.display(1,digit[0]); // display address tm1637.display(2,digit[1]); tm1637.display(3,digit[2]); } } void processmovestep(){ ticks++; if(ticks>10) deltadmx=10; // increase step if(ticks>20) deltadmx=50; if(ticks>30){ // reset step deltadmx=1; ticks=0; } dmxdisp(); } void setup(){ ShiftPWM.SetAmountOfRegisters(numRegisters); // ShiftPWM init ShiftPWM.SetPinGrouping(1); // no RGB grouping ShiftPWM.Start(pwmFrequency,maxBrightness); pinMode(SETPIN,INPUT_PULLUP); // init input key pins pinMode(MODEPIN,INPUT_PULLUP); pinMode(UPPIN,INPUT_PULLUP); pinMode(DOWNPIN,INPUT_PULLUP); tm1637.init(); // LDM init tm1637.set(brightness); DMXSerial.init(DMXReceiver); dmxh=EEPROM.read(0x00); // restore DMX dmxl=EEPROM.read(0x01); if(dmxh!=0xFF) dmxaddr=(dmxh*256)+dmxl; dmxdisp(); } void loop(){ byte i,j; // counter if(setaddr){ if(btn_up && btn_down && btn_set && btn_mode){ // read movement keys from idle mode btn_up=digitalRead(UPPIN); btn_down=digitalRead(DOWNPIN); btn_set=digitalRead(SETPIN); btn_mode=digitalRead(MODEPIN); last_btn=millis(); ticks=0; deltadmx=1; if(!btn_up && !btn_down) btn_down=true; } if(!btn_mode){ // back to DMX process mode btn_mode=true; // change mode setaddr=false; dmxh=EEPROM.read(0x00); // restore DMX dmxl=EEPROM.read(0x01); if(dmxh!=0xFF) dmxaddr=(dmxh*256)+dmxl; tm1637.init(); // reset screen delay(500); dmxdisp(); } if(!btn_set){ // store DMX if(dmxaddr>255){ if(EEPROM.read(0x00)!=0x01) EEPROM.write(0x00,0x01); dmxl=dmxaddr-256; }else{ if(EEPROM.read(0x00)!=0x00) EEPROM.write(0x00,0x00); dmxl=dmxaddr; } if(EEPROM.read(0x01)!=dmxl) EEPROM.write(0x01,dmxl); btn_set=true; // change mode setaddr=false; tm1637.init(); // reset screen delay(500); dmxdisp(); } if(!btn_up) btn_up=digitalRead(UPPIN); // read movement keys from moving mode if(!btn_down) btn_down=digitalRead(DOWNPIN); if(!btn_up && millis()-last_btn>=KEYSPEED){ // move DMX up last_btn=millis(); dmxaddr+=deltadmx; if(dmxaddr>512) dmxaddr=1; processmovestep(); } if(!btn_down && millis()-last_btn>=KEYSPEED){ // move DMX down last_btn=millis(); dmxaddr-=deltadmx; if(dmxaddr<1) dmxaddr=512; processmovestep(); } }else{ if(digitalRead(MODEPIN)==0){ // enter set address mode setaddr=true; // change mode tm1637.init(); // reset screen delay(500); dmxdisp(); } mult=DMXSerial.read(dmxaddr); // global brightness for(i=0;i<=15;i++){ // channel brightness if(i<=7) j=i+8; // byte order correction else j=i-8; if(dmxaddr+i+1>512) ShiftPWM.SetOne(j,(byte)(DMXSerial.read(dmxaddr+i+1-512)*mult/256)); else ShiftPWM.SetOne(j,(byte)(DMXSerial.read(dmxaddr+i+1)*mult/256)); } } }
Фотки:
разводка и схема:
На снимке монтажа не видно, но на плате 4 горизонтальных перемычки, они пересекают плюс и провод D, в середине платы снизу. Разводка - со стороны деталей.
Ошибочка вышла, последний транзюк второго регистра (по схеме Q4) подключен не к 9 выводу а к 7. Разводка все же со стороны монтажа, пока писал - думал о smd кондерах возле микросхем... Детали же :))
А можно модифицировать схему для управления 250 каналами как я понимаю надо доставить сдвиговых регистров и изменить код с пояльником дружу хорошо а вот с кодом у меня проблемки), мне для конструкции надо столько каналов а собирать километр плат на отдельных ардуино выходит дороговато если можно подскажите как изменить код, мой маил armanlight@mail.ru заранее спасибо.
Можеш перезалить фотки твоего проекта???
Лежит в театре, гдеж ему быть. Схожу, раскручу.
А схема где-то была.
А схему можна увидеть???
Щас нету времени, в субботу нарисую, если исходник не найду.
Можно ли переделать этот код для 6 каналов аппаратного ШИМа?
-- картинок-то нет. Как бы вообще непонятно о чём речь ))
было бы неплохо получить схемы
и библиотеку
https://github.com/elcojacobs/ShiftPWM
спс за библиотеку, осталось дело за схемами
All, прошу извинить за молчание. Раньше можно было днями на форуме или в доту раковать - сейчас хоть какая-то жизнь появилась :) Понимаю вопросы, но это всё радикал.
Вот как выглядит DMX приёмник:
Лежит на imgur. Но если и он удалит - она позаимствована у OpenDMX. Схема подключения регистров находится на сайте Elco Jacobs, в разделе про ShiftPWM.
Спасибо, уже намного понятнее. Только фотографий всё равно нет, поэтому не до конца понятно. Что за устройство-то, каково его назначение? А то Светооператоры наверное понимают, а простым смертным остаётся лишь гадать.
вообще ни чего не понял, как димером управлять, как его заадресовать, какая нагрузка ему по зубам
работаю режисером по свету
5 залов/пол тыщщи дмх приборов
Спасибо, уже намного понятнее. Только фотографий всё равно нет, поэтому не до конца понятно. Что за устройство-то, каково его назначение? А то Светооператоры наверное понимают, а простым смертным остаётся лишь гадать.
Да простая вещь. Протокол DMX512, работает на протоколе RS485. Всего есть 512 каналов, с их помощью можно управлять приборами, да, в принципе, чем угодно. Каждый канал передаёт значение от 0 до 255(0-100%). Самое простое применение - управление яркостью приборов, но так же можно управлять и фокусом, зумом, направлять приборы диначмического света.
Конкретно же этот прибор, как я понимаю, принимает сигнал DMX и можно к нему подключить, например, несколько диодов и управлять их яркостью.
Согласен, все оказалось совсем просто, что на аппаратной части что на програмном уровне, вот простой свитчь с адресацией, ну а усб коробочку ваще можно собрать за 120 руб, нужно только копать, у меня уже весь дмх на радио, красотище, все копейки, начальство довольно
код свичтча
здесь прошит начальный адрес "1"
можно адреса устанавливать переключателем
ftdi max 485 - лутший тандем для усб дмх интерфейса
По нарисованной Вами схеме поключил, собрал. Поуправляли лунами через WiFi с моего телефона. Вопрос - как подключить эту схему для приёма DMX-сигнала? Смотрю, у ТС совершенно такое же подключение нарисовано, как и для передачи. Это разве правильно?
http://city416.ru/mod/dmx_r_4.html
я по этой слеме приемник подключаю
http://city416.ru/mod/dmx_r_4.html
я по этой слеме приемник подключаю
Здравствуйте. Подскажите пожалуйста я все правильно понял? Подключаем DMX к sn75176, его выход к ардуине,заливаем скетч что у вас выше и получаем управление?
Неужели все так просто?
Это же и шаговиками можно управлять и вобше чем угодно. Просто я только что закончил переделовать светодиодную голову полностью на ардуино. Все получилось и инициация икса и игрика, и светодиоды ключами шимом управляются. И уже хотел хаотичную программку написать чтобы ездила и светила как попало, но увидел ваш код и подумал почему бы Dmx управление не замутить))
я сам в шоке, все работает, я даже подогнал протокол управления нео пикселями, все волшебным образом работает
Подскажите пожалуйста еще один момент. Если в вашем коде переменную "n" задать не 1 а к пимеру 200 то и у устройства будет двухсотый адрес?
Подскажите пожалусто, а если для пробы использовать маленькую arduino pro micro у нее нет 11 и 13 пина, их просто убрать из скетча или и так заработает? Сорри за возможную нелепость вопроса, только начинаю изучать arduino.
да, конечно, я щас все только на прошках и собираю
а почему arduino pro micro? а не мини?
Pro micro заказывал под проект 2 штуки, вторая не понадобилась вот и хочу ее использовать.
https://youtu.be/6mFagVH_w2c
все получилось спасибо)))
молодца, санлайт 2й еще хуже сана 1го, qlcplus даст полную свободу и избавит от нервов, коробочку может собрат младенец, можно скетч сюда выложить
Доброй ночи, Вот сижу работаю свадьбу в 10 голов и в 24 пара светодиодных разномастных и думаю о пиве)))
Зря вы так на санлайт ругаетесь. Сам являюсь поклоннеком даслайта еще с 2003 года на первом работаю и если сказать честно тоже плохо относился к санлайтам и всем говорил что даслайт удобнее. Пока со мной не случился один момент, работал я как то день города в одном провинциальном городке , и узнал за два часа да начала мероприятия что за приборы будут, вот там санлайт со своими авто-сценами очень выручил))
Курирую почти все заведения в своем городе , где санлайт где даслайт разници особой не вижу.
Конечно в четвертом даслайте крутые авто сцены на rgb приборы очень упрощают жизнь) хоть экран с текстами или с картинками мути, ну конечно столько приборов нет)
Вот что еще вспомнил у санлайта2 если прибор пишешь в библиотеке RGBW то он учитывает белый свет в палитре больше я не где этого не встречал.
Работаю свадьбы со своим светом(славо богу) так вот работаю то санлайтом то даслайтом то пилотом 2000 когда как настроение , а то и всем сразу))
Сори если гружу текстом ))) а то я уже не только думал о пиве но уже и вмазал))
Код как буду на работе обязательно выставлю с пояснениями)
что за автосцены? это движение голов по видам крывых? тк оно везде есть
qlcplus - пишет сцены мгновенно
Тот случай когда проще показать чем обьяснить))
https://youtu.be/_JnE7PyAAlM
Там настроек море. Для светодиодных паров просто незаменимая штука.
Да и код для головы может кому поможет))
Вы наверное про автосцены санлайта спращивали)
Да я именно про кривые икса и игрика, кружочки там квадратики уже сразу на панели при добавлении прибора.
Они конечно беспонтовые но иногда очень полезны если времени в обрез.
А qlcplus обязательно попробую.
Она совместима с коробочками даслайт или санлайт или проще самому сделать?
За код спасибо, молодец, qlcplus нужна коробочка ftdi max 485 150 руб цена, но если даслайт Вам наравится то нет смысла менять, qlcplus очень простая без наворотов, все есть для работы, для меня само то
qlcplus простенькое детское представление, сенсорный пульт из старого ноута + точь стекло из китая
Очень вдохновился самодельным dmx-ом вот результат))):http://youtu.be/4z2AmI4PeqY
Подумываю о том чтобы все PAR-ы переделать)))))
мягенько так ходит по PAN, да и шустренько, на МОСФЕТах диоды?
Не много не понял вашего вопроса про диоды. :((
PAR остался без изменений. Была сделанна платформа для его вращения. Были использованы: шаговый двигатель nema 17, контроллер arduino, драйвер A4988, шифратор max 485, макетная плата, провода, термоусадка, и куча времени))))
PAN - это ход по панораме, горизонт тобищь, мягкий ход учитывая прямой привод
Спасибо. Плавность хода заслуга драйвера двигателя, используется дробление шага 1/16.
Привет!
Подскажи пожалуйста скетч для управления головой.
Тот что ты запостил как я понимая для управления драйвером на основе полумостов (4 входа)
А, в цитируемом посте у тебя написано - нема 17, драйвер А4988....
Драйвер 4988 управляется STEP/DIR.
Хотелось бы увидеть скетч для данного драйвера.
Тоже хочу собрать голову на ардуино.
БУду тебе очень благодарен!
П.С. Если есть возможность - кинь мне этот скетч на почту : zwp@mail.ru
СПАСИБО!
а будет разница между 1/16 и 1/32 микрошагом?
Спасибо. Плавность хода заслуга драйвера двигателя, используется дробление шага 1/16.
Кстати, какая библиотека используется?
splans не нашел как написать вам в личку
но вы меня вдохновили на это:
https://youtu.be/wKf6859eP14
http://city416.ru - вот кому спасибо, ну и вам за хорошие слова
попробуйте appinventor - андроид програмирование, блютуз управление намного проше, клиенты писаются от удовольствия обладания системой, настоятельно советую
пары которые у вас не соответсвуют уличному использованию, не долго проживут, совет - купите лак спрей и опрыскайте платы и контактные группы, конекота дмх удалите и спаяйте в тракт, не забывайте про сплитеры, их тоже в легкую на ардуино собрать можно, ну и на последок - не канальте грядкой, пишите сцены, переливы и волны - ваш конек как осветителя, люди должны быть удивленными нестандартами
Господа! ...А можно для идиотов как собрать DMX приемник?
1. Есть TTL-RS485 переходник. там есть вывода RE,RO,DE,DI - какие куда подключить для считываения каналов DMX?
2. какой скетч запустить?
3. как вывести в консоль значения каналов?
Спасибо