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



