Blog de indusele

arduino

Qué hacer ante un error “avrdude stk500_getsync() not in sync resp=0x00” en Arduino

Escrito por indusele 02-08-2015 en arduino. Comentarios (0)

Actualmente me encuentro preparando nuevos contenidos para el blog, lo que me ha llevado a experimentar con una placa RFID-RC522 para poner en práctica lo que hemos visto hasta ahora de RFID y de Arduino en post anteriores. En una de las primeras pruebas me encontré que al compilar aparecía un error que hasta ahora no había visto: “avrdude stk500_getsync() not in sync resp=0x00”.

Investigando en foros comprobé que es un error usual que puede deberse a falta de comunicación. Algunos usuarios llegaron a asustarse llegando a desesperarse porque su placa “no reacciona”, porque tuvieron que volver a instalar el compilador con todos los drivers de forma manual o porque algún usuario le indicaba que este error podía deberse a que su ATmega16 podría haberse roto con lo que tendrían que comprar otra placa…

Como siempre, antes de desesperarme, empecé a revisar lo más básico y ese fue el problema así que si os encontráis con este error probar mi solución antes de desinstalar o resetear nada.

Leí en algún lado que el error podía deberse a un cambio de identificación en el puerto así que lo primero que comprobé fue que éste correspondiera con el que había configurado al instalar la consola de Arduino: CORRECTO. No sé muy bien la razón pero aproveché a comprobar la configuración de la placa y ahí estaba el error. Resulta que estaba intentando cargar el código en una placa Arduino UNO y mi placa es una Arduino MEGA 2560 con lo que la comunicación no se podía establecer. Cambié la configuración y no hubo ningún problema más. Os dejo un vídeo con los pasos:

Siempre se mete la pata en lo más básico. Estoy segura de que no se me olvidará comprobar la configuración de la consola cada vez que la abra.

“El único hombre que no se equivoca es el que nunca hace nada.” Goethe

EJEMPLO 6. Encender y apagar un led a través de Labview por comunicación serie

Escrito por indusele 08-02-2015 en Labview. Comentarios (0)

Una vez que hemos hecho el EJEMPLO 5 y que entendemos los fundamentos de la comunicación serie con arduino, vamos a intentar hacer un control desde labview para encender un led conectado a nuestra arduino. En primer lugar tengo que escribir un código en la consola de Arduino. Es muy sencillo tal y como se puede ver en el siguiente enlace. Para establecer el acceso al puerto serial desde Labview se debe iniciar una sesión VISA añadiendo un bloque “VISA configure serial port” y definir las características de inicio: Para establecer el acceso al puerto serial desde Labview se debe iniciar una sesión VISA añadiendo un bloque “VISA configure serial port” y definir las características de inicio:

Tengo que colocar un control para escribir el comando inicial y puedo hacerlo mediante una lista desplegable como se ve en el vídeo o mediante un string control tal y como se muestra:

El string control se debe insertar en el Front Panel porque si se hace en el diagrama de bloques directamente seleccionando un control desde la patilla, dará error (aunque no sé muy bien por qué razón). No hay que olvidar colocar un Property Node con la característica que vamos a usar…

… ni un VI para el cierre de la sesión VISA, con lo que podremos dar otra función al puerto.

Como es lógico, lo primero que se deberá hacer será enchufar la placa Arduino con el USB y compilar. Hay veces que la consola da el error “Puerto no encontrado” y se debe a que el puerto está siendo utilizado en algún otro programa, lo que no es raro en este tipo de aplicaciones. Para resolverlo habrá que cerrar todas las ventanas de Labview (incluso la de inicio), desenchufar el USB, volver a enchufar y volver a compilar.

Una vez que el código está cargado se puede comprobar abriendo el Monitor Serial de Arduino y escribiendo los comandos en la ventana de envío de datos:

Como tendremos conectado un LED en el pin 13 (según el código) y a GND podremos ver de forma visual si se enciende y apaga. A continuación simulamos en Labview y podremos hacer la misma comprobación, hemos logrado enviar datos de Labview a la placa de Arduino lo que nos permitirá hacer ejemplos más complejos.

