Sensores

[:es]Sensor de velocidad rpm de un motor DC con encoder y arduino V2[:]

[:es]Objetivo: Medir velocidad rpm de un motor DC con encoder y arduino V2.

 

Material:

  • LCD Shield
  • Arduino Uno
  • Motor DC con Encoder

 

 

Desarrrollo:

Un econder es un dispositivo optoelectronico que nos da a la salida pulsos.  La frecuencia de los pulsos depende de la velocidad del motor.

 

La velocidad rmp usando un encoder la calculamos usando la formula

 

rpm =  ( pulsos en 1 seg  ) * 60 /  resolucion

 

La resolución depende de cada encoder  ( es el numero de ranuras del disco ) y nos un numero de pulsos por revolución.

En este caso solo usaremos un encoder A.

 

Resultado de imagen para pololu dual dc gear encoder

 

Color Function
Red motor power (connects to one motor terminal)
Black motor power (connects to the other motor terminal)
Green encoder GND
Blue encoder Vcc (3.5 – 20 V)
Yellow encoder A output
White encoder B output

 

Diagrama de Proteus:

 

 

Código en Arduino

// desarrollado pora microcontroladores.com.mx  y proyectosarduino.xyz

// soporte    ventas@microcontroladores.com.mx



#include <LiquidCrystal.h>


const int senrpm = 13;                         // El interruptor a utilizar sera el 0 es decir el pin digital 2

int pulsos=0;                                 // variable para contar los pulsos en 1 segundo
int resolucion = 300;                          // pulsos por revolución del encoder
int tiempo;  
double rpm;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


void setup() {
  // put your setup code here, to run once:

  lcd.begin(16, 2);

   pinMode(senrpm, INPUT);         //declaramos el boton como entrada
   

}

void loop() {
  // put your main code here, to run repeatedly:

   velocidadrpm();

}





void velocidadrpm(){


//    Serial.println(tiempo);

int pulsos=0;
boolean bandera=LOW;
unsigned long currentTime=0;
unsigned long startTime=millis();

     while(currentTime<=1000)
       {
         if(digitalRead(senrpm)==HIGH)
         {
          bandera=HIGH;
         }
         if(digitalRead(senrpm)==LOW && bandera==HIGH)
         {
           pulsos++;
           bandera=LOW;
      
          }
        
         currentTime=millis()-startTime;
       }
       
    rpm=((double)pulsos/resolucion)*60; 
    
    
 
   /// Serial.println(rpm);
    
   lcd.setCursor(0,1);            
   lcd.write("vel:");
   lcd.setCursor(5,1);  
   lcd.print(rpm);
}

 

Puedes ver también en

https://github.com/tecsolucion/SensoresYactuadores/tree/master/velocidad_RPM_version2

 

 

 

 [:]

Deja un comentario

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