Planos estrella de la muerte en R2-D2 (2)

En esta segunda parte voy a intentar explicar las comunicaciones que tenemos que hacer para que todo funcione.
En mi caso, mi droide lleva como sistema SHADOW +MC, es decir, en la cabeza lleva las famosas placas marcduino de curiousmarc, en concreto la V1.0.

Este sistema tiene la ventaja de que el diseñador nos ha dejado toda la información necesaria para poder enviarle comandos usando el puerto serie a 9600 baudios y 8 bits sin paridad, que es el estándar de las placa arduino normales.

El efecto que yo buscaba implicaba 2 cosas por separado:

  1. Tenia que abrir un panel de la cabeza y poner el sonido/música que yo quisiera (esto lo haría mandando ordenes a la placa marduino que acabo de mencionar)
  2. Tenia que mostrar el vídeo en la pantalla. Esto se debería hacer de forma separada, en mi caso, usando un relé y una pantalla LCD con memoria para alojar el vídeo.

Para poder gestionar todo, necesitaba una placa ardunino (o similar) normal (yo uso una arduino uno, pero puede valer una pro mini sin problemas).

Esta es la arduino uno

Y este es el relé que he usado:

Si alguien no sabe como es el funcionamiento de esté relé, es algo muy sencillo. Se trata de un conmutador (interruptor) que se activa o no en función de un pin de señal. De este modo, podemos encender o apagar algo poniendo llevando ese pin a 5V o a 0V.

El código básicamente hace lo siguiente:

  1. comprueba si el indicador del sensor ha cambiado a un valor por encima de 850. Esto significa que se ha introducido la tarjeta
  2. Activa el relé que alimenta la pantalla, lo que hace que se encienda y comience a reproducir el vídeo.
  3. Mando por el puerto serie la instrucción a la placa marcduino para que reproduzca el sonido/musica
  4. Mando por el puerto serie la instrucción a la placa marcduino para que abra el panel.

Una vez hecho esto el código sigue en bucle hasta que:

  1. Se acaba el vídeo (esto lo hago con un contador de tiempo)
  2. el indicador del sensor ha cambiado a un valor por debajo de 850 (se ha extraído la tarjeta)

En estos casos, se hace secuencia de fin que es:

  1. Apago la pantalla (desactivo el relé para cortar la alimentación)
  2. Mando por el puerto serie la instrucción a la placa marcduino para que cierre el panel
  3. Mando por el puerto serie la instrucción a la placa marcduino para que R2 se ponga en modo reposo (apaga la música)

Y esto es básicamente todo.

Este es el código que uso:

unsigned int lecturaCNY70 = 0;
boolean YaAbierto = false;
int Contador = 0;
boolean FinVideo = false;

void setup() {

  pinMode(A1, OUTPUT); // pin del relé
  digitalWrite(A1, HIGH); //  
}

void loop() {

  lecturaCNY70 = analogRead(A0);

  if(lecturaCNY70 >= 850) { // tarjeta metida
    if (YaAbierto == false && FinVideo == false ){
        Serial.begin(9600); //Abrimos y configuración de la velocidad serial
        digitalWrite(A1, LOW); // Activamos relé
        delay(2000);
        Serial.print("$87\r"); //música
        delay(4000);
        Serial.print(":OP05\r"); //Abre panel 5 
        delay(1000);
        Serial.print(":ST05\r"); //Para servo 5 Esto evita que haga ruido
        YaAbierto = true;
        Contador = 0;
    }
    else{
        if (Contador ==69){ // se ha acabado el vídeo
            Serial.print(":CL05\r"); //cierra panel
           delay(1000);
           Serial.print(":SE10\r"); //para musica
           Serial.end(); // cerramos puerto serie
           digitalWrite(A1, HIGH); // desactiva relé
           FinVideo = true;
           YaAbierto = false;
        }
        else{
          Contador=Contador +1;  
        }
    }
  }  
  else{ //tarjeta fuera
    FinVideo = false;
    if (YaAbierto == true){
       Serial.print(":CL05\r"); //cierra panel
       delay(1000);
       Serial.print(":SE10\r");
       Serial.end(); // cerramos puerto serie
       delay(50);
       digitalWrite(A1, HIGH); // desactiva relé
       YaAbierto = false;
       FinVideo = false;
       Contador = 0;
    }
  }
  delay(1000); //retardo de 1 segundos entre lectura
}

Conexiones:

  1. Pin 4 del sensor CNY70 (tal y como explique en el primer post) al pin de la Arduino A0
  2. Pin de señal del relé al pin A1 — Uso este por comodidad, ya que se podría usar un pin digital en su lugar
  3. Pin TX del Arduino al RX de la placa Master del Marcduino
  4. Importante tener tierra común en todas las placas.

Os dejo un vídeo dónde se aprecian un poco las conexiones y como funciona el conjunto.

La pantalla que he usado es una que tenia por casa de mensajes e invitaciones que mandan. Algo así:

Buscado info para ayudaros a conseguir una, he encontrado esto:

PANTALLA

Es la misma pantalla que la mía, o muy similar. El vídeo que vais a meter ocupa unos 8 megas, así que por espacio de memoria ir al modelo más barato. Es más importante el tamaño de la pantalla, que si no estoy equivocado, es de 4,3 pulgadas.

Supongo que por tiendas de este estilo se podrán encontrar estas pantallas sin problemas a precios que no deberían superar los 10€

De estas pantalla nos sobra el altavoz y la batería. Simplemente cortamos los cables y listo. Dejamos sólo el usb para poder meter el vídeo.
Los cables dónde va conectada la bateria es dónde debemos meter los 5v para que la pantalla funcione. Se debería encender y empezar a reproducir el vídeo de forma automática con meterle corriente. Cosa que como he dicho haremos con el Relé.

Tras esto, sólo nos queda marcar y cortar el dome en la zona del Radar Eye. Esto hay que hacerlo con cuidado, pues si nos pasamos y se ve… estamos jodidos. Asi que paciencia y despacito.

Fijamos el lector de la tarjeta por dentro del dome usando algún adhesivo potente y listo. Eso es básicamente todo.

El vídeo que he usado es este, desde el minuto 0:46 al 1:53 aproximadamente. Eso ya va a gusto de cada uno. Desde ese enlace lo podéis descargar y con cualquier editor de vídeo online coger el trozo que necesitáis. Os recomiendo que lo guardareis como mp4, que es el formato que leen las pantallas que os he puesto.

La música que he usado en mi caso es la BSO de Rogue One con un pequeño sonido de R2 al principio para indicar que ha leído bien la tarjeta, y de paso, dar tiempo a que la pantalla se encienda y empiece a reproducir, que son unos 2-3 segundos desde que le metemos corriente.

Y eso es todo. Cualquier duda estaré encantado de responderla.

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 )

Google photo

Estás comentando usando tu cuenta de Google. 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 )

Conectando a %s

Blog de WordPress.com.

Subir ↑

A %d blogueros les gusta esto: