Sensores

Sensor de velocidad rpm de un motor

Objetivos:

Medir la velocidad de un motor rpm usando un encoder

 

Material:

Enconder

Arduino Uno

LCD

 

Desarrollo:

 

 

 

Diagrama:

 

Código:

#include <LiquidCrystal.h>
#include "TimerOne.h"

int Interruptor = 0;          // El interruptor a utilizar sera el 0 es decir el pin digital 2
int ledSalida = 4;        // Aqui pondremos un led para ver como funcionan las interrupciones

LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

// pin 4 de la LCD (RS)---> pin 7 del arduino (salida digital, PWM)
// pin 5 de la LCD (RW) --> GND de la breadboard (fila -)
// pin 6 de la LCD (E)--> pin 8 de la placa Arduino UNO (PWM)
// pin 11 de la LCD (D4)--> pin 9 de la placa Arduino UNO (PWM)
// pin 12 de la LCD (D5)--> pin 10 de la placa Arduino UNO (PWM)
// pin 13 de la LCD (D6)--> pin 11 de la placa Arduino UNO (PWM)
// pin 14 de la LCD (D7)--> pin 12 de la placa Arduino UNO (PWM)

long cuentat = 0;
int pulsos=0;   // variable para contar los pulsos  
int estado =LOW;
int resolucion = 24;
//Esta seria nuestra funcion interrupcion exte.
void interrupcion_isr()
{
  estado=!estado;
  
  
  if (estado==LOW){
  digitalWrite(ledSalida, LOW);    //Lo encendemos
  
  }
  else {
    
    digitalWrite(ledSalida, HIGH);    //Lo encendemos
  }
  
  pulsos=pulsos+1;

}


void ISR_timer () {
  
 cuentat=cuentat+1;
 
}


void setup() 
{
 // ponemos en modo output el led 
 
 
  Serial.begin(9600);
 
  pinMode(ledSalida, OUTPUT);
  Timer1.initialize(20000);      // Dispara cada 20 ms
  Timer1.attachInterrupt(ISR_timer); // Activa la interrupcion y la asocia a ISR_Blink
  

  //Adjuntamos al interruptor 0 ( pin 2 ) la funcion cambios, cuando suceda un CHANGE
  attachInterrupt(Interruptor, interrupcion_isr, LOW);
  
  

}  
 
void loop() 
{

 
if(cuentat==50){
  
    double rpm=((double)pulsos/resolucion)*60; 
   // lcd.begin(16,2);              // columns, rows.  use 16,2 for a 16x2 LCD, etc.
  //lcd.clear();                  // start with a blank screen
  
        lcd.setCursor(0,1);            
    lcd.print('RPM:');
    
    lcd.setCursor(5,1);            
    lcd.print(rpm);
    
pulsos=0;
cuentat=0;
}
  
}

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *