Arduino y la comunicación serie: librería Serial

Todas las placas de Arduino disponen de al menos un puerto serie, que permite la comunicación conun ordenador o con otros dispositivos haciendo uso de esta interfaz. Los pines que se usan para la comunicación por puerto serie vienen marcados en la placa con las siglas RX y TX, que corresponden al pin por el que se enviarán los datos, y al pin por el que se recibirán los datos respectivamente.En el caso que nos ocupa, usaremos el puerto serie no para comunicarnos con un ordenador, sino para poder comunicarnos con determinados sensores. En este epígrafe se expondrán las funciones necesarias para establecer la comunicación e intercambiar datos, y en el capítulo cuarto se verán ejemplos de sensores conectados por el puerto serie.

 

Conexiones
Como se ha comentado en la introducción de este epígrafe, se van a usar los pines TX y RX de la placa de Arduino. En las pruebas realizadas se ha usado la placa “Arduino Mega 2560”, la cual dispone de 8 pines destinados para ello, en lugar de los 2 de los que disponen el resto de placas. Estos pines vienen marcados en la placa y son las siguientes parejas (0,1), (14,15), (16,17), (18,19) y (20,21).
Para un correcto funcionamiento, se debe conectar el pin de recepción de la placa (RX) al pin de transmisión del dispositivo externo, y el pin de transmisión de la placa (TX) al pin de recepción de dicho dispositivo. Además, para comunicar el sistema de desarrollo con un dispositivo TTL es necesario conectar las tierras entre ellas.Principales funcionesLas principales funciones usadas en la comunicación por puerto serie vienen incluidas en la librería Serial() y son las siguientes:

Serial.begin(velocidad)
Establece la velocidad en bits por segundo (baudios) para la transmisión de datos en serie.El parámetro velocidad se puede configurar con el valor que se desee para comunicarse con un dispositivo externo (hasta un máximo de 115200 baudios), sin embargo si la comunicación por puerto serie va a ser con un ordenador, se deberá elegir una de las siguientes: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200

Serial.end()
Desactiva la comunicación serie, permitiendo que los pines de recepción y transmisión puedan ser usados como pines de entrada / salida digitales. Si se desee reanudar la comunicación serie, se deberá invocar nuevamente Serial.begin().

Serial.available()
Devuelve, ecomo entero, 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, cuya capacidad es de 128 bytes. En el caso de Arduino Mega, existen además las funcionesSerial1.available(), Serial2.available() y Serial3.available().

Serial.read()
Lee los datos entrantes al puerto serie. Devuelve como entero el primer byte disponible recibido porel puerto serie, o -1 si no hay datos disponibles. Al igual que en el caso anterior, para la placa Arduino Mega existen también las funciones Serial1.read(), Serial2.read() y Serial3.read().

Serial.flush()
Vacía el buffer de la entrada de datos serie. Esto quiere decir que si se llama a la función Serial.read() o Serial.available(), estas sólo devolverán los datos recibidos después de que se haya realizado esta llamada. No requiere parámetros ni devuelve nada. Para la placa Arduino Mega existen disponibles las llamadas Serial1.flush(), Serial2.flush() y Serial3.flush() además de la principal.

Serial.print(valor, formato)
Esta función imprime los datos al puerto serie como texto ASCII. El primer parámetro, valor, es el propio valor que se desea imprimir. Esto se podrá realizar de distintas formas:Los números son impresos mediante un juego de caracteres ASCII para cada dígito.Los valores de tipo flotante (float) se imprimen en forma de dígitos ASCII con 2 decimales por defecto, es decir, si ejecutamos Serial.print(1.23456) se imprimirá “1.23”.Los valores de tipo “byte” se enviarán como un único carácter.Los caracteres y las cadenas se enviarán tal cual.Además, existe el segundo parámetro es opcional y permite especificar el formato que se desea usar.Así, este parámetro puede tomar el valor BYTE, BIN (valores binarios, en base 2), DEC (valores decimales, en base 10), HEX (valores hexadecimales, en base 16). Si lo que se está imprimiendo son números con coma flotante, este parámetro especificará el número de decimales a usar.

Serial.println(valor, formato)
Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro(ASCII 13 o ‘\r’)y un carácter de avance de línea (ASCII 10 o ‘\n’). Por lo demás, este comando tiene la misma forma y los mismos parámetros que Serial.print() descrito anteriormente.

Serial.write()
Esta función escribe datos binarios en el puerto serie. Estos se enviarán como un byte o como una serie de bytes. Si lo que se desea es envíar los caracteres que representan los números, es mejor usarla función Serial.print() en su lugar. Puede tomar distintos parámetros:Serial.write(valor) enviará un solo byte.Serial.write(str) enviará una cadena como una serie de bytes.Serial.write(buf, len) enviará un array como una serie de bytes. El tamaño del array se indicará en elsegundo parámetro.

Wattmeter: How to build and use a VHF Wattmeter

Como construir un watimetro para VHF.

No es para arduino, pero se puede modificar para que controle el arduino.

  • Esquemas.
  • Dibujo PCB
  • Instrucciones de Ajuste y Montaje

Es un montaje de W1FB

RF power & SWR meter

Diseño de un medidor de RF, con un arduino.

  • Código.
  • Esquemas

Enlace: ARDUINO RF power & SWR meter

5 Pulsadores

Como con una solo cable y al alimentación, tenemos 5 pulsadores.

Cuando necesitamos varios pulsadores y hay una saturación en los pines del arduino o queremos minimizar el cableado. La solución es usar una entrada analógica con un divisor de tensión

El funcionamiento se base en la siguiente formula:

                R1

Vout = —————- x Vcc

                R1 + Rx

Siendo Rx, la resistencia que se usa al pulsar un pulsador.

De esta forma, con un solo cable conectado a una entrada analógica, se tiene cinco pulsadores.

El programa para utilizarlo.

/****************************

** Pulsador_de_5 ***
 ****************************/
 void setup() {
 Serial.begin(9600);
 }

void loop() {
 // lee el puerto analógico 0
 int analogValue = analogRead(0);
 analogValue = map(analogValue, 0, 1023, 0, 6);
 switch (analogValue) {
 case 1:
 Serial.println("Activo el pulsador 1");
 delay(400);
 break;
 case 2:
 Serial.println("Activo el pulsador 2");
 delay(400);
 break;
 case 3:
 Serial.println("Activo el pulsador 3");
 delay(400);
 break;
 case 4:
 Serial.println("Activo el pulsador 4");
 delay(400);
 break;
 case 5:
 Serial.println("Activo el pulsador 5");
 delay(400);
 default:
 Serial.println("no hay pulsada ninguna tecla");
 delay(400);
 }
 }

 

 

BlueTooth HC-05

Existen dos modelos de módulos Bluetooth: el HC-05 que puede ser maestro/esclavo (master/slave), y el HC-06 que solo puede actuar como esclavo (slave). La diferencia entre maestro y esclavo es que en modo esclavo es el dispositivo quien se conecta al módulo, mientras que en modo maestro es el módulo quien se conecta con un dispositivo.

Físicamente, los dos módulos son muy parecidos, solo varían algunas conexiones. Los pins que encontraremos son los siguientes:

-Vcc: Alimentación del módulo entre 3,6V y 6V.

-GND: La masa del módulo.

-TXD: Transmisión de datos.

-RXD: Recepción de datos a un voltaje de 3,3V.

-KEY: Poner a nivel alto para entrar en modo configuración del módulo (solo el modelo HC-05)

-STATE: Para conectar un led de salida para visualizar cuando se comuniquen datos.

En esta sesión, vamos a utilizar el modulo HC-06, que puede configurarse como Slave,

Comandos AT

Los comandos AT son un tipo de comandos que sirven para configurar el módulo Bluetooth a través de un microcontrolador, . Son unas instrucciones que  permiten cambiar los baudios del módulo, el PIN, el nombre, etc.

Para usar los comandos AT el módulo Bluetooth no debe estar vinculado a ningún dispositivo (led rojo del módulo parpadeando). Según las especificaciones del módulo, el tiempo que se tiene que respetar entre el envío de un comando AT  y otro tiene que ser de 1 segundo. Si se envía un comando AT y en menos de un segundo se envía otro, el módulo no devuelve respuesta.

Ahora vamos a configurar el módulo Bluetooth a través de comandos AT enviados desde el Monitor Serial del Arduino.

Código ejemplo de configuración:

#includeSoftwareSerial.h; //Librería que permite establecer comunicación serie en otros pins
/* en caso de arduino mega no es necesario ponerlo
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.

SoftwareSerial BT(10,11); //10 RX, 11 TX.

setup()
{
 BT.begin(9600); //Velocidad del puerto del módulo Bluetooth
 Serial.begin(9600); 
}

loop()
{
 if(BT.available())
 {
 Serial.write(BT.read());
 
 if(Serial.available())
 {
 BT.write(Serial.read()); 
 }
}

 

El HC-05 es necesario poner el pin KEY del módulo a nivel alto (5V) para enviar comandos AT. Además, al enviar un comando AT hay que enviar un carácter de LF (nueva línea) y de CR (retorno de carro) al final del comando. Por lo tanto, en el Monitor Serial de Arduino pondremos Ambos NL & CR.

Los comandos AT que se pueden enviar en este módulo son los siguientes:

 

Comando AT

Descripción

Respuesta

AT

Test de comunicación.

Responde con un OK

AT+VERSION

Retorna la versión del Modulo

OKlinvorV1.9

AT+BAUDx

Configura la velocidad de trasmisión del modulo según el valor de “x”1 = 1200 bps

2 = 2400 bps

3 = 4800 bps

4 = 9600 bps (por defecto)

5 = 19200 bps

6 = 38400 bps

7 = 57600 bps

8 = 115200 bps

9 = 230400 bps

A = 460800 bps

B = 921600 bps

C = 1382400 bps

AT+BAUD4 Configura la velocidad a 9600 baud rate Responde con OK9600

AT+NAMEx

Configura el nombre con el que se visualizara el modulo, soporta hasta 20 caracteres AT+NAMEDIYMakers Configura el nombre del modulo a DIYMakers Responde con OKsetname

AT+PINxxxx

Configura el Pin de acceso al modulo (password).1234 por defecto. AT+PIN1122 Configura el pin a 1122 Responde con OKsetPIN

 

 

 

 

Placa 4 Reles

Shield arduino de 4 relees.


Los relees se activan a nivel alto.

Las patillas para la activación son:

  • Relee 1 pin 7
  • Relee 2 pin 6
  • Relee 3 pin 5
  • Relee 4 pin 4

Programa Ejemplo

/*

* Placa_4_reles.

* Activa y desactiva de forma secuencial los reles

* Laca para cuatro reles.

* Rele 1 pin 7

* Rele 2 pin 6

* Rele 3 pin 5

* Rele 4 pin 4

*/

int rele1 = 7;

int rele2 = 6;

int rele3 = 5;

int rele4 = 4;

void setup() {

pinMode(7, OUTPUT);

pinMode(6, OUTPUT);

pinMode(5, OUTPUT);

pinMode(4, OUTPUT);

}

void loop() {

for (int i=4; i<8; i++){

digitalWrite(i, HIGH);

delay(2000);

digitalWrite(i,LOW);

delay(2000);

}

}