Draft Idea

Proyectos, ideas y demás :D

Proyecto escáner: Desarrollo del software de prueba del sensor. Parte 2

Publicado en, noviembre 6th, 2010 por Draft Ideader

Hoy os traigo algunas novedades con respecto al software de prueba. Mientras por otra parte me sigo peleando con el sensor para conseguir que detecte los colores mas o menos bien, probablemente para la semana suba una nueva entrada con lo que he mirado estos días para el sensor

Como me han preguntado por email por los pasos que voy a seguir con el sensor, os puedo adelantar que mi intención es primero crear un sensor que detecte el blanco y el negro ( un color fuerte cualquiera), luego conseguir una escala de grises básica (unos cuantos tonos) y luego añadir el soporte para color (rojo, verde y azul) entrenando el sistema a través de una plantilla para que detecte más colores. A ver si lo consigo !!!!!!

Pero bueno, hoy lo importante es el software para las pruebas del sensor.

La intención de este software es tener una forma fácil, sencilla y agradable de ver los resultados de las distintas pruebas que hagamos con el sensor, además de ser fácilmente extensible y adaptable para el software del escáner.

Las características en la que he pensado para la interfaz vienen resumidas en las siguientes lineas:

  • Zona de control:

La zona de control contaría con botones para iniciar y parar la conexión serie con Arduino y con dos modos de recepción recibir un dato o recibir datos de manera continua en un lapso de tiempo predeterminado, además de contar con una lista de las ordenes enviadas a Arduino. También se permitirá elegir el modo de funcionamiento del sensor: “blanco o negro”, “blanco y negro” o color.

  • Zona de recepción e interpretación de datos:

La zona de recepción contaría simplemente con un listado de los datos recibidos con información acerca de si la recepción ha sido correcta y son válidos.

La zona de interpretación de datos simplemente mostrará la información recibida de forma amigable a través de zonas en las que se mostrarán los valores RGB recibidos y una representación a través de un recuadro coloreado.

Otro punto importante es el formato de los datos de entrada y salida. He decidido utilizar un sistemas sencillo, aunque no es el más óptimo:

  • Datos de entrada: (los datos recibidos desde Arduino)

Seguirán el siguiente patrón: $1[valor1]$2[valor2]$3[valor3]$F

$1: Indica el inicio de la entrada de datos y el inicio del primer elemento enviado (valor1)

[valor1]: representará el valor del color rojo en RGB.

$2: Indica el fin del primer elemento y el comienzo del segundo (valor2).

[valor2]: representará el valor de color verde en RGB.

$3: Indica el fin del segundo elemento y el comienzo del tercero.

[valor3]: representará el valor del color azul en RGB.

$F: Indica el fin de la información.

  • Datos de salida: (datos enviados a Arduino):

Seguirán el siguiente patrón: $[ORDEN]

$: Indica el inicio de una orden.

[ORDEN]: Representa una orden determinada. En este momento tengo pensado las siguientes:

INI: Indica a Arduino que debe hacer caso a peticiones.

FIN: Indica a Arduino que no debe hacer caso a peticiones (hasta el siguiente INI)

DAT: Indica a Arduino que debe realizar y enviar una lectura en el modo activado.

CON: Indica a Arduino que debe realizar y enviar lecturas en el modo activado de manera continuda.

BYN: Indica a Arduino que el modo activado es el modo en blanco y negro (escala de grises).

CLR: Indica a Arduino que el modo activado es el modo en color

BON: Indica a Arduino que el modo activa es el modo blanco o negro

A continuación os dejo la siguiente imagen que muestra más o menos el diseño de la interfaz.

Boceto de interface para el software de pruebas del sensor

Boceto de interface

En caso de que añada alguna nueva funcionalidad intentaré actualizar esta entrada.

Proyecto escáner: Como comunicarse por serie con Arduino desde Java. Parte 3

Publicado en, octubre 31st, 2010 por Draft Ideader

Para poder realizar el eco entre Arduino y el programa en Java necesitamos código en ambos extremos. Ya mostramos en un post anterior el código para el programa en Java, ahora le toca el turno al código que irá en Arduino.

Como podreis observar a continuación, el código para Arduino es terriblemente sencillo:

Simplemente lo que hace el programa es averiguar si hay información almacenada en el buffer (zona de memoria intermedia) del puerto serie ( if ( Serial.available() > 0) ) para poder asi después leerla e imprimirla por puerto serie como byte Serial.write(Serial.read()); ( Serial.print(Serial.read(),BYTE)  (Ya no es válido desde Arduino 1.0) ).

Hay que tener en cuenta que la función available() devuelve de manera aproximada la cantidad de información en el buffer como un valor entero, esa es la razón por la que hago el >0.

Por otra parte, a print le paso BYTE como parámetro, la razón es que de esta forma escribe en el puerto serie de forma que el programa en Java lo entienda como carácter sin necesidad de hacer nada más, aunque esto podría traernos problemas con caracteres especiales como la ñ ya que se utiliza más de 1 byte para representarlo y podria ocurrir que Arduino o el programa en Java leyera cada byte como un único carácter en alguna ocasión.

Ahora os dejo un vídeo en el que muestro el funcionamiento:

 

P.D.: Gracias a Nestor por el aviso sobre que Serial.print(var,BYTE);  ya no es valido desde Arduino 1.0.

Proyecto escáner: Como comunicarse por serie con Arduino desde Java. Parte 2

Publicado en, octubre 29th, 2010 por Draft Ideader

Pues ya estoy de vuelta con el código en Java y una miniaplicacion para Arduino para mostrar como comunicaros con Arduino desde Java.

Al final he decidido utilizar un código que encontré en la pagina web de Arduino en el que muestran como mantener una conversación con Arduino desde Java. Me ha gustado sobre todo porque viene bien explicado y porque hace posible utilizar ese mismo código en diferentes plataformas comentando un par de líneas. La única pega es que esta en inglés, pero no creo que os de problemas, es sencillo de comprender. LINK AL CODIGO

Con este código voy a hacer un sencillísimo programa de Eco (le envío un mensaje a Arduino, este me lo devuelve y lo imprimo por pantalla).

Antes de nada quiero explicar un poco por encima como está implementado y que métodos tiene.

La clase se llama SerialTest, la cual hereda la clase abstracta SerialPortEventListener de gnu.io (RxTx) por lo tanto, como es abstracta, debemos implementar sus métodos. La clase solo tiene un método abstracto, serialEvent(SerialPortEvent ev) en cual se implementa como tratar un evento de ese tipo, en el ejemplo de la web de Arduino simplemente lo lee y lo imprime por pantalla, yo le añadiré un par más de lineas de código para poder distinguir cuando recibimos un mensaje desde Arduino.

Pero claro, solo con ese método no vamos a ningún sitio, así que en el ejemplo codifican también un método para iniciar y parar la conexión, con esto ya tenemos todo lo necesario para recibir datos desde Arduino y manejarlos.

Para enviar datos implementé un sencillísimo método que utiliza output que es un objeto de la clase OutputStream preparado para escribir por el puerto serie, y que se define al inicializar el puerto serie.

A continuación os voy a mostrar mi código modificado. Está preparado para funcionar en distribuciones GNU/Linux, pero podeis hacerlo compatible con Windows o Mac solo comentando y descomentando las siguientes líneas y sabiendo a que puerto se va a conectar el Arduino:

  • Compatible con windows:

  • Compatible con Mac:

En la siguiente entrada mostraré el código que necesita Arduino para que el eco funcione y pondré un vídeo mostrando su funcionamiento.

Si alguien detecta alguna errata, o sugiere mejoras, estas serán bienvenidas 🙂
PD: Arreglado error en el código.

Copyright © 2009 Draft Idea. Theme by THAT Agency powered by WordPress.