Se realiza un control PID sobre el voltaje de un condensador en un filtro RC. Se transmiten las señales de salida y set-point por medio de Bluetooth para luego ser graficadas en una aplicación de Android.

Dependencies:   QEI TextLCD mbed

Fork of PID by Nicolás Villegas Echavarría

Revision:
4:82ac4b34c3d9
Parent:
3:2e823b16a4a1
--- a/main.cpp	Sat May 13 20:36:07 2017 +0000
+++ b/main.cpp	Sat Jun 03 01:07:49 2017 +0000
@@ -23,11 +23,10 @@
 DigitalIn button3(PTC16); // Botón del encoder
 DigitalIn button4(PTC17); // Pulsador
 
-// Códigos movimiento del cursor:
 int C1=0x0F;
-int C2=0x18; // desplaza izquierda
-int C3=0x1A; // desplaza derecha
-int C4=0x0C; // quito cursor bajo
+int C2=0x18;
+int C3=0x1A;
+int C4=0x0C;
 
 int cambio = 0, diferencia = 0;
 float pid, o, ai, ad, ap, med, err, setpoint;
@@ -44,7 +43,10 @@
     GSM.format(8,Serial::None,1);
     t.start();
     
-    for (int i = 3; i < 24; ++i) {
+    
+    // Animación de bienvenida:
+    
+    for (int i = 3; i < 15; ++i) {
         lcd.cls();
         lcd.locate(0,0);
         lcd.printf("**Control PID**");
@@ -86,7 +88,7 @@
     lcd.locate(0,0);
     lcd.printf("Kp=%d", kpnum);
     
-    bool state = 1;
+    bool state = 1; // Esta variable determina si se están modificando las constantes del controlador o el Set-Point.
     
     while(true) {
 
@@ -152,7 +154,7 @@
             
 
         if (!button3) { // Cambia la posición de ingreso de parámetros
-            led3 = !led3;
+            led2 = !led2;
             switch(pos++) {
                 case 3:
                     pos = 1;
@@ -203,9 +205,9 @@
     if (t.read_ms() - t_pid > 10) {
         
         med = y.read()*999;
-        err = spnum - med;      // Se calcula el error
-        ap = kpnum*err*0.01f;   // Se calcula la acción proporcional    
-        ai += kinum*err*0.01f;  // Cálculo de la integral del error
+        err = spnum - med;              // Se calcula el error
+        ap = kpnum*err*0.01f;           // Se calcula la acción proporcional    
+        ai += kinum*err*0.01f;          // Cálculo de la integral del error
         ad = kdnum*(err - err_v)*0.01f; // Cálculo de la acción derivativa
         pid = ap + ai + ad;
            
@@ -213,8 +215,8 @@
         if (pid > 999) pid = 999;
         
         setpoint = spnum;
-        GSM.printf("#%3.0f%3.0f&", med, setpoint);
-        
+        GSM.printf("#%3.0f%3.0f&", med, setpoint);   // Se envía una cadena de caracteres por el puerto serial. Se agregan identificadores #...& que denotan el comienzo y la terminación de la misma.
+                                                     // Esto se hace con el fin de evitar errores en la transmisión. Estos identificadores se usan en la aplicación de AppInventor. 
         lcd.locate(3,0);  lcd.printf("%3.0f ", med);
         lcd.locate(3,1);  lcd.printf("%3d ", spnum);
         lcd.locate(11,0); lcd.printf("%3.0f ", err);
@@ -228,7 +230,7 @@
     }
     else {
         
-        diferencia=(encoder.getPulses() - cambio)*6;
+        diferencia=(encoder.getPulses() - cambio)*6;  // Es posible cambiar el Set-Point cuando el controlador ya está funcionando. 
         cambio=encoder.getPulses();
         
         if (diferencia != 0) {
@@ -239,7 +241,7 @@
             
     }
     
-    if (!button4) {
+    if (!button4) { // Si se presiona el pulsador se vuelve al menú inicial para configurar de nuevo el controlador.
         u.write(0);
         med = 0;
         err = 0;