Haz una pregunta
  Foros de Electrónica » Diseño analógico » Diseño de circuitos en general
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/05/2017 #3221

Avatar de djsound

Gracias Niht, esta perfecto para unos washer led DIY que estoy elaborando. como aporte voy agregarle un canal para que haga un efecto fade automatico de la gamma de colores...!!!
12/05/2017 #3222

Avatar de djsound

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
}
18/05/2017 #3223

Avatar de djsound

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.

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
}
Imágenes Adjuntas
Tipo de Archivo: png PCB1.png (96,4 KB (Kilobytes), 50 visitas)
Tipo de Archivo: png PCB2.png (26,1 KB (Kilobytes), 28 visitas)
Archivos Adjuntos
Tipo de Archivo: rar DMXRECEPTOR_final.rar (31,0 KB (Kilobytes), 35 visitas)
06/08/2017 #3224
Moderador general

Avatar de Fogonazo

Un "Láser light show"

es "Lo mas del universo" , pero puede ser muy interesante.
Archivos Adjuntos
Tipo de Archivo: pdf Laser Light Show.pdf (1,06 MB (Megabytes), 82 visitas)
24/11/2017 #3225


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.
24/11/2017 #3226

Avatar de Fusatronica

Solo necesita los lentes? Los ECO Spot Lens son muy buenos para ese fin.

Yo los compraría mejor en USA pero si desea comprar en China aquí venden unos muy buenos.

http://www.hlol.co.uk/plano-convex-lenses.html
25/11/2017 #3227

Avatar de Fuegomp3

angel_oriel dijo: Ver Mensaje
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.
Fijate si te sirve www.optolife.com

Si llegas a comprar algo ahi contame como te fue.

Saludos.
27/11/2017 #3228


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
27/11/2017 #3229

Avatar de Fusatronica

Bueno hasta ahí se comprende pero en si busca solo los lentes o todo el modulo

¿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
27/11/2017 #3230


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)
27/11/2017 #3231

Avatar de Fusatronica

Es igual al de ADJ pero de 60W pensé que iba a construir un proyector muy profesional son lentes cóncavo/convexo.

Cuantos piensa construir?


27/11/2017 #3232


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.
27/11/2017 #3233

Avatar de Fusatronica

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


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


https://articulo.mercadolibre.cl/MLC...doble-cara-_JM

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





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



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

https://www.gobosource.com/gos/gobos...um-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:

28/11/2017 #3234


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
28/11/2017 #3235

Avatar de Fuegomp3

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.
28/11/2017 #3236


Lo que proyectaré son logos empresariales, varios tienen letras grandes y pequeñas, me podrias orientar mas por favor?
28/11/2017 #3237

Avatar de Fusatronica

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.

28/11/2017 #3238

Avatar de locodelafonola

Hola
angel_oriel dijo: Ver Mensaje
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)
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
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
Imágenes Adjuntas
Tipo de Archivo: jpg a diametros distintos.jpg (40,4 KB (Kilobytes), 23 visitas)
Tipo de Archivo: jpg acacesorios de polietileno.jpg (86,8 KB (Kilobytes), 23 visitas)
28/11/2017 #3239
Moderador general

Avatar de Fogonazo

locodelafonola dijo: Ver Mensaje
Hola . . .
Lo que se arregla con un pedazo de alambre tiene arreglo
28/11/2017 #3240

Avatar de Fuegomp3

Bueno, incisto en algo, si es muy detallista necesitas un TRIPLET


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


Al girarlo el lente avanza o retrocede...
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Diseño de circuitos en general

Alarmas, temporizadores, acondicionadores de señal...

Cerrar
Foros de Electrónica » Diseño analógico » Diseño de circuitos en general

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.