Sensore MG811 valori errati

Chiedo il vostro aiuto. Sto realizzando un impianto con controllo qualità aria e sto usando il succitato sensore.
Il problema è che anche usando il codice della casa costruttrice non ho valori validi. Per esempio ho -1ppm. Il codice usato è il seguente:

 /*******************Demo for MG-811 Gas Sensor Module V1.1*****************************
Author:  Tiequan Shao: tiequan.shao@sandboxelectronics.com
         Peng Wei:     peng.wei@sandboxelectronics.com
          
Lisence: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
 
Note:    This piece of source code is supposed to be used as a demostration ONLY. More
         sophisticated calibration is required for industrial field application. 
          
                                                    Sandbox Electronics    2012-05-31
************************************************************************************/
 
/************************Hardware Related Macros************************************/
#define         MG_PIN                       (0)     //define which analog input channel you are going to use
#define         BOOL_PIN                     (2)
#define         DC_GAIN                      (8.5)   //define the DC gain of amplifier
 
 
/***********************Software Related Macros************************************/
#define         READ_SAMPLE_INTERVAL         (50)    //define how many samples you are going to take in normal operation
#define         READ_SAMPLE_TIMES            (5)     //define the time interval(in milisecond) between each samples in 
                                                     //normal operation
 
/**********************Application Related Macros**********************************/
//These two values differ from sensor to sensor. user should derermine this value.
#define         ZERO_POINT_VOLTAGE           (0.324) //define the output of the sensor in volts when the concentration of CO2 is 400PPM
#define         REACTION_VOLTGAE             (0.020) //define the voltage drop of the sensor when move the sensor from air into 1000ppm CO2
 
/*****************************Globals***********************************************/
float           CO2Curve[3]  =  {2.602,ZERO_POINT_VOLTAGE,(REACTION_VOLTGAE/(2.602-3))};   
                                                     //two points are taken from the curve. 
                                                     //with these two points, a line is formed which is
                                                     //"approximately equivalent" to the original curve.
                                                     //data format:{ x, y, slope}; point1: (lg400, 0.324), point2: (lg4000, 0.280) 
                                                     //slope = ( reaction voltage ) / (log400 –log1000) 
 
 
void setup()
{
    Serial.begin(9600);                              //UART setup, baudrate = 9600bps
    pinMode(BOOL_PIN, INPUT);                        //set pin to input
    digitalWrite(BOOL_PIN, HIGH);                    //turn on pullup resistors
 
   Serial.print("MG-811 Demostration\n");                
}
 
void loop()
{
    int percentage;
    float volts;
     
    
    volts = MGRead(MG_PIN);
    Serial.print( "SEN-00007:" );
    Serial.print(volts); 
    Serial.print( "V           " );
     
    percentage = MGGetPercentage(volts,CO2Curve);
    Serial.print("CO2:");
   
        Serial.print(percentage);
    
    Serial.print( "ppm" );  
    Serial.print( "       Time point:" );
    Serial.print(millis());
    Serial.print("\n");
     
    if (digitalRead(BOOL_PIN) ){
        Serial.print( "=====BOOL is HIGH======" );
    } else {
        Serial.print( "=====BOOL is LOW======" );
    }
       
    Serial.print("\n");
     
    delay(200);
}
 
 
 
/*****************************  MGRead *********************************************
Input:   mg_pin - analog channel
Output:  output of SEN-000007
Remarks: This function reads the output of SEN-000007
************************************************************************************/
float MGRead(int mg_pin)
{
    int i;
    float v=0;
 
    for (i=0;i<READ_SAMPLE_TIMES;i++) {
        v += analogRead(mg_pin);
        delay(READ_SAMPLE_INTERVAL);
    }
    v = (v/READ_SAMPLE_TIMES) *5/1024 ;
    return v;  
}
 
/*****************************  MQGetPercentage **********************************
Input:   volts   - SEN-000007 output measured in volts
         pcurve  - pointer to the curve of the target gas
Output:  ppm of the target gas
Remarks: By using the slope and a point of the line. The x(logarithmic value of ppm) 
         of the line could be derived if y(MG-811 output) is provided. As it is a 
         logarithmic coordinate, power of 10 is used to convert the result to non-logarithmic 
         value.
************************************************************************************/
int  MGGetPercentage(float volts, float *pcurve)
{
   if ((volts/DC_GAIN )>=ZERO_POINT_VOLTAGE) {
      return -1;
   } else { 
      return pow(10, ((volts/DC_GAIN)-pcurve[1])/pcurve[2]+pcurve[0]);
   }
}

L'uscita del sensore varia tra 30 e 50mV, senza circuito di amplificazione, tra l'altro indicato nel datasheet, non leggerai correttamente con l'Arduino. --> http://sandboxelectronics.com/files/SEN-000007/MG811.pdf

Prova a vedere qui --> http://playground.arduino.cc/Main/MQGasSensors e qui --> http://itp.nyu.edu/physcomp/sensors/Reports/MG811

Puoi anche restringere il campo di lettura usando il riferimento interno dell'AnalogRead.

Nel listato si accenna ad un guadagno per l'amplificatore di 8.5 volte. Che schema hai usato?

Infatti... Hai il sensore nudo e crudo o è già montato su un modulo?

Certo che se dessi tutte le informazioni sarebbe meglio!

Trovato il modulo, schema e listato
http://sandboxelectronics.com/?product=mg-811-co2-gas-sensor-module

Il sensore è questo, compreso di modulo. Ha 4 pin, due per l' alimentazione uno per i dati analogico e uno digitale. Mi da valori incredibili, passa da 2,4 v a 0,4 v senza nessuna logica.

Sono dinuovo alle prese con questo senore. Ho un' uscita in tensione stabile; il problema è che non riesco ad effettuare una corretta taratura usando lo sk riportato sopra. Per una concentrazione di 400ppm ho 3,30v, ma nn riesco ad avere un valore esatto di co2. Come dovrei agire?

ho impostato :

#define         ZERO_POINT_VOLTAGE           (3.350) //define the output of the sensor in volts when the concentration of CO2 is 400PPM
#define         REACTION_VOLTGAE             (0.020)

Ma la variazione di co2 è piccolissima

Prima di tutto sarebbe utile vedere lo schema dei collegamenti che hai fatto, per verificare che non ci siano errori.