Hola controleros y controleras, en el día de hoy vamos a aprender a usar la comunicación serial con Arduino, la cual nos será de mucha utilidad para poder monitorear nuestros proyectos e incluso poder hacer un debug en Arduino (corrección de errores de nuestro código).
Antes de comenzar, te hago la invitación a que visites el CURSO GRATIS DE ARDUINO
Y te invito a que te suscribas al canal de YouTube si deseas seguir aprendiendo más sobre programación en Arduino.
¿Qué es la comunicación serial en Arduino y cómo se utiliza?
La comunicación serial en Arduino es una forma de comunicación entre dispositivos en la que se envían y reciben datos un bit a la vez a través de un canal de comunicación. En Arduino, la comunicación serial se utiliza para enviar y recibir datos entre la placa Arduino y un ordenador o cualquier otro dispositivo externo.
Los puertos de comunicación serial nos proporcionan la forma más efectiva de comunicar nuestra paca de Arduino con nuestro ordenador, y como podrás notarlo a través de esta comunicación podremos mandar diferentes órdenes a nuestro Arduino para automatizar procesos o incluso recibir informaciones importantes para mostrarlas en la pantalla de nuestro computador.
La comunicación serial entre dos dispositivos únicamente utiliza 3 líneas las cuales son:
- Línea de recepción de datos (RX)
- Línea de transmisión de datos (TX)
- Línea común (GND)
El GND, el RX y TX del Arduino son facilmente identificables en la placa. Aquí te cuento cuantos puertos seriales y los pines que tiene el Arduino UNO, mini pro, MEGA y Due.
- Arduino UNO y Mini Pro: Pines 0 (RX) y 1 (TX);
- Arduino
Mega y Arduino Due: son cuatro
puertos de serie.
- puerto serie 0: pines 0 (RX) y 1 (TX)
- puerto serie 1: pines 19 (RX) y 18 (TX)
- puerto serie 2: pines 17 (RX) y 16 (TX)
- puerto serie 3: pines 15 (RX) y 14 (TX)
¿Que es TX y RX en Arduino?
El TX y RX del Arduino son los dos pines que emplea el dispositivo para realizar la comunicación por medio del protocolo serial. Los datos, por lo tanto son transmitido en la linea o pin TX y son recibidos por la linea o pin RX.
Comunicación UART Arduino
La comunicación serial entre dos dispositivos se realiza a través del intercambio de una secuencia de bits, donde se transmite bit a bit, uno por vez, donde, aunque es lenta la comunicación, tiene la ventaja de poder ser transmitida a mayores distancias y utilizar menos líneas de comunicación.
En sistemas embebidos es común referirse a los puertos series como UART (universally asynchronous receiver/transmitter) la cual simplemente es una unidad que nos indica la conversión de los datos a una secuencia de bits donde posteriormente son transmitidos o recibidos a una velocidad determinada.
La comunicación serial también se da mediante variaciones de voltaje, donde dispositivos TTL (transistor transistor logic) realizan la comunicación mediante variaciones de señal entre 0 y 5v o entre 0 y 3.3v.
Por último, también es conocida como comunicación serial RS232 el cual es un protocolo muy común utilizado industrialmente por diversos dispositivos y equipos. La comunicación serial de Arduino RS232 puede ser utilizada para adquisición de datos, control, depuración de código, etc.
Puerto Serie del Arduino
Las placas de Arduino poseen unidades UART que operan a nivel TTL 0 / 5v, lo que las vuelve compatibles con la conexión USB.
Como ya vimos los pines de los puerto seriales, podemos notar también que la mayoría de Arduinos disponen de um conector USB que nos permite una conexión serie instantánea con nuestro ordenador.
Puedes encontrar productos interesantes en la tienda china de Aliexpress
Quizas te interese algunos productos de Arduino en Amazon a un mu buen precio.
Comunicación Serial Arduino PC
Para utilizar la comunicación serial en Arduino, primero se debe abrir la comunicación serial mediante el comando Serial.begin(). Este comando establece la velocidad de transmisión en baudios y se utiliza para indicar a la placa Arduino que está lista para enviar y recibir datos. Por ejemplo, el comando Serial.begin(9600) establece la velocidad de transmisión en 9600 baudios.
Para verificar que los datos están siendo transmitidos correctamente, se puede utilizar el Monitor Serial de Arduino. Este es una herramienta incluida en el software de Arduino.
Una vez conectamos nuestro Arduino a nuestro computador a través del cable USB, dentro del IDE de arduino podemos acceder al Monitor Serial
El monitor serie de Arduino es una interfaz grafica integrada al IDE Standard que nos permite recibir o transmitir datos utilizando el protocolo de comunicación serial, por lo tanto dicho monitor serial dispone de ambas zonas (recepción y transmisión)
Una vez que se ha abierto la comunicación serial, se pueden enviar y recibir datos mediante los pines RX (recepción) y TX (transmisión) de la placa Arduino. Estos pines se utilizan para transmitir y recibir datos a través del canal de comunicación serial.
Pasos para trabajar con la comunicación serial con Arduino
Definir dentro del void setup del Arduino la comunicación serial mediante la siguiente instrucción
Serial.begin(velocidad);
Donde velocidad puede tomar los siguientes valores: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.
La unidad de medida de las velocidades son el Baudio correspondiente al número de cambios en una señal por segundo.
Cuando realizamos una comunicación serial con Arduino será necesario establecer los Baudios del Arduino y los Baudios del dispositivo al que nos vamos a comunicar (Ambos dispositivos deben tener la misma velocidad en baudios).
- Dentro del void loop, se pueden imprimir o mostrar los datos en el Monitor Serial mediante la instrucción:
Serial.print(dato);
2. También puede mostrar el dato con un enter al final
Serial.println(dato);
3. Para leer datos desde el puerto serial se usa:
dato = Serial.read();
4. Para escribir en el puerto serie de Arduino, datos en forma de bytes se usa:
Serial.write(dato);
5. Para conocer si existen datos pendientes en el bus de comunicación serial usamos:
Serial.available()
Esta instrucción retorna un TRUE si es verdad o un FALSE si es falso.
6. Para deshabilitar el puerto serial y de esa forma poder usar los pines TX y RX como pines digitales, usamos:
Serial.end()
7. Si deseamos preguntar si el puerto serial está listo para efectuar la comunicación:
if (Serial)
Devuelve true si el puerto serial el cual se ha especificado está disponible.
8. Para leer los datos del buffer y buscar un string especifico usamos el comando:
Serial.find(string);
9. Si se desea configurar el máximo de milisegundos que desea esperarse mientras llega un dato por el puerto serial (por defecto es 1000ms), se usa:
Serial.setTimeout(time);
10. Para saber cuando los datos están disponibles y poder utilizar Serial.read() para capturar estos datos usamos la siguiente instrucción que actualmente no es compatible con Esplora, Leonardo o Micro
serialEvent();
11. Para esperae a que se complete la transmisión de los datos seriales salientes.
Serial.flush();
12. Para devolver el siguiente byte (carácter) de los datos en serie entrantes sin eliminarlos del búfer interno se usa:
Serial.peek();
13. Para leer caracteres del buffer serie y guardarlos en un string hasta que se produzca un timeout usamos:
Serial.readString();
Arduino Mega o Due con más de 1 puerto serial
En el caso de trabajar con una placa que poseea más de 1 puerto serial como es el caso del Arduino Mega o el Due, las instrucciones a usar son exactamente las mismas, con exepeción de que el puerto serial por defecto (el que esta conectado al USB o puerto serial 0) se conoce como Serial, el puerto serial 1, 2 y 3 se conocen como Serial1, Serial2 y Serial3 respectivamente.
Por lo tanto para imprimir o leer datos puede hacerse de la siguiente forma:
Serial1.print(dato); //Imprime en el puerto serie 1 dato = Serial3.read(); //lee el puerto serie 3 Serial2.write(dato); //Escribe el dato en puerto serie 2
Ejemplos y Códigos en Arduino
Veamos como usar el monitor serial de Arduino utilizando el protocolo de comunicación serial
Recibir datos serial desde el Arduino
Recibir el valor de una variable contador enviado desde la placa Arduino a través del puerto de comunicación serial y mostrarlos en el monitor serial.
//Creamos un contador int contador=0; void setup(){ //Configuramos el puerto serial Serial.begin(9600); } void loop(){ //Imprimimos el valor del contador en el monitor serial Serial.print("Contador: "); Serial.println(contador); //incrementamos el contador y esperamos medio segundo contador++; delay(500); }
Enviar datos serial al Arduino
Vamos enviar un número desde el computador y mostrarlo en un display 7 segmentos integrado a la placa de Arduino, adicionalmente conectar un LED al PIN 13 el cual debe ser prendido o apagado a través de la comunicación serial.
Con este ejemplo muy práctico vamos a aprender a ingresar datos por monitor serial al Arduino, el cual es una aplicación bastante común con este dispositivo embebido.
//Display 7 Segmentos Catodo Común int display7c[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; //Display 7 Segmentos Anodo Común int display7a[10]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18}; //Pines del Display byte a=2; byte b=3; byte c=4; byte d=5; byte e=6; byte f=7; byte g=8; int dato=0; byte led = 13; //Función Display 7 Segmentos void display7seg(int bits,int a,int b,int c,int d,int e,int f,int g){ //Mostra o numero bits no display 7 segmentos digitalWrite(a,bitRead(bits,0)); digitalWrite(b,bitRead(bits,1)); digitalWrite(c,bitRead(bits,2)); digitalWrite(d,bitRead(bits,3)); digitalWrite(e,bitRead(bits,4)); digitalWrite(f,bitRead(bits,5)); digitalWrite(g,bitRead(bits,6)); } void setup(){ //Configura los 8 Pines digitales como SALIDAS for(int i=a;i<=g;i++){ pinMode(i,OUTPUT); } Serial.begin(9600); pinMode(led, OUTPUT); //Inicializa el display 7 segmentos display7seg(display7c[dato],a,b,c,d,e,f,g); } void loop(){ //si existe datos disponibles en el bus serial if (Serial.available()){ //leemos el dato enviado dato=Serial.read(); if(dato=='p') { //letra p - Prender digitalWrite(led, HIGH); Serial.println("LED ON"); } if(dato=='a') { //letra a - Apagar digitalWrite(led, LOW); Serial.println("LED OFF"); } if(dato>='0' && dato<='9') { //letra a - Apagar display7seg(display7c[dato-48],a,b,c,d,e,f,g); Serial.print("DATO: "); Serial.println(dato-48); } } }
Perfecto controleros y controleras, eso es todo por el día de hoy, espero hayan aprendido a como utilizar la comunicación serial del Arduino.
Recuerda que si deseas apoyar mi trabajo, puedes invitarme a un café y seguirme ayudando a mantener los servidores de este sitio web, es muy barato el café y contribuyes con el tiempo y esfuerzo invertidos en las clases elaboradas en el canal y pagina web: 👉Invitar a un Café a Sergio ☕️
Espero que esten muy bien y nos vemos en la próxima.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.