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
}
}
}
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!