Comunicación serial en arduino con la librería serial

24/06/2023

Valoración: 4.22 (871 votos)

Arduino se destaca por su capacidad de interactuar con el entorno exterior, y una de las formas más comunes de hacerlo es a través del puerto serie. Esta interfaz permite una comunicación bidireccional entre la placa y un ordenador u otro dispositivo, posibilitando el envío y recepción de datos. Esta tutorial profundiza en el uso de la librería Serial de Arduino para el manejo del puerto serie, cubriendo desde la inicialización hasta técnicas avanzadas.

Temario

Inicializando la Comunicación Serial

Antes de enviar o recibir cualquier dato, el puerto serie debe ser inicializado. Esto se realiza mediante la función Serial.begin() . Esta función toma como único argumento la velocidad de transmisión en baudios (bps), un valor que determina la cantidad de bits transmitidos por segundo. Las velocidades comunes incluyen 9600, 19200, 38400, 57600 y 115200 bps. La elección de la velocidad debe ser consistente entre Arduino y el programa de recepción en el ordenador.

Ejemplo:

void setup() {
Serial.begin(9600); // Inicializa la comunicación serial a 9600 bps
}

Enviando Datos por el Puerto Serial

Arduino ofrece varias funciones para enviar datos a través del puerto serie. Las más utilizadas son:

  • Serial.print() : Envía datos al puerto serie. Los datos se envían sin un carácter de nueva línea al final, lo que significa que datos subsecuentes se concatenarán.
  • Serial.println() : Similar a Serial.print() , pero añade un carácter de nueva línea ( ) al final de cada dato enviado. Esto hace que cada dato aparezca en una línea separada en el monitor serial, mejorando la legibilidad.

Ambas funciones aceptan diferentes tipos de datos como argumentos, incluyendo enteros, flotantes, cadenas de caracteres y variables booleanas. Por ejemplo:

void loop() {
int contador = 0;
for (int i = 1; i <= 10; i++) {
contador = i;
Serial.print(contador); // Imprime el contador sin salto de línea
Serial.print(" "); // Añade un espacio entre los números
delay(1000);
}
Serial.println(); // Añade un salto de línea al final
delay(2000);
}

Este código muestra cómo enviar un contador del 1 al 10 con un espacio entre cada número usando Serial.print()y finalmente, un salto de línea para una mejor presentación. Alternativamente, se podría utilizar Serial.println()para imprimir cada número en una línea separada.

Recibiendo Datos por el Puerto Serial

Para recibir datos del puerto serie, se utiliza la función Serial.read() . Esta función lee un byte de datos del buffer serial. Si no hay datos disponibles, devuelve -Es importante verificar la disponibilidad de datos antes de intentar leerlos, para evitar errores.

void loop() {
if (Serial.available() > 0) {
int datoRecibido = Serial.read();
// Procesar el dato recibido
}
}

Para leer datos de tipo cadena, se pueden utilizar funciones como Serial.readString()o Serial.readStringUntil(). Estas funciones leen datos hasta que se encuentra un delimitador específico o hasta que se lee una cierta cantidad de datos.

Tabla Comparativa de Funciones Serial

Función Descripción
Serial.begin(velocidad) Inicializa la comunicación serial a la velocidad especificada en baudios.
Serial.print(dato) Envía datos al puerto serial sin salto de línea.
Serial.println(dato) Envía datos al puerto serial con salto de línea.
Serial.read() Lee un byte de datos del buffer serial.
Serial.available() Devuelve el número de bytes disponibles en el buffer serial.
Serial.flush() Vacía el buffer serial.
Serial.readString() Lee una cadena de caracteres del buffer serial.
Serial.readStringUntil(delimitador) Lee una cadena de caracteres del buffer serial hasta encontrar el delimitador especificado.

Manejo de Errores en la Comunicación Serial

La comunicación serial puede verse afectada por ruido o interferencias. Es importante implementar mecanismos para manejar errores potenciales. Esto puede incluir:

  • Verificación de datos recibidos: Comprobar la validez de los datos recibidos antes de procesarlos.
  • Reintentos: Si se produce un error, intentar la transmisión o recepción nuevamente.
  • Control de flujo: Utilizar mecanismos de control de flujo (como RTS/CTS) para evitar la pérdida de datos.

Consideraciones Avanzadas

Para aplicaciones más complejas, se pueden explorar técnicas como:

  • Comunicación serial asincrónica: Permite la recepción de datos en segundo plano sin bloquear el bucle principal.
  • Protocolos de comunicación: Implementar protocolos para asegurar la integridad y la confiabilidad de los datos, como Modbus o I2C.
  • Bibliotecas de terceros: Existen bibliotecas de terceros que facilitan el manejo de la comunicación serial, añadiendo funcionalidades adicionales.

Conexión Física y Configuración del Puerto

Para establecer la conexión física, se necesita conectar el puerto serie de Arduino al puerto COM correspondiente en el ordenador. El puerto COM específico varía según la configuración del sistema. En el administrador de dispositivos del sistema operativo, se puede identificar el puerto COM asignado a Arduino. Es crucial asegurarse de que la velocidad de transmisión (baudios) coincida tanto en el código de Arduino como en la configuración del software utilizado para monitorizar el puerto serie. Algunos programas permiten seleccionar la velocidad de comunicación (ej. 9600 bps), mientras que otros pueden tenerla configurada por defecto. Un desajuste en la velocidad causará problemas de comunicación. El control de flujo puede ser configurado en algunos casos para gestionar mejor la transmisión de datos y evitar pérdidas. Las configuraciones comunes incluyen RTS/CTS (Request to Send/Clear to Send).

Consultas Habituales y Solución de Problemas

A continuación, se detallan algunas consultas habituales al trabajar con el puerto serial en Arduino:

  • Arduino no envía datos: Verificar la inicialización correcta de Serial.begin() con la velocidad de transmisión correcta. Asegurarse de que el monitor serial esté abierto y configurado con la misma velocidad.
  • Datos corruptos: Verificar la conexión física y la interferencia eléctrica. Considerar el uso de control de flujo.
  • Retrasos en la transmisión: Ajustar la velocidad de transmisión o implementar un buffer para almacenar datos temporalmente.
  • No se detecta el puerto COM: Verificar la conexión física y reiniciar Arduino. Asegurarse de que los drivers necesarios estén instalados correctamente.

El uso efectivo del puerto serie en Arduino requiere una comprensión de los fundamentos de la comunicación serial y una atención cuidadosa a los detalles de configuración y codificación. Con una configuración apropiada y una correcta implementación del código, el puerto serie se convierte en una herramienta poderosa para la interacción entre Arduino y otros sistemas.

Si quieres conocer otros artículos parecidos a Comunicación serial en arduino con la librería serial puedes visitar la categoría Libros y Librerías.

Subir