Header image  
Electricidad, Electrónica, automatización industrial, láser, vacío  
line decor
    INICIO  || Traductor de idiomas ||
line decor
 
 
 
 

 
 

Luz estroboscópica led con Arduino

Introducción:

Materiales usados:

Diseñando el prototipo:

Código pseudo C para Arduino:

Programa:

/* Luz estroboscopica para inspección de maquinaria industrial en movimiento. 
También útil para determinar la velocidad de los motores, el deslizamiento en motores de inducción trifásicos, etc...
Codigo realizado por Alfonso Torres Rodríguez, 10-03-2012, excepto las librerías específicas.
Revisión 4 : Mejora en el tiempo del led encendido, ver que el 0.5% en periodo de la frecuencia de trabajo, debe ser el Ton. De esta manera se mantiene la luminosidad
    en todo el rango de frecuencias.
    Ver con motores en marcha, que no se ve borroso, incluso se podría probar al 1%.

El refresco del LCD está limitado a periodos de 1 segundo, para que no moleste mucho a la hora de inspeccionar.
El retardo de la lectura analógica, provoca pequeños desajustes en frecuencia cada 0.5 segundos aproximadamente. Se puede ajustar el ajuste, o ir a un potenciometro tipo 
    binario con encoder, usando las patas 2 y 3 del Arduino.
*/ 

#include <LiquidCrystal.h>   // Libreria LCD

// Inicializa la librería con los pines correspondientes a la pantalla por defecto
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // Para pantalla con botones analógicos, señales del LCD


int dout = 12;   // Salida a DRIVER LED , con 12A de intensidad hacia el led, vigilar nunca TON a < 1ms
int an0 = 1;     // Señal potenciometro frecuencia principal
int an1 = 2;     // Señal potenciometro ajuste fino frecuencia
float ton;       
float freq = 100; 
float toff = 1000;
float tporon = 0.005;      // % por uno, del Duty Cicle: 0.005 = 0.5%
float toninit;
boolean imprimepantalla = false;
boolean finpausa = false;
boolean leido = false;        
long lasttime = 0; 
long tiempopantalla = 0;
long tiempoleido = 0;
float i,j;


void setup() {
  // Setea el numero de columnas y filas de la pantalla:
  lcd.begin(16, 2);
//  Serial.begin(9600);

  pinMode(dout, OUTPUT);
  lcd.setCursor(0,0);
  lcd.print("Inicializando ...");
  lcd.setCursor(0,1);
  lcd.print("By Alfon,03-2012");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Frec:  RPM:");
  float toff;
  ton = toninit;
}



void loop() {
  if(1 == 1){
      if(finpausa == false){
          digitalWrite(dout, HIGH);
          finpausa = true;
          delayMicroseconds(ton);
          digitalWrite(dout, LOW);
          lasttime = micros();
          imprimepantalla = true;
          leido = false;
      }
      if(finpausa == true){
          if(leido == false && tiempoleido + 300 < millis()){
              i = analogRead(an0);
              j = analogRead(an1)/5;
              if(i < 1){ i = 1;}
              if(j < 1){ j = 1;}
              freq = i + j/100;
              toff = (1/freq)*1000000;                 // Toff
              ton = (1/freq)*tporon*1000000;            // Ton al % por uno "tporon" de Toff
              leido = true;
              tiempoleido = millis();
          }
          if( imprimepantalla == true && tiempopantalla + 2000 < millis()){
              lcd.setCursor(0,1);
              lcd.print(freq);
              lcd.print("|");
              lcd.print(freq * 60);
              lcd.print("      ");
              imprimepantalla = false;
              tiempopantalla = millis();
          }       
      }
      if( lasttime + toff < micros()){
                finpausa = false;   
      }      
  }
  
}

Revisión y miniaturización para mejor uso y transporte:

Código revisado V7 para Arduino Nano:

Conclusiones:

Notas y curiosidades:

Volver al index