Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Comunicar la tarjeta Arduino con el PC II

Por Félix Maocho
25/8/2013

 

Objetivo de este post:

En el capítulo anterior post explicamos lo que era la comunicación serial entre la tarjeta y el PC y se explicó como mandar mensajes de comunicación de la tarjeta al PC. En este post explicaremos la forma de hacer el envío en sentido opuesto es decir del PC hacia la tarjeta Arduino.

_________________

En el capítulo anterior vimos la forma que Arduino puede informarnos a través del PC que es lo que ocurre a su alrededor, los sensores de Arduino recogen la información de lo que ocurre a su alrededor y la transmiten al PC, que por su parte la muestra al operador a través de la pantalla. Falta averiguar como el operador puede transmitir mensajes a la tarjeta a Arduino para que esta actúe de la forma que el operador crea conveniente.

Para comunicar a la placa Arduino UNO lo que hemos previamente cargado en el buffer de comunicación desde la pantalla serial. hay dos mandatos “available” y “read”.

“available” lee el buffer del puerto serie, e informa el número de caracteres que encuentra en el buffer o si está vacío, “read” extrae el primer carácter del buffer. Es importante tener en cuenta que a diferencia de lo que ocurría con los mandatos “print” y “prinln” que transmitían de golpe una cadena de caracteres “read”solo lee un único carácter.

En este caso el buffer funciona de forma similar a como funcionan las colas de las carnicerías de los hipermercados, los clientes llegan y toma un número y espera a que los dependientes atiendan a quienes tienen números anteriores. De vez en cuando el carnicero atiende al cliente con el de número más bajo de los existentes mientras el cliente anterior se pierde por otras secciones de la tienda.

Sin embargo en este caso el sitio de espera el “buffer” tiene una capacidad máxima, por lo que en casos extremos puede resultar insuficiente y una vez cubierta esta capacidad, los nuevos clientes no pueden ni coger número y se irán a otras secciones del hipermercado perdiéndose como clientes de la carnicería. Los caracteres que lleguen cuando el buffer este completo serán rechazados y se producirá la pérdida del dato (drop o loss).

¿Quiere esto decir que no podemos mandar palabras completas como  “Hola Mundo” o números de varios dígitos como hacíamos con “print”? – Si podemos, lo que ocurre es que el software estándar cargado en Arduino, es el mínimo posible para que ocupe poco y si tenemos necesidad de mandar cadenas de caracteres. tenderemos que gestionar su lectura a través del programa., por ejemplo podemos hacer lecturas sucesivas y dejar los caracteres en en posiciones sucesivas de un string.available() devuelve el número de bytes (caracteres) disponibles en el buffer  (que tiene una capacidad de 128 bytes), para ser leídos por la tarjeta Arduino.

La sintaxis del mandato “available” (disponible) es:

val = Serial.available()

Donde

  • “val” es la variable numérica que recibirá el numero de caracteres que hay en el buffer
  •  “Serial.available()” es el mandato que reclama el dato de los caracteres disponibles

La sintaxis del mandato “read” (disponible) es

 “var” = Serial.read()

Donde

  • “var” es la variable de texto que recibirá el carácter que ocupe la primera posición en el buffer. El hecho de leerlo retira el carácter del buffer.
  •  “Serial.read()” es el mandato que lee el primer caracter disponible y lo extrae del buffer

Veremos esto en unos sketch que nos enseñe como manejar esta información.

.

El sketch nos muestra en la pantalla serial, un eco de lo que escribimos y el  mandato “read” lee del buffer.

El programa no precisa ningún circuito en el Arduino pues solo utiliza su capacidad de comunicación. La función “setup” se reduce a informar que vamos a utilizar la comunicación serial a 9699 baudios  y la función “loop” utiliza la función condicional “if “ condicionada por que el buffer contenga alguna información (Serial.available() >0). En tanto que haya algo el bucle informa del número de caracteres que hay en el buffer,

extrae el primer carácter del buffer, lo manda imprimir cambiando de línea y lo borra del buffer. Acabamos con un “delay” que retarda un poco el proceso, (3 segundos) para que lo podamos seguir más fácilmente

Resta explicar que para mandar los caracteres los escribimos en la línea de neutra pantalla serial que encontramos en la barra de herramientas del compilador . En neutro caso escribimos “abcdef” sin comillas al pulsar enviar desaparecen los caracteres de esta pantalla y el programa comienza a leerlos uno a uno, se ve como en cada ciclo la longitud de del buffer va disminuyendo.

 

Un programa de robótica tiene siempre el mismo esquema conceptual independientemente de su complejidad, En extremo están los sensores del robot que detectan el mundo que le rodea e uniforman a un procesador que las codifica convenientemente y comunica esas noticias a un ordenador exterior, En el ordenador se recibe esa información y se procesa para hacerla comprensible a los seres humanos, que son el otro extremo de la cadena.

Estos ante la información que reciben toman decisiones que se introducen como órdenes en el ordenador, órdenes que elabora y transforma en mensajes que se comunican al robot, El robot de acuerdo con esos códigos activa los distintos motores y actuadores para  ejecutar las órdenes recibidas.

Este esquema se repite sea cual sea la complejidad de proceso, en nuestro caso mandamos unas letras que el ordenador transforma en señales seriadas, que recibidas por Arduino se transforman en textos compuestos según los requerimientos que nuevamente transformados en mensajes seriados, se reciben en el ordenador para que este los muestre en pantalla en unos rótulos legibles por los humanos,

El mismo proceso solo que lógicamente mucho mas complejo es el que sigue el robot Curiosity en Marte y sus operadores en la tierra. El eslabón mas débil en todo el proceso es la comunicación, por ello solo circulan  códigos lo mas cortos posibles que contiene empaquetada la información esencial estos códigos serán interpretados tanto por el procesador de los operadores, como por el que porta el robot para transformarse en acciones complejas, pues aun no siendo muy poderosos el ordenador que equipo Curiosity tiene muchísima más capacidad de procesar datos que lo que puede circular por las comunicaciones, Por tanto no son los mandatos directos los que actúan sus motores sino rutinas internas que se activan de acuerdo con unos códigos recibidos.

Ni que decir tiene que el superordenador que tiene los operadores, permite no solo descifrar los datos recibidos sino hacer simulaciones de lo que se envía para comprobar antes de enviarlo que todo ocurrirá como se espera.

Aun nos falta la forma de pode utilizar toda la potencia de nuestro PC , de momento solo sabemos cargar una pantalla serial y mandar y recibir datos pero todo se andará.

Felix Maocho

 


25 agosto 2013 - Posted by | Robotica | , , ,

Aún no hay comentarios.

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 )

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: