Implementación de un MUX para seleccionar diferentes termistores y obtener sus valores analogos y después realizar calculos para obtener la temperatura.
main.cpp@0:b1b7cdf4b288, 2017-03-31 (annotated)
- Committer:
- VicenteFerrara
- Date:
- Fri Mar 31 04:10:27 2017 +0000
- Revision:
- 0:b1b7cdf4b288
hecho;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |