INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
CO2 Sensor SEN0159
04.04.2016, 18:11
Beitrag #1
CO2 Sensor SEN0159
Hallo
Ich habe einen CO2 Sensor an den Arduino angeschlossen. Eigentlich möchte ich die ppm des CO2s messen. Dazu verwendete ich den Beispielcode für den Sensor, doch die Ausgabe liefert mir negative Zahlen. Und das kann nicht sein. Was muss ich denn genau tun, um die werte von analogRead (die sind ja nur zwischen 0 und 1023) in die ppm Zahl umzurechnen?

Der Beispielcode:
Code:
/*******************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.220) //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:");
    if (percentage == -1) {
        Serial.print( "<400" );
    } else {
        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]);
   }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Wegmessung mit ADNS-9800 Maus Sensor 19mb90 3 1.135 16.06.2016 18:32
Letzter Beitrag: Pit
  Mit RFID Sensor NFC Tags steuern WIMunios 14 926 15.03.2016 12:07
Letzter Beitrag: WIMunios
  MQ2 Sensor (FC-22) Smoke/CO2/LPG Hilgi 0 651 26.02.2016 16:23
Letzter Beitrag: Hilgi
  PH Sensor und UTFT mazelman 0 570 19.02.2015 14:54
Letzter Beitrag: mazelman
Question PIR Sensor luc_a 1 840 13.02.2015 15:22
Letzter Beitrag: Thorsten Pferdekämper
  IR Sensor und Fernbedienung audacity363 3 1.471 12.12.2014 11:03
Letzter Beitrag: SkobyMobil
  [geteilt] DHT22 Temperatur- / Luftfeuchte-Sensor akrecok 1 1.702 10.11.2014 11:38
Letzter Beitrag: RMR
  Auslesen von Dallas 18S20 Sensor (Unterschiedliches Datenergebnis beim auslesen) wirkzeit 3 1.188 27.10.2014 20:54
Letzter Beitrag: wirkzeit
  Color Sensor BenWolf 1 686 25.09.2014 09:58
Letzter Beitrag: Thorsten Pferdekämper
  Arduino Puls Sensor zum laufen bringen damaris 0 1.515 10.07.2014 20:11
Letzter Beitrag: damaris

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste