Sommario:

Monitor CO Arduino con sensore MQ-7: 8 passaggi (con immagini)
Monitor CO Arduino con sensore MQ-7: 8 passaggi (con immagini)

Video: Monitor CO Arduino con sensore MQ-7: 8 passaggi (con immagini)

Video: Monitor CO Arduino con sensore MQ-7: 8 passaggi (con immagini)
Video: Le FAQ su ARDUINO || Rilevare GAS con il sensore analogico MQ-2 2024, Luglio
Anonim
Monitor CO Arduino che utilizza il sensore MQ-7
Monitor CO Arduino che utilizza il sensore MQ-7
Monitor CO Arduino che utilizza il sensore MQ-7
Monitor CO Arduino che utilizza il sensore MQ-7

Alcune parole sul perché è stato creato questo istruibile: un giorno la madre della mia ragazza ci ha telefonato nel cuore della notte perché si sentiva davvero male - aveva vertigini, tachicardia, nausea, pressione alta, è persino svenuta per un tempo sconosciuto (probabilmente ~5 minuti, ma non c'è modo di dirlo), il tutto senza alcun motivo apparente. Vive in un piccolo villaggio lontano dagli ospedali (60 km da casa nostra, 30 km dall'ospedale più vicino, 10 km senza strade normali in mezzo), quindi siamo corsi da lei e siamo arrivati subito dopo l'ambulanza. È stata ricoverata in ospedale e al mattino si sentiva quasi bene, ma i medici non sono riusciti a trovare la causa. Il giorno dopo abbiamo avuto un'idea: potrebbe essere stato un avvelenamento da CO, dato che ha il boiler a gas (nella foto), ed è rimasta seduta lì vicino per tutta la sera quando è successo. Abbiamo recentemente acquistato il sensore di CO MQ-7, ma non ho mai avuto il tempo di assemblare uno schema, quindi questo era il momento perfetto per farlo. Dopo un'ora di ricerca su Internet per qualsiasi istruzione, mi sono reso conto che non riesco a trovare alcuna guida che allo stesso tempo segua le istruzioni del produttore del sensore fornite nella sua scheda tecnica e spieghi nulla (un esempio sembrava avere un codice abbastanza buono, ma non era chiaro come applicarlo, altri erano troppo semplificati e non funzionavano bene). Quindi abbiamo impiegato circa 12 ore per sviluppare schemi, realizzare e stampare case 3D, testare e calibrare il sensore, e il giorno dopo siamo andati alla caldaia sospetta. Si è scoperto che i livelli di CO erano estremamente alti e potevano essere fatali se il tempo di esposizione alla CO fosse più lungo. Quindi credo che chiunque abbia una situazione simile (come una caldaia a gas o altra combustione che si verifica all'interno di uno spazio abitativo) dovrebbe ottenere tale sensore per evitare che accada qualcosa di brutto.

Tutto ciò è successo due settimane fa, da allora ho migliorato molto gli schemi e il programma, e ora sembra essere ragionevolmente buono e relativamente semplice (non semplice con 3 righe di codice, ma comunque). Anche se spero che qualcuno con un misuratore di CO preciso mi fornisca un feedback sulla calibrazione predefinita che ho inserito nello schizzo - sospetto che sia tutt'altro che buono. Ecco una guida completa con alcuni dati sperimentali.

Passaggio 1: Distinta base

Distinta materiali
Distinta materiali

Avrai bisogno di: 0. Scheda Arduino. Preferisco il clone cinese di Arduino Nano per il suo prezzo eccezionale di $ 3, ma qualsiasi arduino a 8 bit funzionerà qui. Sketch utilizza alcune operazioni avanzate di timer ed è stato testato solo sul microcontrollore atmega328, anche se probabilmente funzionerà bene anche su altri.1. Sensore di CO MQ-7. Più comunemente disponibile con questo modulo sensore Flying Fish, deve eseguire una piccola modifica, dettagli nel passaggio successivo, oppure è possibile utilizzare un sensore MQ-7 separato.

