sábado, 3 de diciembre de 2016

Exámen Final - Bote RC "Naomi"

Introducción 


El examen final del curso de Electronica Aplicada para Prototipos del año 2016 consistía en crear un bote a control remoto con los sistemas y materiales utilizados y aprendidos a lo largo del semestre en clases.

En este examen habían varios puntos de evaluación:


1.- Movimiento Avanzar (control On/OFF o gradual)
2.- Movimiento Giro Izq y Giro Derecha (control On/OFF o gradual)
3.- Control y comunicación inalámbrica (Bluetooth, WiFi, GSM ó Zigbee)
4.- Diseño  y presentación de la embarcación 
5.- Performance General del sistema (embarcación, dirección, comunicaciones)
6.- Documentación del proceso (en blog)

Con esta tarea nuestro grupo de cuatro personas (Patricio Cardenas, Nicolas Kersting, Victoria Moreno y Maximiliano Toledo) empezó a crear un bote que al final terminaría como uno de los mejores entre todos los del curso.

Proceso de Diseño

La temática del examen y diseño de los botes era "piratas", pero nunca se expresó piratas del siglo 16 en el caribe, como típicamente se conoce, así que nosotros decidimos crear un bote/yate moderno que haya sido atracado por piratas somalis en el Mediterráneo y después es utilizado para atracar y tomar barcos petroleros en el cabo este de Africano como en la película "Capitain Philips".

Al pensar en la estructura del barco y las posibilidades de que se una y asi falle la electrónica de esta tuve la idea de que sea un catamaran, es decir tenga dos cuerpos de flotación unidos por la base estética donde se guardara toda la electrónica de este. Para mejorar la viabilidad y el control de este decidimos utilizar 2 helenices que con aire movieran el barco y no en el agua. Así también poniendo al un lado de que rotores en el agua falles y así los motores como algunos del curso.

Como diseño utilizamos una foto de un Yate catamaran de medio tamaño y creamos un plano y plano de corte para cortar los cuerpos flotadores de poliuterano y lo demás de MDF de 3mm.

Todos los materiales utilizados fueron:

- Arduino Leonardo
- Bluebee
- 2 motores RC de 3v
- 3 baterias de 9v
- Plumavit
- MDF
- 2 helices de cuadricoptero
- Pintura en spray (para el MDF)
- Pintura acrílica (para plumavit)
- Cables
- Smarthphone

Aqui el plano de corte en Rhino 5:

Después de corar las bases de poluteraneo se empezó con el armado del bote.
 


Para los motores se tuvo que crear un armazón ya que utilizamos hélices de dron grandes para maxima potencia.
Aqui unas cuantas fotos del boten en todas las vistas:






La Electrónica - Mente del Bote

La electrónica de nuestro bote es básicamente la mente de este, ya que controlo todo lo que hace en el agua y como funciona. También es la parte más importante del proyecto ya que refleja lo que aprendimos en el semestre!
Para esto había varias opciones para utilizar y discutimos llegando a la conclusión de que usaríamos un Arduino Leonardo con la placa Xbee (Bluebee) para utilizar bluetooth que tiene un alcance de hasta 10 metros y es relativamente fácil de setear.
Sólo que al principio tomamos el camino de utilizar el computador como control remoto y así prossesing para control, un camino que se nos hizo muy difícil y llevó a cabo de que cambiemos el plan a pocos días del examen para asegurarnos un funcionamiento sin problemas y tomemos el plan de utilizar la misma placa Bluebee pero en este caso con la aplicación "Bluetooth SPP" para smartphones Android.
Al principio nuestras conexiones se veían de esta manera.
Dos motores en conectados en "puente H" para que el bote también pueda retroceder (cada uno con su batería de 9V) y un servo que serviría de timón y para ayudar a virar. Pero esa opción la descartamos temprano en la fase de prueba de toda la electrónica ya que se nos agrian problemas de fuerza y control que serían más faciles y seguros utilizando sólo los motores como propulsión y dirección.


 Para poder hacer funcionar este sistema de programo en Arduino el próximo código, en negrita después de // están las explicación de cada linea en el código:

char mensaje; //variable que guarda mensaje
int motorDA = 11; //pin que hace acelerar motor derecho
int motorDR = 10; //pin que hace retroceder motor derecho
int motorIA = 9;  // pin que hace acelerar motor izquierdo
int motorIR = 8;  // pin que hace retroceder izquierda

//seteo del inicio delprograma

void setup() {
  Serial1.begin(9600); //puerto serial bluebee, receptor-emisor de mensaje
  Serial.begin(9600); // puerto serial leonardo
  pinMode(motorDA, OUTPUT); //def pin como salida
  pinMode(motorDR, OUTPUT); //def pin como salida
  pinMode(motorIA, OUTPUT); //def pin como salida
  pinMode(motorIR, OUTPUT); //def pin como salida

}
//loop de repetición
void loop() {
  while (Serial1.available() > 0) { //se revisa si es que hay algun mensaje recibido por el bluebee
    mensaje = (char)Serial1.read(); //se guarda el mensaje en la variable "mensaje"
 
    //enciende los dos motores para que avancen
    if (mensaje == 'a') { //si el mensaje recibido es "a"
   
//al apagar o encender un pin entre el 8 y 11 se permite el paso de la corriente en cada uno de los relés,
//de esta manera podemos controlar la dirección de giro de cada motor y por ende la dirección de movimiento del bote.

      digitalWrite(motorDR, 0); //apaga el pin definido en la variable
      digitalWrite(motorIR, 0); //apaga el pin definido en la variable
      digitalWrite(motorDA, 1); //enciende el pin definido en la variable
      digitalWrite(motorIA, 1); //enciende el pin definido en la variable
    }
    //enciende los dos motores para que retrocedan
    else if (mensaje == 'r') { //si el mensaje es "r"
      digitalWrite(motorDA, 0); //apaga el pin definido en la variable
      digitalWrite(motorIA, 0); //apaga el pin definido en la variable
      digitalWrite(motorDR, 1); //enciende el pin definido en la variable
      digitalWrite(motorIR, 1); //enciende el pin definido en la variable
    }
    //prende el motor izquierdo y apaga el derecho
    else if (mensaje == 'd') {//si el mensaje es "d"
      digitalWrite(motorDA, 0); //apaga el pin definido en la variable
      digitalWrite(motorIA, 1); //enciende el pin definido en la variable
      digitalWrite(motorDR, 0); //apaga el pin definido en la variable
      digitalWrite(motorIR, 0); //apaga el pin definido en la variable
    }
    //prende el motor derecho y apaga el izquierdo
    else if (mensaje == 'i') { //si el mensaje es "i"
      digitalWrite(motorDA, 1); //enciende el pin definido en la variable
      digitalWrite(motorIA, 0); //apaga el pin definido en la variable
      digitalWrite(motorDR, 0); //apaga el pin definido en la variable
      digitalWrite(motorIR, 0); //apaga el pin definido en la variable

    }
    //apaga todo
    if (mensaje == 'j') { //si el mensaje es "j"
      digitalWrite(motorDA, 0); //apaga el pin definido en la variable
      digitalWrite(motorIA, 0); //apaga el pin definido en la variable
      digitalWrite(motorDR, 0); //apaga el pin definido en la variable
      digitalWrite(motorIR, 0); //apaga el pin definido en la variable

    }
  }
}

La interfaz de la aplicación que funcionaba para manejar el bote se ve así. Estos botones fueron configurados para mandar los respectivos mensajes al Arduino que funcione como explicado arriba. 


Tras programar se debía hacer todas las conexiones para esto y soldar las partes: 


Este fue el circuito final al que después se quito el servo ya que no se necesitaba. Como se puede observar las conexiones de los motores en Puente H, cada uno con su batería para poder. Lo que faltaría aqui es la conexión de otra tercera batería que daría electricidad a la placa directamente. Aqui no se puede ver porque aún estaba conectada al transformador de enchufe.

Aqui un video de prudenza de los circuitos.


Después de haber probado y visto que funcionaba el circuito, pusimos toda la parte electrónica en el cuerpo del nuestro bote para probar en agua. Después en la universidad probamos y nos funciono!\



Día del Examen

Tras logrado a tiempo y probarlo para llegar asegurados al examen llegó el dia del examen.
En este Naomi funcionó de manera perfecta y manubrio por toda la piscina sin un problema!

Así mismo terminando el examen cuando se puso a todos los demás botes en el agua para una "carrera"o pelea demostró la fuerza y superioridad contra los demás en poder, tamaño, manubriabilidad y velocidad!









Tarea 5 - Bluebee. Configuración y uso con PC y celular

Esta tarea consistía en controlar los relays de la placa XBee IO Pro a través de bluetooth con señales enviadas desde un computador.
Luego, debíamos hacer la misma conexión, pero desde el celular con una aplicación llamada Bluetooth SPP y así mandar datos directamente a nuestra placa, esta una opción que en el futuro nos llevaría a utilizarla en el examen final.
Primero, había que configurar el nombre y la contraseña de nuestra placa, para esto se utilizó un software llamado XCTU para Mac o Windows que fácilmente en un menu y el comando "$$$" deja abrir una ventana que da la opción de configurar lo necesitado.
Con el código se establecía que, al enviar desde el celular el caracter 35 de la tabla ascii(#), el Arduino lo recibe y se prende un relay, al revés con el caracter 42  (*), el relay se apagaba.
void setup() {
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
while (Serial1.available()) {
char inChar = (char)Serial1.read();
if (47==inChar){
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
Serial.println (inChar);}
if (inChar==35){
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
Serial.println(inChar);}
}
}
Para ver lo que hicimos aquí un video: