13. Uso del Serial-Roger Mamani
Tutorial Completo sobre Comunicación Serial en Arduino
Introducción a la Comunicación Serial
Hola a todos. Bienvenidos al capítulo número 3 donde vamos a explorar el uso del serial en Arduino.
¿Qué es la Comunicación Serial?
Los seres humanos nos comunicamos mediante lenguajes como el español o inglés. De manera similar, los dispositivos electrónicos necesitan un "lenguaje" para comunicarse entre ellos. Este lenguaje se llama protocolo de comunicación.
Los protocolos más comunes en electrónica son:
I2C
SPI
Serial (UART)
Características del Serial
El serial es un método de comunicación que utiliza dos cables:
TX (Transmisión): Para enviar datos
RX (Recepción): Para recibir datos
En Arduino, estos pines son:
Pin 0 (RX): Recepción
Pin 1 (TX): Transmisión
Regla Fundamental de la Comunicación Serial
La comunicación siempre es cruzada:
El TX de un dispositivo se conecta al RX del otro
El RX de un dispositivo se conecta al TX del otro
Configuración Básica del Serial
Inicialización
Para usar el serial, primero debemos habilitarlo en el setup():
void setup() {
Serial.begin(9600); // Inicia comunicación a 9600 baudios
}Velocidades Comunes
9600 (estándar)
4800
19200
115200 (alta velocidad)
Funciones Principales del Serial
Envío de Datos
// Enviar texto sin salto de línea
Serial.print("Hola Arduino");
// Enviar texto con salto de línea
Serial.println("Hola Mundo");
// Enviar números
int valor = 42;
Serial.print(valor);
// Enviar números con formato
Serial.print(valor, DEC); // Decimal
Serial.print(valor, HEX); // Hexadecimal
Serial.print(valor, BIN); // Binario
// Enviar números decimales
float temperatura = 23.5;
Serial.print(temperatura, 1); // 1 decimalRecepción de Datos
void loop() {
if (Serial.available() > 0) {
// Leer un carácter
char dato = Serial.read();
// Leer un string completo
String mensaje = Serial.readString();
// Leer un número entero
int numero = Serial.parseInt();
}
}Ejemplo Práctico: Monitor Serial
Ejemplo 1: Mensaje Básico
void setup() {
Serial.begin(9600);
Serial.println("Sistema iniciado");
}
void loop() {
Serial.print("Tiempo: ");
Serial.print(millis() / 1000);
Serial.println(" segundos");
delay(1000);
}Ejemplo 2: Control de LED por Serial
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("Sistema listo. Envie '1' para encender, '0' para apagar");
}
void loop() {
if (Serial.available() > 0) {
char comando = Serial.read();
if (comando == '1') {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED ENCENDIDO");
}
else if (comando == '0') {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED APAGADO");
}
}
}Ejemplo 3: Lectura de Sensor con Visualización
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.print("Valor sensor: ");
Serial.print(sensorValue);
Serial.print(" | Voltaje: ");
Serial.print(voltage, 2);
Serial.println("V");
delay(500);
}Uso del Monitor Serial en Arduino IDE
Cómo Abrir el Monitor Serial
Menú: Herramientas → Monitor Serial
Shortcut: Ctrl+Shift+M (Windows/Linux) or Cmd+Shift+M (Mac)
Configuración Importante
Baud Rate: Debe coincidir con el valor en
Serial.begin()Opciones:
Autoscroll: Desplazamiento automático
Nueva línea: Agrega \n al enviar
Retorno de carro: Agrega \r al enviar
Ejemplo Avanzado: Lectura de Pulsador con Serial
void setup() {
Serial.begin(9600);
pinMode(2, INPUT); // Pulsador en pin 2
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
int pulsador = digitalRead(2);
// Control del LED
digitalWrite(LED_BUILTIN, pulsador);
// Envío de datos al serial
Serial.print("Pulsador: ");
Serial.println(pulsador);
delay(200); // Pequeña pausa para mejor visualización
}Consejos y Buenas Prácticas
Sincronización: Velocidad en código y monitor deben coincidir
Depuración: Usa
Serial.print()para debuggear tu códigoFormato: Usa
println()para mejor legibilidadLimpieza:
Serial.flush()espera a que se completen las transmisionesVerificación: Siempre verifica que hay datos disponibles antes de leer
Solución de Problemas Comunes
No se ven datos en el monitor:
Verificar que el baud rate coincida
Revisar las conexiones de cables
Verificar que el puerto correcto esté seleccionado
Datos corruptos o incorrectos:
Revisar la velocidad de comunicación
Verificar las conexiones eléctricas
Comprobar que los dispositivos compartan el mismo protocolo
Conclusión
La comunicación serial es una herramienta fundamental en Arduino que nos permite:
Depurar programas mediante mensajes
Comunicarnos con otros dispositivos
Recibir comandos desde una computadora
Visualizar datos de sensores en tiempo real
¿Qué es Serial?
Serial es una comunicación serie que permite a tu Arduino enviar y recibir datos con otros dispositivos (computadora, otro Arduino, módulos, etc.) a través de los pines RX (recepción) y TX (transmisión).
Configuración Inicial
void setup() {
Serial.begin(9600); // Inicia la comunicación a 9600 baudios
}Funciones Principales
1. Enviar Datos
// Enviar texto
Serial.print("Hola Mundo"); // Sin salto de línea
Serial.println("Hola Arduino"); // Con salto de línea
// Enviar números
int valor = 42;
Serial.print(valor); // Decimal
Serial.print(valor, DEC); // Decimal (explícito)
Serial.print(valor, HEX); // Hexadecimal
Serial.print(valor, BIN); // Binario
Serial.print(valor, OCT); // Octal
// Enviar números con decimales
float temperatura = 23.5;
Serial.print(temperatura, 1); // 1 decimal2. Recibir Datos
void loop() {
if (Serial.available() > 0) {
char dato = Serial.read(); // Leer un carácter
String mensaje = Serial.readString(); // Leer string completo
int numero = Serial.parseInt(); // Leer número entero
}
}3. Verificar Datos Disponibles
void loop() {
if (Serial.available() > 0) {
// Hay datos para leer
}
}Ejemplos Prácticos
Ejemplo 1: Monitor Serie Básico
void setup() {
Serial.begin(9600);
Serial.println("Sistema iniciado");
}
void loop() {
Serial.print("Tiempo: ");
Serial.print(millis() / 1000);
Serial.println(" segundos");
delay(1000);
}Ejemplo 2: Control por Serial
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
char comando = Serial.read();
if (comando == '1') {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED ENCENDIDO");
}
else if (comando == '0') {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED APAGADO");
}
}
}Ejemplo 3: Enviar Datos de Sensores
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.print("Valor sensor: ");
Serial.print(sensorValue);
Serial.print(" | Voltaje: ");
Serial.print(voltage, 2);
Serial.println("V");
delay(500);
}Configuraciones Avanzadas
// Velocidades comunes
Serial.begin(9600); // Estándar
Serial.begin(115200); // Alta velocidad
// Timeout para lectura
Serial.setTimeout(100); // 100ms de timeout
// Esperar conexión (para Arduino Leonardo/Micro)
while (!Serial) {
; // Espera a que se conecte el puerto serial
}Uso del Monitor Serie
Abrir Monitor Serie: Ctrl+Shift+M o Tools → Serial Monitor
Configurar Baud Rate: Debe coincidir con el de
Serial.begin()Opciones:
Autoscroll: Desplazamiento automático
Nueva línea: Agrega \n al enviar
Retorno de carro: Agrega \r al enviar
Consejos Importantes
Sincronización: Siempre usa la misma velocidad en código y monitor
Depuración: Usa
Serial.print()para debuggear tu códigoFormato: Usa
println()para mejor legibilidadLimpieza:
Serial.flush()espera a que se completen las transmisiones
Comentarios
Publicar un comentario