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


jueves, 13 de octubre de 2016

Tarea 4 - Xbee con 433Mhz

La tarea 4 consistía en en 3 partes:


Calcular la cobertura de la radio utilizando distintos voltajes de alimentación (5/12VDC) a 2400 bps
Para un voltaje fijo (5VDC) calcular la cobertura modificando las velocidades de transmisión (1200, 9600,115200bps)
Diseñar una antena de 433Mhz para el transmisor y verificar nuevamente el alcance 


Para esto se utilizo los materiales que se prestaron por el profesor y conecto todo de acuerdo al powerpoint

Aqui se puede observar la placa conectada con el Receptor 433Mhz con Xbee IO Pro

Aqui el transmisor.

Al coenctar la placa de Arduino con el receptor al computador y abriendo el terminal, tras sesear la placa selecionada, se podía observar que se tomaba muchas señales que no se necesitaba. Es decir que la señal que se recibía era más que todo "basura".
Al conectar el transmisor, setearlo y con el terminal mandando algo se podia observar que entre toda la basura que se recibía aparecía la señal que se quizo transmitir.
Es to llevo a cabo de que se tenga que crear un código que "filtre" básicamente la señal y muestre sólo lo que nosotros queremos recibir, o sea lo que transmitimos y no todo lo demás. 

Para esto utilizamos Arduino y escribimos este código:


void setup()
  {
    Serial.begin(9600);
    Serial1.begin(2400); // VELOCIDAD TRANSMISIÓN RADIOS
  }

    void loop()
    {
    while (Serial1.available())
    {
    byte caracter = Serial1.read();
    Serial.println(caracter);
    if (caracter==0)
    {
    contador++;
    Serial.print("—————-CARACTER DETECTADO——————");
    }
    if (Serial.read()=='a') // Detener contador y mostrar porcentaje
    {
    porcentaje = contador;
    Serial.print("Porcentaje de cobertura: ");
    Serial.print(porcentaje);
    Serial.println(" %");
    delay(2000);
    porcentaje = 0;
    contador=0;
    }
    }
    } 


En el código se puede observar que ya se sete la velocidad de transmisión que después cambiamos para ver hasta donde llegaba. A parte de esto, este código filtraba básicamente todas las señales y se imprimía "—————-CARACTER DETECTADO——————" cada vez que llegaba la señal mandada por nuestro transmisor. Ya que la basura que se recibía eran números, escogimos transmitir letras, en este caso la letra "a" era la que se filtraba.
Cómo teniamo un cable dañado de MiniUSB, que no conectaba al computador, sino sólo pasaba energía, tuvimos que escribir un código simple y corto que transmitiera esta misma letra con un pequeño delay.

Código transmisor
void setup()
  {
    Serial.begin(9600);
    Serial1.begin(2400); // VELOCIDAD TRANSMISIÓN RADIOS
  }

