Implementación de un MUX para seleccionar diferentes termistores y obtener sus valores analogos y después realizar calculos para obtener la temperatura.

Dependencies:   mbed

Committer:
VicenteFerrara
Date:
Fri Mar 31 04:10:27 2017 +0000
Revision:
0:b1b7cdf4b288
hecho;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
VicenteFerrara 0:b1b7cdf4b288 1 #include "mbed.h"
VicenteFerrara 0:b1b7cdf4b288 2
VicenteFerrara 0:b1b7cdf4b288 3 #define THERMISTORNOMINAL 100
VicenteFerrara 0:b1b7cdf4b288 4 #define TEMPERATURENOMINAL 25
VicenteFerrara 0:b1b7cdf4b288 5 #define NUMSAMPLES 10
VicenteFerrara 0:b1b7cdf4b288 6 #define BCOEFFICIENT 3960
VicenteFerrara 0:b1b7cdf4b288 7 #define SERIESRESISTOR 10000
VicenteFerrara 0:b1b7cdf4b288 8
VicenteFerrara 0:b1b7cdf4b288 9 Serial pc(USBTX, USBRX);
VicenteFerrara 0:b1b7cdf4b288 10
VicenteFerrara 0:b1b7cdf4b288 11 DigitalOut control1(D3);
VicenteFerrara 0:b1b7cdf4b288 12 DigitalOut control2(D4);
VicenteFerrara 0:b1b7cdf4b288 13 DigitalOut control3(D5);
VicenteFerrara 0:b1b7cdf4b288 14 DigitalOut control4(D6);
VicenteFerrara 0:b1b7cdf4b288 15 DigitalOut control5(D7);
VicenteFerrara 0:b1b7cdf4b288 16 AnalogIn thermistor(A0);
VicenteFerrara 0:b1b7cdf4b288 17
VicenteFerrara 0:b1b7cdf4b288 18
VicenteFerrara 0:b1b7cdf4b288 19 int samples[NUMSAMPLES];
VicenteFerrara 0:b1b7cdf4b288 20
VicenteFerrara 0:b1b7cdf4b288 21 double sensorReadings[32];
VicenteFerrara 0:b1b7cdf4b288 22
VicenteFerrara 0:b1b7cdf4b288 23
VicenteFerrara 0:b1b7cdf4b288 24 void procesamientoDatos(int count){
VicenteFerrara 0:b1b7cdf4b288 25 uint8_t i;
VicenteFerrara 0:b1b7cdf4b288 26 float average;
VicenteFerrara 0:b1b7cdf4b288 27 for (; count < 8; count++){
VicenteFerrara 0:b1b7cdf4b288 28 for(i = 0; i < NUMSAMPLES; i++){
VicenteFerrara 0:b1b7cdf4b288 29 samples[i] = thermistor.read();
VicenteFerrara 0:b1b7cdf4b288 30 wait(0.1);
VicenteFerrara 0:b1b7cdf4b288 31 }
VicenteFerrara 0:b1b7cdf4b288 32 // average all the samples out
VicenteFerrara 0:b1b7cdf4b288 33 average = 0;
VicenteFerrara 0:b1b7cdf4b288 34 for (i=0; i< NUMSAMPLES; i++) {
VicenteFerrara 0:b1b7cdf4b288 35 average += samples[i];
VicenteFerrara 0:b1b7cdf4b288 36 }
VicenteFerrara 0:b1b7cdf4b288 37 average /= NUMSAMPLES;
VicenteFerrara 0:b1b7cdf4b288 38
VicenteFerrara 0:b1b7cdf4b288 39 pc.printf("Average analog reading = %f\r\n", average);
VicenteFerrara 0:b1b7cdf4b288 40
VicenteFerrara 0:b1b7cdf4b288 41 // convert the value to resistance
VicenteFerrara 0:b1b7cdf4b288 42 average = 1023 / average - 1;
VicenteFerrara 0:b1b7cdf4b288 43 average = SERIESRESISTOR / average;
VicenteFerrara 0:b1b7cdf4b288 44 pc.printf("Thermistor resistance = %f\r\n", average);
VicenteFerrara 0:b1b7cdf4b288 45
VicenteFerrara 0:b1b7cdf4b288 46 float steinhart;
VicenteFerrara 0:b1b7cdf4b288 47 steinhart = average / THERMISTORNOMINAL; // (R/Ro)
VicenteFerrara 0:b1b7cdf4b288 48 steinhart = log(steinhart); // ln(R/Ro)
VicenteFerrara 0:b1b7cdf4b288 49 steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
VicenteFerrara 0:b1b7cdf4b288 50 steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
VicenteFerrara 0:b1b7cdf4b288 51 steinhart = 1.0 / steinhart; // Invert
VicenteFerrara 0:b1b7cdf4b288 52 steinhart -= 273.15; // convert to C
VicenteFerrara 0:b1b7cdf4b288 53
VicenteFerrara 0:b1b7cdf4b288 54 pc.printf("Temperature = %f\r\n", steinhart);
VicenteFerrara 0:b1b7cdf4b288 55
VicenteFerrara 0:b1b7cdf4b288 56 sensorReadings[count] = steinhart;
VicenteFerrara 0:b1b7cdf4b288 57 wait(0.1);
VicenteFerrara 0:b1b7cdf4b288 58 }
VicenteFerrara 0:b1b7cdf4b288 59
VicenteFerrara 0:b1b7cdf4b288 60 for (count=0; count<8; count++) {
VicenteFerrara 0:b1b7cdf4b288 61 pc.printf("Sensor #%f\r", count);
VicenteFerrara 0:b1b7cdf4b288 62 pc.printf(": %f\r\n", sensorReadings[count]);
VicenteFerrara 0:b1b7cdf4b288 63 }
VicenteFerrara 0:b1b7cdf4b288 64 wait(0.1);
VicenteFerrara 0:b1b7cdf4b288 65
VicenteFerrara 0:b1b7cdf4b288 66 }
VicenteFerrara 0:b1b7cdf4b288 67
VicenteFerrara 0:b1b7cdf4b288 68
VicenteFerrara 0:b1b7cdf4b288 69
VicenteFerrara 0:b1b7cdf4b288 70
VicenteFerrara 0:b1b7cdf4b288 71 int main()
VicenteFerrara 0:b1b7cdf4b288 72 {
VicenteFerrara 0:b1b7cdf4b288 73 for(int iX = 0; iX < 8; iX++){
VicenteFerrara 0:b1b7cdf4b288 74 switch(iX){
VicenteFerrara 0:b1b7cdf4b288 75
VicenteFerrara 0:b1b7cdf4b288 76 case 0:
VicenteFerrara 0:b1b7cdf4b288 77 control1 = 0;
VicenteFerrara 0:b1b7cdf4b288 78 control2 = 0;
VicenteFerrara 0:b1b7cdf4b288 79 control3 = 0;
VicenteFerrara 0:b1b7cdf4b288 80 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 81 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 82 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 83 break;
VicenteFerrara 0:b1b7cdf4b288 84 case 1:
VicenteFerrara 0:b1b7cdf4b288 85 control1 = 1;
VicenteFerrara 0:b1b7cdf4b288 86 control2 = 0;
VicenteFerrara 0:b1b7cdf4b288 87 control3 = 0;
VicenteFerrara 0:b1b7cdf4b288 88 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 89 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 90 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 91 break;
VicenteFerrara 0:b1b7cdf4b288 92 case 2:
VicenteFerrara 0:b1b7cdf4b288 93 control1 = 0;
VicenteFerrara 0:b1b7cdf4b288 94 control2 = 1;
VicenteFerrara 0:b1b7cdf4b288 95 control3 = 0;
VicenteFerrara 0:b1b7cdf4b288 96 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 97 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 98 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 99 break;
VicenteFerrara 0:b1b7cdf4b288 100 case 3:
VicenteFerrara 0:b1b7cdf4b288 101 control1 = 1;
VicenteFerrara 0:b1b7cdf4b288 102 control2 = 1;
VicenteFerrara 0:b1b7cdf4b288 103 control3 = 0;
VicenteFerrara 0:b1b7cdf4b288 104 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 105 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 106 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 107 break;
VicenteFerrara 0:b1b7cdf4b288 108 case 4:
VicenteFerrara 0:b1b7cdf4b288 109 control1 = 0;
VicenteFerrara 0:b1b7cdf4b288 110 control2 = 0;
VicenteFerrara 0:b1b7cdf4b288 111 control3 = 1;
VicenteFerrara 0:b1b7cdf4b288 112 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 113 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 114 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 115 break;
VicenteFerrara 0:b1b7cdf4b288 116 case 5:
VicenteFerrara 0:b1b7cdf4b288 117 control1 = 1;
VicenteFerrara 0:b1b7cdf4b288 118 control2 = 0;
VicenteFerrara 0:b1b7cdf4b288 119 control3 = 1;
VicenteFerrara 0:b1b7cdf4b288 120 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 121 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 122 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 123 break;
VicenteFerrara 0:b1b7cdf4b288 124 case 6:
VicenteFerrara 0:b1b7cdf4b288 125 control1 = 0;
VicenteFerrara 0:b1b7cdf4b288 126 control2 = 1;
VicenteFerrara 0:b1b7cdf4b288 127 control3 = 1;
VicenteFerrara 0:b1b7cdf4b288 128 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 129 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 130 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 131 break;
VicenteFerrara 0:b1b7cdf4b288 132 case 7:
VicenteFerrara 0:b1b7cdf4b288 133 control1 = 1;
VicenteFerrara 0:b1b7cdf4b288 134 control2 = 1;
VicenteFerrara 0:b1b7cdf4b288 135 control3 = 1;
VicenteFerrara 0:b1b7cdf4b288 136 control4 = 0;
VicenteFerrara 0:b1b7cdf4b288 137 control5 = 0;
VicenteFerrara 0:b1b7cdf4b288 138 procesamientoDatos(iX);
VicenteFerrara 0:b1b7cdf4b288 139 break;
VicenteFerrara 0:b1b7cdf4b288 140
VicenteFerrara 0:b1b7cdf4b288 141 }
VicenteFerrara 0:b1b7cdf4b288 142 }
VicenteFerrara 0:b1b7cdf4b288 143
VicenteFerrara 0:b1b7cdf4b288 144 }