comunicación serial con arduino creatividad codificada

Comunicación serial con Arduino

Arduino

La comunicación serial con Arduino es una de las formas de comunicación mas usadas en la comunidad de Arduino ayudándonos a realizar una comunicación entre dispositivos electrónicos.

Con esta comunicación podemos enviar comandos desde la computadora a la placa de Arduino, para realizar algunas pruebas sin la necesidad de armar un circuito extra.

Al tener esta comunicación disponible en las placas de Arduino nos permite también realizar conexiones inalámbricas con Bluetooth o Wifi, esto nos da la posibilidad de controlar varios dispositivos con aplicaciones móviles o de computadora de forma inalámbrica, pudiendo controlar prácticamente lo que queramos como luces, electroválvulas, sistemas de alarmas, motores, etc.

Además al tener la posibilidad de conectarse directamente con la computadora nos abre otras formas de interactuar con dispositivos externos enviando instrucciones mediante Internet encendiendo o apagando algún dispositivo apareado con una página Web o realizando tareas remotas que sean útiles para nuestros proyectos.

Evidentemente las posibilidades de realizar proyectos geniales se agrandan con esta posibilidad que nos da la comunicación serial de Arduino, siendo el límite será nuestra imaginación.

¿Cómo hacer una comunicación serie con Arduino? (puerto serie o serial)

Para hacer la comunicación serial o en serie con Arduino debemos habilitar el puerto serie para enviar y recibir información de un sistema embebido, teniendo la posibilidad de transmitir (TX) y recibir (RX) datos entre dispositivos, su configuración puede ser en Full-duplex, Duplex o Simplex.

Esta comunicación se realiza enviando una secuencia de bits, transmitida una a la vez en una línea de transmisión, esto se logra serializando los datos, esta transmisión de datos es sincronizada con un oscilador interno, el cual controlara su velocidad de nuestro puerto serie, esta velocidad tiene una unidad de medida en BAUD.

Para realizar la transmisión de datos serializados Arduino usa una unidad UART puesto que estos trabajan con un voltaje de 5 voltios.

Para identificar que pines usar, las placas Arduino tiene estampado las letras TX y RX que son de transmisión y recepción respectivamente, las placas mas usadas de Arduino pueden tener uno o mas puertos serie.

Arduino UNO trabaja con un solo puerto serie, en caso de Arduino Mega nos otorga hasta cuatro puertos serie.

Inicializando la comunicación serie de Arduino

Lo primero que debemos hacer es establecer la velocidad de conexión, normalmente trabajamos con una velocidad de 9600 baudios pero se puede trabajar desde 300 hasta los 2000000 baudios, esto dependerá de la placa de Arduino que usemos.

Esta velocidad se declara dentro la función setup() de nuestro código, para esto usamos la instrucción Serial.begin(velocidad) donde “velocidad” está determinada por la velocidad en BAUDIOS que deseamos trabajar. Si existe más de un puerto serie habilitado debemos especificar el puerto serie.

Declaración de la velocidad para una comunicación serial con Arduino

void setup()
{
 Serial.begin(9600);
 Serial1.begin(19200);
 Serial2.begin(28800);
 Serial3.begin(38400);
}

Impresión en pantalla

En Arduino para imprimir en pantalla es muy sencillo, existe instrucciones que nos permiten realizar estas tareas, ya sea imprimir un numero en binario, octal, decimal o hexadecimal, o cualquier cadena de texto que necesitemos. Para realizar esto usamos la instrucción Serial.print() o Serial.println(), el primero nos permite imprimir en pantalla sin salto de línea y el segundo es más apropiado cuando realizamos múltiples impresiones y deseamos diferenciarlos en cada línea.

Serial.print(“Hola Mundo ”);
Serial.println(“Hola mundo”);

También podemos tratar algunos datos numéricos transformándolo de decimal a binario, octal o hexadecimal con solo colocar al final el tipo de dato.

Serial.println(100,BIN); // imprime en pantalla 1100100
Serial.println(100,OCT); // imprime en pantalla 144
Serial.println(100,HEX);  // imprime en pantalla 64

Para trabajar con números decimales muchas veces es necesario mostrar una cierta cantidad de decimales, Arduino nos da la posibilidad de decidir el número de decimales que deseemos imprimir con solo detallarlo al final.

Serial.println(3.14159, 1) // imprime 3.1
Serial.println(3.14159, 4) //imprime 3.1416

Arduino también tiene la posibilidad de hacer tabulaciones y saltos de línea con instrucciones simples como:

Serial.print(“\t”); //tabulación
Serial.print(“\n”); //salto de línea

Lectura del puerto serie

Recibir y leer un dato desde el puerto serie con el método Serial.read() de Arduino es simple, solo hacemos llamamos el método y nos devolverá los valores que lea en el pin especificado anteriormente.

dato = Serial.read();
Serial.println(dato);

Cuando hacemos una lectura de datos desde el puerto serie de la placa de Arduino de forma directa sin realizar ninguna comprobación esto puede generar errores ya que si intentamos leer datos sin que estos existan evidentemente esto nos arrojara un error por lo cual es siempre aconsejable implementar algunos controles antes de leer datos desde el puerto serie de Arduino.

Serial.available()nos permite comprobar si existe datos para ser leídos, esta instrucción devuelve 0 si no existe ningún dato para leer por lo cual si lo combinamos con un control condicional if podemos determinar cuándo leer o no un datos.

if (Serial.available() > 0) //Existe un dato para leer
{
dato = Serial.read(); // Guarda el dato leído
}  

Escritura con el puerto serie de Arduino

Cuando deseamos enviar información desde Arduino hacia un dispositivo una opción sería usar la instrucción Serial.write() que nos provee Arduino, esto nos permitirá enviar una byte o una serie de bytes de forma asíncrona, también podemos enviar caracteres, al trabajar con Serial.write() estaremos enviando de forma directa los datos al dispositivo que estemos conectado, con esto también podemos enviar una cadena de caracteres o una matriz pero como una serie de bytes.

Serial.write(valor);
Serial.write(cadena);
Serial.write(matriz, longitud);

Otras opciones para trabajar con el puerto serial

Trabajar con el puerto serial de Arduino es importante para depurar en muchos casos nuestros proyectos, porque podemos imprimir nuestras variables en pantalla y ver como actúan en nuestro proyecto, para esto a continuación mencionaremos algunas opciones que nos brinda este puerto serie.

Serial.end()

Esta instrucción deshabilita el puerto serial y habilitamos los pines TX y RX para la comunicación serial y usarlos como entradas o salidas digitales, de esta forma la placa de Arduino podrá disponer estos pines.

Serial.find(Cadena)

Es muy útil para buscar datos en forma de cadena enviados desde el búfer, si se encuentra nos devolverá verdadero y falso en caso contrario.

Serial.setTimeout(long)

Esta instrucción es útil para determinar el máximo en milisegundo de tiempo de espera para recibir algún dato, esto lo usamos por si existe algún problema de comunicación con el puerto serie de Arduino, si no le indicamos un tiempo trabajara con 1000 milisegundos.

Serial.flush()

Útil para comprobar que se complete la transmisión de datos salientes en el puerto serial.

Serial.peek()

Esta instrucción se usa para obtener el siguiente byte(carácter) de aquellos datos entrantes del puerto serie, esto implica que no lo elimina del búfer.

Serial.readString()

Cuando necesitamos leer caracteres desde el búfer en serie esta es una opción muy apropiada, debemos tomar en cuenta que esta función termina cuando se agota el tiempo de espera que normalmente es de 1000 milisegundos o el tiempo que hayamos determinado con la instrucción setTimeout().

¿Qué te pareció el artículo?

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  * He leído y acepto la política de privacidad

¿Qué hacemos con tus datos?

Creatividad Codificada como responsable tratará tus datos con la finalidad de gestionar tu participación en nuestro blog informativo. Puedes acceder, rectificar y suprimir tus datos, así como ejercer otros derechos consultando la información adicional y detallada sobre protección de datos en nuestra Política de Privacidad