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
main.cpp
00001 // la App neurGAI y más información en: http://www.ehu.eus/ehusfera/neurgai/ 00002 00003 #include "mbed.h" 00004 #include "BluetoothSerial.h" // en esta librería se ha modificado la clase Serial a SoftSerial para permitir 00005 // la comunicación con Seeed Bluetooth Shield a través de SoftSerial sin utilizar una UART del micro 00006 00007 //para habilitar conexión serie con linux, ejecutar: 00008 // sudo rfcomm bind /dev/rfcomm0 [MAC address] 1 00009 // sudo putty 00010 00011 Ticker medidor; 00012 00013 AnalogIn sonda(A2); // la sonda amperimétrica debe conectarse entre los pines A2 y PTE30 00014 AnalogOut salida_offset(PTE30); 00015 00016 DigitalOut led1(LED1); 00017 DigitalOut led2(LED2); 00018 DigitalOut led3(LED3); 00019 00020 BluetoothSerial serialBluetoothShield(D5, D4); // TX, RX Comunicación con Seeed-Bluetooth-Shield 00021 //Serial pc(USBTX, USBRX); // tx, rx 00022 00023 int frecuencia_muestreo = 5000; 00024 int numero_muestra = 0; 00025 float valor_muestra; 00026 float v_offset = 0; 00027 float v_offset_medido = 0; 00028 float potencia = 0; 00029 float potencia_medida = 0; 00030 float potencia_230V =0; 00031 float corriente_medida = 0; 00032 bool medido = false; 00033 00034 void medir() 00035 { 00036 numero_muestra++; 00037 valor_muestra = sonda.read(); 00038 v_offset = v_offset + valor_muestra; 00039 potencia = potencia + pow((valor_muestra - v_offset_medido), 2); 00040 if (numero_muestra == frecuencia_muestreo) // hemos llegado a un segundo 00041 { 00042 potencia_medida = potencia / frecuencia_muestreo; 00043 corriente_medida = sqrt(potencia_medida); 00044 v_offset_medido = v_offset / frecuencia_muestreo; 00045 v_offset = 0; 00046 potencia = 0; 00047 numero_muestra = 0; 00048 led3 = !led3; // conmuta LED azul 00049 medido = true; 00050 } 00051 } 00052 00053 void flushSerialBuffer() 00054 { 00055 char char1; 00056 while (serialBluetoothShield.readable()) { 00057 char1 = serialBluetoothShield.getc(); 00058 } 00059 return; 00060 } 00061 00062 int main() { 00063 //pc.printf("Apaga los leds\r\n"); 00064 led1 = 1; // led rojo apagado 00065 led2 = 1; // led verde apagado 00066 led3 = 1; // led azul apagado 00067 00068 //configura el offset de voltaje a sumar a la sonda 00069 //pc.printf("Configura el offset de voltaje a sumar a la sonda\r\n"); 00070 salida_offset = 0.5; 00071 float pendiente = 201.206437; 00072 float offset = 0; 00073 00074 //apaga todos los LEDs 00075 led1 = 0; // led rojo encendido 00076 led2 = 1; // led verde apagado 00077 led3 = 1; // led azul apagado 00078 00079 //configura el Bluetooth Shield 00080 //pc.printf("Configura el Bluetooth Shield\r\n"); 00081 serialBluetoothShield.setup(); 00082 serialBluetoothShield.slave("neurGAI"); // default PIN code: 0000 00083 wait(2); 00084 00085 led1 = 1; // rojo apagado 00086 led3 = 0; // azul encendido 00087 00088 serialBluetoothShield.connect(); 00089 wait(2); 00090 00091 led3 = 1; // azul apagado 00092 led2 = 0; // verde encendido 00093 00094 flushSerialBuffer(); 00095 wait(2); // This delay is required. 00096 00097 while (!serialBluetoothShield.writeable()); // espera a que se pueda escribir 00098 led2 = 1; // apaga el led verde 00099 wait(1); 00100 00101 // asigna la función medir al temporizador con intervalo 200 us 00102 //pc.printf("Asigna la funcion medir al temporizador con intervalo 200 us\r\n"); 00103 medidor.attach(&medir, 1.0/frecuencia_muestreo); 00104 00105 // spin in a main loop. medidor will interrupt it to call medir 00106 float t = 0; 00107 int tiempo = 0; 00108 while(1) 00109 { 00110 if (medido) 00111 { 00112 medidor.detach(); 00113 potencia_230V = (corriente_medida * pendiente + offset) * 230; 00114 serialBluetoothShield.printf("#%i€%f*\r\n", tiempo, potencia_230V); 00115 //pc.puts("Dato enviado\r\n"); 00116 medido = false; 00117 t = t + 1; 00118 tiempo++; 00119 medidor.attach(&medir, 1.0/frecuencia_muestreo); 00120 } 00121 } 00122 }
Generated on Tue Jul 19 2022 03:17:56 by 1.7.2