SESIÓN 1
Si queremos aparcar nuestro coche de forma automática necesitaremos conocer los pasos necesarios
Para representar las órdenes que necesitamos implementar se utilizan los diagramas de flujo.
Los elementos básicos de un diagrama de flujo son:
La solución de cualquier problema la podemos expresar en pseudocódigo mediante un diagrama de flujo, por ejemplo para sumar 2 números a y b tenemos:
Para representar nuestro algoritmo abriremos en Google un fichero en formato dibujo con Google drawings y podremos encontrar todos los elementos necesarios para realizar nuestro diagrama.
Nuestro coche no tiene dirección , pero si dos motores en las ruedas delanteras necesitamos averiguar que rueda debe girar y en que sentido para conseguir los diferentes movimientos
movimiento | rueda izquierda | rueda derecha |
---|---|---|
AVANZAR | ||
RETROCEDER | ||
GIRAR IZQUIERDA- LENTO | ||
GIRAR DERECHA- LENTO | ||
GIRAR IZQUIERDA- RÁPIDO | ||
GIRAR DERECHA- RÁPIDO | ||
RETROCEDER A LA IZQUIERDA- LENTO | ||
RETROCEDER A LA DERECHA-LENTO | ||
RETROCEDER A LA IZQUIERDA- RÁPIDO | ||
RETROCEDER A LA DERECHA-RÁPIDO |
SESIÓN 2
Y ya solo nos queda conectar nuestros motores.
si probamos un sencillo programa que active el motor
void setup()
{
pinMode(5, OUTPUT);
}
void loop()
{
digitalWrite(5, HIGH);
}
Comprobaremos que al iniciar la simulación el eje del motor gira y sobre el motor nos indica la velocidad de giro 51 rpm (vueltas por minuto), conectado directamente nos proporciona poca velocidad y un par motor insuficiente. Este sistema no nos permite tampoco cambiar el sentido de giro.
¿Qué elemento necesitaremos para solucionar los problemas que se hos han planteado?
el L293D nos permitirá manejar de forma adecuada las potencias necesarias para
el funcionamiento de los motores, controlar el sentido de giro de dos motores
por cada integrado, controlar la velocidad por medio de las patillas 1 y 9
conectadas a una salida digital PWM (en la que se escribe un valor analógico) y
alimentar los motores con una fuente externa en la patilla 8 si es necesario.
En primer lugar nos informaremos de la función de cada uno de sus terminales
Procedemos a conectarlo
1. Lo colocamos sobre la placa board en la posición central
2. Conectamos la línea GND y la de alimentación de 5V a Arduino
3. Conectamos los motores entre la 3-6 i entre 11-14
4. Conectamos en el terminal 8 una alimentación adicional para los motores, recordad que todas las referencias GND (negativos) del circuito deben conectarse en el mismo punto.
esta pila se encargará de alimentar a los motores
Los pines del 1-7 controlarán un motor y del 9 al 15 el otro motor
Los pines 1 y 9 activan o desactivan cada uno de los motores i también nos permitirán más adelante controlar su velocidad. El control del sentido de giro lo determinan los valores conectados a los pines 2-7 y 10-15 . Para controlar el motor que quedará a nuestra izqduierda utilizamos :
MOTOR 1
pin 1(enable) : 1 activa y 0 desactiva el motor
pin 2-7
ENABLE 1 | PIN2 | PIN7 | MOTOR |
0 | --- | ---- | PARADO |
1 | 1 | 0 | SENTIDO HORARIO |
1 | 0 | 1 | SENTIDO ANTIHORARIO |
1 | 0 | 1 | PARADO |
1 | 0 | 0 | PARADO |
Comprobemos el funcionamiento de uno de los motores
Conectamos los pines 1-2 7 en tres entradas digitales de Arduino
veamos el código que necesitamos para que el motor gire 1 seg en un sentido pare un segundo y gire un segundo en el otro sentido
En primer lugar debemos indicar donde hemos conectado los pines de control, del motor en arduino
#define actm1 3 // activacion motor 1 #define motor1_1 4 // control motor 1 pin1 #define motor1_2 5 // Control motor 1 pin2
en el void setup() indicaremos que en estas conexiones esperamos un valor, son de salida
void setup() { pinMode( actm1, OUTPUT); pinMode( motor1_1, OUTPUT); pinMode( motor1_2, OUTPUT); } void loop() { digitalWrite(actm1, HIGH); // Activamos Motor1 digitalWrite(motor1_1, HIGH); digitalWrite(motor1_2, LOW); // gira en sentido horario delay(1000); digitalWrite(motor1_1, LOW); digitalWrite(motor1_2, LOW); // paramos motor delay(1000); digitalWrite(motor1_1, LOW); digitalWrite(motor1_2, HIGH); // gira en sentido antihorario delay(1000); digitalWrite(motor1_1, LOW); digitalWrite(motor1_2, LOW); // paramos motor delay(1000); }El programa completo nos quedará
#define actm1 3 // activacion motor 1
#define motor1_1 4 // control motor 1 pin1
#define motor1_2 5 // Control motor 1 pin2
void setup()
{
pinMode( actm1, OUTPUT);
pinMode( motor1_1, OUTPUT);
pinMode( motor1_2, OUTPUT);
}
void loop()
{ digitalWrite(actm1, HIGH); // Activamos Motor1
digitalWrite(motor1_1, HIGH);
digitalWrite(motor1_2, LOW); // gira en sentido horario
delay(1000);
digitalWrite(motor1_1, LOW);
digitalWrite(motor1_2, LOW); // paramos motor
delay(1000);
digitalWrite(motor1_1, LOW);
digitalWrite(motor1_2, HIGH); // gira en sentido antihorario
delay(1000);
digitalWrite(motor1_1, LOW);
digitalWrite(motor1_2, LOW); // paramos motor
delay(1000);
}
Debes implementar este programa y comprobar su funcionamiento y ampliarlo conectando el motor 2 en los pines 6-7-8