Luis Alvaro Agudelo Garcia
/
tareaVcandroid
Programa para enviar datos al controlador desde dispositivo android via bluetooth
main.cpp@0:77a7770a1787, 2019-06-26 (annotated)
- Committer:
- luaagudeloga
- Date:
- Wed Jun 26 15:25:07 2019 +0000
- Revision:
- 0:77a7770a1787
Programa para mandar datos al PID y controlar voltaje en un capacitor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
luaagudeloga | 0:77a7770a1787 | 1 | //PROGRAMA PARA CONTROLAR EL VOLTAJE DE UN CAPACITOR EN UN CIRCUITO RC DESDE DISPOSITIVO ANDROID |
luaagudeloga | 0:77a7770a1787 | 2 | //ENVIAR LOS VALORES SEPARADOS POR COMAS |
luaagudeloga | 0:77a7770a1787 | 3 | #include "mbed.h" |
luaagudeloga | 0:77a7770a1787 | 4 | #include "stdio.h" |
luaagudeloga | 0:77a7770a1787 | 5 | #include "string.h" |
luaagudeloga | 0:77a7770a1787 | 6 | #include "stdlib.h" |
luaagudeloga | 0:77a7770a1787 | 7 | |
luaagudeloga | 0:77a7770a1787 | 8 | //Variables y parametros del control PID |
luaagudeloga | 0:77a7770a1787 | 9 | int Kp=0,Ki=0,Kd=0; |
luaagudeloga | 0:77a7770a1787 | 10 | float Sp=0;//set point |
luaagudeloga | 0:77a7770a1787 | 11 | float ai,ek,ad,ap,err_v,o,yT,uk=0,Ts=0.01; |
luaagudeloga | 0:77a7770a1787 | 12 | |
luaagudeloga | 0:77a7770a1787 | 13 | AnalogIn Vc(PTB0);//voltaje condensador |
luaagudeloga | 0:77a7770a1787 | 14 | PwmOut uc(PTE20); //accion de control |
luaagudeloga | 0:77a7770a1787 | 15 | Serial GSM(PTE0,PTE1); //puertos del FRDM para el modulo BLUETOOTH |
luaagudeloga | 0:77a7770a1787 | 16 | Serial pc(USBTX,USBRX); //puertos del PC |
luaagudeloga | 0:77a7770a1787 | 17 | char buffer[30];// TAMAÑO DEL BUFER |
luaagudeloga | 0:77a7770a1787 | 18 | Timer t; //VALOR DEL TIEMPO |
luaagudeloga | 0:77a7770a1787 | 19 | int count; |
luaagudeloga | 0:77a7770a1787 | 20 | int i = 0; |
luaagudeloga | 0:77a7770a1787 | 21 | int c=0; |
luaagudeloga | 0:77a7770a1787 | 22 | char r[]=""; |
luaagudeloga | 0:77a7770a1787 | 23 | DigitalOut LedRojo(LED1); |
luaagudeloga | 0:77a7770a1787 | 24 | DigitalOut LedVerde(LED2); |
luaagudeloga | 0:77a7770a1787 | 25 | DigitalOut LedAzul(LED3); |
luaagudeloga | 0:77a7770a1787 | 26 | |
luaagudeloga | 0:77a7770a1787 | 27 | int readBuffer(char *buffer,int count) //esta funcion lee un bufer de datos |
luaagudeloga | 0:77a7770a1787 | 28 | { |
luaagudeloga | 0:77a7770a1787 | 29 | int i=0; |
luaagudeloga | 0:77a7770a1787 | 30 | t.start(); //CUENTA EL TIEMPO DE CONEXION E INICIA |
luaagudeloga | 0:77a7770a1787 | 31 | while(1) { |
luaagudeloga | 0:77a7770a1787 | 32 | while (GSM.readable()) { |
luaagudeloga | 0:77a7770a1787 | 33 | char c = GSM.getc(); |
luaagudeloga | 0:77a7770a1787 | 34 | if (c == '\r' || c == '\n') c = '$';//si se envia fin de linea o de caracter inserta $ |
luaagudeloga | 0:77a7770a1787 | 35 | buffer[i++] = c;//mete al bufer el caracter leido |
luaagudeloga | 0:77a7770a1787 | 36 | if(i > count)break;//sale del loop si ya detecto terminacion |
luaagudeloga | 0:77a7770a1787 | 37 | } |
luaagudeloga | 0:77a7770a1787 | 38 | if(i > count)break; |
luaagudeloga | 0:77a7770a1787 | 39 | if(t.read() > 1) { //MAS DE UN SEGUNDO DE ESPERA SE SALE Y REINICA EL RELOJ Y SE SALE |
luaagudeloga | 0:77a7770a1787 | 40 | t.stop(); |
luaagudeloga | 0:77a7770a1787 | 41 | t.reset(); |
luaagudeloga | 0:77a7770a1787 | 42 | break; |
luaagudeloga | 0:77a7770a1787 | 43 | } |
luaagudeloga | 0:77a7770a1787 | 44 | } |
luaagudeloga | 0:77a7770a1787 | 45 | return 0; |
luaagudeloga | 0:77a7770a1787 | 46 | } |
luaagudeloga | 0:77a7770a1787 | 47 | |
luaagudeloga | 0:77a7770a1787 | 48 | void cleanBuffer(char *buffer, int count) //esta funcion limpia el bufer |
luaagudeloga | 0:77a7770a1787 | 49 | { |
luaagudeloga | 0:77a7770a1787 | 50 | for(int i=0; i < count; i++) { |
luaagudeloga | 0:77a7770a1787 | 51 | buffer[i] = '\0'; |
luaagudeloga | 0:77a7770a1787 | 52 | } |
luaagudeloga | 0:77a7770a1787 | 53 | } |
luaagudeloga | 0:77a7770a1787 | 54 | int main() { |
luaagudeloga | 0:77a7770a1787 | 55 | |
luaagudeloga | 0:77a7770a1787 | 56 | LedVerde=1; |
luaagudeloga | 0:77a7770a1787 | 57 | LedRojo=1; |
luaagudeloga | 0:77a7770a1787 | 58 | LedAzul=1; |
luaagudeloga | 0:77a7770a1787 | 59 | LedRojo=0; |
luaagudeloga | 0:77a7770a1787 | 60 | wait(2); //PRENDE EL LED ROJO POR 2 SEGUNDOS |
luaagudeloga | 0:77a7770a1787 | 61 | LedRojo=1; |
luaagudeloga | 0:77a7770a1787 | 62 | GSM.baud(9600); |
luaagudeloga | 0:77a7770a1787 | 63 | GSM.format(8,Serial::None,1); |
luaagudeloga | 0:77a7770a1787 | 64 | |
luaagudeloga | 0:77a7770a1787 | 65 | GSM.printf("Enviar los valores Kp,Ki,Kd,Sp separados por comas \n"); |
luaagudeloga | 0:77a7770a1787 | 66 | |
luaagudeloga | 0:77a7770a1787 | 67 | DEF_CONST: |
luaagudeloga | 0:77a7770a1787 | 68 | |
luaagudeloga | 0:77a7770a1787 | 69 | if (GSM.readable()) { |
luaagudeloga | 0:77a7770a1787 | 70 | readBuffer(buffer,20); |
luaagudeloga | 0:77a7770a1787 | 71 | GSM.printf("Enviar los valores Kp,Ki,Kd,Sp separados por comas \n"); |
luaagudeloga | 0:77a7770a1787 | 72 | sscanf( buffer, "%d, %d, %d, %f", &Kp, &Ki, &Kd, &Sp); |
luaagudeloga | 0:77a7770a1787 | 73 | GSM.printf("%d, %d, %d, %.1f\n", Kp,Ki,Kd,Sp); |
luaagudeloga | 0:77a7770a1787 | 74 | } |
luaagudeloga | 0:77a7770a1787 | 75 | |
luaagudeloga | 0:77a7770a1787 | 76 | if(Kp == 0){ |
luaagudeloga | 0:77a7770a1787 | 77 | goto DEF_CONST; |
luaagudeloga | 0:77a7770a1787 | 78 | }else{ |
luaagudeloga | 0:77a7770a1787 | 79 | goto PID; |
luaagudeloga | 0:77a7770a1787 | 80 | } |
luaagudeloga | 0:77a7770a1787 | 81 | |
luaagudeloga | 0:77a7770a1787 | 82 | PID: |
luaagudeloga | 0:77a7770a1787 | 83 | |
luaagudeloga | 0:77a7770a1787 | 84 | |
luaagudeloga | 0:77a7770a1787 | 85 | while(1){ |
luaagudeloga | 0:77a7770a1787 | 86 | yT=Vc.read()*3.3; |
luaagudeloga | 0:77a7770a1787 | 87 | ek=Sp-yT; |
luaagudeloga | 0:77a7770a1787 | 88 | |
luaagudeloga | 0:77a7770a1787 | 89 | ap = Kp*ek*0.01f; //se calcula la accion proporcinal |
luaagudeloga | 0:77a7770a1787 | 90 | ai =(Ki*ek*0.01f)+ai; //calculo de la integral del error |
luaagudeloga | 0:77a7770a1787 | 91 | ad = Kd*(ek-err_v)*0.01f; //calculo de la accion derivativa |
luaagudeloga | 0:77a7770a1787 | 92 | uk = (ap+ai+ad); |
luaagudeloga | 0:77a7770a1787 | 93 | |
luaagudeloga | 0:77a7770a1787 | 94 | // se verifica que pid sea positivo ************************************** |
luaagudeloga | 0:77a7770a1787 | 95 | if(uk<=0) |
luaagudeloga | 0:77a7770a1787 | 96 | { |
luaagudeloga | 0:77a7770a1787 | 97 | uk=0; |
luaagudeloga | 0:77a7770a1787 | 98 | } |
luaagudeloga | 0:77a7770a1787 | 99 | |
luaagudeloga | 0:77a7770a1787 | 100 | // se verifica que pid sea menor o igual la valor maximo ***************** |
luaagudeloga | 0:77a7770a1787 | 101 | if (uk > 3.3) |
luaagudeloga | 0:77a7770a1787 | 102 | { |
luaagudeloga | 0:77a7770a1787 | 103 | uk=3.3; |
luaagudeloga | 0:77a7770a1787 | 104 | } |
luaagudeloga | 0:77a7770a1787 | 105 | //Normalizacion de la salida |
luaagudeloga | 0:77a7770a1787 | 106 | // se actualizan las variables ******************************************* |
luaagudeloga | 0:77a7770a1787 | 107 | err_v = ek; |
luaagudeloga | 0:77a7770a1787 | 108 | o = uk/3.3; |
luaagudeloga | 0:77a7770a1787 | 109 | uc.write(o); |
luaagudeloga | 0:77a7770a1787 | 110 | // se envia el valor pid a puerto analogico de salida (D/A) ************** |
luaagudeloga | 0:77a7770a1787 | 111 | |
luaagudeloga | 0:77a7770a1787 | 112 | // se repite el ciclo |
luaagudeloga | 0:77a7770a1787 | 113 | wait(Ts); |
luaagudeloga | 0:77a7770a1787 | 114 | |
luaagudeloga | 0:77a7770a1787 | 115 | //Mostrando error y salida actual |
luaagudeloga | 0:77a7770a1787 | 116 | |
luaagudeloga | 0:77a7770a1787 | 117 | GSM.printf("Error= %.2f\t",ek); |
luaagudeloga | 0:77a7770a1787 | 118 | GSM.printf("Set Point= %.1f\t",Sp); |
luaagudeloga | 0:77a7770a1787 | 119 | GSM.printf("Voltaje Actual= %.1f\n",yT); |
luaagudeloga | 0:77a7770a1787 | 120 | wait(Ts); //Tiempo de muestreo |
luaagudeloga | 0:77a7770a1787 | 121 | |
luaagudeloga | 0:77a7770a1787 | 122 | } |
luaagudeloga | 0:77a7770a1787 | 123 | |
luaagudeloga | 0:77a7770a1787 | 124 | } |
luaagudeloga | 0:77a7770a1787 | 125 | |
luaagudeloga | 0:77a7770a1787 | 126 | |
luaagudeloga | 0:77a7770a1787 | 127 | |
luaagudeloga | 0:77a7770a1787 | 128 | |
luaagudeloga | 0:77a7770a1787 | 129 | |
luaagudeloga | 0:77a7770a1787 | 130 | |
luaagudeloga | 0:77a7770a1787 | 131 | |
luaagudeloga | 0:77a7770a1787 | 132 |