Equipos de iluminacion (efectos, roboticas, algo de dmx, y mucho DIY)

Aqui esta mi aporte, agregue al receptor de Niht un canal para efectos especiales... en el caso mio no utilizo el canal de blanco, por eso es de 6 canales de esta forma; canal 1 dimmer, canal 2 Red, canal 3 Green, canal 4 Blue, canal 5 strobo y canal 6 efectos o shows.

hay configurados 6 shows en el canal 6 así:

0 - 42 Show 1 fade Automatico veocidad 1 ;
43 - 85 Show 2 fade Automatico velocidad 2 ;
86 - 127 Show 3 fade Automatico velocidad 3 ;
128 - 170 Show 4 Secuencial paso a paso velocidad 1 ;
171 - 212 Show 5 Secuencial paso a paso velocidad 2 ;
213 - 255 Show 6 Audioritmico RGB ;

Al puerto A0 del arduino se le conecta un sensor de sonido como el de la imagen adjunta, al pin A0 del mismo.

aqui el codigo:

Código:
// 12/05/2017
// RECEPTOR DMX 6 CANALES
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 STROBO, 6 EFECTOS
// Implementacion de Canal efectos especiales
// Djsound


// 28/04/2017
// RECEPTOR DMX 6 CANALES 
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 BLANCO, 6 STROBO
// Implementacion de Canal Strobo
// Niht Gonzalez C.


// 30/01/2013
// Set y visualización de la dirección DMX para controlador DMX Arduino
// Leer datos de la dirección DMX y salida PWM
// Primer Canal = dimmer general (multiplicador)
// http://www.city416.ru/
 
// http://www.mathertel.de/License.aspx
// Acuerdo de licencia de software (Licencia BSD)
// Copyright (C) 2005 a 2014 de Matthias Hertel, http://www.mathertel.de/
// Todos los derechos reservados.
// La redistribución y el uso en formas de fuente y binario, con o sin modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:
// • Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia. 
// • Las redistribuciones en formato binario deben reproducir el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia en la documentación y / u otros materiales proporcionados con la distribución. 
// • Ni el nombre de los propietarios de derechos de autor ni los nombres de sus colaboradores pueden usarse para apoyar o promocionar productos derivados de este software sin el consentimiento previo por escrito. 
// ESTE SOFTWARE SE PROPORCIONA LOS PROPIETARIOS DEL COPYRIGHT Y SUS COLABORADORES "tal cual" y EXPRESA O IMPLÍCITAS, INCLUYENDO, 
// PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIALIZACIÓN Y APTITUD PARA UN FIN DETERMINADO. IN NO CASO EL PROPIETARIO COPYRIGHT O COLABORADORES responsables de daños directos,, INCIDENTAL, O INDIRECTOS ESPECIALES, 
// EJEMPLARES DERIVADOS (INCLUYENDO, pero no limitado a, ADQUISICIÓN DE BIENES O SERVICIOS; PÉRDIDA DE USO, DATOS O GANANCIAS; O INTERRUPCIÓN COMERCIAL) CAUSADOS Y EN CUALQUIER TEORÍA DE RESPONSABILIDAD, SEA CONTRACTUAL, 
// RESPONSABILIDAD ESTRICTA O AGRAVIO (INCLUYENDO NEGLIGENCIA) DERIVADOS DE CUALQUIER FORMA DE USO DE ESTE SOFTWARE, AUNQUE advertido de la posibilidad DE TAL DAÑO.


#include <TM1637.h>                    // display TM1637 libreria 
#include <EEPROM.h>                    // EEPROM libreria
#include <DMXSerial.h>                 // DMXSerial library: http://www.mathertel.de/Arduino/DMXSerial.aspx //
#define MODEPIN  7                     // entrada para Boton Modo
#define UPPIN    8                     // entrada para Boton incrementa direccion DMX
#define DOWNPIN  12                    // entrada para Boton decrementa direccion DMX
#define SETPIN   1                     // entrada boton ok
#define KEYSPEED    100                // buttons action trheshold, 200 ms
#define KEEPDMXDISP  30                // keep DMX address on screen, sec
#define PWM1 3    //red                     // Pines de Salidas para el PWM
#define PWM2 5    //green
#define PWM3 6    //blue
#define PWM4 9
#define delayTime1 5
#define delayTime2 2
#define delayTime3 1



TM1637 tm1637(2,4);                     // CLK & DIO salidas para Display TM1637

int           strobo=0;                 // Strober
int           fx=0;                     // efectos 

  
int threshold =532;                    //sensibilidad  de audio


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
unsigned long last_disp=millis();      // last screen update timestamp**
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

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(0,0x0d);
    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(){
 
  pinMode(PWM1,OUTPUT);          //red      // Iniciar pines de salida
  pinMode(PWM2,OUTPUT);         //green
  pinMode(PWM3,OUTPUT);         //blue
  pinMode(PWM4,OUTPUT);
  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();
}

int redVal;   // rojo
int blueVal;  // azul
int greenVal; // verde


void loop(){
  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);                            // Letura de canales DMX
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));    // Canal Rojo 2
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));    // Canal Verdde 3
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));    // Canal Azul 4
   // analogWrite(PWM4,(DMXSerial.read(dmxaddr+4)*mult/256));    // Canal Blanco 5

    strobo = (DMXSerial.read(dmxaddr+4));  // Canal Strobo 6

    
 int stroboporcent = map(strobo, 0, 255, 400, 10);             

 if ( strobo > 1 ) {
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));

    delay (stroboporcent);
    
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);

    delay(stroboporcent);
  }


fx = (DMXSerial.read(dmxaddr+5));


int show = map(fx, -42, 256,0,7); // SELECCION  6 SHOWS 

if ( show == 1 ){        // SHOW1 FADE VEL1
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime1 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime1 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime1 );
  }

 }
if ( show == 2 ){ // SHOW FADE VEL2
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime2 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime2 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime2 );
  }

 }

if ( show == 3 ){ // SHOW FADE VEL3
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime3 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime3 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime3 );
  }
 }
if ( show == 4 ){ // SHOW secuencia 1
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(500);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(500);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(500);
 }
 
 if ( show == 5 ){ // SHOW secuencial 2
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(150);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(150);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(150);
 }

if ( show == 6 ){ // SHOW AUDIO RITMICO
 
  int sensorValue = analogRead(A0); //A0 es la entrada a la que se conecta el módulo
  if(sensorValue<=threshold){
   digitalWrite(PWM1, HIGH);
   digitalWrite(PWM2, HIGH);
   digitalWrite(PWM3, HIGH); //
   delay(50);
   digitalWrite(PWM1, LOW);
   digitalWrite(PWM2, LOW);
   digitalWrite(PWM3, LOW);}


 }

 
 }  // final final
}
 

Adjuntos

  • hh.jpg
    hh.jpg
    23.3 KB · Visitas: 13
Última edición:
:) Un ultimo aporte.... el diseño en PCB Wizzard del receptor, esta divido en 2 placas para facilidad de montaje en el aparato, tablero con el Display, botones Micrófono y Potenciometro de sensibilidad de audio y la tarjeta con el Atmega y max485, de igual forma adjunto el codigo corregido, con la configuración de pines para este PCB. ha se me olvidaba, reemplace el sensor de audio, por un micrófono de electret. Espero este bien y quedo atento a sus comentarios. :angel:

Código:
// 12/05/2017
// RECEPTOR DMX 6 CANALES
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 STROBO, 6 EFECTOS
// Implementacion de Canal efectos especiales
// Djsound


// 28/04/2017
// RECEPTOR DMX 6 CANALES 
// 1 DIMMER GENERAL, 2 ROJO, 3 VERDE, 4 AZUL, 5 BLANCO, 6 STROBO
// Implementacion de Canal Strobo
// Niht Gonzalez C.


