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:



miércoles, 30 de noviembre de 2016

Tarea 2 - Compuertas AND, OR y NOT

Se debía crear las compuertas lógicas AND, NOT y OR que se aprendieron en clases usando relays en un protoboard (digital). Es decir que era posible utilizar los varios programas que existen en internet para crear z simular circuitos.
Aquí los resultados de los circuitos con las diferentes compuertas lógicas utilizadas:


AND:


OR:



NOT:



Tarea 1 - Binarios

Cómo se realiza una multiplicación en binario?

La multiplicación en binario es el más "fácil".
Como los factores de la multiplicación sólo pueden ser 0 o 1, el producto sólo puede ser 0 o 1 al igual. Es decir que las tablas de multiplicar del cero y del uno son básicas para aprender:
x
0
1
0
0
0
1
0
1
En un computador la multiplicación se realiza mediante sumas repetidas. Eso crea problemas en la programación porque cada suma de dos 1 origina un arrastre, que se resuelven contando el número de 1 y de arrastres en cada columna. Si el número de 1 es par, la suma es un 0 y si es impar, un 1. Luego, para determinar los arrastres a la posición superior, se cuentan las parejas de 1s.

Aquí un ejemplo: 




Para entender mejor aqui se nos pidió hacer una tarea utilizando este mismo calculo y convertirlo en código Arduino para obtener numeros específicos.

int binario[] = {0, 1, 0, 1};
int unidades[] = {0, 0, 0, 0};
int decimal = 0;
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
// multiplica cada bit por su respectiva potencia en base 2
unidades[3] = binario[3]*1;
unidades[2] = binario[2]*2;
unidades[1] = binario[1]*4;
unidades[0] = binario[0]*8;
//suma los resultados de cada unidad para obtener el decimal
decimal = unidades[3]+unidades[2]+unidades[1]+unidades[0];
}
// the loop routine runs over and over again forever:
void loop() {
Serial.println(decimal);
delay(1000);
}

El código debería funcionar, transformando el 0101 a 5.


Como se puede observer en el el terminal tras correr en código es que aborrecen los 5, es decir que funciono nuestra multiplicación.


La próxima parte de la tarea era escribir un código que transforme un valor hexadecimal (HEX) de un byte a decimal y mostrar el resultado en el monitor serial de Arduino:

Lo difícil de esta tarea era el uso de letras mayúsculas como valores. Para poder trabajar con estos se utilizó el componente "define" de Arduino y se pasaron las letras a sus respectivos valores decimales. Después de se aplicó el mismo procedimiento del ejercicio anterior.


//asigna los valores de las letras en hexadecimal a decimal
#define A 10
#define B 11
#define C 12
#define D 13
#define E 14
#define F 15
//ingresar aqui el valor hexadeximal
int hex[] = {F,7};
int unidades[] = {0, 0};
int decimal = 0;
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
//multiplica cada espacio por su respectiva potencia de 16
unidades[1] = hex[1]*1;
unidades[0] = hex[0]*16;
//suma los resultados de cada unidad para obtener el decimal
decimal = unidades[1]+unidades[0];
}// the loop routine runs over and over again forever:
void loop() {
Serial.println(decimal);
delay(1000);
}

lunes, 28 de noviembre de 2016

Modulos Xbee z cómo conseguir señal

Cómo obtener datos de un sensor:

Hay dos maneras de obtener información del sensor:


  • Sampling solicitado para leer inmediatamente todos los pines de entrada digitales y analógicos habilitados.
  • Sampling automático para transmitir los datos del sensor periódicamente o cada vez que cambia un pin digital.

En ambos casos, la información se envía al otro módulo se llama muestra IO. Contiene las entradas (líneas DIO o canales ADC) con muestreo habilitado y el valor de todas las entradas digitales y analógicas habilitadas.


Sampling solicitado

El comando Force Sample (IS) obliga a leer todos los pines de entrada digital y analógica habilitados. Puede enviarlo localmente o a un dispositivo remoto.

Utilice la consola XCTU o cualquier aplicación de terminal de puerto serie para enviar este comando.
Cuando el módulo envía el comando IS, el dispositivo de recepción lee todos los canales de entrada analógica y analógica habilitados y devuelve su valor. Si el módulo transmite localmente el comando IS, envía los datos de E / S a la interfaz serie. Si el módulo transmite el comando IS a un módulo XBee remoto, envía los datos de IO remotos a través del aire al módulo solicitante.

Sampling automático


Una vez configurado el pin, el módulo remoto debe estar configurado para transmitir automáticamente la información del sensor al módulo XBee principal. El módulo XBee remoto necesita saber:


  1. Dónde transmitir los datos del sensor: defina esta información para el módulo que recibe esta información por los parámetros de la dirección de destino (DH + DL).
  2. Cuándo transmitir los datos del sensor:


    • Periódicamente: El XBee puede enviar la información leída del sensor en un intervalo especificado.
    • Por detección de cambio: Cuando un alfiler o varios pins cambian de estado.

Configure los parámetros IO Tasa de muestreo (IR) y Digital IO Change Detection (IC) para transmitir automáticamente los datos del sensor.

Wireless Mesh Networking

Mesh Networking son una forma eficaz de enrutar los datos.
El rango se amplía al permitir que los datos salten de nodo a nodo y la fiabilidad se incrementa mediante la "auto-curación", la capacidad de crear rutas alternativas cuando falla un nodo o se pierde una conexión.
Un protocolo de red de malla popular es ZigBee, que está específicamente diseñado para aplicaciones de baja velocidad de datos y baja potencia.


ZigBee Nodes

Los coordinadores son los más capaces de los tres tipos de nodos. Hay exactamente un coordinador en cada red y es el dispositivo que establece la red originalmente. Es capaz de almacenar información sobre la red, incluyendo claves de seguridad.

Los routers actúan como nodos intermedios, transmitiendo datos de otros dispositivos.

Los dispositivos receptores pueden ser dispositivos de baja potencia / alimentados por baterías. Tienen suficiente funcionalidad para hablar con sus padres y no pueden retransmitir datos de otros dispositivos.


Sleeping Routers 

Permitir que un nodo duerma reduce el consumo de energía, lo cual es especialmente útil para los nodos que funcionan con pilas. En la actualidad, ZigBee permite que los dispositivos finales durmieran, pero no los enrutadores ni los coordinadores. DigiMesh permite a todos los nodos dormir, lo que aumenta la vida de la batería.
El dormir es permitido por la sincronización del tiempo. Algunos sistemas requieren una pasarela o un coordinador para establecer la sincronización de tiempo. Una ventaja significativa de DigiMesh es que elimina el único punto de fallo asociado con depender de un coordinador o puerta de enlace. En cambio, DigiMesh establece sincronización de tiempo a través de un proceso de nominación y elección, permitiendo que la red funcione de manera autónoma.

Diferencias Adicionales 

Dado que ZigBee es abierto, ofrece el potencial de interoperabilidad con dispositivos fabricados por diferentes proveedores. Esto proporciona la capacidad de tener actualizaciones de firmware en el aire. Además, ZigBee ofrece perfiles establecidos para aplicaciones comunes como gestión de energía y controles de iluminación. Una buena selección de herramientas de apoyo de diagnóstico, como RF sniffer de paquetes, también está disponible.
DigiMesh, como un protocolo propietario, permite un control más estricto del espacio de código y por lo tanto más espacio para el crecimiento de características. DigiMesh está disponible en plataformas con mayor rango y más opciones de velocidad de datos RF. La carga útil del marco es generalmente mayor, lo que puede mejorar el rendimiento para las aplicaciones que envían bloques de datos más grandes. Además, DigiMesh utiliza un método de direccionamiento simplificado, que mejora la configuración de la red y la resolución de problemas.

Explorando ExBee y XCTU

XBees son transceptores inalámbricos populares. Esto se debe a que son flexibles ya que envían y reciben datos a través de sólo un puerto serie, lo que significa que son compatibles con computadoras y microcontroladores (como Arduino).
Y fáciles de configurar y asi se pueden crear malladas con decenas de XBees, o sólo unos cuantos.

El primer paso para comunicarse con su XBee es elegir una tarjeta de interfaz que le permite. XBee Explorers actúa como una puerta de enlace entre su computadora y su XBee. Hay unos pocos para elegir, cada uno ofreciendo sus propias diferencias clave. Aquí hay una breve descripción de cada uno:

XBee Explorer USB

El XBee Explorer USB es el más popular de los exploradores. Está equipado con un conector USB mini-B, por lo que necesitará el cable USB adecuado para conectarlo a su computadora.

Lo que más destaca en esta placa es un convertidor USB-a-Serie FT231X. Eso es lo que traduce los datos entre su computadora y el XBee. También hay un botón de reinicio, y un regulador de voltaje para suministrar el XBee con mucha energía. Además, hay cuatro LED que le ayudarán si alguna vez necesita depurar su XBee: RX, TX, RSSI (indicador de intensidad de señal) y un indicador de alimentación.

Esta placa también rompe cada uno de los pines de E / S del XBee a un par de cabezales compatibles con paneles de pan. Así que si desea hacer uso de la funcionalidad extendida de XBee, puede soldar algunos pines de cabecera en esos, o incluso sólo soldar un poco de cable.

XBee Explorer USB Dongle

El XBee Explorer Dongle es una extensión del Explorador. De hecho, la única diferencia real entre este y su predecesor es el conector USB. El Dongle se puede conectar directamente a su computadora portátil o puerto USB de la computadora.


XBee Explorer serie

Los ordenadores con un puerto serie RS-232 se están volviendo cada vez más difíciles de encontrar, pero si usted tiene una de esas reliquias, el XBee Explorer Serial es una opción viable.



Comenzando con X-CTU

X-CTU es un software libre, proporcionado por Digi (el fabricante de XBee), que utilizamos para configurar y administrar XBees y probar redes XBee.

Antes de continuar, asegúrese de que ha conectado un XBee en su explorador, y tenga el explorador conectado a su computadora. Cuando instaló los controladores para su Explorer debería haber sido asignado un número de puerto.

Seleccione su puerto de comunicación. Si tienes suerte (o simplemente no tienes un montón de cosas conectadas a tu computadora) sólo puede tener una opción aquí. De lo contrario, los usuarios de Windows deberían buscar la entrada que dice "USB Serial Port" y los usuarios de Mac deberían buscar algo como "usbserial-XXXXXXXX", si usas una tarjeta USB XBee. Si está utilizando un Explorador Serial en su lugar, elija la opción "Puerto de Comunicaciones". Si el Explorador Serial no aparece, asegúrese de que el interruptor a bordo esté ajustado a "On"!