gavin beardall
/
humidity1
main.cpp@2:5628e75c533e, 2011-10-17 (annotated)
- Committer:
- gbeardall
- Date:
- Mon Oct 17 10:41:44 2011 +0000
- Revision:
- 2:5628e75c533e
- Parent:
- 1:bdb889fd3bef
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gbeardall | 1:bdb889fd3bef | 1 | /* |
gbeardall | 1:bdb889fd3bef | 2 | * humidity1 |
gbeardall | 1:bdb889fd3bef | 3 | * |
gbeardall | 1:bdb889fd3bef | 4 | */ |
gbeardall | 1:bdb889fd3bef | 5 | |
gbeardall | 2:5628e75c533e | 6 | /* |
gbeardall | 2:5628e75c533e | 7 | +5 -------- |
gbeardall | 2:5628e75c533e | 8 | | |
gbeardall | 2:5628e75c533e | 9 | | |
gbeardall | 2:5628e75c533e | 10 | +-+ |
gbeardall | 2:5628e75c533e | 11 | | | |\ |
gbeardall | 2:5628e75c533e | 12 | | |->----|+\ |
gbeardall | 2:5628e75c533e | 13 | | | | \--+----+------ |
gbeardall | 2:5628e75c533e | 14 | +-+ +- |-/ | | |
gbeardall | 2:5628e75c533e | 15 | | | |/ | +-+ |
gbeardall | 2:5628e75c533e | 16 | | +--------+ | | |
gbeardall | 2:5628e75c533e | 17 | 0v ------ +_+ |
gbeardall | 2:5628e75c533e | 18 | |-------- |
gbeardall | 2:5628e75c533e | 19 | +-+ |
gbeardall | 2:5628e75c533e | 20 | | | |
gbeardall | 2:5628e75c533e | 21 | +-+ |
gbeardall | 2:5628e75c533e | 22 | | |
gbeardall | 2:5628e75c533e | 23 | |
gbeardall | 2:5628e75c533e | 24 | |
gbeardall | 2:5628e75c533e | 25 | |
gbeardall | 2:5628e75c533e | 26 | */ |
gbeardall | 2:5628e75c533e | 27 | |
gbeardall | 0:dba2bcefd284 | 28 | #include "mbed.h" |
gbeardall | 0:dba2bcefd284 | 29 | |
gbeardall | 0:dba2bcefd284 | 30 | DigitalOut myled(LED1); |
gbeardall | 0:dba2bcefd284 | 31 | |
gbeardall | 0:dba2bcefd284 | 32 | AnalogIn hum(p20); |
gbeardall | 0:dba2bcefd284 | 33 | AnalogIn ref(p19); |
gbeardall | 2:5628e75c533e | 34 | AnalogIn tst(p18); |
gbeardall | 2:5628e75c533e | 35 | |
gbeardall | 2:5628e75c533e | 36 | //Timer timer; |
gbeardall | 2:5628e75c533e | 37 | |
gbeardall | 0:dba2bcefd284 | 38 | |
gbeardall | 1:bdb889fd3bef | 39 | int main() { |
gbeardall | 1:bdb889fd3bef | 40 | float av0 = 0.0; |
gbeardall | 2:5628e75c533e | 41 | float alpha = 0.2; |
gbeardall | 2:5628e75c533e | 42 | |
gbeardall | 2:5628e75c533e | 43 | printf("\rhumidity1: %u %u\n\r", sizeof(unsigned long long), sizeof(uint64_t) ); |
gbeardall | 2:5628e75c533e | 44 | |
gbeardall | 2:5628e75c533e | 45 | // decimation and downsamplig to reduce noise and increment resolution |
gbeardall | 0:dba2bcefd284 | 46 | |
gbeardall | 2:5628e75c533e | 47 | while(1) { |
gbeardall | 2:5628e75c533e | 48 | |
gbeardall | 2:5628e75c533e | 49 | // 32 - ? 8081 |
gbeardall | 2:5628e75c533e | 50 | // 64 - 8 8082 |
gbeardall | 2:5628e75c533e | 51 | // 128 - 6 807d |
gbeardall | 2:5628e75c533e | 52 | // 256 - 4 8071 |
gbeardall | 2:5628e75c533e | 53 | // 512 - 2 805e |
gbeardall | 2:5628e75c533e | 54 | // 1024 - .3 803f |
gbeardall | 2:5628e75c533e | 55 | // 2048 - ? 8014 |
gbeardall | 2:5628e75c533e | 56 | // 4096 - ? 7fe8 |
gbeardall | 2:5628e75c533e | 57 | // 8192 - ? 7fca |
gbeardall | 2:5628e75c533e | 58 | // 16384 - ? 7fba |
gbeardall | 2:5628e75c533e | 59 | // 32768 - ? 7fb2 |
gbeardall | 2:5628e75c533e | 60 | // 65536 - ? 7faf |
gbeardall | 2:5628e75c533e | 61 | // 131072 - ? 7fad |
gbeardall | 2:5628e75c533e | 62 | |
gbeardall | 2:5628e75c533e | 63 | // Sample values and their differences |
gbeardall | 2:5628e75c533e | 64 | // 7FB7 7FC7 7FD7 7FE7 7FF7 8008 8018 8028 |
gbeardall | 2:5628e75c533e | 65 | // 10 10 10 10 11 10 10 |
gbeardall | 2:5628e75c533e | 66 | |
gbeardall | 2:5628e75c533e | 67 | // Max conversion rate: 14KHz (~70us) |
gbeardall | 2:5628e75c533e | 68 | // ToDo |
gbeardall | 2:5628e75c533e | 69 | // many samples to create new data set |
gbeardall | 2:5628e75c533e | 70 | // different sampling frequencies, see if effect same |
gbeardall | 2:5628e75c533e | 71 | // measure raw sampling freq |
gbeardall | 2:5628e75c533e | 72 | // fourier analysis |
gbeardall | 2:5628e75c533e | 73 | // freq distribution |
gbeardall | 2:5628e75c533e | 74 | // overall and diff sized moving avg to see if effect is due to software.overflow or noise in data |
gbeardall | 2:5628e75c533e | 75 | // what does graph do at even larger sample sizes |
gbeardall | 2:5628e75c533e | 76 | // is there a temp drift? |
gbeardall | 2:5628e75c533e | 77 | |
gbeardall | 2:5628e75c533e | 78 | |
gbeardall | 2:5628e75c533e | 79 | //unsigned long long t = 0; // uint64_t |
gbeardall | 2:5628e75c533e | 80 | uint64_t t = 0; |
gbeardall | 2:5628e75c533e | 81 | uint64_t n = 1000; // 128/4096 |
gbeardall | 2:5628e75c533e | 82 | //timer.start(); |
gbeardall | 2:5628e75c533e | 83 | //float b1 = timer.read(); |
gbeardall | 2:5628e75c533e | 84 | //int begin = timer.read_ms(); |
gbeardall | 2:5628e75c533e | 85 | for(int i=0; i<n; ++i) { |
gbeardall | 2:5628e75c533e | 86 | //uint16_t v = tst.read_u16(); |
gbeardall | 2:5628e75c533e | 87 | //uint64_t v = tst.read_u16(); |
gbeardall | 2:5628e75c533e | 88 | uint64_t v = ref.read_u16(); |
gbeardall | 2:5628e75c533e | 89 | //v >>= 4; // back to 12bits |
gbeardall | 2:5628e75c533e | 90 | |
gbeardall | 2:5628e75c533e | 91 | t += v; |
gbeardall | 2:5628e75c533e | 92 | #if 0 |
gbeardall | 2:5628e75c533e | 93 | switch((v>>4)&0x01) { |
gbeardall | 2:5628e75c533e | 94 | case 0: wait_us(7); break; |
gbeardall | 2:5628e75c533e | 95 | case 1: wait_us(17); break; |
gbeardall | 2:5628e75c533e | 96 | default: printf("?"); |
gbeardall | 2:5628e75c533e | 97 | } // switch |
gbeardall | 2:5628e75c533e | 98 | #endif |
gbeardall | 2:5628e75c533e | 99 | } // for |
gbeardall | 2:5628e75c533e | 100 | //int end = timer.read_ms(); |
gbeardall | 2:5628e75c533e | 101 | //float e1 = timer.read(); |
gbeardall | 2:5628e75c533e | 102 | //printf("timer: %d %f %f\n\r", end-begin, e1-b1, (float)n*1000.0/(float)(end-begin) ); |
gbeardall | 2:5628e75c533e | 103 | |
gbeardall | 2:5628e75c533e | 104 | uint64_t x = t / n; |
gbeardall | 2:5628e75c533e | 105 | //t = t/(float)n; |
gbeardall | 2:5628e75c533e | 106 | |
gbeardall | 2:5628e75c533e | 107 | printf("%llu\n\r", x); |
gbeardall | 2:5628e75c533e | 108 | //printf("%.0f\n\r", t); |
gbeardall | 2:5628e75c533e | 109 | |
gbeardall | 2:5628e75c533e | 110 | //wait(4); // <<<<<<<< |
gbeardall | 2:5628e75c533e | 111 | |
gbeardall | 2:5628e75c533e | 112 | //wait_us(31); |
gbeardall | 2:5628e75c533e | 113 | } |
gbeardall | 1:bdb889fd3bef | 114 | |
gbeardall | 0:dba2bcefd284 | 115 | while(1) { |
gbeardall | 0:dba2bcefd284 | 116 | |
gbeardall | 1:bdb889fd3bef | 117 | // read many times to remove noise |
gbeardall | 1:bdb889fd3bef | 118 | int n = 1000; |
gbeardall | 1:bdb889fd3bef | 119 | float h = 0.0; |
gbeardall | 1:bdb889fd3bef | 120 | float r = 0.0; |
gbeardall | 1:bdb889fd3bef | 121 | float v = 0.0; |
gbeardall | 1:bdb889fd3bef | 122 | for(int i=0; i<n; ++i) { |
gbeardall | 1:bdb889fd3bef | 123 | float h1, r1; |
gbeardall | 1:bdb889fd3bef | 124 | h1 = hum.read(); |
gbeardall | 1:bdb889fd3bef | 125 | r1 = ref.read(); |
gbeardall | 1:bdb889fd3bef | 126 | h += h1; |
gbeardall | 1:bdb889fd3bef | 127 | r += r1; |
gbeardall | 2:5628e75c533e | 128 | //v += 5.0*h1/r1; // convert to 5v reference |
gbeardall | 2:5628e75c533e | 129 | wait_us(100); |
gbeardall | 1:bdb889fd3bef | 130 | } |
gbeardall | 1:bdb889fd3bef | 131 | h /= n; |
gbeardall | 1:bdb889fd3bef | 132 | r /= n; |
gbeardall | 2:5628e75c533e | 133 | //v /= n; |
gbeardall | 0:dba2bcefd284 | 134 | |
gbeardall | 2:5628e75c533e | 135 | v = 5.0*h/r; // convert to 5v reference |
gbeardall | 2:5628e75c533e | 136 | |
gbeardall | 2:5628e75c533e | 137 | |
gbeardall | 2:5628e75c533e | 138 | // Exponential Moving Average |
gbeardall | 1:bdb889fd3bef | 139 | float av = av0 + alpha*(v-av0); |
gbeardall | 1:bdb889fd3bef | 140 | av0 = av; |
gbeardall | 0:dba2bcefd284 | 141 | |
gbeardall | 1:bdb889fd3bef | 142 | // scale to humidity% |
gbeardall | 1:bdb889fd3bef | 143 | float m = (av-0.8)/3.0*100.0; |
gbeardall | 0:dba2bcefd284 | 144 | |
gbeardall | 2:5628e75c533e | 145 | printf("h=%1.4f r=%1.4f %1.4fv %1.4fv %3.2f%%\n\r", h, r, v, av, m ); |
gbeardall | 0:dba2bcefd284 | 146 | |
gbeardall | 0:dba2bcefd284 | 147 | myled = 1; |
gbeardall | 0:dba2bcefd284 | 148 | wait(0.2); |
gbeardall | 0:dba2bcefd284 | 149 | myled = 0; |
gbeardall | 0:dba2bcefd284 | 150 | wait(0.8); |
gbeardall | 1:bdb889fd3bef | 151 | |
gbeardall | 1:bdb889fd3bef | 152 | } // while |
gbeardall | 1:bdb889fd3bef | 153 | |
gbeardall | 1:bdb889fd3bef | 154 | } // main |
gbeardall | 1:bdb889fd3bef | 155 |