PRACTICA 4: ALGORITMO DE APARCAR- MOVIMIENTO DE RUEDAS

SESIÓN 1

Si queremos aparcar nuestro coche de forma automática necesitaremos conocer los pasos necesarios 


En primer lugar necesitaremos un algoritmo que nos indique que pasos debemos realizar para aparcar un coche en línea.

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:

ejemplos de diagramas de flujo | Diagrama de flujo, Informatica ...


 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 coche
movimientorueda izquierdarueda 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.

La primera idea sería conectarlos  directamente a la placa arduino

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.

Resultado de imagen de l293d











En primer lugar nos informaremos de la función de cada uno de sus terminales


Motores DC con Arduino. Varios ejemplos
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 SENTIDO HORARIO
 1 0 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