Fase- 5 CJ7

 

Fase- 5 CJ7   


Hardware:

Para esta fase al robot se le actualizo el driver por un llamado Motor shield con dos L293D permite controlar 4 cargas inductivas + 2 servos conectados al timer dedicado de alta resolución de Arduino para un control sin jitter. Para el caso de motores, en cada canal se puede controlar tanto la velocidad como la dirección de giro independientemente. Posibilita el control desde proyectos sencillos hasta de media complejidad.
Por otra parte se agrego una batería independiente el Motor Shield .








Especificaciones:

  • - Incopora 2 circuitos integrados L293D proporcionando 4 puentes-H completos
  • - Protección contra sobre carga térmica
  • - Diodos de protección contra voltajes inversos generados por las cargas inductivas
  • - 4 canales (M1, M2, M3 y M4) para controlar igual número de cargas inductivas como motores DC, solenoides, relés, ó 2 motores paso a paso -- - unipolares o bipolares de entre 4.5 V y 25 V
  • - En el caso de motores es posible controlar tanto su velocidad como su dirección de giro
  • - Control de velocidad de motores DC con resolución de 8 bits
  • - Control de motores paso a paso con 1 y 2 bobinas en modo sencillo, doble (mayor torque), intercalado (medio paso) y micro pasos
  • - 2 conectores independientes para controlar 2 servos pequeños de 5 V (Pines digitales 9 y 10)
  • - Corriente máxima continua en cada una de las salidas M1, M2, M3 y M4: 600 mA (0.6 A)
  • - Corriente máxima pico no repetitivo en cada una de las salidas M1, M2, M3 y M4: 1.2 A
  • - Resistores de pull-down que mantienen los motores deshabilitados durante el encendido
  • - Requiere fuente externa para la alimentación de las cargas en las salidas M1, M2, M3 y M4.


PISTA

El diagrama de bloques se utiliza para describir los componentes y funcionamiento del robot
 y sus conexiones mediante esquema que utiliza figuras geométricas para la fácil comprensión del mismo. En el siguiente diagrama se muestra las evidencias de conexiones y funcionamiento básico.


Diagrama de bloques





Parte lateral




Parte frontal


Parte superior




Diagrama de flujo:







Codigo:
En el código lo primero que hacemos es crear la variables, después de eso definiremos en void setap que entradas tendrán nuestros sensores y motores ya sean input o output en el void loop tendremos que leer los valores de nuestros sensores y así mismo con estos resultados evaluaremos si giraran o irán hacia atrás o adelante esto lo hacemos con un múltiple "if" y crearemos varios void cuya funciones son brindarle mas rapidez y mayor coherencia de comprensión  a nuestro código que llamaremos en nuestro void loop que serán "void atrás", "void izquierda", "void derecha", "void parar", "void adelante".


//Establezco variables para leer más fácil el código
int SENSORI=0; // Pin sensor izquierdo
int SENSORD=2; // Pin sensor derecho
int DERECHA1=7; // MOTOR DERECHA FASE 1
int DERECHA2=6; // MOTOR DERECHA FASE 2
int IZQUIERDA1=9; // MOTOR IZQUIERDA FASE 1
int IZQUIERDA2=8; // MOTOR IZQUIERDA FASE 2

int DERE=0; // VALOR A ALMACENAR PARA LECTURA DE LA SEÑAL
int DE=4;
int IZQUI=0; // VALOR A ALMACENAR PARA LA LECTURA DE LA SEÑAL
int IZ=5;
void setup()
{
    //CONFIGURACIÓN DE LOS PUERTOS 
 
    pinMode (DERECHA1, OUTPUT); //SALIDA DE MOTOR PARA LA FASE 1 DERECHA DEL MOTOR
    pinMode (DERECHA2, OUTPUT); //SALIDA DE MOTOR PARA LA FASE 2 DERECHA DEL MOTOR
    pinMode (IZQUIERDA1, OUTPUT); //SALIDA DE MOTOR PARA LA FASE 1 IZQUIERDA DEL MOTOR
    pinMode (IZQUIERDA2, OUTPUT); //SALIDA DE MOTOR PARA LA FASE 1 IZQUIERDA DEL MOTOR
    pinMode (SENSORD, INPUT); //SENSOR DERECHO
    pinMode (SENSORI, INPUT); //SENSOR IZQUIERDO
    pinMode (IZ, OUTPUT); //LED IZQUIERDO PARA VERIFICACION DE SEÑAL
    pinMode (DE, OUTPUT); //LED DERECHO PARA VERIFICACION DE SEÑAL
}