“Si se quiere ascender por cuestas empinadas, es necesario al principio andar despacio.” William Shakespeare

Pero, ¿cómo se produce la comunicación entre Arduino y Labview?

Escrito por indusele 19-01-2015 en arduino. Comentarios (0)

Después de ver un ejemplo básico de encendido de un LED en Arduino a través de un scada realizado en Labview, hoy voy a explicar en qué se basa la comunicación entre estos dos programas ya que , pese a ser algo muy teórico, puede ser de gran ayuda en aplicaciones más complejas:

Comunicación serie de Arduino

La comunicación serial se suele emplear para comunicar Arduino con un ordenador u otros dispositivos. Todas las placas Arduino tienen al menor un puerto serie también nombrado como UART el cual comunica los pines digitales 0(RX) y 1(TX) con el ordenador a través de USB. UART significa “Universal Asynchronous Receiver-Transmitter” y es un controlador de puertos y dispositivos en serie. Normalmente se encuentra integrado en la placa base y sirve para manejar las interrupciones de los dispositivos conectados al puerto serie y convertir los datos en formato paralelo en formato serie para que puedan ser transmitidos a través de los puertos y viceversa. Los UART son programables y debe configurarse la velocidad, la paridad, la longitud y los bits de parada. El UART viene incluido en el hardware de Arduino integrado en el chip, el cual permite la comunicación incluso mientras se trabaja en otras tareas, siempre que haya un espacio en el buffer de serie de 64 bytes:

“Para entender el uso del buffer normalmente se usa el ejemplo de la sala de espera del médico. Esta sala de espera es el buffer, que tiene una capacidad de 64 pacientes. Cada paciente es 1 byte. El médico va atendiendo cada paciente uno por uno por orden de llegada. La enfermera que deja entrar a los pacientes a la sala de espera son los baudios (la velocidad de recibir datos), cuando más grande sea la velocidad, más gente entra en la sala. Si la sala está completa con 64 pacientes y llegan más, estos serán rechazados (drop o loss).” (Diymakers, 2014)

El puerto es el nombre genérico para definir las interfaces, físicos o virtuales, que permiten la comunicación entre dos ordenadores o dispositivos. El puerto serie (o puerto serial) es una interfaz de comunicaciones de datos digitales donde la información es transmitida bit a bit, es decir, envía un único bit a la vez en lugar de varios bits simultáneos como ocurre con la transmisión en paralelo que envía varios bits simultáneamente. Esta secuencia de bits es la forma de enviar la información a través de los dispositivos.

La transferencia de datos a través de los puertos de serie se emplea con frecuencia asociándose sobre todo al estándar RS-232; no obstante, últimamente se ha optado por la comunicación USB la cual manda los datos como un flujo en serie debido a que es más rápida la transmisión. En el caso de Arduino MEGA se caracteriza por usar un microcontrolador ATmega16U2 que está programado como un convertidor de USB a serie, lo que significa que no utiliza el chip controlador de USB a serial FTDI debido a que la conversión se realiza a través de programación.

Hay que tener en cuenta, además, que Arduino MEGA tiene tres puertos adicionales además del RX(0) Y TX0(1):

Serial1 en los pines 19(RX) y 18(TX)

Serial2 en los pines 17(RX) y 16(TX)

Serial3 en los pines 15(RX) y 14(TX)

Además, para usar estos pines para comunicarse con un ordenador, se necesitará un adaptador adicional de USB a serie por no estar conectado al adaptador de la MEGA.

La biblioteca SoftwareSerial permite la comunicación en serie en cualquiera de los pines digitales del MEGA 2560. Este recurso de software permite la comunicación con múltiples puertos con velocidades de transmisión de hasta 115200 bps aunque tiene un par de limitaciones:

·  Durante el uso de múltiples puertos, sólo se puede recibir un dato y no varios a la vez.

·  No todos los pines soportan interrupciones, sólo se pueden emplear para RX: 0, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

¿Qué comandos debo emplear para la comunicación serie?

En las próximas semanas incluiré un ejemplo básico de encendido y apagado de un led a través de Labview y basado en toda la teoría que hemos visto hoy. ¡Hasta pronto!

“El hombre vulgar, cuando emprende una cosa, la echa a perder por tener prisa en terminarla.” Lao Tse

EJEMPLO 5. Cómo encender un led mediante un control PWM desde Labview

Escrito por indusele 07-01-2015 en Labview. Comentarios (0)

Lo primero desearos un feliz año 2015 a todos. Espero que hayáis cargado las pilas porque hoy veremos los resultados de todo lo que hemos aprendido acerca de cómo utilizar Arduino en Labview.

Hace algunos meses, expliqué lo que era un control PWM e hicimos un ejemplo fácil de encendido de un LED para seguir aprendiendo a programar en la consola de Arduino. Por lo tanto, es el momento de realizar un ejemplo sencillo como el encendido de un LED a través de un control PWM pero esta vez en Labview.

Para ello, construyo tanto el Scada como el esquema de bloques. Lo primero que quiero es un control del PWM y una visualización de la señal.

A continuación tengo que cambiar el tipo de datos del control numérico a un byte sin signo (unsigned 8 por ser 1 byte igual a 8 bits) al ser con lo que trabaja Arduino:

Comprobaremos que cambia de color tanto al dar OK como al conectarse con el Waveform char ya que van a trabajar con el mismo tipo de datos y cada dato queda representado por un color. Paso a definir los pines con un bloque de input/output y señalo que voy a emplear en la conexión el pin 11 al ser una salida PWM. El pin se declarará mediante una constante numérica que sirve para decir si el pin es de entrada o salida. Para cambiar de input a output y viceversa tengo que dar doble click y donde se indica (me saldrá una lista desplegable con los ítems que añadí antes).

Por último, quiero que al pulsar stop se apague el LED:

Una vez que esté todo completado nos queda:

Si usáis una MEGA como hago yo, os saldrá un error al dar al run. Lo que tenéis que hacer es lo que vimos en posts anteriores, agregar un control VISA y un control para la propia placa tal y como se explicó anteriormente. Si no te acuerdas, siempre puedes revisar el vídeo resumen del ejemplo que hice:


“Un viaje de diez mil kilómetros empieza por un solo paso.” Proverbio chino

Cómo comunicar Arduino MEGA con Labview

Escrito por indusele 02-12-2014 en Labview. Comentarios (0)

En post anteriores he explicado cómo instalar la toolkit para trabajar con Arduino en Labview pero muchos os habréis encontrado con el problema de que vuestra Arduino MEGA no establece una buena comunicación. Esto se debe a que los bloques Arduino de Labview trabajan por defecto con Arduino UNO. 

Para un Arduino MEGA se debe colocar un elemento adicional: un control de VISA y un control de la propia placa. VISA es una herramienta específica de Arduino que funciona como una especie de OPC. El OPC es un estándar de comunicación en el campo del control y supervisión basado en tecnología Microsoft y que ofrece una interfaz común que permite que distintos equipos individuales puedan compartir datos a través de una arquitectura cliente-servidor. Esto significa que puedo compartir datos entre elementos de distintas marcas comerciales (la mayoría han incluido OPC en sus productos) solucionando el problema de la adaptación de drivers. Se puede descargar VISA de forma gratuita aquí.

A continuación se comprueba que todo esté configurado para MEGA haciendo doble click para cada elemento. Cuando lo hacemos es importante hacer un run para saber si hay errores pero es más importante desactivar el modo run para que no dé errores. 

Pasemos a realizar un programa básico para que quede claro:

Lo primero para cualquier programa de Arduino va a ser el bloque básico en el que se definirá la entrada, la salida, un pulsador de emergencia o paro y todo englobado en un bloque while lo que significa que vamos a llevar a cabo las instrucciones de Arduino hasta que pulsemos el paro, el botón de STOP. Posteriormente, se realizarán las modificaciones para Arduino MEGA tal y como se ha explicado al principio. Os dejo un vídeo con todos los pasos para que quede más claro:


"No puede haber grandes dificultades cuando abunda la buena voluntad." Nicolás Maquiavelo