// 30/01/2013
// Set y visualización de la dirección DMX para controlador DMX Arduino
// Leer datos de la dirección DMX y salida PWM
// Primer Canal = dimmer general (multiplicador)
// http://www.city416.ru/
 
// http://www.mathertel.de/License.aspx
// Acuerdo de licencia de software (Licencia BSD)
// Copyright (C) 2005 a 2014 de Matthias Hertel, http://www.mathertel.de/
// Todos los derechos reservados.
// La redistribución y el uso en formas de fuente y binario, con o sin modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:
// • Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia. 
// • Las redistribuciones en formato binario deben reproducir el aviso de copyright anterior, esta lista de condiciones y la siguiente renuncia en la documentación y / u otros materiales proporcionados con la distribución. 
// • Ni el nombre de los propietarios de derechos de autor ni los nombres de sus colaboradores pueden usarse para apoyar o promocionar productos derivados de este software sin el consentimiento previo por escrito. 
// ESTE SOFTWARE SE PROPORCIONA LOS PROPIETARIOS DEL COPYRIGHT Y SUS COLABORADORES "tal cual" y EXPRESA O IMPLÍCITAS, INCLUYENDO, 
// PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIALIZACIÓN Y APTITUD PARA UN FIN DETERMINADO. IN NO CASO EL PROPIETARIO COPYRIGHT O COLABORADORES responsables de daños directos,, INCIDENTAL, O INDIRECTOS ESPECIALES, 
// EJEMPLARES DERIVADOS (INCLUYENDO, pero no limitado a, ADQUISICIÓN DE BIENES O SERVICIOS; PÉRDIDA DE USO, DATOS O GANANCIAS; O INTERRUPCIÓN COMERCIAL) CAUSADOS Y EN CUALQUIER TEORÍA DE RESPONSABILIDAD, SEA CONTRACTUAL, 
// RESPONSABILIDAD ESTRICTA O AGRAVIO (INCLUYENDO NEGLIGENCIA) DERIVADOS DE CUALQUIER FORMA DE USO DE ESTE SOFTWARE, AUNQUE advertido de la posibilidad DE TAL DAÑO.


#include <TM1637.h>                    // display TM1637 libreria 
#include <EEPROM.h>                    // EEPROM libreria
#include <DMXSerial.h>                 // DMXSerial library: http://www.mathertel.de/Arduino/DMXSerial.aspx //
#define MODEPIN  1                     // entrada para Boton Modo
#define UPPIN    2                     // entrada para Boton incrementa direccion DMX
#define DOWNPIN  3                    // entrada para Boton decrementa direccion DMX
#define SETPIN   4                     // entrada boton ok
#define KEYSPEED    100                // buttons action trheshold, 200 ms
#define KEEPDMXDISP  30                // keep DMX address on screen, sec
#define PWM1 11    //red                     // Pines de Salidas para el PWM
#define PWM2 10    //green
#define PWM3 9   //blue

#define delayTime1 5
#define delayTime2 2
#define delayTime3 1



TM1637 tm1637(6,7);                     // CLK & DIO salidas para Display TM1637

int           strobo=0;                 // Strober
int           fx=0;                     // efectos 
int           audio=0;                     // efectos 
  


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
unsigned long last_disp=millis();      // last screen update timestamp**
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

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(0,0x0d);
    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(){
 
  pinMode(PWM1,OUTPUT);          //red      // Iniciar pines de salida
  pinMode(PWM2,OUTPUT);         //green
  pinMode(PWM3,OUTPUT);         //blue

  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();
}

int redVal;   // rojo
int blueVal;  // azul
int greenVal; // verde


void loop(){
  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);                            // Letura de canales DMX
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));    // Canal Rojo 2
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));    // Canal Verdde 3
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));    // Canal Azul 4
   // analogWrite(PWM4,(DMXSerial.read(dmxaddr+4)*mult/256));    // Canal Blanco 5

    strobo = (DMXSerial.read(dmxaddr+4));  // Canal Strobo 6

    
 int stroboporcent = map(strobo, 0, 255, 400, 10);             

 if ( strobo > 1 ) {
    analogWrite(PWM1,(DMXSerial.read(dmxaddr+1)*mult/256));
    analogWrite(PWM2,(DMXSerial.read(dmxaddr+2)*mult/256));
    analogWrite(PWM3,(DMXSerial.read(dmxaddr+3)*mult/256));

    delay (stroboporcent);
    
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);

    delay(stroboporcent);
  }


fx = (DMXSerial.read(dmxaddr+5));


int show = map(fx, -42, 256,0,7); // SELECCION  6 SHOWS 

if ( show == 1 ){        // SHOW1 FADE VEL1
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime1 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime1 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime1 );
  }

 }
if ( show == 2 ){ // SHOW FADE VEL2
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime2 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime2 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime2 );
  }

 }

if ( show == 3 ){ // SHOW FADE VEL3
 
 int redVal = 255;
 int blueVal = 0;
 int greenVal = 0;

   for( int i = 0 ; i < 255 ; i += 1 ){
    greenVal += 1;
    redVal -= 1;
    
    analogWrite( PWM2, 255 - greenVal );
    analogWrite( PWM1, 255 - redVal );

    delay( delayTime3 );
  }

  redVal = 0;
  blueVal = 0;
  greenVal = 255;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    blueVal += 1;
    greenVal -= 1;
    
    analogWrite( PWM3, 255 - blueVal );
    analogWrite( PWM2, 255 - greenVal );

    delay( delayTime3 );
  }
 
  redVal = 0;
  blueVal = 255;
  greenVal = 0;
 
  for( int i = 0 ; i < 255 ; i += 1 ){
    redVal += 1;
    blueVal -= 1;
 
    analogWrite( PWM1, 255 - redVal );
    analogWrite( PWM3, 255 - blueVal );

    delay( delayTime3 );
  }
 }
if ( show == 4 ){ // SHOW secuencia 1
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(500);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(500);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(500);
 }
 
 if ( show == 5 ){ // SHOW secuencial 2
 
    analogWrite(PWM1, 255);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 0);
    
    delay(150);
   
    analogWrite(PWM1, 0);
    analogWrite(PWM2, 255);
    analogWrite(PWM3, 0);
    
    delay(150);

    analogWrite(PWM1, 0);
    analogWrite(PWM2, 0);
    analogWrite(PWM3, 255);
    
    delay(150);
 }

if ( show == 6 ){ // SHOW AUDIO RITMICO

int sensi =532;                    //sensibilidad  de audio

 
  int sensorValue = analogRead(A4); //A4 es la entrada a la que se conecta el módulo
  if(sensorValue<=sensi){
   digitalWrite(PWM1, HIGH);
   digitalWrite(PWM2, HIGH);
   digitalWrite(PWM3, HIGH); //
   delay(50);
   digitalWrite(PWM1, LOW);
   digitalWrite(PWM2, LOW);
   digitalWrite(PWM3, LOW);}


 }

 
 }  // final final
}
 

Adjuntos

  • PCB1.png
    PCB1.png
    96.4 KB · Visitas: 107
  • PCB2.png
    PCB2.png
    26.1 KB · Visitas: 72
  • DMXRECEPTOR_final.rar
    31 KB · Visitas: 75
Última edición:
Estimados, saludos y consulta.

Donde puedo comprar lentes en China, que sean auto regulables, que estoy en un proyecto para fabricar un proyector de logos publicitarios y me falta ese detalle.
 
Gracias por el dato, pero mi idea es encontrar una tienda con la que pueda pagar con Neteller o Paypal y que tenga envio directo a mi pais (Chile) sin necesidad de contratar casilla, como lo hago a traves de china comprando en aliexpress
 
