Comunicación Serie con el Exterior: Arduino envía datos al PC

En esta ocasión vamos a ver como comunicar nuestro Arduino con nuestro PC, con la idea de enviarle órdenes o recibir información o señales, mientras arduino está trabajando.


Para conectarlo vamos a usar el puerto USB que establecerá una conexión en serie con nuestro PC.

La comunicación en serie es muy sencilla, con solo dos cable podemos tener una diferencia de tensión entre ellos cuando la diferencia sea de (5V) tendremos nivel alto y cuando sea de (0V) tendremos nivel bajo y con esto podemos transmitir información digital. Ahora solo nos falta establecer dos cosas entre el emisor y el receptor

         Un código común para codificar los caracteres que se envían.
        
         Un acuerdo de velocidad para saber a qué ritmo hay que leer los datos.
 

El código común que vamos a usar con Arduino se llama código ASCII y es estándar en todos los PCs. Es una forma de codificar las letras mediantes números en código binario que representas estos caracteres. Recordad que solo podemos transmitir unos y ceros.

Prácticamente todos los PCs utilizan este código y eso incluye a Windows, Mac y Linux, pero es importante comprender que esté es uno más entre varios códigos de caracteres posibles.

En realidad, lo que se suele usar actualmente es una extensión del código ASCII (llamada Unicode) que permita el uso de caracteres no incluidos en la tabla original, y que permite representar caracteres como las Ñ, o acentos para el español.

El otro factor que hay que establecer para realizar una comunicación serie es la velocidad. Dado que solo disponemos de dos hilos para transmitir, necesitamos saber cuándo hay que leer la línea y esto se hace estableciendo un acuerdo de velocidad. Si la velocidad de envío es distinta de la velocidad de lectura, el mensaje final será irreconocible.

Buena parte de los errores de comunicación serie programando con Arduino se suelen deber a una diferencia de velocidad entre el emisor y el receptor.

Esta velocidad se mide en bits por segundo y vamos a ver que Arduino soporta diferentes velocidades de comunicación serie.

Estableciendo la comunicación Serie

Arduino dispone de una librería serie incluida llamada Serial, que nos permite envía información al PC y para usarla, simplemente tenemos que pedirle en nuestro setup() que la incluya. La instrucción que se encarga es:

Serial.begin( velocidad )  ;
 
  • ¡Ojo! que Serial tiene la S mayúsculas y que C++ diferencia entre mayúsculas y minúsculas
 

La velocidad es un valor entre 300 y 2.000.000 bits por segundo. Normalmente se establece en 9600 (el valor por defecto) pero no hay ninguna razón para que sea esta la velocidad por defecto, de hecho esta no es una velocidad especialmente alta.

Para enviar un mensaje desde Arduino a nuestro PC podemos usar  las funciones

                            Serial.print()

                            Serial.println(). (ln hace que de un salto de línea)


Veamos un ejemplo que utilizaremos en el siguiente circuito para ver de manera práctica el puerto serie, además ese circuito será el mismo que montamos anteriormente para el interruptor:

    

El println()  enviara "Pulsador suelto" o "Pulsador presionado" al puerto serie de Arduino (repetidamente), en función de valor que contenga la variable estado.


Para poder leer en nuestro PC lo que envía arduino, necesitamos un monitor de puerto serie. El IDE de Arduino incluye uno muy sencillo, pero suficiente que se invoca con el botón del monitor, que hemos resaltado con un rectángulo amarillo en la siguiente imagen:

 

Cuando lo pulsamos se despliega el monitor serie en sí


Para asegurarnos de que la velocidad de conexión es la misma en el PC como en arduino, nos fijamos en la parte inferior derecha vemos un botón en el que por defecto pone 9600 baudios o bits por segundo que es la velocidad por defecto y es en este botón, donde nos aseguramos que ponga la misma velocidad que hemos puesto en la función setup() de nuestro sketch. Si lo despliegas, verás las diferentes velocidades aceptables para Arduino.

Estrictamente hablando, bits por segundo y baudios no son exactamente lo mismo, salvo en  ciertas condiciones particulares que en Arduino se cumplen, por lo que aquí, podemos usarlos como sinónimos.

En el mundo Arduino parece haber un acuerdo de usar velocidades bajas como 9600 en lugar de más altas como 115200, para evitar problemas, pero con la tecnología actual no hay motivo para ello. Es más, cuando necesitemos utilizar adaptadores Ethernet o BlueTooth para comunicarnos, la velocidad tendrá que ser alta.

Para probar el monitor serie vamos a montar el circuito del interruptor y usaremos el código que hemos visto

Una vez montado el circuito, subimos el código a arduino. A continuación abrimos el monitor serie y comprobamos como cambia de "Pulsador suelto" a "Pulsador presionado" cuando presionamos el pulsador. De esta forma hemos aprendido a utilizar el monitor serie para monitorear los valores de los sensores de forma sencilla.