Pio IX Jalle Ventiades 6b 2019

Dependencies:   mbed tsi_sensor MMA8451Q DHT11

Committer:
Jalle
Date:
Sun Jun 23 13:42:53 2019 +0000
Revision:
0:804018389320
Pio IX Jalle Ventiades 6b 2019

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jalle 0:804018389320 1 #include "mbed.h"
Jalle 0:804018389320 2 #include "tsi_sensor.h"
Jalle 0:804018389320 3 #include "MMA8451Q.h"
Jalle 0:804018389320 4 #include "math.h"
Jalle 0:804018389320 5 #include "Dht11.h"
Jalle 0:804018389320 6
Jalle 0:804018389320 7
Jalle 0:804018389320 8
Jalle 0:804018389320 9
Jalle 0:804018389320 10 DigitalIn enta(PTD5,PullUp);
Jalle 0:804018389320 11 Dht11 sensor(PTD7);
Jalle 0:804018389320 12 AnalogIn ain(A0);
Jalle 0:804018389320 13 AnalogIn cooler(PTB3);
Jalle 0:804018389320 14
Jalle 0:804018389320 15 unsigned int e=0,cuenta=2,hay=0,estado=0,paso=0,caso=0,tiempo=9,d=0,c=0,acta=0,tempp=0,entad=0,cuentar=0,rpm=0,f=0,maestro=0,mostramos=0,mostrar=0;
Jalle 0:804018389320 16
Jalle 0:804018389320 17 double t;
Jalle 0:804018389320 18 double m;
Jalle 0:804018389320 19
Jalle 0:804018389320 20 Ticker rapido;
Jalle 0:804018389320 21 Ticker lento;
Jalle 0:804018389320 22 void funcion();
Jalle 0:804018389320 23 void tiemporpm();
Jalle 0:804018389320 24 PwmOut fan(A1);
Jalle 0:804018389320 25
Jalle 0:804018389320 26
Jalle 0:804018389320 27
Jalle 0:804018389320 28
Jalle 0:804018389320 29 int main(void)
Jalle 0:804018389320 30 {
Jalle 0:804018389320 31
Jalle 0:804018389320 32 rapido.attach(&funcion, 0.01); //Ticker para el antirebote
Jalle 0:804018389320 33 lento.attach(&tiemporpm, 2); //Ticker para el calculo de las rpm y otras cosas
Jalle 0:804018389320 34
Jalle 0:804018389320 35
Jalle 0:804018389320 36
Jalle 0:804018389320 37
Jalle 0:804018389320 38 while (true) {
Jalle 0:804018389320 39
Jalle 0:804018389320 40 if(mostrar) { //Cada 2 segundos se activa esto
Jalle 0:804018389320 41 printf("RPM = %d \r\n",rpm); //Mostramos las rpm
Jalle 0:804018389320 42 printf("temperatura: %d \r\n",f); //Mostramos la temperatura actual
Jalle 0:804018389320 43 mostrar = 0; //Volvemos 0 la variable para no entrar hasta los siguientes 2 segundos
Jalle 0:804018389320 44 t=ain; //Guardamos el valor del potenciometro
Jalle 0:804018389320 45 printf("%f",t); //Mostramos el potenciometro
Jalle 0:804018389320 46 }
Jalle 0:804018389320 47
Jalle 0:804018389320 48
Jalle 0:804018389320 49
Jalle 0:804018389320 50
Jalle 0:804018389320 51
Jalle 0:804018389320 52 switch (caso) { //Maquina de estados de control general
Jalle 0:804018389320 53 default:
Jalle 0:804018389320 54 case 0:
Jalle 0:804018389320 55 if(entad==1) { //Si el modo seleccionado es el lazo cerrado, entramos aca
Jalle 0:804018389320 56 fan=(0.00155*((f - 20)/50.0)) + 0.00053; //Definimos el pwm segun la temperatura
Jalle 0:804018389320 57 if(rpm==0) //Si el cooler esta frenado, vamos al estado 1
Jalle 0:804018389320 58 caso=1;
Jalle 0:804018389320 59
Jalle 0:804018389320 60
Jalle 0:804018389320 61
Jalle 0:804018389320 62
Jalle 0:804018389320 63
Jalle 0:804018389320 64
Jalle 0:804018389320 65 } else {
Jalle 0:804018389320 66
Jalle 0:804018389320 67 fan=(0.00155*t)+0.00053; //Si estamos en el modo de lazo abierto, definimos el pwm segun el potenciometro
Jalle 0:804018389320 68 if(rpm==0) //Si el cooler se frena, vamos al estado 1
Jalle 0:804018389320 69 caso=1;
Jalle 0:804018389320 70
Jalle 0:804018389320 71
Jalle 0:804018389320 72
Jalle 0:804018389320 73 }
Jalle 0:804018389320 74 break;
Jalle 0:804018389320 75
Jalle 0:804018389320 76
Jalle 0:804018389320 77
Jalle 0:804018389320 78 case 1:
Jalle 0:804018389320 79 fan=0.002; //Definimos una velocidad alta para asegurarnos de que el cooler gire
Jalle 0:804018389320 80
Jalle 0:804018389320 81 if(e==1) {
Jalle 0:804018389320 82
Jalle 0:804018389320 83 caso=0; //Luego de 2 segundos volvemos al estado 0
Jalle 0:804018389320 84 e=0;
Jalle 0:804018389320 85
Jalle 0:804018389320 86 }
Jalle 0:804018389320 87 break;
Jalle 0:804018389320 88 }
Jalle 0:804018389320 89
Jalle 0:804018389320 90 m=cooler;
Jalle 0:804018389320 91 switch (estado) { //Maquina para detectar los pulsos del sensor hall
Jalle 0:804018389320 92
Jalle 0:804018389320 93 case 0:
Jalle 0:804018389320 94 if(m>0.9) { //Si se vuelve 1, aumentamos la variable cuentar y vamos al estado 1
Jalle 0:804018389320 95 cuentar++;
Jalle 0:804018389320 96 estado=1;
Jalle 0:804018389320 97
Jalle 0:804018389320 98 }
Jalle 0:804018389320 99 break;
Jalle 0:804018389320 100 case 1:
Jalle 0:804018389320 101 if(m<0.1) //En el momento que se vuelve 0 volvemos al estado 0
Jalle 0:804018389320 102 estado=0;
Jalle 0:804018389320 103 break;
Jalle 0:804018389320 104
Jalle 0:804018389320 105
Jalle 0:804018389320 106 }
Jalle 0:804018389320 107 switch (tempp) { //Maquina de estados para el antirebote y la seleccion de modo
Jalle 0:804018389320 108 case 0:
Jalle 0:804018389320 109 if(enta==0) { //Cuando se detecta que se presiona el pulsador avanzamos al siguiente estado y empezamos a contar desde 0
Jalle 0:804018389320 110
Jalle 0:804018389320 111 tempp=1;
Jalle 0:804018389320 112 cuenta=0;
Jalle 0:804018389320 113 }
Jalle 0:804018389320 114 break;
Jalle 0:804018389320 115 case 1:
Jalle 0:804018389320 116 if(cuenta>=2) { //Unva vez que pasaron los 20ms de seguridad podemos considerar que el pulsador se presiono
Jalle 0:804018389320 117 tempp=2;
Jalle 0:804018389320 118 if(entad==0) //Ahora que verificamos que el boton se presiona solo 1 vez, cambiamos el modo actual
Jalle 0:804018389320 119 entad=1;
Jalle 0:804018389320 120 else
Jalle 0:804018389320 121 entad=0;
Jalle 0:804018389320 122
Jalle 0:804018389320 123
Jalle 0:804018389320 124 }
Jalle 0:804018389320 125 break;
Jalle 0:804018389320 126 case 2:
Jalle 0:804018389320 127 if(enta==1) { //Ahora repetimos el proceso al soltar el pulsador
Jalle 0:804018389320 128 tempp=3;
Jalle 0:804018389320 129 cuenta=0;
Jalle 0:804018389320 130 }
Jalle 0:804018389320 131 break;
Jalle 0:804018389320 132 case 3:
Jalle 0:804018389320 133 if(cuenta>=2) {
Jalle 0:804018389320 134 tempp=0;
Jalle 0:804018389320 135
Jalle 0:804018389320 136
Jalle 0:804018389320 137 }
Jalle 0:804018389320 138 break;
Jalle 0:804018389320 139 }
Jalle 0:804018389320 140
Jalle 0:804018389320 141
Jalle 0:804018389320 142 }
Jalle 0:804018389320 143
Jalle 0:804018389320 144
Jalle 0:804018389320 145
Jalle 0:804018389320 146
Jalle 0:804018389320 147 }
Jalle 0:804018389320 148
Jalle 0:804018389320 149
Jalle 0:804018389320 150
Jalle 0:804018389320 151
Jalle 0:804018389320 152 void funcion()
Jalle 0:804018389320 153 {
Jalle 0:804018389320 154
Jalle 0:804018389320 155 cuenta++; //Cada 10ms se aumenta esta variable para el antirebote
Jalle 0:804018389320 156
Jalle 0:804018389320 157
Jalle 0:804018389320 158 }
Jalle 0:804018389320 159 void tiemporpm()
Jalle 0:804018389320 160 {
Jalle 0:804018389320 161
Jalle 0:804018389320 162 e=1;
Jalle 0:804018389320 163 sensor.read();
Jalle 0:804018389320 164 f=sensor.getCelsius(); //Leemos el sensor
Jalle 0:804018389320 165 rpm=cuentar*30; //Multiplicamos la cantidad de vueltas que medimos en 2segundos por 20, asi obtenemos la cantidad para 1 minuto
Jalle 0:804018389320 166 cuentar=0; //Luego volvemos esta variable a 0 para poder contar las revoluciones otra vez
Jalle 0:804018389320 167 mostrar=1;
Jalle 0:804018389320 168 }
Jalle 0:804018389320 169