¡Controlemos Ese Motor!
by valparaisoMakerspace in Circuits > Arduino
1055 Views, 0 Favorites, 0 Comments
¡Controlemos Ese Motor!
¡Hola chic@s! En esta oportunidad armaremos un control para manejar la velocidad y dirección mediante Arduino y un circuito simple que consta de un controlador (puente H), potenciómetro, un par de botones, leds y diodos. Los objetivos son:
- Aprender a manejar motores DC con Arduino mediante una interfaz física (potenciómetro y botones).
Puedes revisar la simulación lista acá.
¿List@?
Supplies
Los materiales son:
- 1 x Arduino UNO.
- 1 x Motor dc.
- 1 x L293D.
- 1 x Potenciómetro 10k Ohm.
- 1 x Batería 9 V.
- 2 x Pulsadores.
- 2 x Condensadores 1 uF.
- 2 x Resistencia 1k Ohm.
- 2 x Resistencia 10k Ohm.
- 2 x Resistencias 220 Ohm.
- 2 x Leds Rojos.
- 4 Diodos 1N1004
¡Preparemos La Base Para Trabajar!
Primero que nada debemos abrir Tinkercad Circuits y poner nuestra Arduino y protoboard para trabajar, entonces:
- Dirigite a la pestaña de componentes Básicos y selecciona Arduino, tal cual se ve en la imagen 1.
- Arrastra el Arduino + placa de pruebas al espacio de trabajo (imagen 2 como referencia).
- Quitamos el cable rojo que conecta la linea de 5 V de arriba con la de abajo de la protoboard (imagen 3).
- Luego vamos a todos los componentes (imagen 4).
- Buscamos una pila de 9 V, la agregar y conectamos a la protoboard tal cual se ve en la imagen 5.
Si estas trabajando con una Arduino real solo debes conectar los jumpers/cables como se muestra en la imagen 2.
¡Listo!
¡Agreguemos Los Componentes! - Control De Motor + Motor
Los pasos a seguir son:
- Buscamos el L293D y lo arrastramos a la protoboard (imagen 1).
- Conectamos a las lineas de alimentación y Arduino (imagen 2).
- Buscamos y arrastramos un diodo al espacio de trabajo para rotarlo apretando el botón de giro 6 veces (imagen 3).
- Luego lo posicionamos en los lugares mostrados en la imagen 4.
- Por último agregamos un motor dc y realizamos las conexiones entre el motor y el controlador, tal cual se aprecia en la imagen 5.
¡Listo!
¡Agreguemos Los Componentes! - Potenciómetro + Leds
Los pasos a seguir para esta sección son:
- Buscar y arrastrar dos resistencias a la protoboard, luego cambiar sus valores a 220 Ohm (imagen 1).
Buscar y arrastrar dos Leds rojos a la protoboard (imagen 2).
- Buscar y arrastrar un potenciómetro al espacio de trabajo, rotarlo apretando 6 veces el botón de girar (imagen 3).
- Hacer las conexiones a las lineas de alimentación y Arduino, ve la imagen 4 como referencia.
Si usas una Arduino real solo fijate en la imagen 4 para ver como deben quedar puestos los componentes.
¡Agreguemos Los Componentes! - Botones
Los pasos a seguir para esta parte son:
- Buscamos y arrastramos los pulsadores a la protoboard (imagen 1).
- Buscamos y arrastramos los capacitores a los lados de los pulsadores, les cambiamos los valores a 1 uF (imagen 2).
- Arrastramos una resistencia al espacio de trabajo, la rotamos apretando el botón de giro 3 veces y le cambiamos el valor a 1k Ohm (imagen 3).
- Luego lo llevamos a las posiciones mostradas en la imagen 4.
- Buscamos y arrastramos dos resistencias a la posición de la protoboard indicada en la imagen 5, les cambiamos sus valores a 10k Ohm.
- Realizamos las conexiones a la Arduino y lineas de alimentación tal cual se ve en la imagen 6.
¡Listo!
¡Hora De Programar!
Ahora revisaremos y entenderemos el código que se usará en la Arduino, el cual es:
int direccion = 0;
float control_velocidad = 0;
void setup()
{
pinMode(12, INPUT );
pinMode(11, INPUT );
pinMode(10, OUTPUT);
pinMode(9 , OUTPUT);
pinMode(6 , OUTPUT);
pinMode(5 , OUTPUT);
Serial.begin(9600);
}
void loop()
{
control_velocidad = analogRead(A5)/1023.0;
Serial.println(control_velocidad);
if (digitalRead(12) == LOW) direccion = 1;
else if(digitalRead(11) == LOW) direccion = -1;
else direccion = 0;
switch(direccion)
{
case 1:
digitalWrite(10,HIGH);
digitalWrite(9 ,LOW );
analogWrite(6, 0);
analogWrite(5, 255*control_velocidad);
break;
case -1:
digitalWrite(10,LOW );
digitalWrite(9 ,HIGH);
analogWrite(6, 255*control_velocidad);
analogWrite(5, 0);
break;
default:
digitalWrite(10,LOW);
digitalWrite(9 ,LOW);
analogWrite(6, 0);
analogWrite(5, 0);
}
delay(25);
}
Hay dos variables globales,una de tipo int (entero) y otra float (con decimales):
int direccion = 0;
float control_velocidad = 0;
La primera es direccion, la cual si es 1 o -1 hará que el motor gire a un lado u otro, cuando es 0 nada se mueve, el segundo es control_velocidad, en el cual regulará la velocidad del motor.
En el void setup(){} están las siguientes instrucciones:
void setup()
{
pinMode(12, INPUT );
pinMode(11, INPUT );
pinMode(10, OUTPUT);
pinMode(9 , OUTPUT);
pinMode(6 , OUTPUT);
pinMode(5 , OUTPUT);
}
Es una cosa que se realiza, con pinMode(A,B) le decimos a la Arduino que el pin A sea usado como entrada (INPUT) o salida (OUTPUT).
Para void loop(){} se tiene que:
void loop()
{
control_velocidad = analogRead(A5)/1023.0;
if (digitalRead(12) == LOW) direccion = 1;
else if(digitalRead(11) == LOW) direccion = -1;
else direccion = 0;
switch(direccion)
{
case 1:
digitalWrite(10,HIGH);
digitalWrite(9 ,LOW );
analogWrite(6, 0);
analogWrite(5, 255*control_velocidad);
break;
case -1:
digitalWrite(10,LOW );
digitalWrite(9 ,HIGH);
analogWrite(6, 255*control_velocidad);
analogWrite(5, 0);
break;
default:
digitalWrite(10,LOW);
digitalWrite(9 ,LOW);
analogWrite(6, 0);
analogWrite(5, 0);
}
delay(25);
}
Dividiremos esta parte en dos, la primera es:
control_velocidad = analogRead(A5)/1023.0;
if (digitalRead(12) == LOW) direccion = 1;
else if(digitalRead(11) == LOW) direccion = -1;
else
En esta sección asignamos un valor de 0.0 a 1.0 a control_velocidad, luego mediante la función de decisión if(digitalRead(12) == LOW) direccion = 1 indicamos que si el botón conectado al pin 12 esta apretado, la variable direccion será 1, de no cumplirse la condición se evalua la siguiente con else if(digitalRead(11) == LOW) direccion = -1 donde si el botón anterior no está apretado, pero el conectado al pin 11 si, la direccion será -1, si nada de esto pasa else dice que nada se realizará.
La segunda parte consta de las siguiente instrucciones:
switch(direccion)
{
case 1:
digitalWrite(10,HIGH);
digitalWrite(9 ,LOW );
analogWrite(6, 0);
analogWrite(5, 255*control_velocidad);
break;
case -1:
digitalWrite(10,LOW );
digitalWrite(9 ,HIGH);
analogWrite(6, 255*control_velocidad);
analogWrite(5, 0);
break;
default:
digitalWrite(10,LOW);
digitalWrite(9 ,LOW);
analogWrite(6, 0);
analogWrite(5, 0);
}
La función switch(A){ case B: } que evalua el valor de la varaible A, entonces si coincide con el valor B, las instrucciones dentro de case B: serán ejecutadas, sino evaluará otros casos hasta que llegue a default, la que se ejecuta cuando la variable no coincide con ni un caso, entonces si direccion es 1 el motor se moverá a la izquierda y se prenderá el el led conectado al pin 10, si es -1 el motor se mueve a la derecha y se prende el led de la derecha, si no es ni uno de los valores anteriores los leds no se prenden ni el motor se mueve.
¡Veamos Nuestro Resultado!
¡Listo!