Buscar este blog

viernes, 27 de marzo de 2015

Tacometro, arduino, led infrarrojo y fototransistor

#include <LiquidCrystal.h> // Se declara la libreria de la pantalla

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);   // Se inicializan los pines que usara

const int  releReedPin = 2;   // Entrada del pulso
int estadoRele = 1;           // Estado inicial del pulso
int ultimoEstadoRele = 1;     // Estado anterior del pulso que ira cambiando
long tiempo_anterior = 0;      // Tiempo anterior medido
long tiempo_una_rev = 0;       // Tiempo de una revolucion
unsigned long tiempo_ahora;    // Tiempo actual medido
long rpm;                      // Valor de RPM primario
long vueltas;                 // Valor de RPM secundario

void setup()
{
  // Se inicializa la pantalla y se declara el pulso como entrada ademas se imprime la leyenda velocidad en la lcd
  pinMode(releReedPin, INPUT);
    lcd.begin(16,2);
    lcd.print("   Velocidad ");
}


void loop()
{
  estadoRele = digitalRead(releReedPin);      // Lee el estado del rele
 
  // Compara el estado del rele con el estado previo
  if (estadoRele != ultimoEstadoRele)
  {
    // Si el estado ha cambiado realiza el calculo de las RPM y lo despliega
    if (estadoRele == LOW)
    {
      tiempo_ahora =millis();
      tiempo_una_rev = tiempo_ahora - tiempo_anterior;
      rpm = 60000 / tiempo_una_rev; // 1 minuto = 60000 ms
      lcd.setCursor(0,1);
      lcd.print("     ");
      lcd.setCursor(0,1);
      lcd.print(rpm);
      lcd.setCursor(6,1);
      lcd.print(" RPM");
     
     
    }
    else {
      // Si el estado actual es HIGH pasa de ON a OFF  y se despliega el valor de RPM secundario que seraia el valor anterior
      vueltas=rpm;
      lcd.setCursor(0,1);
      lcd.print("     ");
      lcd.setCursor(0,1);
      lcd.print(vueltas);
      lcd.setCursor(6,1);
      lcd.print(" RPM");
      tiempo_anterior = tiempo_ahora;
    }
  }
  // Guarda el estado actual como ultimo estado
  ultimoEstadoRele = estadoRele;
}

No hay comentarios:

Publicar un comentario