void loop()
  {
    Serial1.write('a');
    delay(10);

Tras ver que esto funcionaba fuimos probando con diferentes velocidades de transmisión como la tarea lo decía y en la sala moviéndonos de un lado al potro ver hasta donde podría llegar. A parte con un alambre de cobre, generamos una antena que se conectó al port "ant" del transmisor para mejorar la señal.










martes, 30 de agosto de 2016

Tarea 3 - Arduino y Bits en Binario

  • Programar una función en Arduino que reciba un Byte (8-bits) e indique si la cantidad de unos es par o impar. 


    Programar una función que tome una cadena de 16 bits y la separe en 4 cadenas de 4 bits cada una. 

Tarea 3 - Traducción de la introducción a XBee

Introducción a los módulos de RF XBee

  1. Redes y XBee general

El módem de RF XBee de Digi International es un transceptor inalámbrico. El XBee utiliza un protocolo totalmente implementado para comunicaciones de datos que proporciona características necesarias para las comunicaciones de red robustos en una red de sensores inalámbricos (WSN). Características tales como el direccionamiento, reconocimientos y reintentos ayudan a garantizar la entrega segura de datos al nodo deseado. El XBee también tiene características adicionales más allá de las comunicaciones de datos para su uso en el seguimiento y control de dispositivos remotos. En este capítulo se discutirá algunos elementos esenciales de las comunicaciones de red y proporcionar una visión general del módulo XBee.

Cuestiones de varios nodos de red

Muchos módulos inalámbricos para microcontroladores sólo tiene que enviar datos y recibir datos sobre la frecuencia proporcionada. Corresponde al usuario final y su (o ella) código de la aplicación para hacer frente a cuestiones tales como las reglas de medios de acceso, verificación de la entrega de datos, comprobación de errores y, en redes multi-nodo, el nodo que va a aceptar y utilizar los datos. Los dispositivos que utilizan un protocolo de red pueden facilitar el trabajo del programador por el manejo de estas tareas.
En la discusión de los problemas asociados con la creación de redes, considere los seres humanos y los problemas y resoluciones para asegurar el flujo adecuado de comunicaciones. Ciertas reglas de comunicación, o protocolos, se utilizan para asegurar que nuestro mensaje fluye adecuadamente del emisor al receptor a través del medio, tales como el espacio de aire al hablar en persona.

Acceso a Medios - ¿Puedo hablar ahora?

En conversaciones entre dos o más personas, es importante que dos personas no hablan a la vez o el mensaje de uno o ambos no pueden conseguir a través de sus palabras como chocan entre sí y crear confusión para el oyente. En términos de red se trata del acceso a medios técnicos a las partes a acceder a tener en sus palabras a ser aceptado y comprendido. La gente en un grupo informal tienden a esperar por una abertura antes de comenzar a hablar. ¿Qué pasa cuando dos ven una apertura y ambos comienzan a hablar a la vez? Señalan el problema, tanto de marcha atrás y después de un poco de negociación se empieza a hablar, lo que permite que el uso de la persona el medio para conseguir sus pensamientos.

En la configuración más formales, otros medios pueden ser utilizados para controlar que habla cuando. En el aula, el profesor normalmente tiene acceso exclusivo al medio. Al mirar alrededor de la clase, el profesor de manera informal encuestas a los estudiantes para ver si alguien requiere acceso. En caso de que un estudiante levantar la mano, el maestro le permitirá al estudiante a hablar. En la novela clásica señor de las moscas, para asegurar que cada niño náufrago tuvo la oportunidad de hablar en el consejo, una concha de caracol se pasa alrededor. Cualquiera que sea el niño que tienen la concha tenía los derechos exclusivos de habla. Esto garantizó que cada uno tenía la oportunidad de hablar sin hablar con otras personas sobre él.
En las redes, diferentes protocolos de red manejan el acceso a los medios de comunicación de diferentes maneras, pero son similares a las comunicaciones humanos en muchas maneras. Ethernet (IEEE 802.3) sobre un alambre compartido utiliza "CSMA / CD" al igual que las conversaciones informales humanos. Todos los nodos (dispositivos de red) tienen el mismo derecho a enviar datos en la red (Acceso Múltiple-MA). En primer lugar, un nodo de escucha para ver si el medio (CAT 5 cable) está en uso. Si es así, se va a esperar de una abertura. Una vez que ve una apertura, que intenta transmitir sus datos (Carrier Sense-CS). Si bien el envío de datos, el nodo también monitorea lo que está en el medio y si tienen la sensación de otro nodo de transmisión, al mismo tiempo, se detecta la colisión de los datos y los dos se dejará de transmitir, espera una cantidad de tiempo única, y vuelve a intentarlo (Detección de Colisiones -DISCOS COMPACTOS).

El protocolo Wi-Fi (IEEE 802.11) utiliza CSMA / CA para el acceso; ya que estos nodos no pueden transmitir y escuchar al mismo tiempo, que utilizan medidas adicionales para asegurar las colisiones no se producen (Collision Avoidance-CA). La prevención de colisiones también ayuda a aliviar la situación en la que dos transmisores inalámbricos se encuentran dentro del alcance del otro, pero un tercer transmisor inalámbrico está fuera del rango del primer transmisor. El transmisor en el medio escucha las transmisiones de ambos vecinos, pero los transmisores en los extremos no se oye entre sí. Ellos están "ocultos" entre sí. Esto se llama, en la creación de redes, el "problema del nodo oculto".
El protocolo Token Ring (IEEE 802.5) garantiza el acceso y evita las colisiones haciendo pasar una ficha de nodo a nodo en un anillo de la moda, lo que permite que cada uno tenga acceso exclusivo al medio a su vez, al igual que pasa la concha de caracol. El protocolo USB utiliza polling-el anfitrión USB (normalmente el PC) encuestas cada dispositivo USB para ver si se requiere el acceso para comunicarse, y luego proporciona un intervalo de tiempo para comunicarse con el host.

El direccionamiento - ¿Estás hablando conmigo?

Al hablar en grupos, de manera informal o en situaciones más formales tales como el aula, a veces nuestras palabras son para una persona específica y, a veces están destinados para todo el grupo. Al hablar a un grupo entero, nuestros gestos y el modo de expresión implican las palabras son para el grupo. Para hablar con alguien de forma individual, nos dirigimos a esa persona directamente por su nombre para identificar al destinatario previsto. Otros pueden escuchar el mensaje, pero entiendo que no están destinados a responder ni quizá utilizar la información.

Networking proporciona las mismas funciones-a veces un mensaje enviado se entiende todos gusto en aceptar y, a veces un mensaje tiene únicamente un receptor específico. Mientras que utilizamos nombres de identificación, en las redes números de direcciones se asignan a varios dispositivos. Direcciones permiten que los datos enviados para ser utilizados por un solo dispositivo (punto a punto) o por todo un grupo de dispositivos (mensaje de difusión o punto a multi-punto). En muchos casos, todos los nodos reciben el mensaje "Datos enviados", pero si los datos no contiene su dirección que están programados para ignorar el mensaje de sólo el dispositivo con la dirección de destino correcta utiliza el mensaje. Las redes también tienen direcciones especializadas para indicar que todos los nodos deben aceptar y utilizar el mensaje-la dirección de difusión.
La dirección de origen del mensaje recibido puede ser importante también. Usted está en un grupo, oye su nombre y una pregunta, pero con el fin de responder adecuadamente lo que necesita saber quién envió el mensaje. En las redes, parte de los datos enviados incluye la dirección de originador o fuente de que envió el mensaje con el fin de reconocer y responder en consecuencia.

Comprobación de errores y Reconocimientos - ¿Me has entendido?

Por lo general es importante que las palabras que hablamos son reconocidos y comprendidos. Ya sea en el ambiente informal donde estamos transmitiendo algunos eventos en nuestras vidas o en entornos más formales donde se transmiten las instrucciones y órdenes, puede ser importante que sepamos el destinatario ha recibido y entendido el mensaje. Algún tipo de reconocimiento nos da a conocer a través de comentarios verbales o no verbales que están recibiendo el mensaje que transmitimos. Algunas situaciones requieren reconocimiento directo, tales como órdenes militares. Otras situaciones en las que menos información importante se está enviando puede no requerir reconocimiento directo, como excusándose de un grupo. En alguna circunstancia, puede ser críticamente importante que el mensaje no sólo se recibe, pero entiende correctamente. En el ejército, las órdenes a menudo se repiten de nuevo para asegurarse de que la parte recibió el mensaje sin errores. Muchas veces, nos responden en situaciones informales para asegurar que entendimos el mensaje-"Vamos a conocer a las 7:00 en la biblioteca." "Biblioteca a las 7:00? Bueno.”

Al pasar los datos en una red, es importante verificar el mensaje ha sido recibido y los datos no contenía errores. Una forma simple de comprobación de errores es sumar todos los valores de bytes a enviar y añadir valor a que los datos enviados (suma de comprobación). En la recepción, la misma se lleva a cabo de matemáticas en los datos recibidos y que el valor se compara con el valor de suma de control recibida. Si hay una discrepancia, los datos contienen errores y no se reconoce. Si el mensaje no se recibe o contiene errores, el nodo receptor no reconoce la recepción y el nodo emisor vuelve a intentar la transmisión.

La encapsulación - empaca y enviarlo!

Del mismo modo que cuando enviamos una carta, no simplemente escribimos la letra y ponerlo en el buzón con la esperanza de que lo hace para el receptor. La carta tiene que ser colocado en un sobre y dirigida a garantizar que se recibe y leído por la persona correcta. La dirección de retorno permite que el destinatario sepa quién era (y para el retorno por la oficina de correos si es necesario). Los datos sobre una red transfiere los mensajes de una manera similar. El mensaje (los datos que están enviando) está empaquetado con otros datos, el protocolo requiere que se muestre en la Figura 1-4. Estos datos agregados típicamente incluye: dirección de origen, dirección de destino, los valores de comprobación de errores, y otra información pertinente que necesita el protocolo. Nuestro mensaje está rodeada de los otros datos para asegurar la correcta entrega al nodo deseado.

Aplicación-captó el mensaje, ¿ahora qué?

En términos de red, el embalaje de los datos, su transmisión punto a punto, la comprobación de errores y el reconocimiento es manejado por el protocolo de enlace de datos. Ejemplos de protocolos de enlace de datos incluyen Ethernet, Token Ring y protocolos WiFi. Estos protocolos aseguran el nodo destinado recibe los datos libre de errores. Depende de la aplicación para definir cuál es el mensaje y qué hacer con él una vez recibido. ¿Qué mensaje se envía y cómo se va a utilizar es la tarea de la aplicación ingeniero aquellos de nosotros el diseño de sistemas con nodos que envían datos entre puntos. ¿Cómo será el software y el hardware van a interactuar unos con otros a través de la red?
A través de este tutorial vamos a ver cómo el XBee realiza el enlace para nuestros datos, cómo el XBee se puede configurar según sea necesario por nuestras aplicaciones, y cómo codificar nuestros controladores para enviar y recibir datos para aplicaciones específicas.