Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
zheleznaja_chast:dmx_512_kontroller_na_osnove_arduino [2016/07/02 22:53]
Leo [Где взять комплектующие]
zheleznaja_chast:dmx_512_kontroller_na_osnove_arduino [2017/12/08 23:20] (текущий)
Leo [Где взять комплектующие]
Строка 1: Строка 1:
 ====== USB DMX 512 контроллер на основе Arduino своими руками====== ====== USB DMX 512 контроллер на основе Arduino своими руками======
-Создать свой dmx 512 контроллер не составит труда, на базе микроконтроллера Arduino.+Создать свой ​[[:​wiki:​dmx_512|dmx]] 512 контроллер не составит труда, на базе микроконтроллера Arduino.
 ====== Технические характеристики ====== ====== Технические характеристики ======
-В конфигурации,​ мы имеем 6 каналов с переменными значениями,​ предусмотренные 6 потенциометров,​ соединенных с Arduino на аналоговых входов,​ 10-битовые значения сводятся к 8 битам (0-255 которые используются DMX), и 12 каналов с включения-выключения значения с 12 кнопками,​ подключенных к цифровых входов Arduino, цифровые входы с использованием Arduino внутренние резисторы подтяжки,​ так что если кнопка нажата входное значение 0, и, если он свободен входное значение 1.+В конфигурации,​ мы имеем 6 каналов с переменными значениями,​ предусмотренные 6 потенциометров,​ соединенных с Arduino на аналоговых входов,​ 10-битовые значения сводятся к 8 битам (0-255 которые используются ​[[:​wiki:​dmx_512|DMX]]), и 12 каналов с включения-выключения значения с 12 кнопками,​ подключенных к цифровых входов Arduino, цифровые входы с использованием Arduino внутренние резисторы подтяжки,​ так что если кнопка нажата входное значение 0, и, если он свободен входное значение 1.
 ====== Общая информация ====== ====== Общая информация ======
  
Строка 11: Строка 11:
 Когда мы будем компилировать исходный код и получим ошибку:​ //​‘ArduinoDmxN’ was not Declared In This scope:// Когда мы будем компилировать исходный код и получим ошибку:​ //​‘ArduinoDmxN’ was not Declared In This scope://
  
-Проверьте,​ правильно ли настроен правильный тип правления в Arduino IDE, меню Сервис>​ доска  +Проверьте,​ правильно ли настроен правильный тип правления в **Arduino IDE**, меню Сервис>​ доска  
-(с Arduino Nano может использовать только один USART = ArduinoDmx0 = USART0) ​+(с Arduino Nano может использовать только один ​**USART** **ArduinoDmx0** **USART0**
  
-ошибки при программирование Arduino: ​ 
-Перед тем как перепрограмировать Arduino, необходимо отключить его от общей сборки. 
 </​note>​ </​note>​
 +<note important>​Перед тем как перепрограмировать Arduino, необходимо отключить его от общей сборки.
 +</​note>​
 +
 ===== Исходный код и библиотеки ===== ===== Исходный код и библиотеки =====
 Подключаемая библиотека [[http://​dmx-512.ru/​ardu/​arduino-four.zip|arduino-four.zip]] Подключаемая библиотека [[http://​dmx-512.ru/​ardu/​arduino-four.zip|arduino-four.zip]]
Строка 23: Строка 24:
    
   * 1 Arduino UNO(MEGA) ​   * 1 Arduino UNO(MEGA) ​
-  * 1 Маломощного трансивера,​ MAX485 ​+  * 1 Маломощного трансивера, ​[[:​wiki:​electronnie_komponenty:​max485|MAX485]] 
   * 1 резистора на 220khm   * 1 резистора на 220khm
   * 6 потенциометров(димеров)   * 6 потенциометров(димеров)
Строка 30: Строка 31:
   - Подключаем к входам ардуино с 2 по 13 выходы кнопки,​ а к gnd цепляем землю. ​   - Подключаем к входам ардуино с 2 по 13 выходы кнопки,​ а к gnd цепляем землю. ​
   - К аналоговым входам подключаем потенциометрыс с 1 по 5 выходы. Подключаем землю и выход 5V. Как показано на рисунке.   - К аналоговым входам подключаем потенциометрыс с 1 по 5 выходы. Подключаем землю и выход 5V. Как показано на рисунке.
-  - Подключаем к входу и выходу RX TX микросхему ​MAX 485, как вариант можно использовать аналог MAX487 или SN75176 к земле цепляем резистор на 220 килоом. Выход с микросхемы и есть управляющий сигнал DMX+  - Подключаем к входу и выходу RX TX микросхему ​[[:​wiki:​electronnie_komponenty:​max485|MAX485]], как вариант можно использовать аналог MAX487 или SN75176 к земле цепляем резистор на 220 килоом. Выход с микросхемы и есть управляющий сигнал ​[[:​wiki:​dmx_512|DMX]]
 {{:​zheleznaja_chast:​arduino-dmx-controller.png?​300|}} {{:​zheleznaja_chast:​arduino-dmx-controller.png?​300|}}
 ===== Прошивка контроллера ===== ===== Прошивка контроллера =====
Строка 38: Строка 39:
 ==== Пример кода №1 ==== ==== Пример кода №1 ====
  
-<file>+<code cpp ArduinoDMXExample1.ino>
 //​********************************************************************************************************* //​*********************************************************************************************************
 #include <​lib_dmx.h> ​ // Подключаем скаченую нами библиотеку #include <​lib_dmx.h> ​ // Подключаем скаченую нами библиотеку
Строка 47: Строка 48:
 #​define ​   DMX512 ​    ​(0) ​   // (250 kbaud - 2 от 512 каналов) Стандарт USITT DMX-512 #​define ​   DMX512 ​    ​(0) ​   // (250 kbaud - 2 от 512 каналов) Стандарт USITT DMX-512
 #​define ​   DMX1024 ​   (1)    // (500 kbaud - 2 от 1024 каналов) Не стандарт,​ проверка. #​define ​   DMX1024 ​   (1)    // (500 kbaud - 2 от 1024 каналов) Не стандарт,​ проверка.
-#​define ​   DMX2048 ​   (2)    // (1000 kbaud - 2 от 2048 каналов) called by manufacturers DMX1000K, DMX 4x or DMX 1M ???+#​define ​   DMX2048 ​   (2)    // (1000 kbaud - 2 от 2048 каналов) called by manufacturers DMX1000K, ​[[:​wiki:​dmx_512|DMX]] 4x or [[:​wiki:​dmx_512|DMX]] 1M ???
    
 void setup() ​ void setup() ​
Строка 61: Строка 62:
   }   }
    
-  ArduinoDmx0.set_tx_address(1); ​     // poner aqui la direccion de inicio de DMX  +  ArduinoDmx0.set_tx_address(1); ​     // poner aqui la direccion de inicio de [[:​wiki:​dmx_512|DMX]]  
-                                      // put here DMX start address ​+                                      // put here [[:​wiki:​dmx_512|DMX]] start address ​
    
   ArduinoDmx0.set_tx_channels(100); ​  // poner aqui el numero de canales a transmitir ​   ArduinoDmx0.set_tx_channels(100); ​  // poner aqui el numero de canales a transmitir ​
-                                      // put here the number of DMX channels to transmmit+                                      // put here the number of [[:​wiki:​dmx_512|DMX]] channels to transmmit
    
   ArduinoDmx0.init_tx(DMX512); ​       // iniciar transmision universo 0, modo estandar DMX512   ArduinoDmx0.init_tx(DMX512); ​       // iniciar transmision universo 0, modo estandar DMX512
Строка 73: Строка 74:
 void loop() void loop()
 { {
-  // seis entradas con potenciometros que envian valores DMX entre 0 y 255 a los canales 1 al 6 +  // seis entradas con potenciometros que envian valores ​[[:​wiki:​dmx_512|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+  // six analog inputs with potentiometers,​ sending values from 0 to 255, to [[:​wiki:​dmx_512|dmx]] output channels 1 to 6
    
   ArduinoDmx0.TxBuffer[0] = scale(analogRead(0));​ // copiar valor de la entrada analogica 0 al canal DMX 1   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                                                   // 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 +  ArduinoDmx0.TxBuffer[1] = scale(analogRead(1));​ // copiar valor de la entrada analogica 1 al canal [[:​wiki:​dmx_512|DMX]] 
-                                                  // copy value from analog input 1 to DMX channel 2+                                                  // copy value from analog input 1 to [[:​wiki:​dmx_512|DMX]] channel 2
   ArduinoDmx0.TxBuffer[2] = scale(analogRead(2));​ // copiar valor de la entrada analogica 2 al canal DMX 3   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                                                   // 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 +  ArduinoDmx0.TxBuffer[3] = scale(analogRead(3));​ // copiar valor de la entrada analogica 3 al canal [[:​wiki:​dmx_512|DMX]] 
-                                                  // copy value from analog input 3 to DMX channel 4+                                                  // copy value from analog input 3 to [[:​wiki:​dmx_512|DMX]] channel 4
   ArduinoDmx0.TxBuffer[4] = scale(analogRead(4));​ // copiar valor de la entrada analogica 4 al canal DMX 5   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                                                   // 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 +  ArduinoDmx0.TxBuffer[5] = scale(analogRead(5));​ // copiar valor de la entrada analogica 5 al canal [[:​wiki:​dmx_512|DMX]] 
-                                                  // copy value from analog input 5 to DMX channel 6+                                                  // copy value from analog input 5 to [[:​wiki:​dmx_512|DMX]] channel 6
    
   if (digitalRead(2) == LOW)       // pulsador en pin 2 apretado ​ // push-button on pin 2, is pressed   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+    ArduinoDmx0.TxBuffer[6] = 255; // enviar 255 al canal [[:​wiki:​dmx_512|DMX]] 7   // send value 255 to [[:​wiki:​dmx_512|DMX]] channel 7
   else   else
     ArduinoDmx0.TxBuffer[6] = 0;   // si no enviar 0              // push-button free, send 0     ArduinoDmx0.TxBuffer[6] = 0;   // si no enviar 0              // push-button free, send 0
Строка 100: Строка 101:
    
   if (digitalRead(4) == LOW)       // pulsador en pin 4 apretado   if (digitalRead(4) == LOW)       // pulsador en pin 4 apretado
-    ArduinoDmx0.TxBuffer[8] = 255; // enviar 255 al canal DMX 9+    ArduinoDmx0.TxBuffer[8] = 255; // enviar 255 al canal [[:​wiki:​dmx_512|DMX]] 9
   else   else
     ArduinoDmx0.TxBuffer[8] = 0;   // si no enviar 0     ArduinoDmx0.TxBuffer[8] = 0;   // si no enviar 0
Строка 119: Строка 120:
 //​************************************************************************************************************* //​*************************************************************************************************************
  
-</file>+</code>
 ==== Пример кода №2 ==== ==== Пример кода №2 ====
-<file>+<code cpp ArduinoDMXExample2.ino>
 /​************************************************************************************************************* /​*************************************************************************************************************
 * *
-*   ​Title ​          : Controlador DMX con Arduino+*   ​Title ​          : Controlador ​[[:​wiki:​dmx_512|DMX]] con Arduino
 *   ​Version ​        : v 0.1 *   ​Version ​        : v 0.1
 *   Last updated ​       : 28.08.2012 *   Last updated ​       : 28.08.2012
Строка 132: Строка 133:
 * *
 * *
-*   ​Ejemplo de codigo para el mini-controlador DMX con Arduino: +*   ​Ejemplo de codigo para el mini-controlador ​[[:​wiki:​dmx_512|DMX]] con Arduino: 
-*   Este codigo lee los valores de 6 potenciometros conectados a 6 entradas analogicas y escribe cada valor en la salida DMX +*   Este codigo lee los valores de 6 potenciometros conectados a 6 entradas analogicas y escribe cada valor en la salida ​[[:​wiki:​dmx_512|DMX]] 
 *   solo cuando se presiona el pulsador correspondiente. (canales de salida 1 al 6)  *   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+#include <​lib_dmx.h> ​ // libreria ​[[:​wiki:​dmx_512|DMX]] 4 universos ​  // deskontrol four universes ​[[:​wiki:​dmx_512|DMX]] library ​ - www.deskontrol.net/​blog
    
 //​********************************************************************************************************* //​*********************************************************************************************************
-//                        New DMX modes *** EXPERIMENTAL ***+//                        New [[:​wiki:​dmx_512|DMX]] modes *** EXPERIMENTAL ***
 //​********************************************************************************************************* //​*********************************************************************************************************
 #​define ​   DMX512 ​    ​(0) ​   // (250 kbaud - 2 to 512 channels) Standard USITT DMX-512 #​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 ​   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 ???+#​define ​   DMX2048 ​   (2)    // (1000 kbaud - 2 to 2048 channels) called by manufacturers DMX1000K, ​[[:​wiki:​dmx_512|DMX]] 4x or [[:​wiki:​dmx_512|DMX]] 1M ???
    
-uint8_t ​   buffer[6]; ​       // buffer DMX data+uint8_t ​   buffer[6]; ​       // buffer ​[[:​wiki:​dmx_512|DMX]] data
    
 void setup() ​ void setup() ​
Строка 160: Строка 161:
   }   }
        
-  ArduinoDmx0.set_tx_address(1); ​     // poner aqui la direccion de inicio de DMX  +  ArduinoDmx0.set_tx_address(1); ​     // poner aqui la direccion de inicio de [[:​wiki:​dmx_512|DMX]]  
-                                      // put here DMX start address ​+                                      // put here [[:​wiki:​dmx_512|DMX]] start address ​
                                                                                
   ArduinoDmx0.set_tx_channels(100); ​  // poner aqui el numero de canales a transmitir ​   ArduinoDmx0.set_tx_channels(100); ​  // poner aqui el numero de canales a transmitir ​
-                                      // put here the number of DMX channels to transmmit+                                      // put here the number of [[:​wiki:​dmx_512|DMX]] channels to transmmit
                                                                                
   ArduinoDmx0.init_tx(DMX512); ​       // iniciar transmision universo 0, modo estandar DMX512   ArduinoDmx0.init_tx(DMX512); ​       // iniciar transmision universo 0, modo estandar DMX512
Строка 172: Строка 173:
 void loop() 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 +  // seis entradas con potenciometros que envian valores ​[[:​wiki:​dmx_512|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+  // six analog inputs with potentiometers,​ sending values from 0 to 255, to [[:​wiki:​dmx_512|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   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                                     // 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 +  buffer[1] = scale(analogRead(1));​ // copiar valor de la entrada analogica 1 al canal [[:​wiki:​dmx_512|DMX]] 
-                                    // copy value from analog input 1 to DMX channel 2+                                    // copy value from analog input 1 to [[:​wiki:​dmx_512|DMX]] channel 2
   buffer[2] = scale(analogRead(2));​ // copiar valor de la entrada analogica 2 al canal DMX 3   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                                     // 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 +  buffer[3] = scale(analogRead(3));​ // copiar valor de la entrada analogica 3 al canal [[:​wiki:​dmx_512|DMX]] 
-                                    // copy value from analog input 3 to DMX channel 4+                                    // copy value from analog input 3 to [[:​wiki:​dmx_512|DMX]] channel 4
   buffer[4] = scale(analogRead(4));​ // copiar valor de la entrada analogica 4 al canal DMX 5   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                                     // 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 +  buffer[5] = scale(analogRead(5));​ // copiar valor de la entrada analogica 5 al canal [[:​wiki:​dmx_512|DMX]] 
-                                    // copy value from analog input 5 to DMX channel 6+                                    // copy value from analog input 5 to [[:​wiki:​dmx_512|DMX]] channel 6
        
   if (digitalRead(2) == LOW)             // pulsador en pin 2 apretado ​                 // push-button on pin 2, is pressed   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+    ArduinoDmx0.TxBuffer[0] = buffer[0]; // enviar valor potenciometro al canal [[:​wiki:​dmx_512|DMX]] 1   // send analog value to [[:​wiki:​dmx_512|DMX]] channel 1
   else   else
     ArduinoDmx0.TxBuffer[0] = 0;         // si no enviar 0                              // push-button free, send 0     ArduinoDmx0.TxBuffer[0] = 0;         // si no enviar 0                              // push-button free, send 0
Строка 231: Строка 232:
    
 //​************************************************************************************************************************ //​************************************************************************************************************************
-</file>+</code>
 ===== Заключение ===== ===== Заключение =====
-Мы могли бы, например,​ использовать EEPROM(Встроенную ​память) чтобы хранить значения DMX в EEPROM и извлекать для загрузки сцен ...+Мы могли бы, например,​ использовать EEPROM((Энергонезависимая ​память ​устройства)) чтобы хранить значения DMX в EEPROM и извлекать для загрузки сцен ...
  
 ===== Где взять комплектующие ===== ===== Где взять комплектующие =====
Строка 240: Строка 241:
 **[[http://​ali.pub/​9op65|Arduino UNO]]** ~ 253-400 руб. **[[http://​ali.pub/​9op65|Arduino UNO]]** ~ 253-400 руб.
  
-**[[http://​ali.pub/​tu340|MAX485 RS-485]]** ~ 46-52 руб. партия минимум 10 штук.+**[[http://​ali.pub/​23gzet|MAX485 RS-485]]** ~ 46-52 руб. партия минимум 10 штук. 
 + 
 +**[[http://​ali.pub/​183erb|Резисторы 220 кОм]]** ~ 44-240 руб. партия минимум 100 штук. 
 + 
 +**[[http://​ali.pub/​183fen|Потенциометры]]** ~ 240-600руб. партия минимум 10 штук. 
 + 
 +**[[http://​ali.pub/​183gk2|Кнопки]]** ~ 200руб. 25 кнопок.
  
 +{(rater>​id=17|name=Понравилась статья?​Удели секунду!Отцени!|type=rate|trace=ip)}
  

Полезная статья, нажми +1 поддержи нас!