atMETEO
An ATmega based weather station
tgs2600.h
Go to the documentation of this file.
1 /*
2  * atMETEO - An ATmega based weather station
3  * Copyright (C) 2014-2015 Christian Fetzer
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 #pragma once
21 
36 #include <inttypes.h> // AVR toolchain doesn't offer cinttypes header
37 
38 namespace Sensors
39 {
40 
53 template <uint32_t TLoadResistance>
54 class Tgs2600
55 {
56  static_assert(TLoadResistance >= 450, "Minimum load resistance 450 Ohm.");
57 
58 public:
63  : m_referenceResistance(1.0F)
64  , m_referenceHumidity(65)
65  , m_referenceTemperature(20)
66  , m_calibration(1.0F)
67  {
68  }
69 
70  template <class T>
71  class unimplemented;
72 
79  uint32_t sensorResistance(uint16_t vout) const
80  {
81  static_assert(TLoadResistance <= UINT32_MAX / c_vcc,
82  "Load resistance out of range.");
83 
84  if (vout == 0) return UINT32_MAX;
85  if (vout >= c_vcc) return 0;
86  return ((c_vcc * TLoadResistance) / vout) - TLoadResistance;
87  }
88 
100  uint32_t sensorResistanceCalibrated(uint32_t vout) const
101  {
102  uint32_t sensorResistance = this->sensorResistance(vout);
103 
104  if (sensorResistance == UINT32_MAX)
105  return UINT32_MAX;
106 
107  return m_calibration * sensorResistance;
108  }
109 
121  float sensorResistanceRelative(uint32_t vout) const
122  {
123  return sensorResistanceCalibrated(vout) / m_referenceResistance;
124  }
125 
131  void setReferenceHumidity(float humidity)
132  {
133  m_referenceHumidity = humidity;
134  updateCalibration();
135  }
136 
142  void setReferenceTemperature(float temperature)
143  {
144  m_referenceTemperature = temperature;
145  updateCalibration();
146  }
147 
152  void setReferenceResistance(float resistance)
153  {
154  m_referenceResistance = resistance;
155  }
156 
164  float calibration() const
165  {
166  return m_calibration;
167  }
168 
169 private:
170  void updateCalibration()
171  {
172  m_calibration = 0.024F +
173  0.0072F * m_referenceHumidity +
174  0.0246F * m_referenceTemperature;
175  }
176 
177  // Sensor requires Vc of 5V.
178  static const uint16_t c_vcc = 5000;
179 
180  float m_referenceResistance;
181  float m_referenceHumidity;
182  float m_referenceTemperature;
183  float m_calibration;
184 };
185  // \addtogroup libsensors_tgs2600
187 
188 } // namespace Sensors
Decodes data from Figaro TGS 2600 air contaminants sensors.
Definition: tgs2600.h:54
void setReferenceHumidity(float humidity)
Sets reference humitidty for sensorResistanceCalibrated() and sensorResistanceRelative() ...
Definition: tgs2600.h:131
uint32_t sensorResistanceCalibrated(uint32_t vout) const
Retrieves the calibrated sensor resistance for a given vout.
Definition: tgs2600.h:100
float sensorResistanceRelative(uint32_t vout) const
Retrieves the calibrated relative sensor resistance for a given vout.
Definition: tgs2600.h:121
void setReferenceTemperature(float temperature)
Sets reference temperature for sensorResistanceCalibrated() and sensorResistanceRelative().
Definition: tgs2600.h:142
Namespace containing all symbols of the Sensors library.
Definition: bitdecoder.h:40
uint32_t sensorResistance(uint16_t vout) const
Retrieves the raw sensor resistance for a given vout.
Definition: tgs2600.h:79
void setReferenceResistance(float resistance)
Sets reference resistance for sensorResistanceRelative().
Definition: tgs2600.h:152
float calibration() const
Returns the calculated calibration factor influenced by reference humidity and reference temperature...
Definition: tgs2600.h:164
Tgs2600()
Initializes the TGS 2600 sensor decoder.
Definition: tgs2600.h:62