Última edición por un moderador:
Bueno hasta ahí se comprende pero en si busca solo los lentes o todo el modulo:unsure:

¿Tiene algunos modelos pensados para el Proyector?

Tiendas Chinas hay muchas lo dificil es saber cual es la mejor y fiable.

Yo si prefiero una tienda no China en lo posible, le recomiendo esta es muy buena y tiene lo que usted busca:

https://cvp.com/product/dedolight_dp1.1
 
Última edición por un moderador:
Mira, la idea es hacer algo parecido a este proyector:

La circuiteria la tengo en mente, usare pastillas led de 50w y para el sistema donde va fijo el logo sera un sistema simple de rotacion por engranes que tendra un motor nema17 y sera controlado manualmente por un potenciometro (y su respectivo circuito).

Lo que me falta y necesito el el lente, que proyectara el logo y que necesito que enfoque de forma manual, para asi dejarla instalada de forma fija y poder regular la nitidez directamente (como sale en el video)
 
Última edición por un moderador:
Es igual al de ADJ pero de 60W pensé que iba a construir un proyector muy profesional:unsure: son lentes cóncavo/convexo.

Cuantos piensa construir?


 
Última edición por un moderador:
Sep, es algo parecido y lo que busco hacer es simplemente un proyector que cumpla esa funcion, proyectar logos, por ello preguntaba si habia algun kit en el que viniera la lente frontal que aparece ahi con regulacion manual y no tener que recurrir a buscarla de algun proyector viejo o de donde pueda sacarla.
 
Última edición por un moderador:
Pues lo primero es buscar y agotar toda posibilidad de encontrar alguno parecido en su país no? Si no lo hay pues si lo encarga el manual focus lens, porque no le entendía eso de lentes autoregulables:unsure:


Por aquí echele un vistazo a lo mejor encuentra alguno que se adapte.


https://articulo.mercadolibre.cl/MLC-435085056-lentes-concavos-convexos-planos-de-doble-cara-_JM

Pues esos si los venden pero toca ver si cumple sus expectativas y es seguro la compra.

Rosco_Image_Spot_Accessory_Lens_19.jpg


image_spot_feature4_6.png


Es por ello que le preguntaba si le servían los Eco Spot.

ES-FC-20-25-Lens-300-h.jpg


Gobosource es una tienda muy confiable y puede pagar con Paypal para comprar partes:

https://www.gobosource.com/gos/gobosource-spot-lens-desize-f70mm-20º28º-medium-p-2986.html


El focus manual o lens barrel DIY lo puede hacer con acople pvc o algo similar, incluso con un tubo de sintonia queda muy bien:

pvc-socket-union-plain-imperial--4153-p.jpg
 
Última edición por un moderador:
Exactamente es lo que busco, un lente con enfoque manual, voy a revisar la página que me diste y veré que tal me va. Gracias por el dato :apreton:
 
Última edición por un moderador:
yo hice mis proyectores de imagenes con un simple lente que compre en una optica (que hagan lentes para los ojos), seguro que en tu ciudad hay una!! No se que tanta precision en la imagen necesitas, pero si son solo figuras con un lente vas bien, si tenes que proyectar alguna imagen con texto o algo asi, que tenga que ser bien definido, ahi si, necesitas un triplet para no tener las aberraciones cromaticas por utilizar un solo lente.
 
Para letreros con alta nitidez y sin desenfocar, eso si toca con unos buenos lentes ni lupitas chinas ni nada de ello sirve.

Son 3 lentes para lograr una proyección de alta calidad, 2 lentes para enfocar la distancia focal length, estos reciben el nombre de Field Lens son plano convexo donde su parte plata se enfrenta, hay otra configuración donde los lentes que enfocan la distancia, se colocan con su parte convexa enfrentados recibe el nombre de condenser lens, esto lo realizan dependiendo del tipo de lampara o fuente de luz a usar. El lente para el objetivo que va colocado en el focal es una lente convergente convexo de ciertos grados.

Dependiendo del angulo de apertura del lente y diámetro de este mismo, así mismo se podrá calcular la distancia focal y poder regular de forma manual el lente focal.

54413-beam-spread.jpg
 
Hola
Lo que proyectaré son logos empresariales, varios tienen letras grandes y pequeñas, me podrias orientar mas por favor?
Lo que el amigo Fuegomp3 te esta tambien sujiriendo​
Es que te olvidas de lo mas importante .,y que no tenes en cuenta​
Los lentes que compres de un equipo determinado ., casi seguro que en el tuyo no funcionan​
El led casi seguro ., lleva un lente concentrador ., si el tuyo no lo lleva ., seguricimo que alli empizan los problemas​
Yo te aconsejo ., que vallas alguna libreria y consigas algunas lupas (de diferente tipo y angulo)​
Lo importante es que sean de vidrio (no son caras)., luego hagas varias pruebas para saber cual es la distancia focal que necesitas​
Que por lo general no son ni parecidas a los equipos comerciales ., entonces luego ves la manera de realizar el montaje mecanico​
Hay una infinidad de tipos de caños plasticos de polietileno (son de color negro y no hace falta pintar)​
a diametros distintos.jpg
Por ejemplo ., una brida para tanque australiano (se usa en el campo agricola/ganadero) ., sobre on tapon para el mismo​
Se perfora (al diametro requerido) y se coloca el lente ., y luego se sujeta con un seguro de acero u otro sistema​
acacesorios de polietileno.jpg
Y te queda muy prolijo e igual al sistema comercial​
Este tema se trato un monton de veces en este hilo ., incluso con ejemplos reales​
 
Bueno, incisto en algo, si es muy detallista necesitas un TRIPLET
triplet.gif

Y aca te muestro lo que arme yo para el enfoque manual del triplet en mi proyector casero:
pr73.jpg

Al girarlo el lente avanza o retrocede...
 

Adjuntos

  • pr70.jpg
    pr70.jpg
    37.6 KB · Visitas: 12
  • pr71.jpg
    pr71.jpg
    43.1 KB · Visitas: 12
  • pr72.jpg
    pr72.jpg
    46.2 KB · Visitas: 12
Última edición:
Hola
Lo que :no: se arregla con un pedazo de alambre :no: tiene arreglo ;)
Esssssssttttteeeeeeeeee ....¡¡¡¡¡ si señor !!!! ., "lo atamo con alambre " ., jajajajajajajajajajajajajajajaj​
Amigo Fuegomp3
Bueno, incisto en algo, si es muy detallista necesitas un TRIPLET
Ver el archivo adjunto 161878
Y aca te muestro lo que arme yo para el enfoque manual del triplet en mi proyector casero:
Ver el archivo adjunto 161877
Al girarlo el lente avanza o retrocede...
Eso es lo que digo yo ., y muestro mis lentes (una foto vale mas que mil explicaciones)​
Estan puestas en secuencia de montaje​
foto 1.jpg foto 2.jpg foto 3.jpg foto 4.jpg foto 5.jpg foto 6.jpg foto 7.jpg foto 8.jpg foto 9.jpg
Como veran ., es para un scaner 100% casero​
Y como dijo el amigo Fuegomp3 ., son tres lentes (notece el 3° lente en la chapa para lograr el foco)​
Si ustedes se preguntan ¿¿¿ de que es el plastico ???? ., bueno es de la descarga para piletas de cosina​
El sistema se desplaza el exterior (entra bastante ajustado)., que es el que tiene el lente mas grande​
El otro esta pegado ala chapa con "FASTIX" siliconado ., tambien noten las varillas rozcadas ., para poder regular la distancia de foco (focal)​
 
Atrás
Arriba