enviar datos desde arduino y recibirlos en el pc

66
ENVIAR DATOS DESDE ARDUINO Y RECIBIRLOS EN EL PC: Vamos a enviar un valor de 0 a 1023 que obtendremos girando el potenciómetro conectado a la placa Arduino, los valores se enviaran cada segundo. Para ello utilizaremos el siguiente código: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 //Enviar datos con modulo Bluetooth para Arduino http://zygzax.com/ #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); } Para conectarnos con el módulo bluetooth desde el ordenador tendremos que añadirlo como si se tratase de un teléfono móvil o cualquier otro dispositivo bluetooth normal y corriente, utilizando la clave de emparejamiento 1234.

Upload: monyk-zerymar-solis

Post on 15-Jan-2016

72 views

Category:

Documents


0 download

DESCRIPTION

Uso de comandos para comunicacion de arduino y Pc

TRANSCRIPT

ENVIAR DATOS DESDE ARDUINO Y RECIBIRLOS EN EL PC:

Vamos a enviar un valor de 0 a 1023 que obtendremos girando el potenciómetro conectado a

la placa Arduino, los valores se enviaran cada segundo. Para ello utilizaremos el siguiente

código:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

//Enviar datos con modulo Bluetooth para Arduino http://zygzax.com/

#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);

}

Para conectarnos con el módulo bluetooth desde el ordenador tendremos que añadirlo como

si se tratase de un teléfono móvil o cualquier otro dispositivo bluetooth normal y corriente,

utilizando la clave de emparejamiento 1234.

En el programa de desarrollo de Arduino seleccionaremos el puerto serie que corresponde a

la comunicación bluetooth con este módulo, en mi caso (Sistema operativo Mac) el puerto es:

“/dev/tty.HC-07-DevB”.

El último paso para leer la información que está transmitiendo nuestra placa Arduino es abrir

el monitor serie del programa de desarrollo de Arduino y seleccionar “9600 baud” y ya

deberíamos ver la información.

ENVIAR DATOS DESDE EL PC A ARDUINO

Ahora vamos a enviar un “1” para encender el LED conectado a la placa Arduino y un “0” para

apagarlo. Si enviamos una cadena de caracteres el programa leerá cada uno de ellos por

orden (001101 –> Apagado-Apagado-Encendido-Encendido-Apagado-Encendido).

El código es el siguiente:

?

12345678910111213141516171819202122232425262728

//Recibir datos con modulo Bluetooth para Arduino http://zygzax.com/#include <SoftwareSerial.h>char rec;SoftwareSerial blue(2,3);void setup(){  pinMode(13,OUTPUT);  blue.begin(9600);  blue.println("Conectado");}void loop() {  if(blue.available()){    rec=blue.read();    switch(rec){      case '0':        digitalWrite(13,LOW);        delay(500);        blue.println("Led off");        break;      case '1':        digitalWrite(13,HIGH);        delay(500);        blue.println("Led on");        break;      default:        delay(500);        blue.print(rec);        blue.println(" no es una orden valida. Introduzca 0 o 1");    }  }}

2930

El método para conectarnos a través de bluetooth con nuestra placa arduino es exactamente

igual al seguido para leer la información pero en este caso no recibiremos ningún mensaje

sino que escribiremos un 1 y se lo enviaremos, veremos que nos devuelve un mensaje

confirmando que se ha recibido la orden y que se ha encendido el led. Para apagarlo

enviaremos un 0.

Interfaz de configuración de comandos AT en HC-05El puerto serie en modo de configuración para el HC-05 debe configurarse de la siguiente

manera: 34800 bps, 8 bits de datos, Sin paridad, Sin control de flujo. Para entrar al modo

de comandos AT seguimos los siguientes pasos:

1. Poner a estado alto en el pin 34 (PIO11)

2. Conectar la alimentación del módulo (o resetearlo de preferencia)

3. Enviar un comando AT\r\n para comprobar que estemos en modo de comando AT.

La siguiente lista es una compilación de los comandos que consideramos importantes

AT\r\n      Comando de prueba, debe responder con OK\r\n

AT+ROLE=1\r\n      Comando para colocar el módulo en modo Maestro (Master)

AT+ROLE=0\r\n       Comando para colocar el módulo en modo Esclavo (Slave)

AT+VERSION?\r\n      Obtener la versión del firmware

AT+UART=115200,1,2\r\n      Configurar el modo de funcionamiento del puerto serie en

“modo puente”

AT+PIO=10,1\r\n      Colocar el pin de IO de propósito general a nivel alto

Existen otros comandos AT que están documentados en la hoja de datos que proveen

nuestros amigos de iTeadStudio. Podemos encontrar la hoja de datos (datasheet) del HC-05

en la siguiente dirección:

http://biblioteca.geekfactory.mx/Bluetooth_Bee_Pro/datasheet_hc-05.pdf

Es importante notar que al módulo HC-05 no le agradan los caracteres \r o \n sueltos al

finalizar un comando. Siempre debemos mandarle \r\n para finalizar cada comando, por

lo que debemos configurar nuestro programa de terminal serial para que siempre

envíe \r\n al final de cada linea. Si utilizamos el “Monitor Serial” del IDE de arduino hay

que configurarlo de la siguiente forma:

Interfaz de configuración de comandos AT en HC-06El HC-06 tiene un firmware distinto y también un funcionamiento distinto en cuanto a su

modo de configuración. Para poder configurar el HC-06 es necesario que esteNO este

emparejado ni siendo usado por ningun dispositivo. De igual forma que el HC-05 es

necesario conectarlo a la PC y usar un programa de terminal para darle instrucciones de

configuración (Comandos AT), aunque también podemos escribir un programa de arduino o

en un microcontrolador para configurarlo.

Para conectarlo con la PC utilizamos un adaptador USB serial como se muestra en la foto:

Realizando pruebas con un módulo HC-06 y una tarjeta USB serial con FT-232RL

El módulo HC-06 acepta un set muy básico de comandos (algo raros por cierto), que permite

pocas configuraciones, pero que sin duda será util para personalizar este económico módulo y

configurarlo para satisfacer las necesidades de la aplicación.

Los comandos que soporta son:

Prueba de funcionamiento:

Envíar: AT

Recibe: OK

Configurar el Baudrate:

Envíar: AT+BAUD<Numero>

El parámetro número es un caracter hexadecimal de ‘1’ a ‘c’ que corresponden a los

siguientes Baud Rates: 1=1200, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600,

8=115200, 9=230400, A=460800, B=921600, C=1382400

Recibe: OK<baudrate>

Configurar el Nombre de dispositivo Bluetooth:

Envíar: AT+NAME<Nombre>

Recibe: OKsetname

Configurar el código PIN de emparejamiento:

Envíar: AT+PIN<pin de 4 digitos>

Recibe: OK<pin de 4 digitos>

Obtener la version del firmware:

Enviar: AT+VERSION

Recibe: Linvor1.8

Si ya hemos trabajado con comandos AT observaremos que los comandos estan lejos del

estándar, lo más obvio es que:

No es necesario finalizar el comando con \r\n, pero si es necesario ingresar los comandos con

todos los caracteres seguidos sin pausas. NO hay necesidad de dar “enter” para finalizar un

comando. El modulo tiene un Temporizador que hace necesario introducir el comando de una

sola vez, sin pausas entre los caracteres.

Por lo anterior, si utilizamos un emulador de terminal hay que pegarlos en leste y no escribirlos

uno a uno con el teclado. También podemos usar el “monitor serial” de Arduino configurado

como se muestra en la imágen más arriba en este artículo.

Hay que tener cuidado de introducir TODAS LAS LETRAS DEL COMANDO en

MAYUSCULAS, ya que de lo contrario, no funcionarán.

Las respuestas no parecen respuestas estándar a comandos AT.

Conexión básica con ArduinoLas conexiones para realizar con arduino son bastante sencillas. Solamente requerimos

colocar como mínimo la alimentación y conectar los pines de transmisión y recepción serial

(TX y RX). Hay que recordar que en este caso los pines se debe conectar cruzados TX

Bluetooth -> RX de Arduino  y RX Bluetooth -> TX de Arduino. La siguiente imágen muestra

las conexiones básicas para que funcione el módulo

Conexión de un módulo HC-06 a Arduino. Hay que revisar la correspondencia de pines en la serigrafía, ya

que puede variar dependiendo del proveedor o lote.

En este caso estamos utilizando el hardware de UART, por lo que la comunicación con la PC

no será posible. Para poder utilizar la UART para comunicarse con la PC mediante USB, es

necesario utilizar un UART emulado por software, de manera que los pines de comunicación

con el módulo bluetooth queden en pines distintos.

El código para la comunicación a través del bluetooth es idéntico al que utilizaríamos para

comunicarnos con la PC vía USB. El siguiente ejemplo permite encender o apagar el led de la

tarjeta arduino mediante el módulo bluetooth. El código funciona de la siguiente manera:

Al envíar el caracter E, se pone en estado alto la salida del pin 13

Al enviar el caracter A, se pone en estado lógico bajo la salida del pin 13

123456789101

/************************* http://geekfactory.mx ******************************* * * Sketch de prueba para modulos de bluetooth HC-05 y HC-06. Este programa puede * controlar el led de la tarjeta arduino a través de la conexión bluetooth. El * programa puede ampliarse para controlar una mayor cantiad de salidas. * * ESTE SKETCH USA EL PUERTO SERIE (UART), MISMO QUE ES UTILIZADO PARA * LA COMUNICACIÓN USB. EL USO DE BLUETOOTH O USB ES MUTUAMENTE EXCLUSIVO * (NO SE PUEDEN USAR AMBOS AL MISMO TIEMPO). * * PARA USAR LA CONEXIÓN USB Y BLUETOOTH AL MISMO TIEMPO ES NECESARIO EMULAR UNA

11213141516171819202122232425262728293031323334353637383940

* UART POR SOFTWARE. * * El funcionamiento es sencillo: * * Enviar un caracter 'A' para encender el led * Enviar un caracter 'a' para apagar el led * */ char rxChar; // Variable para recibir datos del puerto serieint ledpin = 13;// Pin donde se encuentra conectado el led (pin 13) // Configurar el arduinovoid setup(){

// Pin 13 como salidapinMode(ledpin, OUTPUT);// Comunicación serie a 9600 baudiosSerial.begin(9600);

} // Ciclo infinito, programa principalvoid loop(){

// Si hay datos disponibles en el bufferif( Serial.available() ){

// Leer un byte y colocarlo en variablerxChar = Serial.read();

 // Procesar comando de un solo byteif( rxChar == 'A' ){

digitalWrite(ledpin, HIGH);Serial.println("ON");

}else if ( rxChar == 'a' ){

digitalWrite(ledpin, LOW);Serial.println("OFF");

}}

 // Podemos hacer otras cosas aquídelay(100);

}

4142434445464748495051525354555657

 

ConclusiónComo podemos observar, los módulos HC-05 y HC-06 son bastante sencillos de configurar

para usarse con el microcontrolador de nuestra preferencia. El HC-06 es el modelo más

sencillo, presentando menos opciones para su configuración, pero siendo bastante util y

económico para conectar nuestros dispositivos con microcontroladores a la PC, tablets,

celulares, etc. El HC-05 por otra parte, nos permite hacer algunas cosas que su hermano

menor no permite, como enlaces punto a punto entre dos módulos y también teniendo un

juego de comandos más completo y un poco más “formal”, con algunas características

interesantes como el control de pines de GPIO.

ARDUINO BLUETOOTH 

Modulo Bluetooth HC-05:

Primero tenemos que configurar el modulo Bluetooth. En este caso tenemos el Modulo HC-05.

El modulo de bluetooth HC-05 soporta los voltajes de entrada de 3.3 y 5V.

Circuito:

 

 

 

Sketch para configurar comandos AT:

#include <SoftwareSerial.h>

#define RxD 10

#define TxD 11

#define RST 5

#define KEY 4

SoftwareSerial BTSerial(RxD, TxD);

void setup()

{

  pinMode(RST, OUTPUT);

  pinMode(KEY, OUTPUT);

  digitalWrite(RST, LOW);

  digitalWrite(KEY, HIGH);

  digitalWrite(RST, HIGH);

  delay(500);

  BTSerial.flush();

  delay(500);

  BTSerial.begin(38400);

  Serial.begin(9600);

  Serial.println("Enter AT commands:");

  BTSerial.print("AT\r\n");

  delay(100);

}

void loop()

{

  if (BTSerial.available())

    Serial.write(BTSerial.read());

  if (Serial.available())

    BTSerial.write(Serial.read());

}

 

En el monitor serial, modificamos los valores de velocidad a “9600 baud” y a “Ambos Nl y

CR”, en este momento observaremos en la pantalla que dice: “Enter AT commands:” , si nosotros

mandamos el comando AT, nos debe responder OK.

Para configurar nuestro dispositivo bluetooth: 

Saber el nombre del modulo.                                                                                    

AT+NAME?

Cambiar el nombre, en el ejemplo siguiente se cambia por “MINOMBRE”.          AT+NAME=

MINOMBRE

Un dato muy importante el HC-05 funciona como esclavo y maestro.

Como esclavo: espera que desde otro dispositivo nos conectemos.

Como maestro: el HC-05 se conecta a otro dispositivo.

Saber cómo está configurado con el comando: AT+ROLE?

Si nos contesta “0″ esta en modo esclavo.

Si nos contesta “1″ esta en modo maestro.

Por defecto viene en modo esclavo.

Cambiarlo al modo esclavo: Comando:AT+ROLE=0

Cambiarlo al modo maestro: Comando:AT+ROLE=1

Saber la contraseña del HC-05 Comando: AT+PSWD?

 

Por defecto suele venir la “1234″ o la “0000″.

Muestra la configuración con la placa Arduino, por defecto viene configurado a una

velocidad de 9600. Comando: AT+UART?

Arduino bluetooth + Motor Servo

 

sketch:

#include <SoftwareSerial.h>

#include <Servo.h> // Libreria de servos

#define RxD 0

#define TxD 1

#define RST 5 // Encendido del Modulo

#define KEY 4

Servo myservo1; // variable servo

byte recepcion=0; // almacena el valor enviado desde el emisor

int myAngle1; // utilizada para pasar el valor a grados

SoftwareSerial BTSerial(RxD, TxD);

byte pinEstado = 0;

void setup()

{

  pinMode(RST, OUTPUT);

  pinMode(KEY, OUTPUT);

  // Estado inicial

  digitalWrite(RST, LOW);

  // Modo Comunicacion

  digitalWrite(KEY, LOW);

  // Encendemos el modulo.

  digitalWrite(RST, HIGH);

  // Configuracion del puerto serie por software

  // para comunicar con el modulo HC-05

  BTSerial.begin(9600);

  BTSerial.flush();

  delay(500);

  // Configuramos el puerto serie de Arduino para Debug

  Serial.begin(9600);

  //Serial.println("Ready");

  myservo1.attach(9);

}

void loop(){

  if (BTSerial.available()>3){

    byte b[4];

    b[0]= BTSerial.read();

    b[1]= BTSerial.read();

    b[2]= BTSerial.read();

    b[3]= BTSerial.read();

    int numero = (b[3] & 0xFF) + ((b[2] & 0xFF) << 8) + ((b[1] & 0xFF) << 16)

+ ((b[0] & 0xFF) << 24);

    recepcion = numero;

    BTSerial.flush();

    myAngle1=recepcion; // Volcado del dato recibido del emsior

    myservo1.write(myAngle1);

   Serial.println(recepcion);

    }

  }

Arduino Bluetooth + dimmer 220v

 

sketch:

 

#include <SoftwareSerial.h>

#define RxD 0

#define TxD 1

#define RST 5 // Encendido del Modulo

#define KEY 4

byte recepcion=0; // almacena el valor enviado desde el emisor

SoftwareSerial BTSerial(RxD, TxD);

byte pinEstado = 0;

int LedPin =  13;         // LED conectado en placa al pin digital 13

int Led1 = 9;             // Entrada Led1 del PaperDimmer

int Led2 = 10;             // Entrada Led2 del PaperDimmer

int Led3 = 11;             // Entrada Led3 del PaperDimmer

// DEFINICION DE VARIABLES

int Temp = 20;           // Espera siempre mayor que 20 (50Hz => 20ms)

int ValorPot = 0;         // Valor leído del potenciómetro

int ValPapertrino = 0;    // Valor transmitido al PaperDimmer

boolean ValLedPin = HIGH; // Valor de la salida LedPin13 del Arduino

int ValLed1 = 0;          // Valor de la entrada Led1 del PaperDimmer

int ValLed2 = 0;          // Valor de la entrada Led2 del PaperDimmer

int ValLed3 = 0;          // Valor de la entrada Led3 del PaperDimmer

// FUNCION INICIAL

void setup()   {      

 pinMode(RST, OUTPUT);

  pinMode(KEY, OUTPUT);

  // Estado inicial

  digitalWrite(RST, LOW);

  // Modo Comunicacion

  digitalWrite(KEY, LOW);

  // Encendemos el modulo.

  digitalWrite(RST, HIGH);

  // Configuracion del puerto serie por software

  // para comunicar con el modulo HC-05

  BTSerial.begin(9600);

  BTSerial.flush();

  delay(500);

  // Configuramos el puerto serie de Arduino para Debug

  Serial.begin(9600);

  // Inicializar las salidas:

  pinMode(LedPin, OUTPUT);   

  pinMode(Led1, OUTPUT);

  pinMode(Led2, OUTPUT);

  pinMode(Led3, OUTPUT);   

}

// CICLO PRINCIPAL

void loop()

{

if (BTSerial.available()>3){

    byte b[4];

    b[0]= BTSerial.read();

    b[1]= BTSerial.read();

    b[2]= BTSerial.read();

    b[3]= BTSerial.read();

    int numero = (b[3] & 0xFF) + ((b[2] & 0xFF) << 8) + ((b[1] & 0xFF) << 16)

+ ((b[0] & 0xFF) << 24);

    recepcion = numero;

    BTSerial.flush();

  if (numero>0){

  ValLedPin=!ValLedPin;           // invierte el valor del pin13

  digitalWrite(LedPin,ValLedPin); // y muestra que el programa funciona

  delay(Temp);

  ValorPot = numero;     

  ValPapertrino = ValorPot/(100/7);   //  Escala el valor del pot a 0-7

  ValLed1 = ValPapertrino & 1;    // Enmascara el valor del triac con 001

  if (ValLed1 == 1) {             // si tiene un valor de 1

    digitalWrite(Led1,HIGH);      // activa la entrada Led1 del PaperDimmer

  }

  else {                          // si el valor es distinto a 1

    digitalWrite (Led1,LOW);      // desactiva Led1

  }

  ValLed2=ValPapertrino & 2;      // Enmascara el valor del triac con 010

  if (ValLed2 == 2) {             // si tiene un valor de 2

    digitalWrite (Led2,HIGH);     // activa la entrada Led2 del PaperDimmer

  }

  else {                          // si el valor es distinto a 2

    digitalWrite(Led2,LOW);       // desactiva Led2

  }

  ValLed3=ValPapertrino & 4;      // Enmascara el valor del triac con 100

  if (ValLed3 == 4) {             // si tiene un valor de 4

    digitalWrite (Led3,HIGH);     // activa la entrada Led3 del paperDimmer

  }

  else {                          // si el valor es distinto a 4

    digitalWrite (Led3,LOW);      // desactiva Led3

  }

 }

 }

 }

 

Dimmer 220v con Arduino y Puredata

 

Sketch Dimmer 220v Serial:

Sketch dimmer 220v:

// DEFINICION ENTRADAS/SALIDAS

int LedPin =  13;         // LED conectado en placa al pin digital 13

int Led1 = 9;             // Entrada Led1 del PaperDimmer

int Led2 = 10;             // Entrada Led2 del PaperDimmer

int Led3 = 11;             // Entrada Led3 del PaperDimmer

// DEFINICION DE VARIABLES

int Temp = 20;           // Espera siempre mayor que 20 (50Hz => 20ms)

int ValorPot = 0;         // Valor leído del potenciómetro

int ValPapertrino = 0;    // Valor transmitido al PaperDimmer

boolean ValLedPin = HIGH; // Valor de la salida LedPin13 del Arduino

int ValLed1 = 0;          // Valor de la entrada Led1 del PaperDimmer

int ValLed2 = 0;          // Valor de la entrada Led2 del PaperDimmer

int ValLed3 = 0;          // Valor de la entrada Led3 del PaperDimmer

// FUNCION INICIAL

void setup()   {

Serial.begin(9600);  

  // Inicializar las salidas:

  pinMode(LedPin, OUTPUT);   

  pinMode(Led1, OUTPUT);

  pinMode(Led2, OUTPUT);

  pinMode(Led3, OUTPUT);   

}

