• Художники по свету, Lighting Design, осветители, световики
Перейти к содержанию
×
×
  • Создать...

USB DMX 512 контроллер на основе Arduino


Рекомендуемые сообщения

  • Админ

Технические характеристики

В конфигурации, мы имеем 6 каналов с переменными значениями, предусмотренные 6 потенциометров, соединенных с Arduino на аналоговых входов, 10-битовые значения сводятся к 8 битам (0-255 которые используются DMX), и 12 каналов с включения-выключения значения с 12 кнопками, подключенных к цифровых входов Arduino, цифровые входы с использованием Arduino внутренние резисторы подтяжки, так что если кнопка нажата входное значение 0, и, если он свободен входное значение 1.

Общая информация

Мы будем использовать Arduino Mega, или Arduino Uno для основной базы контроллера.

Известные проблемы:

Когда мы будем компилировать исходный код и получим ошибку: ‘ArduinoDmxN’ was not Declared In This scope:

Проверьте, правильно ли настроен правильный тип правления в Arduino IDE, меню Сервис> доска (с Arduino Nano может использовать только один USART = ArduinoDmx0 = USART0)

ошибки при программирование Arduino: Перед тем как перепрограмировать Arduino, необходимо отключить его от общей сборки.

Исходный код и библиотеки

Подключаемая библиотека  arduino-four.zip

Сборка

Сборка состоит из микроконтролера

  • 1 Arduino UNO(MEGA)
  • 1 Маломощного трансивера, MAX485
  • 1 резистора на 220khm
  • 6 потенциометров(димеров)
  • 12 кнопок.

schematic-arduino-dmx-controller.png.b06

  1. Подключаем к входам ардуино с 2 по 13 выходы кнопки, а к gnd цепляем землю.
  2. К аналоговым входам подключаем потенциометрыс с 1 по 5 выходы. Подключаем землю и выход 5V. Как показано на рисунке.
  3. Подключаем к входу и выходу RX TX микросхему MAX 485, как вариант можно использовать аналог MAX487 или SN75176 к земле цепляем резистор на 220 килоом. Выход с микросхемы и есть управляющий сигнал DMX

arduino-dmx-controller.png.1979cd52b6368

Прошивка контроллера

Будем использовать 1 библиотеку.

Примеры

Пример тестового кода прошивки микроконтроллера.

Пример кода №1 

Скрытый текст

//*********************************************************************************************************
#include <lib_dmx.h>  // Подключаем скаченую нами библиотеку
 
//*********************************************************************************************************
//                        Пример кода №1 *** Экспериментальный***
//*********************************************************************************************************
#define    DMX512     (0)    // (250 kbaud - 2 от 512 каналов) Стандарт USITT DMX-512
#define    DMX1024    (1)    // (500 kbaud - 2 от 1024 каналов) Не стандарт, проверка.
#define    DMX2048    (2)    // (1000 kbaud - 2 от 2048 каналов) called by manufacturers DMX1000K, DMX 4x or DMX 1M ???
 
void setup() 
{
  // configurar pines arduino del 2 al 13 como entradas con pullup, (cuando se pulsa el boton = 0 si no = 1)
  // configure arduino pins 2 to 13 as inputs with pullup, (button pressed = 0, button free = 1) 
  for (int i=2;i<=13;i++) 
  {
    pinMode(i,INPUT);            // pines como entradas       
                                 // pins as inputs
    digitalWrite(i, HIGH);       // activar resistencias pullup internas
                                 // turn on pullup internal resistors
  }
 
  ArduinoDmx0.set_tx_address(1);      // poner aqui la direccion de inicio de DMX 
                                      // put here DMX start address 
 
  ArduinoDmx0.set_tx_channels(100);   // poner aqui el numero de canales a transmitir 
                                      // put here the number of DMX channels to transmmit
 
  ArduinoDmx0.init_tx(DMX512);        // iniciar transmision universo 0, modo estandar DMX512
                                      // starts universe 0 as TX, standard mode DMX512
}  //end setup()
 
