2ª Evolución FPV usando Arduino

Después de probar el anterior esquema del FPV ,he decidido usar una placa Arduino para simplificar el montaje.

 

 

 

El funcionamiento es el mismo que la primera evolución, solo que en el siguiente esquema solo he montado 3 bloques de servos, aunque en el programa para arduino esta desarrollado para 5 (estará explicado en su momento, mas abajo)

 

Usando la placa arduino, no solo he simplificado el montaje, si no que he reducido el uso de componentes, para la detección de los canales 5 y 6 usaba dos electrónicas de servo, que se encargaban de actuar sobre un 555, ahora simplemente leemos el pulso del receptor en ambos canales y actuamos en consecuencia.

Para la salida del 5º canal, la usada para alimentación de luces o similares he usado unos transistores TIP120 de 5Amp para poder alimentar sin mayores problemas algunas luces potentes si fuese necesario.

Para la alimentación de los servos , he preferido seguir usando unos relés, para poder suministrar el consumo necesario, que un transistor no podría dar (Podríamos usar un montaje en Darlington de varios transistores de potencia, pero subiría el coste)

******empieza código de arduino******

int input1 = 13;    //Seleccionamos el pin 13 como entrada para el canal 5 , cambio de bloque de servos
int input2 = 12;    //Seleccionamos el pin 12 como entrada para el canal 6 , ON/OFF del 5º canal

unsigned long duration1;    //Creamos esta variable para guardar el valor del pulso del canal 5 del receptor
unsigned long duration2;    //Creamos esta variable para guardar el valor del pulso del canal 6 del receptor

int contador=1;    //Creamos la variable contador

int out1_1 = 2;    //Creamos las variables para las salidas, los 5 bloques de servos
int out1_2 = 3;    // y las 5 salidas ON/OFF y le asignamos un pin del arduino
int out1_3 = 4;
int out1_4 = 5;
int out1_5 = 6;
int out2_1 = 7;
int out2_2 = 8;
int out2_3 = 9;
int out2_4 = 10;
int out2_5 = 11;

void setup()
{
  Serial.begin(9600);    //Abrimos el puerto serie para leer los datos de los canales 5 y 6 del receptor

  //Identificamos los pines como entrada o salida segun nuestras necesidades 

  pinMode(input1, INPUT);
  pinMode(input2, INPUT);
  pinMode(out1_1, OUTPUT);
  pinMode(out1_2, OUTPUT);
  pinMode(out1_3, OUTPUT);
  pinMode(out1_4, OUTPUT);
  pinMode(out1_5, OUTPUT);
  pinMode(out2_1, OUTPUT);
  pinMode(out2_2, OUTPUT);
  pinMode(out2_3, OUTPUT);
  pinMode(out2_4, OUTPUT);
  pinMode(out2_5, OUTPUT);

}

