You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hoy estuvimos con el Mauri viendo el tema de la calibración. Algo no esta funcionando porque cuando se termina de calibrar cada sensor mide muy distinto y lejos del 400 que estamos forzando. @MaximilianoGarcia716 ese codigo lo sacaste del .ino que yo te pase originalmente? porque ese codigo ahora recuerdo no andaba bien. En la librería del SDC41 https://github.com/Sensirion/arduino-i2c-scd4x/tree/master/src esta la función y es distinta a la que hemos usado
Una duda es si el ASC (autocalibración) está disabled?
Yo en su momento hice también un codigo para calibrar que en ppio funcionaba
//Calibrar
void calibrar(){
Serial.println("# CO2 values before recalibration");
// measure 5 times
for(repetition = 0; repetition < 5; repetition++) {
// read measurement data: 2 bytes co2, 1 byte CRC,
// 2 bytes T, 1 byte CRC, 2 bytes RH, 1 byte CRC,
// 2 bytes sensor status, 1 byte CRC
// stop reading after 12 bytes (not used)
// other data like ASC not included
Wire.requestFrom(SCD_ADDRESS, 12);
counter = 0;
while (Wire.available()) {
data[counter++] = Wire.read();
}
// floating point conversion according to datasheet
co2 = (float)((uint16_t)data[0] << 8 | data[1]);
// convert T in degC
temperature = -45 + 175 * (float)((uint16_t)data[3] << 8 | data[4]) / 65536;
// convert RH in %
humidity = 100 * (float)((uint16_t)data[6] << 8 | data[7]) / 65536;
Serial.print("# ");
Serial.print(co2);
Serial.print("\t");
Serial.print(temperature);
Serial.print("\t");
Serial.print(humidity);
Serial.println();
delay(2000);
}
// wait for another 5 minutes to equilibrate sensor to ambient
Serial.println("# Waiting 20 minutes for equilibration");
//delay(5 * 60 * 1000);
timeElapse = getDataTimer+12e5; // 20 minutes in milliseconds
while(millis() < timeElapse) {};
// prepare buffer with data for calibration
// calculate CRC for each 2 bytes of data
data[0] = (calibration & 0xff00) >> 8;
data[1] = calibration & 0x00ff;
data[2] = CalcCrc(data);
// send command for perform_forced_recalibration
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0x36);
Wire.write(0x2F);
// append data for calibration
// 2 bytes calibraion, CRC
Wire.write(data[0]);
Wire.write(data[1]);
Wire.write(data[2]);
ret = Wire.endTransmission();
Serial.println(ret);
Serial.print("# Value after recalibration\n# ");
Serial.println(calibration-32768);
// output format
Serial.println("CO2(ppm)\tTemperature(degC)\tRelativeHumidity(percent)");
// start scd measurement again in periodic mode, will update every 2 s
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0x21);
Wire.write(0xb1);
Wire.endTransmission();
// wait for first measurement to be finished (> 5 s)
delay(10000);
}
The text was updated successfully, but these errors were encountered:
Usé el código que estaba subido con modificaciones según la datasheet, mayormente tiempos de calibración, recuerdo que fueron pocas las modificaciones, entre ellas multiplexarlo, está en la página 13 de la datasheet
Se me ocurre que pasa 1 de 3 cosas:
No se tiene concentración constante de CO2
No se tiene concentración homogénea de CO2
La calibración falla
Con Santi lo calibramos en la ventana con la cámara abierta y funcionó 90% de las veces, a veces parece que el mismo aparato no corta la calibracion de forma correcta y salen mal las concentraciones, si pasa eso calibras una segunda vez y deberia funcionar.
El código del github de sensirion corre cuando llamas sus funciones, creo que son las mismas que estuve usando
hola Maxi... che ahi calibramos todos los sensores con mi viejo dispositivo y eso anda bien y los sensores miden coherente (alrededor de 400ppm) y no presentan tanta variación.
Los llevamos con esa calibración al multiplexado y miden con mucha variación... van de 200 a 700 a veces nunca se estabilizan... hay algo mal en la medición me parece, mas que en la calibración.
Nos vamos a tener que poner a revisar porque asi no lo podemos usar
Hoy estuvimos con el Mauri viendo el tema de la calibración. Algo no esta funcionando porque cuando se termina de calibrar cada sensor mide muy distinto y lejos del 400 que estamos forzando.
@MaximilianoGarcia716 ese codigo lo sacaste del .ino que yo te pase originalmente? porque ese codigo ahora recuerdo no andaba bien. En la librería del SDC41 https://github.com/Sensirion/arduino-i2c-scd4x/tree/master/src esta la función y es distinta a la que hemos usado
Una duda es si el ASC (autocalibración) está disabled?
Yo en su momento hice también un codigo para calibrar que en ppio funcionaba
//Calibrar
void calibrar(){
Serial.println("# CO2 values before recalibration");
// measure 5 times
for(repetition = 0; repetition < 5; repetition++) {
// read measurement data: 2 bytes co2, 1 byte CRC,
// 2 bytes T, 1 byte CRC, 2 bytes RH, 1 byte CRC,
// 2 bytes sensor status, 1 byte CRC
// stop reading after 12 bytes (not used)
// other data like ASC not included
Wire.requestFrom(SCD_ADDRESS, 12);
counter = 0;
while (Wire.available()) {
data[counter++] = Wire.read();
}
}
// wait for another 5 minutes to equilibrate sensor to ambient
Serial.println("# Waiting 20 minutes for equilibration");
//delay(5 * 60 * 1000);
timeElapse = getDataTimer+12e5; // 20 minutes in milliseconds
while(millis() < timeElapse) {};
// stop scd measurement
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0x3f);
Wire.write(0x86);
ret = Wire.endTransmission();
Serial.println(ret);
// wait for sensor
delay(20);
// assuming an external reference shows 400 ppm
calibration = 400;
// prepare buffer with data for calibration
// calculate CRC for each 2 bytes of data
data[0] = (calibration & 0xff00) >> 8;
data[1] = calibration & 0x00ff;
data[2] = CalcCrc(data);
// send command for perform_forced_recalibration
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0x36);
Wire.write(0x2F);
// append data for calibration
// 2 bytes calibraion, CRC
Wire.write(data[0]);
Wire.write(data[1]);
Wire.write(data[2]);
ret = Wire.endTransmission();
Serial.println(ret);
delay(400);
// read data: 2 bytes correction, 1 byte CRC
Wire.requestFrom(SCD_ADDRESS, 3);
counter = 0;
while (Wire.available()) {
data[counter++] = Wire.read();
}
if(CalcCrc(data) != data[2])
Serial.println("# ERROR: recalibration CRC return value");
calibration = ((uint16_t)data[0] << 8 | data[1]);
Serial.print("# Value after recalibration\n# ");
Serial.println(calibration-32768);
// output format
Serial.println("CO2(ppm)\tTemperature(degC)\tRelativeHumidity(percent)");
// start scd measurement again in periodic mode, will update every 2 s
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0x21);
Wire.write(0xb1);
Wire.endTransmission();
// wait for first measurement to be finished (> 5 s)
delay(10000);
}
The text was updated successfully, but these errors were encountered: