AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
mq135.h
1 
18 #ifndef _AVRIO_MQ135_H_
19 #define _AVRIO_MQ135_H_
20 #include <math.h>
21 #include <avrio/defs.h>
22 #include <avrio/adc_sensor.h>
23 
24 __BEGIN_C_DECLS
25 /* ========================================================================== */
40 /* structures =============================================================== */
44 typedef struct xMq135Calibration {
45 
46  double dRLoad;
47  // -------- Paramètres statiques correspondants à l'étalonnage
48  // Teneur CO² actualisée sur http://www.esrl.noaa.gov/gmd/ccgg/trends/global.html
49  double dRZero;
50  double dAtmoCO2;
51  // -------- Paramètres dynamiques variants pendant le fonctionnement
52  double dTemp;
53  double dHum;
55 
56 /* internal public functions ================================================ */
57 
69 double dMq135RawToResistance (xAdcSensor * pSensor, uint16_t usRaw);
70 
82 double dMq135RawToPPM (xAdcSensor * pSensor, uint16_t usRaw);
83 
97 double dMq135RawToCorrectedResistance (xAdcSensor * pSensor, uint16_t usRaw, double dTemp, double dHum);
98 
112 double dMq135RawToCorrectedPPM (xAdcSensor * pSensor, uint16_t usRaw, double dTemp, double dHum);
113 
130 double dMq135CalibrateRZero (xAdcSensor * pSensor);
131 
139 double dMq135CorrectionFactor (double dTemp, double dHum);
140 
141 # if defined(__DOXYGEN__)
142 /*
143  * __DOXYGEN__ defined
144  * Partie documentation ne devant pas être compilée.
145  * =============================================================================
146  */
147 
148 /* macros =================================================================== */
157 #define MQ135_CALIBRATION(rload,rzero,atmoco2)
158 
167 static inline void vMq135Init (xAdcSensorSetting *pSetting, xMq135Calibration * pCalibration);
168 
178 static inline void vMq135SetTemp (xAdcSensor *pSensor, double dTemp);
179 
189 static inline void vMq135SetHumidity (xAdcSensor *pSensor, double dHum);
190 
201 static inline void vMq135SetCorrection (xAdcSensor *pSensor, double dTemp, double dHum);
202 
211 static inline void dMq135Temp (xAdcSensor *pSensor);
212 
221 static inline void dMq135Humidity (xAdcSensor *pSensor);
222 
232 static inline void dMq135RZero (xAdcSensor *pSensor);
233 
242 static inline void dMq135RLoad (xAdcSensor *pSensor);
243 
252 static inline void dMq135AtmoCO2 (xAdcSensor *pSensor);
253 
258 # else
259 /*
260  * __DOXYGEN__ not defined
261  * Partie ne devant pas être documentée.
262  * =============================================================================
263  */
264 /* internal inline functions ================================================ */
265 
266 #define MQ135_CALIBRATION(_rload,_rzero,_atmoco2) { \
267  .dRLoad=(_rload), .dRZero=(_rzero), .dAtmoCO2=(_atmoco2), \
268  .dTemp=NAN, .dHum=NAN }
269 
270 // -----------------------------------------------------------------------------
271 INLINE void
272 vMq135Init (xAdcSensorSetting *pSetting,
273  xMq135Calibration * pCalibration) {
274 
275  pSetting->xNlin.dRawToValue = dMq135RawToPPM;
276  pSetting->xNlin.dCoeff = (double *) pCalibration;
277 }
278 
279 // -----------------------------------------------------------------------------
280 INLINE void
281 vMq135SetTemp (xAdcSensor *pSensor, double dTemp) {
282  xMq135Calibration * pCalibration =
283  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
284  pCalibration->dTemp = dTemp;
285 }
286 
287 // -----------------------------------------------------------------------------
288 INLINE void
289 vMq135SetCorrection (xAdcSensor *pSensor, double dTemp, double dHum) {
290  xMq135Calibration * pCalibration =
291  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
292  pCalibration->dTemp = dTemp;
293  pCalibration->dHum = dHum;
294 }
295 
296 // -----------------------------------------------------------------------------
297 INLINE double
298 dMq135Temp (xAdcSensor *pSensor) {
299  xMq135Calibration * pCalibration =
300  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
301  return pCalibration->dTemp;
302 }
303 
304 // -----------------------------------------------------------------------------
305 INLINE void
306 vMq135SetHumidity (xAdcSensor *pSensor, double dHum) {
307  xMq135Calibration * pCalibration =
308  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
309  pCalibration->dHum = dHum;
310 }
311 
312 // -----------------------------------------------------------------------------
313 INLINE double
314 dMq135Humidity (xAdcSensor *pSensor) {
315  xMq135Calibration * pCalibration =
316  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
317  return pCalibration->dHum;
318 }
319 
320 // -----------------------------------------------------------------------------
321 INLINE double
322 dMq135RZero (xAdcSensor *pSensor) {
323  xMq135Calibration * pCalibration =
324  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
325  return pCalibration->dRZero;
326 }
327 
328 // -----------------------------------------------------------------------------
329 INLINE double
330 dMq135RLoad (xAdcSensor *pSensor) {
331  xMq135Calibration * pCalibration =
332  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
333  return pCalibration->dRLoad;
334 }
335 
336 // -----------------------------------------------------------------------------
337 INLINE double
338 dMq135AtmoCO2 (xAdcSensor *pSensor) {
339  xMq135Calibration * pCalibration =
340  (xMq135Calibration *) pSensor->pSetting->xNlin.dCoeff;
341  return pCalibration->dAtmoCO2;
342 }
343 # endif /* __DOXYGEN__ not defined */
344 
345 /* ========================================================================== */
346 __END_C_DECLS
347 #endif /* _AVRIO_MQ135_H_ not defined */
static void dMq135Temp(xAdcSensor *pSensor)
Lecture de la température utilisée pour la correction interne de la mesure.
double dMq135CalibrateRZero(xAdcSensor *pSensor)
Mesure de la résistance Ro.
static void dMq135RZero(xAdcSensor *pSensor)
Lecture de la résistance d&#39;étalonnage.
double dAtmoCO2
Teneur en CO² standard.
Definition: mq135.h:50
double dRZero
Résistance correspondant à la teneur de CO² standard en kilo Ohms.
Definition: mq135.h:49
Capteur.
Definition: adc_sensor.h:137
static void dMq135RLoad(xAdcSensor *pSensor)
Lecture de la résistance de charge.
static void vMq135SetCorrection(xAdcSensor *pSensor, double dTemp, double dHum)
Modifie la température et l&#39;humidité utilisée pour la correction interne de la mesure.
double dMq135CorrectionFactor(double dTemp, double dHum)
Calcul du facteur de correction de la résistance.
double dMq135RawToPPM(xAdcSensor *pSensor, uint16_t usRaw)
Convertit une valeur ADC en teneur en gaz en ppm.
double dHum
Humidité relative en % pour la correction.
Definition: mq135.h:53
double dMq135RawToCorrectedPPM(xAdcSensor *pSensor, uint16_t usRaw, double dTemp, double dHum)
Convertit une valeur ADC en teneur en gaz en ppm avec correction.
double dMq135RawToCorrectedResistance(xAdcSensor *pSensor, uint16_t usRaw, double dTemp, double dHum)
Convertit une valeur ADC en résistance Rs avec correction.
static void dMq135Humidity(xAdcSensor *pSensor)
Lecture de l&#39;humidité utilisée pour la correction interne de la mesure.
static void vMq135SetTemp(xAdcSensor *pSensor, double dTemp)
Modifie la température utilisée pour la correction interne de la mesure.
xAdcSensorSetting * pSetting
Repère d&#39;étalonnage.
Definition: adc_sensor.h:139
static void dMq135AtmoCO2(xAdcSensor *pSensor)
Lecture de la teneur en CO² d&#39;étalonnage.
double dTemp
Température en °C pour la correction.
Definition: mq135.h:52
static void vMq135SetHumidity(xAdcSensor *pSensor, double dHum)
Modifie l&#39;humidité utilisée pour la correction interne de la mesure.
struct xMq135Calibration xMq135Calibration
double dMq135RawToResistance(xAdcSensor *pSensor, uint16_t usRaw)
Convertit une valeur ADC en résistance Rs.
static void vMq135Init(xAdcSensorSetting *pSetting, xMq135Calibration *pCalibration)
Initialise le capteur à partir de l&#39;étalonnage.
double * dCoeff
Tableau de coefficients pour la conversion.
Definition: adc_sensor.h:119
double dRLoad
Résistance de charge en sortie en kilo Ohms.
Definition: mq135.h:46
dAdcSensorConvert dRawToValue
Fonction de conversion non linéaire.
Definition: adc_sensor.h:120