2. Transistor bipolare NPN. Praticamente qualsiasi transistor NPN in grado di gestire 300 mA o più funzionerà qui. Il transistor PNP non funzionerà con un modulo Flying Fish menzionato (perché ha un pin del riscaldatore saldato all'uscita del sensore), ma può essere utilizzato con un sensore MQ-7 discreto.

3. Resistori: 2 x 1k (da 0,5 k a 1,2 k funzionerà bene) e 1 x 10 k (questo è meglio mantenerlo preciso - anche se se devi assolutamente usare un valore diverso, regola la variabile reference_resistor_kOhm nello schizzo di conseguenza).

4. Condensatori: 2 x 10uF o più. Sono necessari tantalio o ceramiche, l'elettrolitico non funzionerà bene a causa dell'elevata ESR (non saranno in grado di fornire corrente sufficiente per attenuare l'ondulazione ad alta corrente).5. LED verdi e rossi per indicare il livello di CO attuale (puoi anche utilizzare un singolo LED bicolore con 3 terminali, come abbiamo usato nel nostro prototipo di scatola gialla).6. Cicalino piezoelettrico per indicare un alto livello di CO.7. Tagliere e fili (puoi anche saldare tutto ai pin Nano o spremere nelle prese Uno, ma è facile commettere un errore in questo modo).

Passaggio 2: modifica del modulo o cablaggio del sensore discreto

Modifica del modulo o cablaggio del sensore discreto
Modifica del modulo o cablaggio del sensore discreto

Per il modulo, è necessario dissaldare resistore e condensatore, come mostrato nella foto. Puoi dissaldare praticamente tutto se vuoi - l'elettronica del modulo è totalmente inutile, la usiamo solo come supporto per il sensore stesso, ma questi due componenti ti impediranno di ottenere letture corrette, Se si utilizza un sensore discreto, collegare i pin del riscaldatore (H1 e H2) a 5 V e il collettore del transistor di conseguenza. Collegare un lato di rilevamento (uno qualsiasi dei pin A) a 5 V, un altro lato di rilevamento (uno qualsiasi dei pin B) al resistore da 10 k, proprio come il pin analogico del modulo negli schemi.

Fase 3: Principio di funzionamento

Principio di funzionamento
Principio di funzionamento
Principio di funzionamento
Principio di funzionamento

Perché abbiamo bisogno di tutte queste complicazioni, perché non collegare 5V, terra e ottenere solo le letture? Beh, sfortunatamente non otterrai nulla di utile in questo modo. Secondo la scheda tecnica MQ-7, il sensore deve funzionare attraverso e cicli a basso riscaldamento per ottenere misurazioni corrette. Durante la fase di bassa temperatura, la CO viene assorbita sulla piastra, producendo dati significativi. Durante la fase di alta temperatura, la CO assorbita e altri composti evaporano dalla piastra del sensore, pulendola per la misurazione successiva.

Quindi in generale il funzionamento è semplice:

1. Applicare 5 V per 60 secondi, non utilizzare queste letture per la misurazione della CO.

2. Applicare 1,4 V per 90 secondi, utilizzare queste letture per la misurazione della CO.

3. Vai al passaggio 1.

Ma ecco il problema: Arduino non può fornire energia sufficiente per far funzionare questo sensore dai suoi pin: il riscaldatore del sensore richiede 150 mA, mentre il pin Arduino non può fornire più di 40 mA, quindi se collegato direttamente, il pin Arduino brucerà e il sensore continuerà a vincere non funziona. Quindi dobbiamo usare un qualche tipo di amplificatore di corrente che richiede una piccola corrente di ingresso per controllare una grande corrente di uscita. Un altro problema è ottenere 1,4 V. L'unico modo per ottenere in modo affidabile questo valore senza introdurre molti componenti analogici è utilizzare l'approccio PWM (modulazione di larghezza di impulso) con feedback che controllerà la tensione di uscita.

Il transistor NPN risolve entrambi i problemi: quando è costantemente acceso, la tensione ai capi del sensore è di 5 V e si sta riscaldando per la fase ad alta temperatura. Quando applichiamo PWM al suo ingresso, la corrente pulsa, quindi viene livellata dal condensatore e la tensione media viene mantenuta costante. Se usiamo PWM ad alta frequenza (nello schizzo ha una frequenza di 62,5 KHz) e facciamo una media di molte letture analogiche (nello schizzo facciamo una media di oltre ~ 1000 letture), il risultato è abbastanza affidabile.

È fondamentale aggiungere condensatori secondo gli schemi. Le immagini qui illustrano la differenza di segnale con e senza condensatore C2: senza di esso, l'ondulazione PWM è chiaramente visibile e distorce significativamente le letture.

Passaggio 4: schemi e breadboard

Schemi e tagliere
Schemi e tagliere
Schemi e tagliere
Schemi e tagliere
Schemi e tagliere
Schemi e tagliere

Ecco lo schema e l'assemblaggio della breadboard.

AVVERTIMENTO! È necessaria la modifica di un modulo breakout standard! Senza modulo di modifica è inutile. La modifica è descritta nel secondo passaggio

È importante utilizzare i pin D9 e D10 per i LED, poiché lì abbiamo le uscite dell'hardware Timer1, consentirà di cambiare facilmente i loro colori. I pin D5 e D6 sono utilizzati per il cicalino, poiché D5 e D6 sono uscite dell'hardware Timer0. Li configureremo in modo che siano inversi l'uno rispetto all'altro, in modo che cambino tra gli stati (5V, 0V) e (0V, 5V), producendo così un suono sul cicalino. Avvertimento: questo influisce sull'interruzione di temporizzazione principale di Arduino, quindi tutte le funzioni dipendenti dal tempo (come millis()) non produrranno risultati corretti in questo sketch (ne parleremo più avanti). Il pin D3 ha l'uscita hardware Timer2 collegata ad esso (così come D11 - ma è meno conveniente mettere il cavo su D11 che su D3) - quindi lo stiamo usando per fornire PWM per il transistor di controllo della tensione. Il resistore R1 viene utilizzato per controllare la luminosità dei LED. Può essere compreso tra 300 e 3000 Ohm, 1k è piuttosto ottimale in termini di luminosità/consumo di energia. Il resistore R2 viene utilizzato per limitare la corrente di base del transistor. Non dovrebbe essere inferiore a 300 Ohm (per non sovraccaricare il pin Arduino) e non superiore a 1500 Ohm. 1k c'è una scelta sicura.

Il resistore R3 viene utilizzato in serie con la piastra del sensore per creare un partitore di tensione. La tensione sull'uscita del sensore è uguale a R3 / (R3 + Rs) * 5V, dove Rs è la resistenza del sensore di corrente. La resistenza del sensore dipende dalla concentrazione di CO, quindi la tensione cambia di conseguenza. Il condensatore C1 viene utilizzato per regolare la tensione PWM in ingresso sul sensore MQ-7, maggiore è la sua capacità, meglio è, ma deve anche avere una bassa ESR, quindi ceramica (o tantalio) il condensatore è preferito qui, quello elettrolitico non funzionerà bene.

Il condensatore C2 viene utilizzato per livellare l'uscita analogica del sensore (la tensione di uscita dipende dalla tensione di ingresso - e qui abbiamo una corrente PWM piuttosto elevata, che influisce su tutti gli schemi, quindi abbiamo bisogno di C2). La soluzione più semplice è utilizzare lo stesso condensatore del transistor C1. NPN che conduce sempre corrente per fornire un'elevata corrente al riscaldatore del sensore o che funziona in modalità PWM riducendo così la corrente di riscaldamento.

Passaggio 5: programma Arduino

Programma Arduino
Programma Arduino

AVVERTENZA: IL SENSORE RICHIEDE LA CALIBRAZIONE MANUALE PER QUALSIASI UTILIZZO PRATICO. SENZA CALIBRAZIONE, A SECONDA DEI PARAMETRI DEL VOSTRO PARTICOLARE SENSORE, QUESTO DISEGNO POTREBBE ATTIVARE L'ALLARME IN ARIA PULITA O NON RILEVARE UNA CONCENTRAZIONE LETALE DI MONOSSIDO DI CARBONIO

La calibrazione è descritta nei passaggi seguenti. La calibrazione approssimativa è molto semplice, precisa è piuttosto complessa.

A livello generale, il programma è piuttosto semplice:

Per prima cosa calibriamo il nostro PWM per produrre 1,4 V stabili richiesti dal sensore (la larghezza corretta del PWM dipende da molti parametri come i valori esatti del resistore, la resistenza di questo particolare sensore, la curva VA del transistor ecc. ecc. Quindi il modo migliore è provare vari valori e usiamo quello che si adatta meglio). Quindi, eseguiamo continuamente un ciclo di 60 secondi di riscaldamento e 90 secondi di misurazione. Nell'implementazione diventa alquanto complicato. Dobbiamo usare timer hardware perché tutto ciò che abbiamo qui ha bisogno di PWM stabile ad alta frequenza per funzionare correttamente. Il codice è allegato qui e può essere scaricato dal nostro github, così come dalla fonte degli schemi in Fritzing. Nel programma ci sono 3 funzioni che gestiscono i timer: setTimer0PWM, setTimer1PWM, setTimer2PWM. Ognuna di esse imposta il timer in modalità PWM con determinati parametri (commentati nel codice), e imposta la durata dell'impulso in base ai valori di input. Le fasi di misurazione vengono commutate utilizzando le funzioni startMeasurementPhase e startHeatingPhase, esse gestire tutto all'interno. e impostare i valori del timer corretti per la commutazione tra riscaldamento 5V e 1,4V. Lo stato dei LED è impostato dalla funzione setLEDs che accetta la luminosità verde e rossa sul suo ingresso (in scala lineare 1-100) e la converte nell'impostazione del timer corrispondente.

Lo stato del buzzer è controllato tramite le funzioni buzz_on, buzz_off, buzz_beep. Le funzioni on/off attivano e disattivano il suono, la funzione beep produce una sequenza di beep specifica con un periodo di 1,5 secondi se viene chiamata periodicamente (questa funzione ritorna immediatamente in modo da non mettere in pausa il programma principale, ma devi chiamarla ancora e ancora per produrre un segnale acustico).

Il programma esegue prima la funzione pwm_adjust che rileva la corretta larghezza del ciclo PWM per raggiungere 1,4 V durante la fase di misurazione. Quindi emette alcuni segnali acustici per indicare che il sensore è pronto, passa alla fase di misurazione e avvia il ciclo principale.

Nel ciclo principale, il programma controlla se abbiamo trascorso abbastanza tempo nella fase corrente (90 secondi per la fase di misurazione, 60 secondi per la fase di riscaldamento) e, in caso affermativo, cambia la fase corrente. Inoltre aggiorna costantemente le letture del sensore utilizzando il livellamento esponenziale: new_value = 0,999*old_value + 0.001*new_reading. Con tali parametri e ciclo di misura, fa una media del segnale negli ultimi 300 millisecondi circa. ATTENZIONE: IL SENSORE RICHIEDE LA CALIBRAZIONE MANUALE PER QUALSIASI UTILIZZO PRATICO. SENZA CALIBRAZIONE, A SECONDA DEI PARAMETRI DEL VOSTRO PARTICOLARE SENSORE, QUESTO DISEGNO POTREBBE ATTIVARE L'ALLARME IN ARIA PULITA O NON RILEVARE UNA CONCENTRAZIONE LETALE DI MONOSSIDO DI CARBONIO.

Passaggio 6: prima esecuzione: cosa aspettarsi

Prima esecuzione: cosa aspettarsi
Prima esecuzione: cosa aspettarsi

Se hai assemblato tutto correttamente, dopo aver eseguito lo schizzo vedrai qualcosa del genere nel monitor seriale:

regolazione PWM w=0, V=4.93

regolazione PWM w=17, V=3.57PWM risultato: larghezza 17, tensione 3.57

e quindi una serie di numeri che rappresentano le letture del sensore di corrente. Questa parte regola la larghezza del PWM per produrre la tensione del riscaldatore del sensore il più vicino possibile a 1,4 V, la tensione misurata viene sottratta da 5 V, quindi il nostro valore misurato ideale è 3,6 V. Se questo processo non termina o non termina mai dopo un singolo passaggio (risultante in larghezza uguale a 0 o 254), allora qualcosa non va. Controlla se il tuo transistor è davvero NPN ed è collegato correttamente (assicurati di aver usato la base, il collettore, i pin dell'emettitore a destra - la base va a D3, il collettore a MQ-7 e l'emettitore a terra, non contare sulla vista breadboard Fritzing - è sbagliato per alcuni transistor) e assicurati di aver collegato l'ingresso del sensore all'ingresso A1 di Arduino. Se tutto va bene, dovresti vedere in Serial Plotter dall'IDE di Arduino qualcosa di simile all'immagine. I cicli di riscaldamento e misurazione della durata di 60 e 90 secondi vengono eseguiti uno dopo l'altro, con ppm di CO misurate e aggiornate alla fine di ogni ciclo. È possibile portare una fiamma libera vicino al sensore quando il ciclo di misurazione è quasi terminato e vedere come influenzerà le letture (a seconda del tipo di fiamma, può produrre fino a 2000 ppm di concentrazione di CO all'aria aperta, quindi anche se solo una piccola parte di effettivamente entra nel sensore, attiverà comunque l'allarme e non si spegnerà fino alla fine del ciclo successivo). L'ho mostrato sull'immagine, così come la risposta al fuoco dell'accendino.

Passaggio 7: calibrazione del sensore

Calibrazione del sensore
Calibrazione del sensore
Calibrazione del sensore
Calibrazione del sensore

Secondo la scheda tecnica del produttore, il sensore dovrebbe eseguire cicli di riscaldamento-raffreddamento per 48 ore consecutive prima di poter essere calibrato. E dovresti farlo se intendi usarlo per molto tempo: nel mio caso, la lettura del sensore in aria pulita è cambiata di circa il 30% in 10 ore. Se non si tiene conto di ciò, è possibile ottenere un risultato di 0 ppm dove ci sono effettivamente 100 ppm di CO. Se non si desidera attendere 48 ore, è possibile monitorare l'uscita del sensore alla fine del ciclo di misurazione. Dopo più di un'ora non cambierà per più di 1-2 punti, puoi interrompere il riscaldamento lì.

Calibrazione approssimativa:

Dopo aver eseguito lo sketch per almeno 10 ore in aria pulita, prendere il valore grezzo del sensore alla fine del ciclo di misurazione, 2-3 secondi prima dell'inizio della fase di riscaldamento, e scriverlo nella variabile sensor_reading_clean_air (riga 100). Questo è tutto. Il programma stimerà altri parametri del sensore, non saranno precisi, ma dovrebbero essere sufficienti per distinguere tra la concentrazione di 10 e 100 ppm.

Calibrazione precisa:

Consiglio vivamente di trovare un misuratore di CO calibrato, fare un campione di CO da 100 ppm (questo può essere fatto prendendo un po' di gas di combustione nella siringa - la concentrazione di CO può essere facilmente nell'intervallo di diverse migliaia di ppm - e mettendolo lentamente in un barattolo chiuso con misuratore calibrato e sensore MQ-7), prendi la lettura grezza del sensore a questa concentrazione e inseriscila nella variabile sensor_reading_100_ppm_CO. Senza questo passaggio, la misurazione delle ppm può essere errata più volte in entrambe le direzioni (ancora ok se hai bisogno di un allarme per la concentrazione pericolosa di CO a casa, dove normalmente non dovrebbe esserci CO, ma non va bene per qualsiasi applicazione industriale).

Dato che non avevo alcun contatore di CO, ho usato un approccio più sofisticato. Per prima cosa ho preparato un'alta concentrazione di CO utilizzando la combustione in volume isolato (prima foto). In questo articolo ho trovato i dati più utili, inclusa la resa di CO per diversi tipi di fiamma - non è nella foto, ma l'esperimento finale ha utilizzato la combustione del gas propano, con la stessa configurazione, con una concentrazione di CO di ~ 5000 ppm. Quindi è stato diluito 1:50 per raggiungere 100 ppm, come illustrato nella seconda foto, e utilizzato per determinare il punto di riferimento del sensore.

Passaggio 8: alcuni dati sperimentali

Alcuni dati sperimentali
Alcuni dati sperimentali

Nel mio caso, il sensore ha funzionato abbastanza bene: non è molto sensibile per concentrazioni molto basse, ma abbastanza buono per rilevare qualsiasi cosa superiore a 50 ppm. Ho provato ad aumentare gradualmente la concentrazione, prendendo le misure, e ho costruito una serie di grafici. Ci sono due serie di linee 0 ppm: verde puro prima dell'esposizione alla CO e giallo verde dopo. Il sensore sembra cambiare leggermente la sua resistenza all'aria pulita dopo l'esposizione, ma questo effetto è piccolo. Non sembra essere in grado di distinguere chiaramente tra le concentrazioni di 8 e 15, 15 e 26, 26 e 45 ppm - ma la tendenza è molto chiara, quindi può dire se la concentrazione è nell'intervallo 0-20 o 40-60 ppm. Per concentrazioni più elevate la dipendenza è molto più distintiva - quando esposta allo scarico di una fiamma libera, la curva sale dall'inizio senza scendere affatto e la sua dinamica è totalmente diversa. Quindi per alte concentrazioni non c'è dubbio che funzioni in modo affidabile, anche se non posso confermare la sua precisione poiché non ho alcun misuratore di CO nominale. Inoltre, questa serie di esperimenti è stata eseguita utilizzando un resistore di carico da 20k - e successivamente ho deciso per raccomandare 10k come valore predefinito, dovrebbe essere più sensibile in questo modo. Questo è tutto. Se disponi di un misuratore di CO affidabile e hai assemblato questa scheda, condividi alcuni feedback sulla precisione del sensore: sarebbe bello raccogliere statistiche su vari sensori e migliorare le ipotesi di schizzo predefinite.

Consigliato: