módulo bluetooth para comunicación de KL25Z midiendo corriente a través de una sonda amperimétrica con Android App neurGAI

Dependencies:   BluetoothSoftSerial SoftSerial mbed

http://www.ehu.eus/ehusfera/neurgai/

Committer:
gbm
Date:
Wed Dec 09 17:48:30 2015 +0000
Revision:
1:9f267ca79300
Parent:
0:d01d10e9aca5
Child:
2:c5495669e122
sonda calibrada

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gbm 0:d01d10e9aca5 1 #include "mbed.h"
gbm 0:d01d10e9aca5 2 #include "BluetoothSerial.h" // en esta librería se ha modificado la clase Serial a SoftSerial para permitir
gbm 0:d01d10e9aca5 3 // la comunicación con Seeed Bluetooth Shield a través de SoftSerial sin utilizar una UART del micro
gbm 0:d01d10e9aca5 4
gbm 0:d01d10e9aca5 5 //para habilitar conexión serie con linux, ejecutar:
gbm 0:d01d10e9aca5 6 // sudo rfcomm bind /dev/rfcomm0 [MAC address] 1
gbm 0:d01d10e9aca5 7 // sudo putty
gbm 0:d01d10e9aca5 8
gbm 0:d01d10e9aca5 9 Ticker medidor;
gbm 0:d01d10e9aca5 10
gbm 0:d01d10e9aca5 11 AnalogIn sonda(A2); // la sonda amperimétrica debe conectarse entre los pines A2 y PTE30
gbm 0:d01d10e9aca5 12 AnalogOut salida_offset(PTE30);
gbm 0:d01d10e9aca5 13
gbm 0:d01d10e9aca5 14 DigitalOut led1(LED1);
gbm 0:d01d10e9aca5 15 DigitalOut led2(LED2);
gbm 0:d01d10e9aca5 16 DigitalOut led3(LED3);
gbm 0:d01d10e9aca5 17
gbm 0:d01d10e9aca5 18 BluetoothSerial serialBluetoothShield(D5, D4); // TX, RX Comunicación con Seeed-Bluetooth-Shield
gbm 0:d01d10e9aca5 19 //Serial pc(USBTX, USBRX); // tx, rx
gbm 0:d01d10e9aca5 20
gbm 0:d01d10e9aca5 21 int frecuencia_muestreo = 5000;
gbm 0:d01d10e9aca5 22 int numero_muestra = 0;
gbm 0:d01d10e9aca5 23 float valor_muestra;
gbm 0:d01d10e9aca5 24 float v_offset = 0;
gbm 0:d01d10e9aca5 25 float v_offset_medido = 0;
gbm 0:d01d10e9aca5 26 float potencia = 0;
gbm 0:d01d10e9aca5 27 float potencia_medida = 0;
gbm 0:d01d10e9aca5 28 float potencia_230V =0;
gbm 0:d01d10e9aca5 29 float corriente_medida = 0;
gbm 0:d01d10e9aca5 30 bool medido = false;
gbm 0:d01d10e9aca5 31
gbm 0:d01d10e9aca5 32 void medir()
gbm 0:d01d10e9aca5 33 {
gbm 0:d01d10e9aca5 34 numero_muestra++;
gbm 0:d01d10e9aca5 35 valor_muestra = sonda.read();
gbm 0:d01d10e9aca5 36 v_offset = v_offset + valor_muestra;
gbm 0:d01d10e9aca5 37 potencia = potencia + pow((valor_muestra - v_offset_medido), 2);
gbm 0:d01d10e9aca5 38 if (numero_muestra == frecuencia_muestreo) // hemos llegado a un segundo
gbm 0:d01d10e9aca5 39 {
gbm 0:d01d10e9aca5 40 potencia_medida = potencia / frecuencia_muestreo;
gbm 0:d01d10e9aca5 41 corriente_medida = sqrt(potencia_medida);
gbm 0:d01d10e9aca5 42 v_offset_medido = v_offset / frecuencia_muestreo;
gbm 0:d01d10e9aca5 43 v_offset = 0;
gbm 0:d01d10e9aca5 44 potencia = 0;
gbm 0:d01d10e9aca5 45 numero_muestra = 0;
gbm 0:d01d10e9aca5 46 led3 = !led3; // conmuta LED azul
gbm 0:d01d10e9aca5 47 medido = true;
gbm 0:d01d10e9aca5 48 }
gbm 0:d01d10e9aca5 49 }
gbm 0:d01d10e9aca5 50
gbm 0:d01d10e9aca5 51 void flushSerialBuffer()
gbm 0:d01d10e9aca5 52 {
gbm 0:d01d10e9aca5 53 char char1;
gbm 0:d01d10e9aca5 54 while (serialBluetoothShield.readable()) {
gbm 0:d01d10e9aca5 55 char1 = serialBluetoothShield.getc();
gbm 0:d01d10e9aca5 56 }
gbm 0:d01d10e9aca5 57 return;
gbm 0:d01d10e9aca5 58 }
gbm 0:d01d10e9aca5 59
gbm 0:d01d10e9aca5 60 int main() {
gbm 0:d01d10e9aca5 61 //pc.printf("Apaga los leds\r\n");
gbm 0:d01d10e9aca5 62 led1 = 1; // led rojo apagado
gbm 0:d01d10e9aca5 63 led2 = 1; // led verde apagado
gbm 0:d01d10e9aca5 64 led3 = 1; // led azul apagado
gbm 0:d01d10e9aca5 65
gbm 0:d01d10e9aca5 66 //configura el offset de voltaje a sumar a la sonda
gbm 0:d01d10e9aca5 67 //pc.printf("Configura el offset de voltaje a sumar a la sonda\r\n");
gbm 0:d01d10e9aca5 68 salida_offset = 0.5;
gbm 1:9f267ca79300 69 float pendiente = 201.7635;
gbm 0:d01d10e9aca5 70 float offset = 0;
gbm 0:d01d10e9aca5 71
gbm 0:d01d10e9aca5 72 //apaga todos los LEDs
gbm 0:d01d10e9aca5 73 led1 = 0; // led rojo encendido
gbm 0:d01d10e9aca5 74 led2 = 1; // led verde apagado
gbm 0:d01d10e9aca5 75 led3 = 1; // led azul apagado
gbm 0:d01d10e9aca5 76
gbm 0:d01d10e9aca5 77 //configura el Bluetooth Shield
gbm 0:d01d10e9aca5 78 //pc.printf("Configura el Bluetooth Shield\r\n");
gbm 0:d01d10e9aca5 79 serialBluetoothShield.setup();
gbm 0:d01d10e9aca5 80 serialBluetoothShield.slave("neurGAI"); // default PIN code: 0000
gbm 0:d01d10e9aca5 81 wait(2);
gbm 0:d01d10e9aca5 82
gbm 0:d01d10e9aca5 83 led1 = 1; // rojo apagado
gbm 0:d01d10e9aca5 84 led3 = 0; // azul encendido
gbm 0:d01d10e9aca5 85
gbm 0:d01d10e9aca5 86 serialBluetoothShield.connect();
gbm 0:d01d10e9aca5 87 wait(2);
gbm 0:d01d10e9aca5 88
gbm 0:d01d10e9aca5 89 led3 = 1; // azul apagado
gbm 0:d01d10e9aca5 90 led2 = 0; // verde encendido
gbm 0:d01d10e9aca5 91
gbm 0:d01d10e9aca5 92 flushSerialBuffer();
gbm 0:d01d10e9aca5 93 wait(2); // This delay is required.
gbm 0:d01d10e9aca5 94
gbm 0:d01d10e9aca5 95 while (!serialBluetoothShield.writeable()); // espera a que se pueda escribir
gbm 0:d01d10e9aca5 96 led2 = 1; // apaga el led verde
gbm 0:d01d10e9aca5 97 wait(1);
gbm 0:d01d10e9aca5 98
gbm 0:d01d10e9aca5 99 // asigna la función medir al temporizador con intervalo 50 us
gbm 0:d01d10e9aca5 100 //pc.printf("Asigna la funcion medir al temporizador con intervalo 50 us\r\n");
gbm 0:d01d10e9aca5 101 medidor.attach(&medir, 1.0/frecuencia_muestreo);
gbm 0:d01d10e9aca5 102
gbm 0:d01d10e9aca5 103 // spin in a main loop. medidor will interrupt it to call medir
gbm 0:d01d10e9aca5 104 float t = 0;
gbm 0:d01d10e9aca5 105 int tiempo = 0;
gbm 0:d01d10e9aca5 106 while(1)
gbm 0:d01d10e9aca5 107 {
gbm 0:d01d10e9aca5 108 if (medido)
gbm 0:d01d10e9aca5 109 {
gbm 0:d01d10e9aca5 110 medidor.detach();
gbm 0:d01d10e9aca5 111 potencia_230V = (corriente_medida * pendiente + offset) * 230;
gbm 0:d01d10e9aca5 112 serialBluetoothShield.printf("#%i€%f*\r\n", tiempo, potencia_230V);
gbm 0:d01d10e9aca5 113 //pc.puts("Dato enviado\r\n");
gbm 0:d01d10e9aca5 114 medido = false;
gbm 0:d01d10e9aca5 115 t = t + 1;
gbm 0:d01d10e9aca5 116 tiempo++;
gbm 0:d01d10e9aca5 117 medidor.attach(&medir, 1.0/frecuencia_muestreo);
gbm 0:d01d10e9aca5 118 }
gbm 0:d01d10e9aca5 119 }
gbm 0:d01d10e9aca5 120 }