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():

cpp
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

cpp
// 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 decimal

Recepción de Datos

cpp
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

cpp
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

cpp
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

cpp
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

  1. Menú: Herramientas → Monitor Serial

  2. 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

cpp
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

  1. Sincronización: Velocidad en código y monitor deben coincidir

  2. Depuración: Usa Serial.print() para debuggear tu código

  3. Formato: Usa println() para mejor legibilidad

  4. LimpiezaSerial.flush() espera a que se completen las transmisiones

  5. Verificació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

cpp
void setup() {
  Serial.begin(9600); // Inicia la comunicación a 9600 baudios
}

Funciones Principales

1. Enviar Datos

cpp
// 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 decimal

2. Recibir Datos

cpp
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

cpp
void loop() {
  if (Serial.available() > 0) {
    // Hay datos para leer
  }
}

Ejemplos Prácticos

Ejemplo 1: Monitor Serie Básico

cpp
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

cpp
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

cpp
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

cpp
// 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

  1. Abrir Monitor Serie: Ctrl+Shift+M o Tools → Serial Monitor

  2. Configurar Baud Rate: Debe coincidir con el de Serial.begin()

  3. Opciones:

    • Autoscroll: Desplazamiento automático

    • Nueva línea: Agrega \n al enviar

    • Retorno de carro: Agrega \r al enviar

Consejos Importantes

  1. Sincronización: Siempre usa la misma velocidad en código y monitor

  2. Depuración: Usa Serial.print() para debuggear tu código

  3. Formato: Usa println() para mejor legibilidad

  4. LimpiezaSerial.flush() espera a que se completen las transmisiones

Comentarios

Entradas más populares de este blog

12. Demostracion de como usar Tinkercad para simular Arduino con circuitos

11. Ejemplos Básicos de Leds y Pulsadores

Lectura de Potenciómetro con Arduino Uno en Tinkercad