En esta guía vamos a controlar la velocidad y el sentido de un motor DC a través de un potenciómetro desde Arduino.

Materiales:

  • Arduino Uno
  • Un switch
  • Un puente H L293d
  • Un potenciómetro
  • Jumpers

Arduino uno

Es un microcontrolador basado en ATmega328, tiene un voltaje de funcionamiento de 5V, el voltaje de entrada recomendado va de 7V a los 12V, con voltaje límites de 6V a 20V, cuenta con 14 pines de entrada y salida (de los cuales 6 proporcionan salida PWM), 6 pines para entrada analógica, y una memoria flash de 32 KB.

 

Switch

El switch o interruptor, es un dispositivo que permite desviar o interrumpir el curso de una corriente eléctrica. En el mundo moderno sus tipos y aplicaciones son innumerables, desde un simple interruptor que apaga o enciende una bombilla, hasta un complicado selector de transferencia automático de múltiples capas, controlado por computadora.

Puente H L293d

El puente H es un circuito electrónico que permite a un motor eléctrico DC girar en ambos sentidos.

Se construye con 4 interruptores (S1,S2,S3,S4). Cuandos los interruptores S1 y S4 están cerrados (S2 y S3 abiertos) se aplica una tensión haciendo girar el motor en un sentido. Abriendo los interruptores S1 y S4 (cerrando S2 y S3), el voltaje se invierte, permitiendo el giro en sentido inverso del motor.

                     

El circuito interno del L293D forma 2 puentes H, por lo que podemos manejar 2 motores. En este caso el manejo será bidireccional, con frenado rápido y con posibilidad de implementar fácilmente el control de velocidad. Se puede manejar cargas de potencia media, en especial pequeños motores y cargas inductivas, con la capacidad de controlar corriente hasta 600 mA en cada circuito y una tensión entre 4,5 V a 36 V.

 

POTENCIÓMETRO:

Un potenciómetro es una resistencia variable, el diagrama interno del potenciómetro para la conexión hecha en el proyecto es como el que se muestra en la imagen de la derecha, donde al girar la perilla van a variar los valores de R1 y R2, haciendo que la señal de voltaje Vout tambien cambie, y de forma proporcional a este cambio, la velocidad del motor varía.

 

PWM

El PWM o Modulador por anchura de pulsos es una señal digital cuadrada en el cual podemos variar el ciclo de trabajo (tiempo ON) sin variar la frecuencia.

En pocas palabras, consiste en aumentar el tiempo en el cual se mantiene la señal alta de voltaje, hasta que el tiempo en el que se encuentre en 0V sea tan pequeño que se perciba como una señal continua con voltaje alto.

 

Para controlar la velocidad y el giro del motor, usaremos las entradas PWM de nuestro Arduino.

El vídeo de la simulación del proyecto lo puedes encontrar aquí: https://www.dropbox.com/s/uwuhi1t2el98nbq/bandicam%202017-11-12%2012-17-26-828.avi?dl=0

DIAGRAMA DE CONEXIÓN:

 

CÓDIGO:

 

int in1=8;        //Entrada 2 del L293D

int in2=9;        //Entrada 7 del L293D

int enable1=10;   //Entrada 1 del L293D

int sw = 7;       //recibe el estado del Switch

int pote=A0;      //Potenciómetro

int valorpote;     //Variable que recoge el valor del potenciómetro

int pwm;          //Variable del pwm

int giro;         //variable para definir el sentido de giro del motor

void setup()

{

 //Inicializamos los pins de salida

 pinMode(in1,OUTPUT);

 pinMode(in2, OUTPUT);

 pinMode(enable1, OUTPUT);

 pinMode(sw,INPUT);

 pinMode(pote,INPUT);

}

void loop()

{

 //Almacenamos el valor del potenciómetro en la variable

 valorpote=analogRead(pote);

 //Almacena el estado del switch que define el sentido de giro

 giro = digitalRead(sw);

 //Como la entrada analógica del Arduino es de 10 bits, el rango va de 0 a 1023.

 //En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255.

 //Por esta razón tenemos que mapear el número de un rango a otro usando este código.

 pwm = map(valorpote, 0, 1023, 0, 255);

 

 //Cuando el Switch esta abierto entonces el motor girará en un sentido.

 if (giro==HIGH){

   digitalWrite(in1, LOW);

   digitalWrite(in2, HIGH);

   analogWrite(enable1, pwm);

 }

 

 //Cuando el Switch esta cerrado entonces el motor girará en el otro sentido.

 else{

   digitalWrite(in1, HIGH);

   digitalWrite(in2, LOW);

   analogWrite(enable1, pwm);

 }

}