Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| zheleznaja_chast:dmx_512_kontroller_na_osnove_arduino [2016/07/02 19:55] – [Где взять комплектующие] Leo | zheleznaja_chast:dmx_512_kontroller_na_osnove_arduino [2025/12/24 10:32] (текущий) – удалено 216.73.216.10 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== USB DMX 512 контроллер на основе Arduino своими руками====== | ||
| - | Создать свой dmx 512 контроллер не составит труда, на базе микроконтроллера Arduino. | ||
| - | ====== Технические характеристики ====== | ||
| - | В конфигурации, | ||
| - | ====== Общая информация ====== | ||
| - | |||
| - | < | ||
| - | Мы будем использовать **Arduino Mega**, или **Arduino Uno** для основной базы контроллера. | ||
| - | <note important> | ||
| - | |||
| - | Когда мы будем компилировать исходный код и получим ошибку: | ||
| - | |||
| - | Проверьте, | ||
| - | (с Arduino Nano может использовать только один USART = ArduinoDmx0 = USART0) | ||
| - | |||
| - | ошибки при программирование Arduino: | ||
| - | Перед тем как перепрограмировать Arduino, необходимо отключить его от общей сборки. | ||
| - | </ | ||
| - | ===== Исходный код и библиотеки ===== | ||
| - | Подключаемая библиотека [[http:// | ||
| - | ===== Сборка ===== | ||
| - | Сборка состоит из микроконтролера | ||
| - | |||
| - | * 1 Arduino UNO(MEGA) | ||
| - | * 1 Маломощного трансивера, | ||
| - | * 1 резистора на 220khm | ||
| - | * 6 потенциометров(димеров) | ||
| - | * 12 кнопок. | ||
| - | {{: | ||
| - | - Подключаем к входам ардуино с 2 по 13 выходы кнопки, | ||
| - | - К аналоговым входам подключаем потенциометрыс с 1 по 5 выходы. Подключаем землю и выход 5V. Как показано на рисунке. | ||
| - | - Подключаем к входу и выходу RX TX микросхему MAX 485, как вариант можно использовать аналог MAX487 или SN75176 к земле цепляем резистор на 220 килоом. Выход с микросхемы и есть управляющий сигнал DMX | ||
| - | {{: | ||
| - | ===== Прошивка контроллера ===== | ||
| - | Будем использовать 1 библиотеку. | ||
| - | ===== Примеры ===== | ||
| - | Пример тестового кода прошивки микроконтроллера. | ||
| - | ==== Пример кода №1 ==== | ||
| - | |||
| - | < | ||
| - | // | ||
| - | #include < | ||
| - | |||
| - | // | ||
| - | // Пример кода №1 *** Экспериментальный*** | ||
| - | // | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | |||
| - | 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; | ||
| - | { | ||
| - | pinMode(i, | ||
| - | // pins as inputs | ||
| - | digitalWrite(i, | ||
| - | // turn on pullup internal resistors | ||
| - | } | ||
| - | |||
| - | ArduinoDmx0.set_tx_address(1); | ||
| - | // put here DMX start address | ||
| - | |||
| - | ArduinoDmx0.set_tx_channels(100); | ||
| - | // put here the number of DMX channels to transmmit | ||
| - | |||
| - | ArduinoDmx0.init_tx(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, | ||
| - | |||
| - | ArduinoDmx0.TxBuffer[0] = scale(analogRead(0)); | ||
| - | // copy value from analog input 0 to DMX channel 1 | ||
| - | ArduinoDmx0.TxBuffer[1] = scale(analogRead(1)); | ||
| - | // copy value from analog input 1 to DMX channel 2 | ||
| - | ArduinoDmx0.TxBuffer[2] = scale(analogRead(2)); | ||
| - | // copy value from analog input 2 to DMX channel 3 | ||
| - | ArduinoDmx0.TxBuffer[3] = scale(analogRead(3)); | ||
| - | // copy value from analog input 3 to DMX channel 4 | ||
| - | ArduinoDmx0.TxBuffer[4] = scale(analogRead(4)); | ||
| - | // copy value from analog input 4 to DMX channel 5 | ||
| - | ArduinoDmx0.TxBuffer[5] = scale(analogRead(5)); | ||
| - | // copy value from analog input 5 to DMX channel 6 | ||
| - | |||
| - | if (digitalRead(2) == LOW) // pulsador en pin 2 apretado | ||
| - | 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 ==== | ||
| - | < | ||
| - | / | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * Last updated | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * 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 < | ||
| - | |||
| - | // | ||
| - | // New DMX modes *** EXPERIMENTAL *** | ||
| - | // | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | |||
| - | uint8_t | ||
| - | |||
| - | 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; | ||
| - | { | ||
| - | pinMode(i, | ||
| - | // pins as inputs | ||
| - | digitalWrite(i, | ||
| - | // turn on pullup internal resistors | ||
| - | } | ||
| - | |||
| - | ArduinoDmx0.set_tx_address(1); | ||
| - | // put here DMX start address | ||
| - | |||
| - | ArduinoDmx0.set_tx_channels(100); | ||
| - | // put here the number of DMX channels to transmmit | ||
| - | |||
| - | ArduinoDmx0.init_tx(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, | ||
| - | |||
| - | buffer[0] = scale(analogRead(0)); | ||
| - | // copy value from analog input 0 to DMX channel 1 | ||
| - | buffer[1] = scale(analogRead(1)); | ||
| - | // copy value from analog input 1 to DMX channel 2 | ||
| - | buffer[2] = scale(analogRead(2)); | ||
| - | // copy value from analog input 2 to DMX channel 3 | ||
| - | buffer[3] = scale(analogRead(3)); | ||
| - | // copy value from analog input 3 to DMX channel 4 | ||
| - | buffer[4] = scale(analogRead(4)); | ||
| - | // copy value from analog input 4 to DMX channel 5 | ||
| - | buffer[5] = scale(analogRead(5)); | ||
| - | // copy value from analog input 5 to DMX channel 6 | ||
| - | |||
| - | if (digitalRead(2) == LOW) // pulsador en pin 2 apretado | ||
| - | 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 | ||
| - | 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() | ||
| - | |||
| - | // | ||
| - | </ | ||
| - | ===== Заключение ===== | ||
| - | Мы могли бы, например, | ||
| - | |||
| - | ===== Где взять комплектующие ===== | ||
| - | Все необходимое можно недорого заказать на алиэкспресс ссылки приведены ниже: | ||
| - | |||
| - | **[[http:// | ||
| - | |||
| - | **[[http:// | ||
| - | |||
| - | **[[http:// | ||
| - | |||