void loop()
{
  // seis entradas con potenciometros que envian valores DMX entre 0 y 255 a los canales 1 al 6
  // six analog inputs with potentiometers, sending values from 0 to 255, to dmx output channels 1 to 6
 
  ArduinoDmx0.TxBuffer[0] = scale(analogRead(0)); // copiar valor de la entrada analogica 0 al canal DMX 1
                                                  // copy value from analog input 0 to DMX channel 1
  ArduinoDmx0.TxBuffer[1] = scale(analogRead(1)); // copiar valor de la entrada analogica 1 al canal DMX 2
                                                  // copy value from analog input 1 to DMX channel 2
  ArduinoDmx0.TxBuffer[2] = scale(analogRead(2)); // copiar valor de la entrada analogica 2 al canal DMX 3
                                                  // copy value from analog input 2 to DMX channel 3
  ArduinoDmx0.TxBuffer[3] = scale(analogRead(3)); // copiar valor de la entrada analogica 3 al canal DMX 4
                                                  // copy value from analog input 3 to DMX channel 4
  ArduinoDmx0.TxBuffer[4] = scale(analogRead(4)); // copiar valor de la entrada analogica 4 al canal DMX 5
                                                  // copy value from analog input 4 to DMX channel 5
  ArduinoDmx0.TxBuffer[5] = scale(analogRead(5)); // copiar valor de la entrada analogica 5 al canal DMX 6
                                                  // copy value from analog input 5 to DMX channel 6
 
  if (digitalRead(2) == LOW)       // pulsador en pin 2 apretado  // push-button on pin 2, is pressed
    ArduinoDmx0.TxBuffer[6] = 255; // enviar 255 al canal DMX 7   // send value 255 to DMX channel 7
  else
    ArduinoDmx0.TxBuffer[6] = 0;   // si no enviar 0              // push-button free, send 0
 
  if (digitalRead(3) == LOW)       // pulsador en pin 3 apretado
    ArduinoDmx0.TxBuffer[7] = 255; // enviar 255 al canal DMX 8
  else
    ArduinoDmx0.TxBuffer[7] = 0;   // si no enviar 0
 
  if (digitalRead(4) == LOW)       // pulsador en pin 4 apretado
    ArduinoDmx0.TxBuffer[8] = 255; // enviar 255 al canal DMX 9
  else
    ArduinoDmx0.TxBuffer[8] = 0;   // si no enviar 0
 
  // añadir aqui hasta el pin 13
  // add here the others inputs
 
}  //end loop()
 
uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bits
{
  if(value > 1023) // test for 10 bits limit
    value = 1023;
 
  return (value >> 2); // scale
}  //end scale()
 
//*************************************************************************************************************

Пример кода №2 

Скрытый текст

/*************************************************************************************************************
*
*   Title           : Controlador DMX con Arduino
*   Version         : v 0.1
*   Last updated        : 28.08.2012
*   Target          : Arduino mega 2560, Arduino mega 1280, Arduino UNO, Arduino nano
*   Author                  : Toni Merino - merino.toni at gmail.com
*   Web                     : www.deskontrol.net/blog
*
*
*   Ejemplo de codigo para el mini-controlador DMX con Arduino:
*   Este codigo lee los valores de 6 potenciometros conectados a 6 entradas analogicas y escribe cada valor en la salida DMX 
*   solo cuando se presiona el pulsador correspondiente. (canales de salida 1 al 6) 
*
**************************************************************************************************************/
#include <lib_dmx.h>  // libreria DMX 4 universos   // deskontrol four universes DMX library  - www.deskontrol.net/blog
 
//*********************************************************************************************************
//                        New DMX modes *** EXPERIMENTAL ***
//*********************************************************************************************************
#define    DMX512     (0)    // (250 kbaud - 2 to 512 channels) Standard USITT DMX-512
#define    DMX1024    (1)    // (500 kbaud - 2 to 1024 channels) Completely non standard - TESTED ok
#define    DMX2048    (2)    // (1000 kbaud - 2 to 2048 channels) called by manufacturers DMX1000K, DMX 4x or DMX 1M ???
 
uint8_t    buffer[6];        // buffer DMX data
 
void setup() 
{
  // configurar pines arduino del 2 al 13 como entradas con pullup, (cuando se pulsa el boton = 0 si no = 1)
  // configure arduino pins 2 to 13 as inputs with pullup, (button pressed = 0, button free = 1) 
  for (int i=2;i<=13;i++) 
  {
    pinMode(i,INPUT);            // pines como entradas       
                                 // pins as inputs
    digitalWrite(i, HIGH);       // activar resistencias pullup internas
                                 // turn on pullup internal resistors
  }
   
  ArduinoDmx0.set_tx_address(1);      // poner aqui la direccion de inicio de DMX 
                                      // put here DMX start address 
                                       
  ArduinoDmx0.set_tx_channels(100);   // poner aqui el numero de canales a transmitir 
                                      // put here the number of DMX channels to transmmit
                                       
  ArduinoDmx0.init_tx(DMX512);        // iniciar transmision universo 0, modo estandar DMX512
                                      // starts universe 0 as TX, standard mode DMX512
}  //end setup()
 
void loop()
{
  // seis entradas con potenciometros que envian valores DMX entre 0 y 255 a los canales 1 al 6, cuando se presiona el pulsador
  // six analog inputs with potentiometers, sending values from 0 to 255, to dmx output channels 1 to 6, when switch is pressed
   
  buffer[0] = scale(analogRead(0)); // copiar valor de la entrada analogica 0 al canal DMX 1
                                    // copy value from analog input 0 to DMX channel 1
  buffer[1] = scale(analogRead(1)); // copiar valor de la entrada analogica 1 al canal DMX 2
                                    // copy value from analog input 1 to DMX channel 2
  buffer[2] = scale(analogRead(2)); // copiar valor de la entrada analogica 2 al canal DMX 3
                                    // copy value from analog input 2 to DMX channel 3
  buffer[3] = scale(analogRead(3)); // copiar valor de la entrada analogica 3 al canal DMX 4
                                    // copy value from analog input 3 to DMX channel 4
  buffer[4] = scale(analogRead(4)); // copiar valor de la entrada analogica 4 al canal DMX 5
                                    // copy value from analog input 4 to DMX channel 5
  buffer[5] = scale(analogRead(5)); // copiar valor de la entrada analogica 5 al canal DMX 6
                                    // copy value from analog input 5 to DMX channel 6
   
  if (digitalRead(2) == LOW)             // pulsador en pin 2 apretado                  // push-button on pin 2, is pressed
    ArduinoDmx0.TxBuffer[0] = buffer[0]; // enviar valor potenciometro al canal DMX 1   // send analog value to DMX channel 1
  else
    ArduinoDmx0.TxBuffer[0] = 0;         // si no enviar 0                              // push-button free, send 0
         
  if (digitalRead(3) == LOW)             // pulsador en pin 3 apretado                  // push-button on pin 3, is pressed
    ArduinoDmx0.TxBuffer[1] = buffer[1]; // enviar valor potenciometro al canal DMX 2   // send analog value to DMX channel 2
  else
    ArduinoDmx0.TxBuffer[1] = 0;         // si no enviar 0                              // push-button free, send 0
     
  if (digitalRead(4) == LOW)       
    ArduinoDmx0.TxBuffer[2] = buffer[2]; 
  else
    ArduinoDmx0.TxBuffer[2] = 0;   
     
  if (digitalRead(5) == LOW)       
    ArduinoDmx0.TxBuffer[3] = buffer[3]; 
  else
    ArduinoDmx0.TxBuffer[3] = 0;   
     
  if (digitalRead(6) == LOW)       
    ArduinoDmx0.TxBuffer[4] = buffer[4]; 
  else
    ArduinoDmx0.TxBuffer[4] = 0;   
     
  if (digitalRead(7) == LOW)       
    ArduinoDmx0.TxBuffer[5] = buffer[5]; 
  else
    ArduinoDmx0.TxBuffer[5] = 0;   
        
     
}  //end loop()
 
 
uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bits
{
  if(value > 1023) // test for 10 bits limit
    value = 1023;
     
  return (value >> 2); // scale
}  //end scale()
 
