Go Down

Topic: Letture da sensore co2 (Read 1 time) previous topic - next topic

smau

Ciao a tutti, sto lavorando ad un progetto di lettura di dati da un sensore co2 collegato all'arduino. Il problema e' che quando faccio stampare a monitor i dati che legge, trovo valori molto alti (intorno ai 900 per capirsi) nelle rilevazioni dell'aria normale.

Mi potreste dare una mano a capire?

uwefed

Ciao smau
che sensore CO2 hai, forniscici sia il circuito che il programma.
Non siamo  ancora veggenti.
Ciao Uwe

smau

si avete ragione anche voi :P alla fine mi stavano cacciando dall'ufficio quindi ho dovuto postare in fretta... in ogni caso per il circuito ho seguito quello che hanno fatto qui:
http://translate.google.com/translate?prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Flusorobotica.com%2Findex.php%2Ftopic%2C111.0.html&sl=pt&tl=en&history_state0=

mentre il sensore e' questo:
http://www.futurlec.com/Gas_Sensors.shtml (Carbon Dioxide CO2 Sensor)

e il codice e' questo qui:

Code: [Select]

// ARUINO CO2 TESTER v 1.0
// BY SAMUELE MATTIUZZO (samumatt.altervista.org)
// 2010


#define R 10 // led rosso
#define Yp 11 // led giallo +
#define G 12 // led ok
#define Ym 13 // led giallo -
#define __TOPS__ 870
#define __BOTTOM__ 840

unsigned int val = 0; // valore letto
unsigned char PIN = 0; // pin dove e' collegato il sensore (analogico)
unsigned long time; // tempo dall'inizio della funzione
int z = 1;

void statusNow(int a, int b){ // funzione che accende il led rosso o verde
 digitalWrite(a, HIGH);
 digitalWrite(b, LOW);
}

void regulation(int a, int b){ // funzione che lampeggia il led di regolazione (+ o -)
 digitalWrite(b, LOW);
 digitalWrite(a, HIGH);
 delay(150);
 digitalWrite(a,LOW);
 delay(150);
}

void loading(int a, int b, int c, int d){ // funzione durante il caricamento
 digitalWrite(a, HIGH);
 delay(100);
 digitalWrite(a, LOW);
 digitalWrite(b,HIGH);
 delay(100);
 digitalWrite(b, LOW);
 digitalWrite(c, HIGH);
 delay(100);
 digitalWrite(c, LOW);
 digitalWrite(d, HIGH);
 delay(100);
 digitalWrite(d, LOW);
}

void setup() {
 // setup iniziale
 Serial.begin(9600);
 pinMode(R, OUTPUT);
 pinMode(Yp, OUTPUT);
 pinMode(G, OUTPUT);
 pinMode(Ym, OUTPUT);
 pinMode(PIN,INPUT);
}

void loop() {
 
 time = millis();
 
 if (time <= 60000) { // attesa di 5 minuti per il corretto riscaldamento del led
   loading(R,Yp,G,Ym);  
 }
 else{
   if (z == 1){ // esegue una volta sola, spegne tutti i led quando e' caldo
     z--;
     digitalWrite(R, LOW);
     digitalWrite(Yp, LOW);
     digitalWrite(G, LOW);
     digitalWrite(Ym, LOW);
   }
   
   val = analogRead(PIN); // lettura del valore
   // controllo della lettura fatta
   if (val >= __BOTTOM__ && val <= __TOPS__){
     statusNow(G,R);
     digitalWrite(Yp, HIGH);
     digitalWrite(Ym, HIGH);
   }
   else if (val > __TOPS__){
     statusNow(G,R);
     regulation(Yp,Ym);
   }
   else {
     statusNow(G,R);
     regulation(Ym,Yp);
   }
 
 Serial.println(val);
 delay(500);
 }
}


lasciando perdere i due valori per cui l'avevo tarato io per fargli lampeggiare i led, quello che mi torna strano e' che nel datasheet parlano di 390 ppm circa, mentre i valori che leggo io superano tranquillamente gli 800 - 900 e non capisco a cosa corrispondano (ppm? boh?)

altra cosa: questo sensore ci mette un po a "scaldarsi"? nel senso, all'inizio devo farlo girare a vuoto per un po prima di avere delle rilevazioni piu o meno precise?

uwefed

ciao smau
non ho capito se hai seguito le istruzioni del primo link per il sensore del secondo link.
I sensori non sono uguali.
Quello del alcool vuole 5V di alimentazione, quello del CO2 vuole 6V di alimentazione.
Il sensore di alcool cambia la resistenza, mentre quello di co2 varia la tensione di uscita.
Devi adeguare il circuito al sensore.
Ciao Uwe

smau

abbiamo un nuovo problema, abbiamo provato il sensore per il gpl (codice MQ-6) e quello funziona e si scalda, mentre il nostro sensore di CO2 ora non si scalda nemmeno piu e come valori ritorna numeri molto bassi (5,7,8,10, 20...), puo' essere che si sia bruciato? l'abbiamo provato ad aprire, dentro ci sono dei carboni fossili ed un sensore molto simile a quello del CO: avevo pensato di cambiare il sensore di CO2 con quello di CO e metterci sopra la capsula che contiene i carboni fossili, secondo voi puo' andare?

in ogni caso, come devo interpretare la lettura in uscita? la funzione analogRead() mi da in uscita dei valori tra 0 e 1023, come faccio a mapparli correttamente con quello che dovrebbe essere il valore di co2 nell'aria, per tarare lo strumento? grazie ancora

Go Up