AirQualityClick on A0 on Nucleo-F411RE
Air.cpp@0:964a928b323e, 2015-04-14 (annotated)
- Committer:
- Guillaume31
- Date:
- Tue Apr 14 11:36:17 2015 +0000
- Revision:
- 0:964a928b323e
AirQualityClick on A0 on Nucleo-F411RE
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Guillaume31 | 0:964a928b323e | 1 | #include "mbed.h" |
Guillaume31 | 0:964a928b323e | 2 | #include "Air.h" |
Guillaume31 | 0:964a928b323e | 3 | |
Guillaume31 | 0:964a928b323e | 4 | Air::Air (PinName pin): _pin (pin) { |
Guillaume31 | 0:964a928b323e | 5 | } |
Guillaume31 | 0:964a928b323e | 6 | |
Guillaume31 | 0:964a928b323e | 7 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 8 | /*! |
Guillaume31 | 0:964a928b323e | 9 | @brief Get the correction factor to correct for temperature and humidity |
Guillaume31 | 0:964a928b323e | 10 | |
Guillaume31 | 0:964a928b323e | 11 | @param[in] t The ambient air temperature |
Guillaume31 | 0:964a928b323e | 12 | @param[in] h The relative humidity |
Guillaume31 | 0:964a928b323e | 13 | |
Guillaume31 | 0:964a928b323e | 14 | @return The calculated correction factor |
Guillaume31 | 0:964a928b323e | 15 | */ |
Guillaume31 | 0:964a928b323e | 16 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 17 | float Air::getCorrectionFactor(float t, float h) { |
Guillaume31 | 0:964a928b323e | 18 | return CORA * (double)t * t - (double)CORB * t + CORC - ((double)h-33.)*CORD; |
Guillaume31 | 0:964a928b323e | 19 | } |
Guillaume31 | 0:964a928b323e | 20 | |
Guillaume31 | 0:964a928b323e | 21 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 22 | /*! |
Guillaume31 | 0:964a928b323e | 23 | @brief Get the correction factor to correct for temperature and humidity |
Guillaume31 | 0:964a928b323e | 24 | a |
Guillaume31 | 0:964a928b323e | 25 | @return The sensor resistance in kOhm |
Guillaume31 | 0:964a928b323e | 26 | */ |
Guillaume31 | 0:964a928b323e | 27 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 28 | float Air::getResistance() { |
Guillaume31 | 0:964a928b323e | 29 | double val = _pin.read(); |
Guillaume31 | 0:964a928b323e | 30 | return ((1023./(double)val) * 5. - 1.)*RLOAD; |
Guillaume31 | 0:964a928b323e | 31 | } |
Guillaume31 | 0:964a928b323e | 32 | |
Guillaume31 | 0:964a928b323e | 33 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 34 | /*! |
Guillaume31 | 0:964a928b323e | 35 | @brief Get the resistance of the sensor, ie. the measurement value corrected |
Guillaume31 | 0:964a928b323e | 36 | for temp/hum |
Guillaume31 | 0:964a928b323e | 37 | |
Guillaume31 | 0:964a928b323e | 38 | @param[in] t The ambient air temperature |
Guillaume31 | 0:964a928b323e | 39 | @param[in] h The relative humidity |
Guillaume31 | 0:964a928b323e | 40 | |
Guillaume31 | 0:964a928b323e | 41 | @return The corrected sensor resistance kOhm |
Guillaume31 | 0:964a928b323e | 42 | */ |
Guillaume31 | 0:964a928b323e | 43 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 44 | float Air::getCorrectedResistance(float t, float h) { |
Guillaume31 | 0:964a928b323e | 45 | return getResistance()/getCorrectionFactor(t, h); |
Guillaume31 | 0:964a928b323e | 46 | } |
Guillaume31 | 0:964a928b323e | 47 | |
Guillaume31 | 0:964a928b323e | 48 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 49 | /*! |
Guillaume31 | 0:964a928b323e | 50 | @brief Get the ppm of CO2 sensed (assuming only CO2 in the air) |
Guillaume31 | 0:964a928b323e | 51 | |
Guillaume31 | 0:964a928b323e | 52 | @return The ppm of CO2 in the air |
Guillaume31 | 0:964a928b323e | 53 | */ |
Guillaume31 | 0:964a928b323e | 54 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 55 | float Air::getPPM() { |
Guillaume31 | 0:964a928b323e | 56 | return PARA * pow(((double)getResistance()/RZERO), -PARB); |
Guillaume31 | 0:964a928b323e | 57 | } |
Guillaume31 | 0:964a928b323e | 58 | |
Guillaume31 | 0:964a928b323e | 59 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 60 | /*! |
Guillaume31 | 0:964a928b323e | 61 | @brief Get the ppm of CO2 sensed (assuming only CO2 in the air), corrected |
Guillaume31 | 0:964a928b323e | 62 | for temp/hum |
Guillaume31 | 0:964a928b323e | 63 | |
Guillaume31 | 0:964a928b323e | 64 | @param[in] t The ambient air temperature |
Guillaume31 | 0:964a928b323e | 65 | @param[in] h The relative humidity |
Guillaume31 | 0:964a928b323e | 66 | |
Guillaume31 | 0:964a928b323e | 67 | @return The ppm of CO2 in the air |
Guillaume31 | 0:964a928b323e | 68 | */ |
Guillaume31 | 0:964a928b323e | 69 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 70 | float Air::getCorrectedPPM(float t, float h) { |
Guillaume31 | 0:964a928b323e | 71 | return PARA * pow(((double)getCorrectedResistance(t, h)/RZERO), -PARB); |
Guillaume31 | 0:964a928b323e | 72 | } |
Guillaume31 | 0:964a928b323e | 73 | |
Guillaume31 | 0:964a928b323e | 74 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 75 | /*! |
Guillaume31 | 0:964a928b323e | 76 | @brief Get the resistance RZero of the sensor for calibration purposes |
Guillaume31 | 0:964a928b323e | 77 | |
Guillaume31 | 0:964a928b323e | 78 | @return The sensor resistance RZero in kOhm |
Guillaume31 | 0:964a928b323e | 79 | */ |
Guillaume31 | 0:964a928b323e | 80 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 81 | float Air::getRZero() { |
Guillaume31 | 0:964a928b323e | 82 | return getResistance() * pow((ATMOCO2/PARA), (1./PARB)); |
Guillaume31 | 0:964a928b323e | 83 | } |
Guillaume31 | 0:964a928b323e | 84 | |
Guillaume31 | 0:964a928b323e | 85 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 86 | /*! |
Guillaume31 | 0:964a928b323e | 87 | @brief Get the corrected resistance RZero of the sensor for calibration |
Guillaume31 | 0:964a928b323e | 88 | purposes |
Guillaume31 | 0:964a928b323e | 89 | |
Guillaume31 | 0:964a928b323e | 90 | @param[in] t The ambient air temperature |
Guillaume31 | 0:964a928b323e | 91 | @param[in] h The relative humidity |
Guillaume31 | 0:964a928b323e | 92 | |
Guillaume31 | 0:964a928b323e | 93 | @return The corrected sensor resistance RZero in kOhm |
Guillaume31 | 0:964a928b323e | 94 | */ |
Guillaume31 | 0:964a928b323e | 95 | /**************************************************************************/ |
Guillaume31 | 0:964a928b323e | 96 | float Air::getCorrectedRZero(float t, float h) { |
Guillaume31 | 0:964a928b323e | 97 | return getCorrectedResistance(t, h) * pow((ATMOCO2/PARA), (1./PARB)); |
Guillaume31 | 0:964a928b323e | 98 | } |