//************************************************************************************************************************

Мы могли бы, например, использовать EEPROM(Встроенную память) чтобы хранить значения DMX в EEPROM и извлекать для загрузки сцен …

Внимание! Соблюдайте пожалуйста Правила форума, иначе Ваш аккаунт будет заблокирован перманентно без предупреждения!

 
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...
  • Ответов 4
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Популярные посты

На базе того же ардуино в интернете есть схема артнет гейта на 1 или 4 юниверса. Могу дать ссылку. Сам себе сделал такой. Могу поделиться опытом его изготовления кому будет интересно. Работает стабиль

Изображения в теме

На базе того же ардуино в интернете есть схема артнет гейта на 1 или 4 юниверса. Могу дать ссылку. Сам себе сделал такой. Могу поделиться опытом его изготовления кому будет интересно. Работает стабильно.  Если интерес к теме есть, то сохдам тут топик, если админы будут не против.

  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты
  • Админ

Александр, мы только за ! 

Внимание! Соблюдайте пожалуйста Правила форума, иначе Ваш аккаунт будет заблокирован перманентно без предупреждения!

 
Ссылка на сообщение
Поделиться на другие сайты
  • 3 месяца спустя...

Александр, пожалуйста, можете сбросить мне ссылку на артнет-гейт на 1 или 4 юниверса?

 

У меня задача посложнее - надо принимать дмх-сигнал и по нажатию кнопки запомнить состояние всех каналов и этот выдавать дмх-сигнал на выход. Но тут хотя бы попробовать сделать просто дмх на выход. В ардуино кое-что понимаю, сделать могу, так что буду признателен за помощь.

Заранее спасибо.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 года спустя...
  • Новый пользователь

Нашел видео на подомную тему... Может кому пригодиться.

 

Спойлер

 

 

Ссылка на скетч - https://github.com/GadgetReboot/Arduino/tree/master/Uno/DMX512

 

Схема под спойлером.

 

Спойлер

