1.11.1. ¿Qué es el puerto serie?
El puerto serie es un puerto de
comunicación estándar en muchos sistemas digitales. Establece la comunicación
entre dos puntos a una velocidad determinada en bits por segundo (bps o
baudios).
El puerto serie puede servir tanto
para hacer que Arduino Uno comunique con un ordenador, como para hacer que dos
Arduinos “hablen” entre sí. El puerto USB, con el que Arduino conecta a tu PC,
tiene un modo de comunicación que simula un puerto serie.
Muchos de los dispositivos que
existen, usan el puerto serie como sistema de comunicación básico. Si bien
puede que no te ofrezcan una conexión física donde hacerlo, tu ordenador, tu
teléfono, tu lavadora o el ascensor de tu casa, tienen un puerto serie de
comunicación que se puede utilizar para reparar el sistema a bajo nivel.
En Arduino Uno, el puerto serie está
en los pines 0 y 1, por lo que se recomienda dejar esos pines libres a la hora
de hacer proyectos si es que quieres usar el puerto de algún modo como para
mandar datos a un ordenador o leer un sensor complejo como un GPS.
1.11.2. Envía desde Arduino
Para
probar a enviar datos desde Arduino, sólo tienes que cargar el programa
“Archivo → Ejemplos →
Analog → AnalogInOutSerial”. Este ejemplo, lee el valor de un
potenciómetro
conectado a Arduino y lo envía
de vuelta al ordenador.
Para
poder ver los datos en la pantalla, la barra de tareas del IDE de Arduino tiene
la opción “Puerto Serie”; se trata de un icono con forma de lupa. Al hacer
click sobre él, se abre una venta de diálogo que permite tanto enviar como
recibir datos de Arduino.
Si
ejecutas el mencionado ejemplo, verás una secuencia de datos que llegar a tu
ventana.
Por
otra parte, puedes probar a hacer un ejemplo sencillo de comunicación para ver
cuales son los comandos básicos para establecer la comunicación. El programa
más sencillo sería así:
void
setup() {
Serial.begin(9600);
}
void
loop() {
Serial.println(“Hola Caracola”);
delay(100);
}
Si
ejecutas este programa y abres el monitor serie, verás como se escribe el
mensaje “Hola Caracola” sobre el monitor a una velocidad de 10 veces por
segundo.
Verás
que hemos puesto un retardo (delay) dentro del loop. Esto es recomendable
puesto que tu Arduino Uno es capaz de enviar datos más rápido de lo que tu PC
es capaz de leer. Si no lo hicieras así, seguramente saturarías el puerto de
comunicación de tu ordenador.
1.11.3. Nuevos comandos
Serial.begin(velocidad)
establece como se ha de configurar el puerto para enviar datos entre Arduino y
el ordenador. Es importante notar que Serial.begin(9600) -tal y como lo vimos
en el ejemplo anterior- usa la velocidad de envío de datos de 9600 baudios por
el puerto. Esto quiere decir que, cada segundo, se envían 9600 bits, o 9600 1's
y 0's por el puerto. Esta velocidad es la que se usa por defecto. Prácticamente
todos los dispositivos que pueden comunicar por puerto serie, pueden hacerlo a
esa velocidad.
Serial.println(texto)
envía una cadena de texto hacia el ordenador incluyendo un final de
línea/retorno de carro al final.
1.11.4. Recibe en Arduino
El
ejemplo más sencillo para probar la comunicación desde el PC hacia Arduino Uno
se encuentra en “Archivo → Ejemplos →
Comunication → Physical Pixel”. La idea detrás de este ejemplo es transformar tu
placa en un pixel que puedas controlar remotamente desde el PC. Como Arduino
Uno tiene un led en el pin 13 que puedes controlar por software, es como si
fuera un pixel físico.
Carga
el programa en tu placa y abre el monitor serie. El campo de texto de arriba en
la ventana de diálogo te permite escribir datos através del puerto. En este
caso la hache mayúscula o “H” encenderá el led, mientras que la ele mayúscula o
“L” lo apagará. El dato no se envía automáticamente, tienes que bien hacer
click en el botón “send” o presionar “enter” en tu teclado para que se envíe el
dato.
1.11.5. Nuevos comandos (2)
Dentro
del ejemplo “Physical Pixel” verás estos comandos nuevos:
·
Serial.available()
sirve para ver si han llegado datos por el puerto serie. Al invocarlo, nos
responde con el número de datos que han llegado por el puerto y que se han
almacenado en la memoria de Arduino.
·
Serial.read()
nos devuelve el primer dato que llegó por el puerto de comunicación. Además
borra ese valor de la memoria, de modo que Serial.available() decrementará en
una unidad la próxima vez que lo llames.
1.11.6. Aplicaciones educativas
La
comunicación serie es la forma más básica de comunicación por protocolo entre
sistemas digitales. Su comprensión es fundamental para entender otros sistemas
de comunicación como redes de ordenadores y similares.