
Program to measure temperature array and send results to PC via serial.
Dependencies: NTCThermistor mbed
main.cpp@0:8a5d6b639e51, 2017-02-06 (annotated)
- Committer:
- markoheyns
- Date:
- Mon Feb 06 22:22:26 2017 +0000
- Revision:
- 0:8a5d6b639e51
Conical Fermenter Temp Array Logger
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
markoheyns | 0:8a5d6b639e51 | 1 | #include "mbed.h" |
markoheyns | 0:8a5d6b639e51 | 2 | |
markoheyns | 0:8a5d6b639e51 | 3 | #define THERMISTORNOMINAL 10000 |
markoheyns | 0:8a5d6b639e51 | 4 | #define TEMPERATURENOMINAL 25 |
markoheyns | 0:8a5d6b639e51 | 5 | #define BCOEFFICIENT 3435 |
markoheyns | 0:8a5d6b639e51 | 6 | //#define SERIESRESISTOR 10000 |
markoheyns | 0:8a5d6b639e51 | 7 | #define SERIESRESISTOR 10000 |
markoheyns | 0:8a5d6b639e51 | 8 | #define TEMPRATE 0.2 |
markoheyns | 0:8a5d6b639e51 | 9 | #define NUMSAMPLES 100 |
markoheyns | 0:8a5d6b639e51 | 10 | |
markoheyns | 0:8a5d6b639e51 | 11 | AnalogIn thermistor1(A0); |
markoheyns | 0:8a5d6b639e51 | 12 | AnalogIn thermistor2(A1); |
markoheyns | 0:8a5d6b639e51 | 13 | AnalogIn thermistor3(A2); |
markoheyns | 0:8a5d6b639e51 | 14 | AnalogIn thermistor4(A3); |
markoheyns | 0:8a5d6b639e51 | 15 | AnalogIn thermistor5(A4); |
markoheyns | 0:8a5d6b639e51 | 16 | AnalogIn thermistor6(A5); |
markoheyns | 0:8a5d6b639e51 | 17 | AnalogIn thermistor7(D11); |
markoheyns | 0:8a5d6b639e51 | 18 | Serial pc(SERIAL_TX, SERIAL_RX); |
markoheyns | 0:8a5d6b639e51 | 19 | DigitalOut led(LED1); |
markoheyns | 0:8a5d6b639e51 | 20 | float tempArray[7]; |
markoheyns | 0:8a5d6b639e51 | 21 | unsigned int samples[NUMSAMPLES]; |
markoheyns | 0:8a5d6b639e51 | 22 | |
markoheyns | 0:8a5d6b639e51 | 23 | void readProbeX(int probeNum) { |
markoheyns | 0:8a5d6b639e51 | 24 | float resistance = 0; |
markoheyns | 0:8a5d6b639e51 | 25 | float average; |
markoheyns | 0:8a5d6b639e51 | 26 | int i; |
markoheyns | 0:8a5d6b639e51 | 27 | for (i=0; i< NUMSAMPLES; i++) { |
markoheyns | 0:8a5d6b639e51 | 28 | switch (probeNum){ |
markoheyns | 0:8a5d6b639e51 | 29 | case 0: |
markoheyns | 0:8a5d6b639e51 | 30 | samples[i] = thermistor1.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 31 | break; |
markoheyns | 0:8a5d6b639e51 | 32 | case 1: |
markoheyns | 0:8a5d6b639e51 | 33 | samples[i] = thermistor2.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 34 | break; |
markoheyns | 0:8a5d6b639e51 | 35 | case 2: |
markoheyns | 0:8a5d6b639e51 | 36 | samples[i] = thermistor3.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 37 | break; |
markoheyns | 0:8a5d6b639e51 | 38 | case 3: |
markoheyns | 0:8a5d6b639e51 | 39 | samples[i] = thermistor4.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 40 | break; |
markoheyns | 0:8a5d6b639e51 | 41 | case 4: |
markoheyns | 0:8a5d6b639e51 | 42 | samples[i] = thermistor5.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 43 | break; |
markoheyns | 0:8a5d6b639e51 | 44 | case 5: |
markoheyns | 0:8a5d6b639e51 | 45 | samples[i] = thermistor6.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 46 | break; |
markoheyns | 0:8a5d6b639e51 | 47 | case 6: |
markoheyns | 0:8a5d6b639e51 | 48 | resistance = thermistor7.read_u16(); |
markoheyns | 0:8a5d6b639e51 | 49 | break; |
markoheyns | 0:8a5d6b639e51 | 50 | default: |
markoheyns | 0:8a5d6b639e51 | 51 | break; |
markoheyns | 0:8a5d6b639e51 | 52 | |
markoheyns | 0:8a5d6b639e51 | 53 | } |
markoheyns | 0:8a5d6b639e51 | 54 | wait(0.002); |
markoheyns | 0:8a5d6b639e51 | 55 | } |
markoheyns | 0:8a5d6b639e51 | 56 | // average all the samples out |
markoheyns | 0:8a5d6b639e51 | 57 | average = 0; |
markoheyns | 0:8a5d6b639e51 | 58 | for (i=0; i< NUMSAMPLES; i++) { |
markoheyns | 0:8a5d6b639e51 | 59 | average += samples[i]; |
markoheyns | 0:8a5d6b639e51 | 60 | } |
markoheyns | 0:8a5d6b639e51 | 61 | average /= NUMSAMPLES; |
markoheyns | 0:8a5d6b639e51 | 62 | resistance = average; |
markoheyns | 0:8a5d6b639e51 | 63 | resistance = (float) SERIESRESISTOR / ((65536 / resistance) - 1.0); |
markoheyns | 0:8a5d6b639e51 | 64 | float steinhart; |
markoheyns | 0:8a5d6b639e51 | 65 | steinhart = (log(resistance / THERMISTORNOMINAL))/BCOEFFICIENT + (1.0 / (TEMPERATURENOMINAL + 273.15)); |
markoheyns | 0:8a5d6b639e51 | 66 | steinhart = (1.0 / steinhart) - 273.15; |
markoheyns | 0:8a5d6b639e51 | 67 | tempArray[probeNum] = steinhart; |
markoheyns | 0:8a5d6b639e51 | 68 | //printf("read temp %d = %.1f C\n",probeNum, tempArray[probeNum]); |
markoheyns | 0:8a5d6b639e51 | 69 | //wait(0.5); |
markoheyns | 0:8a5d6b639e51 | 70 | } |
markoheyns | 0:8a5d6b639e51 | 71 | void init(){ |
markoheyns | 0:8a5d6b639e51 | 72 | |
markoheyns | 0:8a5d6b639e51 | 73 | } |
markoheyns | 0:8a5d6b639e51 | 74 | int main() { |
markoheyns | 0:8a5d6b639e51 | 75 | //printf("\nFermenter Temp Array\n"); |
markoheyns | 0:8a5d6b639e51 | 76 | //pc.printf("Hello World !\n"); |
markoheyns | 0:8a5d6b639e51 | 77 | while(1) { |
markoheyns | 0:8a5d6b639e51 | 78 | int x; |
markoheyns | 0:8a5d6b639e51 | 79 | for (x = 0; x < 7; x++){ |
markoheyns | 0:8a5d6b639e51 | 80 | readProbeX(x); |
markoheyns | 0:8a5d6b639e51 | 81 | } |
markoheyns | 0:8a5d6b639e51 | 82 | for (x = 6; x >= 0; x--){ |
markoheyns | 0:8a5d6b639e51 | 83 | printf("Temp Probe %d = %.1f C\n",x, tempArray[x]); |
markoheyns | 0:8a5d6b639e51 | 84 | } |
markoheyns | 0:8a5d6b639e51 | 85 | //printf("%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f\n", tempArray[0], tempArray[1], tempArray[2], tempArray[3], tempArray[4], tempArray[5], tempArray[6]); |
markoheyns | 0:8a5d6b639e51 | 86 | pc.printf("\n"); |
markoheyns | 0:8a5d6b639e51 | 87 | wait(5.0); |
markoheyns | 0:8a5d6b639e51 | 88 | |
markoheyns | 0:8a5d6b639e51 | 89 | } |
markoheyns | 0:8a5d6b639e51 | 90 | |
markoheyns | 0:8a5d6b639e51 | 91 | } |
markoheyns | 0:8a5d6b639e51 | 92 |