X
    Categories: Sensores

Control de velocidad con potenciometro de motor dc y sensor rpm

Diagrama Proteus

 

 

 

Código Arduino

 

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

// Desarrollado por Christian A. Vazquez par arduinomexico.com

int potenciometro = A0;    // select the input pin for the potentiometer
int potdigital ;  // 
int salidaPWM = 10;  // salida de señal PWM
int Interruptor = 0;          // El interruptor a utilizar sera el 0 es decir el pin digital 2
long cuentat = 0;  
int pulsos=0;   // variable para contar los pulsos en 1 segundo
int resolucion = 24;  // pulsos por revolución del encoder


LiquidCrystal lcd(12,11, 6, 5, 4, 3);

// 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)


//Esta seria nuestra funcion interrupcion exte.
void interrupcion_isr()
{  
  pulsos=pulsos+1;
}


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

void setup() {
  // declare the ledPin as an OUTPUT:
 // Serial.begin(9600);
  pinMode(salidaPWM, OUTPUT);  // decimos que pinOut es salida
  
  lcd.begin(16,2); 
  
  Timer1.initialize(1000);      // 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() {
  // read the value from the sensor:
  
  potdigital = analogRead(potenciometro); 
 // potdigital = map(potdigital, 0, 1023, 0, 255);
  
//  analogWrite(salidaPWM,potdigital);
  
  Timer1.pwm(salidaPWM, potdigital,1000);
 
 // Timer1.disablePwm(salidaPWM); 
  // Serial.println(potdigital);
  
  if(cuentat==1000){
  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,0);            
    lcd.print(rpm);
    
    pulsos=0;
    cuentat=0;
    
}

  
}

 

Christian:
Related Post