zheleznaja_chast:dmx_512_kontroller_na_osnove_arduino

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
zheleznaja_chast:dmx_512_kontroller_na_osnove_arduino [2022/12/23 22:21] – [Где взять комплектующие] slyfoxleozheleznaja_chast:dmx_512_kontroller_na_osnove_arduino [2025/12/24 10:32] (текущий) – удалено 216.73.216.10
Строка 1: Строка 1:
-====== USB DMX 512 контроллер на основе Arduino своими руками====== 
-Создать свой [[:wiki:dmx_512|dmx]] 512 контроллер не составит труда, на базе микроконтроллера Arduino. 
-====== Технические характеристики ====== 
-В конфигурации, мы имеем 6 каналов с переменными значениями, предусмотренные 6 потенциометров, соединенных с Arduino на аналоговых входов, 10-битовые значения сводятся к 8 битам (0-255 которые используются [[:wiki:dmx_512|DMX]]), и 12 каналов с включения-выключения значения с 12 кнопками, подключенных к цифровых входов Arduino, цифровые входы с использованием Arduino внутренние резисторы подтяжки, так что если кнопка нажата входное значение 0, и, если он свободен входное значение 1. 
-====== Общая информация ====== 
- 
-<note>Исходный код открыт, и выложен в сети <del>интернетах</del> в открытом доступе.</note> 
-Мы будем использовать **Arduino Mega**, или **Arduino Uno** для основной базы контроллера.  
-<note important>Известные проблемы: 
- 
-Когда мы будем компилировать исходный код и получим ошибку: //‘ArduinoDmxN’ was not Declared In This scope:// 
- 
-Проверьте, правильно ли настроен правильный тип правления в **Arduino IDE**, меню Сервис> доска  
-(с Arduino Nano может использовать только один **USART** = **ArduinoDmx0** = **USART0**)  
- 
-</note> 
-<note important>Перед тем как перепрограмировать Arduino, необходимо отключить его от общей сборки. 
-</note> 
- 
-===== Исходный код и библиотеки ===== 
-Подключаемая библиотека [[http://dmx-512.ru/ardu/arduino-four.zip|arduino-four.zip]] 
-===== Сборка ===== 
-Сборка состоит из микроконтролера    
-  
-  * 1 Arduino UNO(MEGA)  
-  * 1 Маломощного трансивера, [[:wiki:electronnie_komponenty:max485|MAX485]]  
-  * 1 резистора на 220khm 
-  * 6 потенциометров(димеров) 
-  * 12 кнопок. 
-{{:zheleznaja_chast:schematic-arduino-dmx-controller.png?400|}} 
-  - Подключаем к входам ардуино с 2 по 13 выходы кнопки, а к gnd цепляем землю.  
-  - К аналоговым входам подключаем потенциометрыс с 1 по 5 выходы. Подключаем землю и выход 5V. Как показано на рисунке. 
-  - Подключаем к входу и выходу RX TX микросхему [[:wiki:electronnie_komponenty:max485|MAX485]], как вариант можно использовать аналог MAX487 или SN75176 к земле цепляем резистор на 220 килоом. Выход с микросхемы и есть управляющий сигнал [[:wiki:dmx_512|DMX]] 
-{{:zheleznaja_chast:arduino-dmx-controller.png?300|}} 
-===== Прошивка контроллера ===== 
-Будем использовать 1 библиотеку. 
-===== Примеры ===== 
-Пример тестового кода прошивки микроконтроллера. 
-==== Пример кода №1 ==== 
- 
-<code cpp ArduinoDMXExample1.ino> 
-//********************************************************************************************************* 
-#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, [[:wiki:dmx_512|DMX]] 4x or [[:wiki:dmx_512|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 [[:wiki:dmx_512|DMX]]  
-                                      // put here [[:wiki:dmx_512|DMX]] start address  
-  
-  ArduinoDmx0.set_tx_channels(100);   // poner aqui el numero de canales a transmitir  
-                                      // put here the number of [[:wiki:dmx_512|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 [[: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 [[: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 
-                                                  // 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 [[:wiki:dmx_512|DMX]] 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 
-                                                  // 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 [[:wiki:dmx_512|DMX]] 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 
-                                                  // 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 [[:wiki:dmx_512|DMX]] 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 
-    ArduinoDmx0.TxBuffer[6] = 255; // enviar 255 al canal [[:wiki:dmx_512|DMX]] 7   // send value 255 to [[:wiki:dmx_512|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 [[:wiki:dmx_512|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() 
-  
-//************************************************************************************************************* 
- 
-</code> 
-==== Пример кода №2 ==== 
-<code cpp ArduinoDMXExample2.ino> 
-/************************************************************************************************************* 
-* 
-*   Title           : Controlador [[:wiki:dmx_512|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 [[: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 [[:wiki:dmx_512|DMX]]  
-*   solo cuando se presiona el pulsador correspondiente. (canales de salida 1 al 6)  
-* 
-**************************************************************************************************************/ 
-#include <lib_dmx.h>  // libreria [[:wiki:dmx_512|DMX]] 4 universos   // deskontrol four universes [[:wiki:dmx_512|DMX]] library  - www.deskontrol.net/blog 
-  
-//********************************************************************************************************* 
-//                        New [[:wiki:dmx_512|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, [[:wiki:dmx_512|DMX]] 4x or [[:wiki:dmx_512|DMX]] 1M ??? 
-  
-uint8_t    buffer[6];        // buffer [[:wiki:dmx_512|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 [[:wiki:dmx_512|DMX]]  
-                                      // put here [[:wiki:dmx_512|DMX]] start address  
-                                        
-  ArduinoDmx0.set_tx_channels(100);   // poner aqui el numero de canales a transmitir  
-                                      // put here the number of [[:wiki:dmx_512|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 [[: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 [[: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 
-                                    // copy value from analog input 0 to DMX channel 1 
-  buffer[1] = scale(analogRead(1)); // copiar valor de la entrada analogica 1 al canal [[:wiki:dmx_512|DMX]] 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 
-                                    // copy value from analog input 2 to DMX channel 3 
-  buffer[3] = scale(analogRead(3)); // copiar valor de la entrada analogica 3 al canal [[:wiki:dmx_512|DMX]] 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 
-                                    // copy value from analog input 4 to DMX channel 5 
-  buffer[5] = scale(analogRead(5)); // copiar valor de la entrada analogica 5 al canal [[:wiki:dmx_512|DMX]] 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 
-    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 
-    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() 
-  
-//************************************************************************************************************************ 
-</code> 
-===== Заключение ===== 
-Мы могли бы, например, использовать EEPROM((Энергонезависимая память устройства)) чтобы хранить значения DMX в EEPROM и извлекать для загрузки сцен ... 
- 
-===== Где взять комплектующие ===== 
-Все необходимое можно недорого заказать на алиэкспресс ссылки приведены ниже: 
- 
-**[[http://ali.pub/9op65|Arduino UNO]]** ~ 253-400 руб. 
- 
-**[[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 кнопок. 
- 
-{{tag>контроллеры dmx512 устройство своими руками паяем ардуино max485}} 
  
  • zheleznaja_chast/dmx_512_kontroller_na_osnove_arduino.1671834105.txt.gz
  • Последнее изменение: 2022/12/23 22:21
  • (внешнее изменение)