void loop()    //Empieza el ciclo del programa
{
               //Aqui empieza el codigo de cambio de bloques
    if (contador ==1)
    {
      duration1 = pulseIn(input1, HIGH);
      if (duration1 >1000 && duration1 < 1212)
      { 
        digitalWrite (out1_1, HIGH);
        digitalWrite (out1_2, LOW);
        digitalWrite (out1_3, LOW);
        digitalWrite (out1_4, LOW);
        digitalWrite (out1_5, LOW);
        contador = contador +1;
        delay (500);
      }
    }
    if (contador ==2)
    {
       duration1 = pulseIn(input1, HIGH);
       if (duration1 >1000 && duration1 < 1212)
       {
        digitalWrite (out1_1, LOW);
        digitalWrite (out1_2, HIGH);
        digitalWrite (out1_3, LOW);
        digitalWrite (out1_4, LOW);
        digitalWrite (out1_5, LOW);
        contador=contador+1;     
        delay (500);
        }
     }

    if (contador == 3)
    {
       duration1 = pulseIn(input1, HIGH);
       if (duration1 >1000 && duration1 < 1212)
       {
        digitalWrite (out1_1, LOW);
        digitalWrite (out1_2, LOW);
        digitalWrite (out1_3, HIGH);
        digitalWrite (out1_4, LOW);
        digitalWrite (out1_5, LOW);
        //contador=contador+1;          // Aqui resteamos el contador para dejarlo en 3 bloques y no en 5, si queremos 4 o 5 bloques solo
        contador=1;                     // tenemos que quitar esta linea "contador=1" y quitar el comentario de "contador=contador+1"
        delay (500);
        }
     }

    if (contador == 4)
    {
       duration1 = pulseIn(input1, HIGH);
       if (duration1 >1000 && duration1 < 1212)
       {
        digitalWrite (out1_1, LOW);
        digitalWrite (out1_2, LOW);
        digitalWrite (out1_3, LOW);
        digitalWrite (out1_4, HIGH);
        digitalWrite (out1_5, LOW);
        contador=contador+1;            //Aqui pondriamos "contador = 1" si queremos 4 bloques     
        delay (500);
        } 
    }

    if (contador == 5)
    {
       duration1 = pulseIn(input1, HIGH);
       if (duration1 >1000 && duration1 < 1212)
      {
        digitalWrite (out1_1, LOW);
        digitalWrite (out1_2, LOW);
        digitalWrite (out1_3, LOW);
        digitalWrite (out1_4, LOW);
        digitalWrite (out1_5, HIGH);
        delay (500);
        contador =1;
      }
    }

            //Aqui empieza el codigo para ON/OFF del 5º canal

  if (digitalRead(out1_1)== HIGH)
  {
     duration2 = pulseIn(input2, HIGH);
    if (duration2 >1000 && duration2 < 1212)
    {
       if (digitalRead(out2_1) == HIGH)
      {
        digitalWrite (out2_1, LOW);
        delay (500);
      }
      else
      {
        digitalWrite (out2_1, HIGH);
        delay (500);
      }
    }

  }

  if (digitalRead(out1_2)== HIGH)
  {
     duration2 = pulseIn(input2, HIGH);
    if (duration2 >1000 && duration2 < 1212)
    {
       if (digitalRead(out2_2) == HIGH)
      {
        digitalWrite (out2_2, LOW);
        delay (500);
      }
      else
      {
        digitalWrite (out2_2, HIGH);
        delay (500);
      }
    }

  }

  if (digitalRead(out1_3)== HIGH)
  {
     duration2 = pulseIn(input2, HIGH);
    if (duration2 >1000 && duration2 < 1212)
    {
       if (digitalRead(out2_3) == HIGH)
      {
        digitalWrite (out2_3, LOW);
        delay (500);
      }
      else
      {
        digitalWrite (out2_3, HIGH);
        delay (500);
      }
    }

  }

  if (digitalRead(out1_4)== HIGH)
  {
     duration2 = pulseIn(input2, HIGH);
    if (duration2 >1000 && duration2 < 1212)
    {
       if (digitalRead(out2_4) == HIGH)
      {
        digitalWrite (out2_4, LOW);
        delay (500);
      }
      else
      {
        digitalWrite (out2_4, HIGH);
        delay (500);
      }
    }

  }

  if (digitalRead(out1_5)== HIGH)
  {
     duration2 = pulseIn(input2, HIGH);
    if (duration2 >1000 && duration2 < 1212)
    {
       if (digitalRead(out2_5) == HIGH)
      {
        digitalWrite (out2_5, LOW);
        delay (500);
      }
      else
      {
        digitalWrite (out2_5, HIGH);
        delay (500);
      }
    }

  }

  Serial.println(duration1);    // sacamos el dato de duration1 por el puerto para ver el valor del pulso
  Serial.println(duration2);    // sacamos el dato de duration2 por el puerto para ver el valor del pulso
}

**** Termina el código para arduino*****

 

En esta 2º evolución también he añadido una segunda cámara, una colocada en la parte alta de la torreta para poder ver el movimiento del brazo robótico, y una en la parte de superior de la pinza para ver lo que queramos coger, o el camino por donde vamos.

Así queda en resumen el funcionamiento de los bloques.

 

 

En el esquema, los canales “GEAR” y “AUX” son los canales 5 y 6, los cuales son los encargados del control de la placa arduino, y como podéis observar, en el bloque 2 no se enciende ni apaga ninguna luz, este canal lo he usado para poder cambiar la señal de video de una cámara a la otra conectando a esta salida un pequeño relé.

 

Aquí dejo un video mostrando sus virtudes.

 

 

 

Anuncios

2 Respuestas a “2ª Evolución FPV usando Arduino

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s