martes, 15 de abril de 2014

El puerto serie y Arduino

Fuentes: 

Comunicación Serial

Arduino posee como principal característica la habilidad de comunicarse con nuestra computadora a través del puerto serie. Esto se conoce como comunicación serial. Debido a que el uso de este puerto ha quedado un poco en desuso a favor de la tecnología USB, Arduino cuenta con un convertidor de Serial a USB que permite a nuestra placa ser reconocida por nuestra computadora como un dispositivo conectado a un puerto COM aún cuando la conexión física sea mediante USB.

Arduino IDE nos proporciona una herramienta que nos permite enviar y visualizar los datos que se manejan a través del puerto Serie. Dicha herramienta se conoce como Monitor Serial y se puede encontrar en el menú de herramientas, en la opción “Monitor Serial”. Es la forma más simple que existe para establecer la comunicación serial con Arduino.


A través de esta ventana se puede enviar o recibir información utilizando el puerto serie. Nótese que para poder abrir esta ventana es necesario que tengamos nuestra placa Arduino conectada a nuestra PC mediante USB.

Para iniciar la comunicación serial con Arduino utilizando el Monitor Serial debemos establecer algunos comandos en el Arduino IDE y luego subirlos al microcontrolador.

Comandos:El código es el siguiente:

Serial.begin(9600); En la función Setup inicializamos la comunicación serial. El 9600 indica el baud rate, o la cantidad de baudios por segundo que manejará el puerto serie. Se define baudio como una unidad de medida, usada en telecomunicaciones, que representa el número de símbolos por segundo en un medio de transmisión analógico. Para nuestros propósitos utilizaremos comúnmente el número 9600 aunque puede utilizar estas velocidades: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200. Sin embargo, puedes especificar otras velocidades - por ejemplo, para comunicarte a través de los pines 0 y 1 con un componente que requiere una velocidad de transmisión en particular

Serial.println('caracteres'); Cuando usamos println le estamos diciendo al microcontrolador que tendrá que imprimir un caracter a través del puero serie. Hay otros métodos como Serial.print o Serial.write que nos sirven para imprimir o escribir en el puerto serie, sin embargo la función println agrega un salto de línea cada vez que se envía un dato, lo que es provechoso para nosotros en algunos casos, especialmente cuando utilizamos el monitor serial. En la función println se debe establecer lo que se quiere imprimir entre paréntesis y con comillas. En este caso vamos a imprimir el caracter ’1′. Mediante la sintaxis Serial.println(val, format) se puede especificar el número de la base (para números enteros) (por ejemplo DEC) o el número de posiciones decimales (para números de coma flotante o tipo "float")

if (Serial.available()>0){...} Cuando halla datos disponibles para leer en el puerto serie, el método Serial.available() tendrá un número mayor a cero (>0) por lo que cumplirá con la condición establecida en la estructura selectiva y el programa procederá a ejecutar los comandos que estén dentro de las llaves ({}) del if. De forma general, esta función devuelve el número de bytes (caracteres) disponibles para ser leídos por el puerto serie. Se refiere a datos ya recibidos y disponibles en el buffer de recepción del puerto (que tiene una capacidad de 128 bytes).

Serial.write(); Escribe datos binarios en el puerto serie. Estos datos se envían como un byte o una serie de bytes; para enviar los caracteres que representan los dígitos de un número usar funcion print() en su lugar.
Sintaxis:
  • Serial.write(val); val: un valor para enviar como un solo byte   
  • Serial.write(str); str: una cadena 'string' para enviar como una serie de bytes 
  • Serial.write(buf, len); buf: un 'array' para enviar como una serie de bytes y len: longitud del búfer

input=Serial.read(); Cuando entre en la estructura selectiva, a la variable input (al principio del  código se declara una variable tipo int llamada inputse le asignará un valor que se lea desde el puerto serie mediante el método Serial.read(). Siempre que necesitamos leer algo lo hacemos mediante este método (devuelve -1 si no hay datos disponibles).

Nota: Cuando se intenta imprimir un entero (1,2,3,4,5…), el método Serial.println() imprimirá  dicho entero en formato ASCII.


Serial.end(); Desactiva la comunicación serie, permitiendo a los pines RX and TX ser usados como entradas o salidas digitales.

Serial.flush(); Vacía el búfer de entrada de datos en serie. Es decir, cualquier llamada a Serial.read () o Serial.available () devolverá sólo los datos recibidos después la llamada más reciente a Serial.flush ().


Conectado el puerto serie con el exterior

Arduino dispone de un puerto serie que, en la placa Arduino UNO, está localizado en los pins 0 y 1 (Rx, Tx).



Nota: La placa Arduino Mega tiene tres puertos adicionales de serie: Serial1 en los pines 19 (RX) y 18 (TX), Serial2 en los pines 17 (RX) y 16 (TX), Serial3 en los pines 15 (RX) y 14 (TX).

Podemos utilizar otros pines de Arduino para la transmisión serie si añadimos al programa la la librería “SoftwareSerial.h” que viene incluida en el IDE de Arduino. Con esta librería podremos usar, por ejemplo, los pines 2 y 3 como RX y TX. Al ser un puerto "software" la velocidad máxima que se puede utilizar es de 9.600 bps

Ejemplo:

#include "SoftwareSerial.h"
SoftwareSerial blue(2, 3);
int pot=0;

void setup(){
  blue.begin(9600);
  blue.println("Conectado");
}
void loop(){
 pot=analogRead(0);
  blue.println(pot);
  delay(1000);
}

Nota: Actualmente, en realidad, se suele usar una extensión del código ASCII (llamada Unicode) que permita el uso de caracteres no incluidos en la tabla original, y que permita representar caracteres como las Ñ, o acentos para el español, pero también alfabetos distintos como el Kanji chino o el alfabeto cirílico. Y este es el motivo por el que podéis leer las letras chinas o rusas en las páginas de internet de estos países.

Para mostrar por ejemplo la o acentudad ó habría que utilizar:

Serial.println(char(243));
 
 

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.