AirQualityClick on A0 on Nucleo-F411RE

Dependents:   AirQuality

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?

UserRevisionLine numberNew 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 }