void loop ()
{
          IZQUI = analogRead(SENSORI); //LEE EL ESTADO EN EL QUE SE ENCUENTRA EL SENSOR IZQUIERDO
          DERE = analogRead(SENSORD);  //LEE EL ESTADO EN EL QUE SE ENCUENTRA EL SENSOR DERECHO
          
          if(DERE < IZQUI)
          {
              // SI EL SENSOR DERECHO ESTÁ INACTIVO Y EL IZQUIERDO ESTÁ ACTIVO GIRA A LA IZQUIERDA
              IZQUIERDA ();
              digitalWrite(IZ, HIGH);
              digitalWrite (DE, LOW);
           }
              if(DERE > IZQUI)
                  {
              // SI EL SENSOR DERECHO ESTÁ ACTIVO Y EL IZQUIERDO ESTÁ INACTIVO GIRA A LA DERECHA
                      digitalWrite(IZ, LOW);
                      digitalWrite (DE, HIGH);
                  }
}

              //POR MEDIO DE UNA TABLA REALIZAMOS LOS 4 ESTADOS POSIBLES ENTRE LOS CUALES ESTÁN 
              
              /*  SENSOR IZQUIERDO - SENSOR DERECHO - SENTIDO
                         0                 0          ADELANTE
                         0                 1          DERECHA
                         1                 0          IZQUIERDA
                         1                 1          ATRÁS
               */
              void ATRAS()
              {
                //AMBOS MOTORES EN DIRECCION HACIA ATRÁS
                digitalWrite(IZQUIERDA1, HIGH);
                digitalWrite(IZQUIERDA2, LOW);
                digitalWrite(DERECHA1, HIGH);
                digitalWrite(DERECHA2,LOW);
              }
              void ADELANTE()
              {
                //AMBOS MOTORES EN DIRECCION HACIA ADELANTE
                digitalWrite(IZQUIERDA1, LOW);
                digitalWrite(IZQUIERDA2, HIGH);
                digitalWrite(DERECHA1, LOW);
                digitalWrite(DERECHA2, HIGH);
              }
              void IZQUIERDA ()
              {
                //MOTOR IZQUIERDO HACIA ATRAS Y EL MOTOR DERECHO HACIA ADELANTE
                digitalWrite(IZQUIERDA1, LOW);
                digitalWrite(IZQUIERDA2, LOW);
                digitalWrite(DERECHA1, LOW);
                digitalWrite(DERECHA2, HIGH);
              }
              void DERECHA ()
              {
                //MOTOR DERECHO HACIA ATRÁS Y EL MOTOR IZQUIERDO HACIA DELANTE
                digitalWrite(IZQUIERDA1, HIGH);
                digitalWrite(IZQUIERDA2, LOW);
                digitalWrite(DERECHA1, LOW);
                digitalWrite(DERECHA2, LOW);
              }
              void PARAR()
              {
                //SE DETIENEN AMBOS MOTORES
                digitalWrite(IZQUIERDA1, LOW);
                digitalWrite(IZQUIERDA2, LOW);
                digitalWrite(DERECHA1, LOW);
                digitalWrite(DERECHA2, LOW);
              }




KEVIN JOHAN MARTINEZ PAZ - 202128381
JEISON DAVID ALPALA DAZA – 202042229
SANTIAGO MAYAC SALAZAR - 202129292

Comentarios

Entradas populares de este blog

Robot laberinto Kastelean

Fase 4 Robot seguidor de linea

FASE 2 ROBOT SEGUIDOR DE LINEA