0% encontró este documento útil (0 votos)
23 vistas7 páginas

Sensor CO2 MQ135 con DHT11

Este documento describe el código para un sensor de CO2 que utiliza un sensor MQ135 junto con un sensor DHT11 para medir la temperatura y humedad ambientales. El código calibra el sensor MQ135, corrige la lectura de CO2 en función de la temperatura y humedad, y transmite los valores medidos por puerto serie.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas7 páginas

Sensor CO2 MQ135 con DHT11

Este documento describe el código para un sensor de CO2 que utiliza un sensor MQ135 junto con un sensor DHT11 para medir la temperatura y humedad ambientales. El código calibra el sensor MQ135, corrige la lectura de CO2 en función de la temperatura y humedad, y transmite los valores medidos por puerto serie.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/MQ-135.

ino
Página 1 de 7 mié 17 ago 2022 22:31:08
1 /*
2 Sensor de CO2 con MQ135
3 =======================
4
5 Se utiliza un sensor MQ135 para medir el dióxido de
carbono y un sensor
6 DHT11 para medir la temperatura ambiente y la humedad
relativa, datos
7 necesarios para corregir la lectura del sensor de CO2
8 */
9 #include <math.h>
10 #include <Adafruit_Sensor.h>
11 #include <DHT.h>
12 #include <DHT_U.h>
13
14 #define VCC 4.38 // Volts
15 #define ADRES 1023 // cuentas
16 #define RL 220 // KOhms
17
18 // Se usa el sensor DHT11
19 #define DHTTYPE DHT11
20 // El DHT11 se alimenta con un pin digital porque tiene
muy poco consumo
21 #define DHT11VCC 11
22 // El pin de datos del DHT11 se conecta al pin 11
23 #define DHT11DATOS 12
24
25 // Pin 4 del DTH11 es N/C
26 #define DTH11NC 13
27
28
29
30 DHT_Unified dht(DHT11DATOS, DHTTYPE);
- 1 -
/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/[Link]
Página 2 de 7 mié 17 ago 2022 22:31:08
31 uint32_t delayMS;
32
33
34
35 struct tyh{
36 float t, h;
37 };
38 struct tyh dht11(void), a;
39 float concentracionMQ135(float temp, float hr);
40
41 float correctorHT(float temp, float hr);
42
43 float f33(float temp);
44 float f85(float temp);
45
46 float R0; // Resistencia a la consentración de referencia
47 void setup() {
48 // Puerto serie a 9600 bits por segundo
49 [Link](9600);
50
51 // Inicializo el DHT11
52
53 // Pin de alimentación
54 pinMode(DHT11VCC, OUTPUT);
55 digitalWrite(DHT11VCC,HIGH);
56
57 // Pongo a masa el pin 3 (N/C) del DHT11
58 pinMode(DTH11NC, OUTPUT);
59 digitalWrite(DTH11NC,LOW);
60
61 delay(100);
62 [Link]();
63
- 2 -
/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/[Link]
Página 3 de 7 mié 17 ago 2022 22:31:08
64 R0 = calibrar();
65
66 }
67
68
69 void loop() {
70 float ppmCO2;
71 a = dht11();
72 ppmCO2 = concentracionMQ135(a.t, a.h);
73 for (;ppmCO2 < 390;){
74 [Link]("Error de calibración.");
75 R0 = calibrar();
76 delay(100);
77 ppmCO2 = concentracionMQ135(a.t, a.h);
78 }
79 [Link]("Temperatura [C]: "); [Link](a.t);
80 [Link]("Humedad [%]: "); [Link](a.h);
81 [Link]("CO2 [ppm]: "); [Link](ppmCO2);
82 [Link]("Corrector:
");[Link](correctorHT(a.t,a.h));
83 delay(1000);
84 [Link]("--------------");
85
86
87 }
88
89 float concentracionMQ135(float temp, float hr){
90 float C = 0, C1; // C: Concentración corregida
91 float avr = 0, avr1 =0; // avr: c. promedio corregido,
avr1: c. prom. s/corregir
92 int n = 0;
93 float Vo, maximo=0;
94 float cuenta =0;
- 3 -
/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/[Link]
Página 4 de 7 mié 17 ago 2022 22:31:08
95 float RS =0, RSP = 0;
96 for(n=0; n<10; n++){
97 // EL MQ135 debe tener conectada su salida A0 al pin
A0 del arduino
98 cuenta = analogRead(A0); // cuentas del conversor
99 Vo = cuenta * (VCC / ADRES);
100 RS = VCC/Vo*RL - RL;
101 RSP = RSP + RS;
102 }
103 RSP = RSP / n;
104 //[Link]("\n RS:: "); [Link](RS,5);
105 // Determino el valor de la concentración
106 C = pow(10,((log10((RSP/R0)*correctorHT(temp, hr)) -
0.714)/(-0.345)));
107 C1 = pow(10,((log10((RSP/R0)) - 0.714)/(-0.345)));
108 delay(1);
109 //avr = C + avr;
110 //avr1 = C1 + avr1;
111
112 //[Link] ("\nVo:: "); [Link](Vo, 5);
113 //[Link] ("C:: "); [Link](avr1/n, 5);
114 // [Link]("\n RS:: "); [Link](RSP,5);
115 return C;
116
117
118 }
119 struct tyh dht11(void){
120 struct tyh a;
121
122 // Instancia de sensor_t
123 sensor_t sensor;
124 delayMS = sensor.min_delay / 1000;
125 // Delay between measurements.
- 4 -
/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/[Link]
Página 5 de 7 mié 17 ago 2022 22:31:08
126 //delay(delayMS);
127 // Leer temperatura
128 sensors_event_t event;
129 [Link]().getEvent(&event);
130 if (isnan([Link])) {
131 [Link](F("Error al leer la temperatura"));
132 }
133 else {
134 a.t = [Link];
135 }
136 // Leer humedad
137 [Link]().getEvent(&event);
138 if (isnan(event.relative_humidity)) {
139 [Link](F("Error al leer la humedad"));
140 }
141 else {
142 a.h = event.relative_humidity;
143 }
144 return a;
145 }
146
147 float correctorHT(float temp, float hr){
148 /*
149 * Toma la temperatura, la humedad relativa y la
concentración en crudo
150 * y devuelve el valor corregido teniendo en cuenta la
temperatura y la
151 * humedad.
152 */
153 float factor;
154 float m, b;
155 m = (f33(temp) - f85(temp))/(33 - 85);
156 b = f33(temp) - m*33;
- 5 -
/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/[Link]
Página 6 de 7 mié 17 ago 2022 22:31:08
157 return m*hr + b;
158 }
159
160 float f33(float temp){
161 /*
162 * calculo la correccion para RS/R0 con HR = 33%
163 */
164 return 1.351603187519847 + temp*-0.02842390441409971 +
pow(temp,2) * 6.468087587329311e-4 +
pow(temp,3)*-5.231075341378215e-6;
165 //return 1.351 + temp*-0.028 + pow(temp,2) * 6.4681e-4
+ pow(temp,2)*-5.231e-6;
166 }
167
168 float f85(float temp){
169 /*
170 * calculo la correccion para RS/R0 con HR = 85%
171 */
172 return 1.222043128771038 + temp*-0.02391683867894569
+ pow(temp,2) * 3.894454092569069e-4 + pow(temp,
3)*-1.560564861860908e-6;
173 }
174
175 float calibrar(){
176 /*
177 * Esta función calcula el valor de R0 necesario para
calcular la concentración. Se supone
178 * que el sensor ya se encuentra adecuadamente
calentado (quizá con 24 horas de encendido)
179 * y que está inmerso en una atmósfera con una
concentración de CO2 de 400 ppm (valor
180 * estandard de la atmósfera al aire libre y sin polución
181 */
- 6 -
/home/luck/ixg/Proyectos/SensorCO2/Software/Arduino/MQ-135/[Link]
Página 7 de 7 mié 17 ago 2022 22:31:08
182
183 int n = 0, cuenta;
184 float Vo, RS, RSP, __R0;
185 struct tyh a;
186
187 a = dht11(); //leo temperatura y humedad
188 [Link]("Calibrando...");
189 // Leo el valor de RS y saco el valor promedio RSP
190 for(n=0; n<100; n++){
191 // EL MQ135 debe tener conectada su salida A0 al pin
A0 del arduino
192 cuenta = analogRead(A0); // cuentas del conversor
193 Vo = cuenta * (VCC / ADRES);
194 RS = VCC/Vo*RL - RL;
195 RSP = RSP + RS;
196 }
197 RSP = RSP / n;
198 __R0 = (RSP * 1.526); // * correctorHT(a.t, a.h);
199
200 return __R0;
201
202 }
203

- 7 -

También podría gustarte