DMX_Schematic.thumb.jpg.edee94dfc0d08d3dd43646e2c81a3849.jpg

 

 

 

 

 

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Похожий контент

    • От Admin
      Автор - valeriialeks
      ПЕРЕХОДНИКИ ЗА 30 МИНУТ
      Скачать все фото одним архивом - Переходник 3Х Пин На 5Ти Пин.zip
       
    • От Admin
      Приемник сигнала DMX512 на 3 канала управления. Данный приемник DMX способен управлять 3мя каналами RGB светодиодной ленты, или же любым другим неуправляемым оборудованием. Данная версия приемника может быть улучшена до 4-5-6 и до 8 каналов. Впринципе зависит от микросхемы контроллера, в зависимости от количества ее выходов. В данной версии 3 независимых выходных ШИМ канала основанных на МОСФЕТ транзисторах.
      Элементы
      Элемент Свойства Описание R1, R2, R3 120 Ω Резистор коричневый, красный, черный, черный, коричневый или коричневый, красный, коричневый, серебряный R4, R6 470 Ω Резистор желтый, фиолетовый, черный, черный, коричневый или (желтый, фиолетовый, коричневый, серебряный R5 10k Ω Резистор коричневый, черный, черный, красный, коричневый или коричневый, черный, оранжевый, серебряный R7 510 Ω Резистор зеленый, коричневый, черный, черный, коричневый или зеленый, коричневый, коричневый, серебряный D1 1N4004 Диод выпрямитель для защиты. Q1 16 МГц 16 МГц часы кристалл.(Желателен, но не обязателен в сборке) С2, С3 22 пФ Конденсаторы на 22 пикрофарата С6, С7 100 мкФ Электролитические конденсаторы на 100 микрофарат(Установите правильно) С4 33 мкФ Электролитический конденсатор на 33 микрофарата С1, С5, С8 100 нФ Конденсаторы для фильтрации шума силовых линий. LED1 Светодиод Светодиод для индикации S1 Переключатель для выбора адреса 7805 7805 Регулятор напряжения 5 вольт. POWER PWD Разьем питания ATmega168 ATmega168 Микроконтроллер для управления ICSP ICSP Разьем для программирования Atmega168 DMX XLR Разьем XLR или схожий с ним 6N137 6N137 Оптрон для гальванической развязки линий.(Установите правильно) MAX481 MAX481(или MAX482) Микросхема преобразователь дифференциального сигнала DMX в логический сигнал DC1 0505 Чип питания отдельной линии, используется для гальванической развязки Схема контроллера и платы Схема Плата  Прошивка Микроконтроллера
      Скачать прошивку - dmxspot.zip
      Библиотека DMX 512 для МК - dmxserial-master.zip
      Модернизация
      Вы сможете собрать готовую схему на монтажной плате, и попробовать как работает эта схема. А также в зависимости от опыта работы с МК, вы сможете заменять разные узлы данной схемы, например вместо транзисторов использовать реле для большой нагрузки, или сервоприводы и.т.д
      Готовый вид платы выглядит так

    • От Admin
      Схема платы, и вся разводка. Апаратная часть построена на микроконтролере avr ATMEGA 328 от компании Atmel. Приемник и передатчик могут передавать все 512 каналов управления. Без антенны базовая конфигурация работает до 100 метров в прямой видимости(сможет работать до 1км при установке антенны)

      Элементы используемые в схеме.  Сборка состоит из микроконтролера
      NRF24L01 два модуля. 12v Вход (5v и 3.3v регулятор напряжения) 2 x XLR вход и выход(папа и мама) 2 x Светодиода(для индикации) ATMEGA328p-pu микроконтроллер. 3 x 100ом резисторы. 1 x 10кОМ резистор. 3 x 10uF конденсаторы. переключатель каналов, джампер. 16mHZ кварц. Схема подключения

      Беспроводной модуль в сборе
      Для подключения радиомодуля использованы ножки аппаратного SPI микроконтроллера, поэтому разъемы подключения модуля и подключения программатора дублируют друг друга. Это сделано, чтобы удобней было прошивать микроконтроллер на отладночной платке, например, если использовать программатор который подает на схему 5 вольт, а для NRF24L01 это слишком большое напряжение. Чтобы перепрошить управляющий микроконтроллер, достаточно выдернуть трансивер с платы, перепрошить и всунуть его обратно - без лишней возни с перепайкой.

      Скетч для микроконтроллера
      Перед компиляцией и заливкой скетча в микроконтроллер, необходимо установить и добавить в компилятор библиотеки nRF24L01 и RF24
      #define ROLE A0 - Эта строка отвечает за прием и ли передачу. Если нужен приемник то A0, передатчик A1
      Следите за правильным напряжением, радиомодули очень чувствительны, напряжение должно быть в пределах 3.3v
      Найдено на гугл диске неизвестного пользователя.  Автор отзовись оставим ссылку. 
    • От Admin
      Этот тестер можно использовать для простейшей проверки целостности кабеля и работоспособности линии.

      Потребуется:
      - 3 или 5-контактный разъем XLR папа
      - два 270-омных сопротивления 0.5 Вт
      - двухцветный светодиод
      Схему надо подсоединить к указанным контактам разъема и поместить в его 
      корпус так, чтобы снаружи остался только светодиод.
       
      Инструкция:
      - Вставьте тестер в гнездо, которое надо проверить.
      - Поставьте на консоли все каналы на 0 процентов. Диод будет светиться одним цветом.
      - Выставьте все каналы наполную. Диод должен загореться другим цветом. 
      Если диод не горит в одном из двух случаев, это значит, что произошло короткое замыкание между одной из линий и первым контактом.

  • Активность

    1. 10

      Круг кольцо в театре

    2. 10

      Круг кольцо в театре

    3. 10

      Круг кольцо в театре

    4. 46

      Hog 1000 / 500

    5. 10

      Круг кольцо в театре

Важная информация

Мы используем cookies Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.