Uso de Potenciometros para variar la velocidad en motores DC

Uso de Potenciometros para variar la velocidad en motores DC

Para el siguiente circuito usamos un Punete-H y dos potenciómetros de entre 10k y 20k, como se muestra

 

La variación de los potes, ocasionará en A0 y/o A1 una entrada de muestreo de en el rango desde 0 a 1023, que DEBEMOS RECONVERTIRLA (Mapearla) al rango de 0 a 255 que es el rango de los motores.

Aqui se muestra el sketch:

/*	
 Demuestra como controlar motores DC con potenciometros
 Gustavo Dutour, 2017
 https://roboticadelacosta.uy
*/
 
 
// Motor A
int enA = 9;
int in1 = 8;
int in2 = 7;
 
// Motor B
int enB = 3;
int in3 = 5;
int in4 = 4;
 
// Potenciometros
int SpeedControl1 = A0;  
int SpeedControl2 = A1;
 
 
// Variables de velocidad
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
 
void setup()
{
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}
 
void loop() {

  // Motor A, hacia adelante
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
 
 // Motor B, hacia adelante
 
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  
 // Leemos potenciometros
  MotorSpeed1 = analogRead(SpeedControl1); 
  MotorSpeed2 = analogRead(SpeedControl2);
  
 // Mapeamos el rango a 0-255
  MotorSpeed1 = map(MotorSpeed1, 0, 1023, 0, 255);
  MotorSpeed2 = map(MotorSpeed2, 0, 1023, 0, 255);  
  
  // Ajuste para prevenir el esfuerzo del motor a bajos impulsos
  if (MotorSpeed1 < 8)MotorSpeed1 = 0;
  if (MotorSpeed2 < 8)MotorSpeed2 = 0;
    
  // Setear velocidad de los motores
  analogWrite(enA, MotorSpeed1);
  analogWrite(enB, MotorSpeed2);
}