// CICLO PRINCIPAL

void loop() {

  byte brightness;

  if (Serial.available()) {

    brightness = Serial.read();

 if (brightness>0){

  ValLedPin=!ValLedPin;           // invierte el valor del pin13

  digitalWrite(LedPin,ValLedPin); // y muestra que el programa funciona

  delay(Temp);

  ValorPot = brightness;   // Lee el valor del potenciómetro   

  ValPapertrino = ValorPot/(255/7);   //  Escala el valor del pot a 0-7

  ValLed1 = ValPapertrino & 1;    // Enmascara el valor del triac con 001

  if (ValLed1 == 1) {             // si tiene un valor de 1

    digitalWrite(Led1,HIGH);      // activa la entrada Led1 del PaperDimmer

  }

  else {                          // si el valor es distinto a 1

    digitalWrite (Led1,LOW);      // desactiva Led1

  }

  ValLed2=ValPapertrino & 2;      // Enmascara el valor del triac con 010

  if (ValLed2 == 2) {             // si tiene un valor de 2

    digitalWrite (Led2,HIGH);     // activa la entrada Led2 del PaperDimmer

  }

  else {                          // si el valor es distinto a 2

    digitalWrite(Led2,LOW);       // desactiva Led2

  }

  ValLed3=ValPapertrino & 4;      // Enmascara el valor del triac con 100

  if (ValLed3 == 4) {             // si tiene un valor de 4

    digitalWrite (Led3,HIGH);     // activa la entrada Led3 del paperDimmer

  }

  else {                          // si el valor es distinto a 4

    digitalWrite (Led3,LOW);      // desactiva Led3

  }

  }

 }

}

Arduino Dimmer 220v + potenciometro 10k

 

Sketch:

// DEFINICION ENTRADAS/SALIDAS

int LedPin =  13;         // LED conectado en placa al pin digital 13

int Led1 = 2;             // Entrada Led1 del PaperDimmer

int Led2 = 3;             // Entrada Led2 del PaperDimmer

int Led3 = 4;             // Entrada Led3 del PaperDimmer

int PotPin = 0;           // La entrada analógica 0 para el potenciometro

// DEFINICION DE VARIABLES

int Temp = 100;           // Espera siempre mayor que 20 (50Hz => 20ms)

int ValorPot = 0;         // Valor leído del potenciómetro

int ValPapertrino = 0;    // Valor transmitido al PaperDimmer

boolean ValLedPin = HIGH; // Valor de la salida LedPin13 del Arduino

int ValLed1 = 0;          // Valor de la entrada Led1 del PaperDimmer

int ValLed2 = 0;          // Valor de la entrada Led2 del PaperDimmer

int ValLed3 = 0;          // Valor de la entrada Led3 del PaperDimmer

// FUNCION INICIAL

void setup()   {               

  // Inicializar las salidas:

  pinMode(LedPin, OUTPUT);   

  pinMode(Led1, OUTPUT);

  pinMode(Led2, OUTPUT);

  pinMode(Led3, OUTPUT);   

}

// CICLO PRINCIPAL

void loop() {

  ValLedPin=!ValLedPin;           // invierte el valor del pin13

  digitalWrite(LedPin,ValLedPin); // y muestra que el programa funciona

  delay(Temp);

  ValorPot = analogRead(PotPin);   // Lee el valor del potenciómetro   

  ValPapertrino = ValorPot/(1024/7);   //  Escala el valor del pot a 0-7

  ValLed1 = ValPapertrino & 1;    // Enmascara el valor del triac con 001

  if (ValLed1 == 1) {             // si tiene un valor de 1

    digitalWrite(Led1,HIGH);      // activa la entrada Led1 del PaperDimmer

  }

  else {                          // si el valor es distinto a 1

    digitalWrite (Led1,LOW);      // desactiva Led1

  }

  ValLed2=ValPapertrino & 2;      // Enmascara el valor del triac con 010

  if (ValLed2 == 2) {             // si tiene un valor de 2

    digitalWrite (Led2,HIGH);     // activa la entrada Led2 del PaperDimmer

  }

  else {                          // si el valor es distinto a 2

    digitalWrite(Led2,LOW);       // desactiva Led2

  }

  ValLed3=ValPapertrino & 4;      // Enmascara el valor del triac con 100

  if (ValLed3 == 4) {             // si tiene un valor de 4

    digitalWrite (Led3,HIGH);     // activa la entrada Led3 del paperDimmer

  }

  else {                          // si el valor es distinto a 4

    digitalWrite (Led3,LOW);      // desactiva Led3

  }

 }

Neurosky + Arduino via bluetooth

 

 

Configurar modulo Bluetooth HC-o5 con Neurosky

 

Comando: AT+UART=57600,0,0 // Cambiamos la velocidad a la que opera el modulo,

originalmente lo teníamos a 9600 y lo cambiamos a 57600.

Para la conexión de nuestra diadema al HC-05, prestar atención a los siguientes pasos:

Configuramos el modulo HC-05 como modo maestro Comando: AT+ROLE=1

Cambiamos la contraseña para que se puedan conectar, para este caso de la diadema

Mindwave es necesario que la contraseña sea (0000). AT+PSWD=0000

Preparamos el modulo para que se conecte a una dirección especifica,

//0 = Dirección especifica de dispositivo.

//1 = A cualquier dispositivo que se encuentre dispobible.

Para este caso será a una dirección específica. Comando: AT+CMODE=0 Se conecta el bluetooth

a la dirección Mac del esclavo, los ceros a la izquierda se omiten. La dirección MAC, como se

menciono anteriormente, viene en un valor hexadecimal el cual se depuro quedando en este

ejemplo como “74-e5-43-89-60-5c″ y se debe introducir en el formato ####,##,!!!!!!.Para este

ejemplo queda de la siguiente manera: Comando: AT+BIND=74e5,43,89605c.

 

Circuito:

 

Sketch Arduino:

#define LED 13

#define BAUDRATE 57600

#define DEBUGOUTPUT 0

#define GREENLED1  3

#define GREENLED2  4

#define GREENLED3  5

#define YELLOWLED1 6

#define YELLOWLED2 7

#define YELLOWLED3 8

#define YELLOWLED4 9

#define REDLED1    10

#define REDLED2    11

#define REDLED3    12

#define powercontrol 10

// checksum variables

byte generatedChecksum = 0;

byte checksum = 0;

int payloadLength = 0;

byte payloadData[64] = {

  0};

byte poorQuality = 0;

byte attention = 0;

byte meditation = 0;

// system variables

long lastReceivedPacket = 0;

boolean bigPacket = false;

//////////////////////////

// Microprocessor Setup //

//////////////////////////

void setup() {

  pinMode(GREENLED1, OUTPUT);

  pinMode(GREENLED2, OUTPUT);

  pinMode(GREENLED3, OUTPUT);

  pinMode(YELLOWLED1, OUTPUT);

  pinMode(YELLOWLED2, OUTPUT);

  pinMode(YELLOWLED3, OUTPUT);

  pinMode(YELLOWLED4, OUTPUT);

  pinMode(REDLED1, OUTPUT);

  pinMode(REDLED2, OUTPUT);

  pinMode(REDLED3, OUTPUT);

  pinMode(LED, OUTPUT);

  Serial.begin(BAUDRATE);           // USB

}

////////////////////////////////

// Read data from Serial UART //

////////////////////////////////

byte ReadOneByte() {

  int ByteRead;

  while(!Serial.available());

  ByteRead = Serial.read();

#if DEBUGOUTPUT  

  Serial.print((char)ByteRead);   // echo the same byte out the USB serial (for debug purposes)

#endif

  return ByteRead;

}

/////////////

//MAIN LOOP//

/////////////

void loop() {

  // Look for sync bytes

  if(ReadOneByte() == 170) {

    if(ReadOneByte() == 170) {

      payloadLength = ReadOneByte();

      if(payloadLength > 169)                      //Payload length can not be greater than 169

          return;

      generatedChecksum = 0;        

      for(int i = 0; i < payloadLength; i++) {  

        payloadData[i] = ReadOneByte();            //Read payload into memory

        generatedChecksum += payloadData[i];

      }   

      checksum = ReadOneByte();                      //Read checksum byte from stream      

      generatedChecksum = 255 - generatedChecksum;   //Take one's compliment of generated checksum

        if(checksum == generatedChecksum) {    

        poorQuality = 200;

        attention = 0;

        meditation = 0;

        for(int i = 0; i < payloadLength; i++) {    // Parse the payload

          switch (payloadData[i]) {

          case 2:

            i++;            

            poorQuality = payloadData[i];

            bigPacket = true;            

            break;

          case 4:

            i++;

            attention = payloadData[i];                        

            break;

          case 5:

            i++;

            meditation = payloadData[i];

            break;

          case 0x80:

            i = i + 3;

            break;

          case 0x83:

            i = i + 25;      

            break;

          default:

            break;

          } // switch

        } // for loop

#if !DEBUGOUTPUT

        // *** Add your code here ***

        if(bigPacket) {

          if(poorQuality == 0)

            digitalWrite(LED, HIGH);

          else

            digitalWrite(LED, LOW);

          Serial.print("PoorQuality: ");

          Serial.print(poorQuality, DEC);

          Serial.print(" Attention: ");

          Serial.print(attention, DEC);

          Serial.print(" Time since last packet: ");

          Serial.print(millis() - lastReceivedPacket, DEC);

          lastReceivedPacket = millis();

          Serial.print("\n");

          switch(attention / 10) {

          case 0:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, LOW);

            digitalWrite(GREENLED3, LOW);

            digitalWrite(YELLOWLED1, LOW);

            digitalWrite(YELLOWLED2, LOW);

            digitalWrite(YELLOWLED3, LOW);

            digitalWrite(YELLOWLED4, LOW);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);           

            break;

          case 1:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, LOW);

            digitalWrite(YELLOWLED1, LOW);

            digitalWrite(YELLOWLED2, LOW);

            digitalWrite(YELLOWLED3, LOW);

            digitalWrite(YELLOWLED4, LOW);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);

            break;

          case 2:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);

            digitalWrite(YELLOWLED1, LOW);

            digitalWrite(YELLOWLED2, LOW);

            digitalWrite(YELLOWLED3, LOW);

            digitalWrite(YELLOWLED4, LOW);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);

            break;

          case 3:              

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, LOW);

            digitalWrite(YELLOWLED3, LOW);

            digitalWrite(YELLOWLED4, LOW);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);             

            break;

          case 4:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, LOW);

            digitalWrite(YELLOWLED4, LOW);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);              

            break;

          case 5:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, HIGH);

            digitalWrite(YELLOWLED4, LOW);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);               

            break;

          case 6:              

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, HIGH);

            digitalWrite(YELLOWLED4, HIGH);

            digitalWrite(REDLED1, LOW);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);              

            break;

          case 7:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, HIGH);

            digitalWrite(YELLOWLED4, HIGH);

            digitalWrite(REDLED1, HIGH);

            digitalWrite(REDLED2, LOW);

            digitalWrite(REDLED3, LOW);              

            break;    

          case 8:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, HIGH);

            digitalWrite(YELLOWLED4, HIGH);

            digitalWrite(REDLED1, HIGH);

            digitalWrite(REDLED2, HIGH);

            digitalWrite(REDLED3, LOW);

            break;

          case 9:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, HIGH);

            digitalWrite(YELLOWLED4, HIGH);

            digitalWrite(REDLED1, HIGH);

            digitalWrite(REDLED2, HIGH);

            digitalWrite(REDLED3, HIGH);

            break;

          case 10:

            digitalWrite(GREENLED1, HIGH);

            digitalWrite(GREENLED2, HIGH);

            digitalWrite(GREENLED3, HIGH);              

            digitalWrite(YELLOWLED1, HIGH);

            digitalWrite(YELLOWLED2, HIGH);

            digitalWrite(YELLOWLED3, HIGH);

            digitalWrite(YELLOWLED4, HIGH);

            digitalWrite(REDLED1, HIGH);

            digitalWrite(REDLED2, HIGH);

            digitalWrite(REDLED3, HIGH);

            break;           

          }                     

        }

#endif        

        bigPacket = false;        

      }

      else {

        // Checksum Error

      }  // end if else for checksum

    } // end if read 0xAA byte

  } // end if read 0xAA byte

}

*Pages

Contacto Xbee y Arduino Arduino Ethernet Tutorial Arduino

Talleres de Arduino Raspberry Pi

Arduino Bluetooth Spark Core (Arduino + Wifi)

Arduino Pro mini Search Results