Rilevatore di fughe di gas

Salute. Ho bisogno di una mano.
Ho progettato un circuito che vorrei realizzare su PCB (penso da un service ma non escludo di farlo a casa, se mi gira). Si tratta di un rilevatore di fughe di gas basato su 2 sensori MQ-4 e MQ-7 pilotato da un Attiny84. I sensori rilevano CH4 e CO, metano e monossido di carbonio. L'idea è quella di farne un paio da mettere in lavanderia, dove ho la caldaia, ed in cucina.

Vi illustro cosa fa il sensore. All'avvio, riscalda i sensori, dopodiché esegue una lettura ogni x secondi. Se i valori letti sono maggiori di quelli memorizzati in EEPROM, fa suonare un cicalino. Inoltre un paio di led (giallo e rosso) si accendono quando i valori di uno dei 2 gas passano il valore massimo e, dopo 4 letture oltre il limite, scatta l'allarme sonoro. Se i gas scendono sotto la soglia di allarme, l'allarme si spenge ma i led rosso e/o giallo lampeggiano periodicamente, in modo da avvisare l'utente che l'allarme è scattato in sua assenza per la presenza di una concentrazione superiore alla media di uno o di tutti e 2 i gas.

Sulla scheda ci sono 2 pulsanti. Uno è il reset, l'altro è un pulsantino per gestire il circuito. Quando i led lampeggiano alternativamente per segnalare che è scattato un allarme, la pressione del pulsantino azzera questo lampeggio. Se si preme il pulsantino mentre si mette a Vcc il ponticello normalmente pullato-basso che si vede nello schema, si entra in modalità programmazione: la scheda attende 5 minuti durante i quali riscalda i sensori, dopodiché effettua una lettura e memorizza in EEPROM i dati ambientali maggiorati di un valore fisso in modo da creare la soglia di allarme adattata all'ambiente in cui la scheda andrà a lavorare.

Per pilotare il cicalino uso un transistor, così come per alternare l'alimentazione al sensore di CO, che deve essere di 1V4 per 90 secondi e di 5V per 60 secondi. Prima del transistor che regola la tensione del sensore del CO ho messo un filtro RC per "ammorbidire" il segnale PWM.

Lo schema è in allegato, se mi dite le eventuali inesattezze mi fareste una cortesia. Una volta corretti gli eventuali bug, mi realizzo la schedina (ho già il suocero che ne ha prenotata una :wink: , poi se qualcuno è interessato posso anche rilasciare il sorgente dello sketch che la pilota. Grazie a tutti.

Il jumper JP1 mi sembra impostato male, ma vorrei capire come intendi farlo funzionare.
Sulla base di Q1 metterei una pull-down di 22K, tanto per stabilizzare il TR.
Il C2 usalo ceramico che è non polarizzato, più piccolo e comodo da usare.
Il C1 lo metterei da 47 o anche 100µF, devi tener conto dei picchi di assorbimento, un po' di serbatotio non fa mai male.
I sensori sono certo che li hai "schemati" come da datasheet, quindi niente da dire....
Sull'ISP invece non sono d'accordo, a parte che la pull-down di BUTTON secondo me non ti fa fare la programmazione o comunque potrebbe crearti problemi, sei sicuro che "sparare" sequenze di bit a pilotare il VReg facciano bene al sensore?
Come ti dissi in altra occasione, MISO, MOSI e SCK dovrebbero essere liberi da carichi pilotati e da pull-down; se capisco cosa devi fare con quel JP "program" forse si potrebbe adottare la soluzione che ho usato io con successo, un doppio jumper (visto che uno dei tre segnali non aveva problemi) o anche un dip-switch che è anche più elegante...

menniti:
Il jumper JP1 mi sembra impostato male, ma vorrei capire come intendi farlo funzionare.

Hai ragione. PROGR deve stare nel mezzo, l'ho invertito con GND.
Funziona così: lo stato del pin PROGR viene letto ad ogni pressione del tasto S1. Normalmente PROGR è ponticellato a GND così che sul pin leggo uno stato LOW ed ignoro il pin. Se lo ponticello ad HIGH, nel momento in cui premo S1 e leggo HIGH su PROGR, entro nella modalità di taratura: il circuito si mette in riscaldamento dei sensori e dopo 5 minuti legge i valori medi, memorizzandoli nella EEPROM. E' un modo per evitare di dover flashare il micro con i valori medi dell'ambiente in cui il dispositivo andrà a lavorare.

Sulla base di Q1 metterei una pull-down di 22K, tanto per stabilizzare il TR.

OK.

Il C2 usalo ceramico che è non polarizzato, più piccolo e comodo da usare.

Fa lo stesso? Di solo come decoupling uso sempre un elettrolitico.

Il C1 lo metterei da 47 o anche 100µF, devi tener conto dei picchi di assorbimento, un po' di serbatotio non fa mai male.

Inizialmente era da 100uF ma mi pareva esagerato così l'avevo messo da 10 :sweat_smile:

I sensori sono certo che li hai "schemati" come da datasheet, quindi niente da dire....

No, aspetta... sul datasheet non mi pareva si parlasse di schermatura. I sensori sono questi:
http://www.watterott.com/en/Carbon-Monoxide-Sensor-MQ-7
http://www.watterott.com/en/Methane-CNG-Gas-Sensor-MQ-4
Hanno già un involucro protettivo. Inoltre sono montati su questa breakout board:
http://www.watterott.com/en/Gas-Sensor-Breakout-Board
per isolarli dalla breadboard/PCB sottostante.

Sull'ISP invece non sono d'accordo, a parte che la pull-down di BUTTON secondo me non ti fa fare la programmazione o comunque potrebbe crearti problemi, sei sicuro che "sparare" sequenze di bit a pilotare il VReg facciano bene al sensore?
Come ti dissi in altra occasione, MISO, MOSI e SCK dovrebbero essere liberi da carichi pilotati e da pull-down; se capisco cosa devi fare con quel JP "program" forse si potrebbe adottare la soluzione che ho usato io con successo, un doppio jumper (visto che uno dei tre segnali non aveva problemi) o anche un dip-switch che è anche più elegante...

Sul fatto che riesca a programmarli posso dirti che ci riesco. Sul fatto di sparare 0/1 sul pin collegato al transitor di pilotaggio.... non ci avevo pensato :roll_eyes:
Il jumper PROGR è ciò che ti ho illustrato più sopra. Uhm... E se usassi un tri-state buffer per collegare i pin al micro durante il normale funzionamento, così da isolare l'elettronica di pilotaggio dal micro durante la programmazione?

Jumper: ok, solo che io metterei una R anche sul +5V, in tal modo quando programmi
C2: sì, fa lo stesso, anzi la norma dei disaccoppiatori è sempre il ceramico o poliestere; forse anche i sensori lo gradiscono, ma probabilmente è già on-board
Sensori: ho scritto "schemati" NON schermati, intendendo dire che hai applicato lo schema del datasheet XD.
Riguardo il "riscaldamento" tu parli al plurale ma lo schema dice che il B1 di U2 va a GND.
La soluzione del tri-state mi sembra eccessiva, una volta che avrai fatto il lavoro mica vai da tuo suocero 12 volte al giorno a riprogrammare, mettere tre jumper (il dip-switch NON va bene, ho sbagliato prima...) significa fare le cose per bene e cambiare facilmente da programmazione a funzionamento, facendo in modo che la modalità programmazione coincida per il progr con la pull-up, ripeto che le pull-down possono dare problemi, io li ho avuti.

Lodevole lavoro Leo..
Se non ne avessi comprati un paio a meno di 5 eur, poco tempo fa, ti seguirei a ruota :smiley:

Io aggiungerei un button di test dell'allarme: è del tutto inutile ai fini del sensore il sè, ma per l'utente poter provare a sentire l'allarme è di conforto :stuck_out_tongue:

menniti:
Jumper: ok, solo che io metterei una R anche sul +5V, in tal modo quando programmi

OK.

C2: sì, fa lo stesso, anzi la norma dei disaccoppiatori è sempre il ceramico o poliestere; forse anche i sensori lo gradiscono, ma probabilmente è già on-board

Uhm... dal datasheet non mi pare. Si parla solo della R di carico.

Sensori: ho scritto "schemati" NON schermati, intendendo dire che hai applicato lo schema del datasheet XD.

Sorry :sweat_smile:

Riguardo il "riscaldamento" tu parli al plurale ma lo schema dice che il B1 di U2 va a GND.

Parlo al plurale riferendomi ai 2 sensori.
I collegamenti vanno: H1 e H2 a Vcc e partitore/pin analogico. A1 e B1 è la linea di alimentazione.

La soluzione del tri-state mi sembra eccessiva, una volta che avrai fatto il lavoro mica vai da tuo suocero 12 volte al giorno a riprogrammare, mettere tre jumper (il dip-switch NON va bene, ho sbagliato prima...) significa fare le cose per bene e cambiare facilmente da programmazione a funzionamento, facendo in modo che la modalità programmazione coincida per il progr con la pull-up, ripeto che le pull-down possono dare problemi, io li ho avuti.

OK. Rivedrò questa parte.

Grazie per i consigli :wink:

pitusso:
Lodevole lavoro Leo..

Grazie tante, fa piacere ogni tanto sentirsi "coccolati" XD

Io aggiungerei un button di test dell'allarme: è del tutto inutile ai fini del sensore il sè, ma per l'utente poter provare a sentire l'allarme è di conforto :stuck_out_tongue:

All'avvio il sistema esegue un'attivazione di tutte le uscite per qualche decina di millisecondi, ivi compresi led vari e cicalino.

Scusa Leo, vogliamo approfondire questa cosa dei sensori? Non sono convinto di aver ben capito.
Sono collegati in maniera differente, dallo schema si evince (correggimi se sbaglio) che mentre U2 è sempre alimentato, U1 lo è SOLO se il pin 7 dell'84 va in HIGH, anche se con un breve ritardo dovuto a C3. Ho creduto di capire che questo circuito servisse per attivare il sensore SOLO quando serve.
Avendo tu scritto in un passaggio "il circuito si mette in riscaldamento dei sensori" ho pensato ad un errore, visto che tu puoi controllare solo uno dei due, quanto ad alimentazione, non so se sono stato chiaro.
Un C da 0,1µF cer/pol per ogni sensore, sull'alimentazione, io lo prevederei, se non ti complica la vita.

Allora, chiarisco.
Il sensore di metano, MQ-7, è sempre collegato a Vcc. Il riscaldamento di cui parlavo, preciso perché sono stato ambiguo, si riferisce al solo sensore MQ-4, quello del monossido. Per "riscaldamento" non intendo dire di collegarlo all'alimentazione ma di far passare dal transistor la massima tensione possibile. Questo perché l'MQ-4 è un sensore particolare perché deve lavorare per 90 secondi a 1V4 e per 60 a 5V, ciclicamente. Sempre. Difatti nello sketch devo sempre far l'inversione trascorsi i tempi prestabilit. Ecco perché uso il transistor pilotato in PWM. Di mio ho aggiunto il filtro RC per togliere un po' di cresta al segnale, in modo che al sensore arrivi una tensione quanto più stabile possibile quando riceve il voltaggio inferiore (quando cioè l'uscita PWM non è settata a 255 ma a 80).

I sensori, chiudo, son sicuro che sono collegati bene. I collegamenti li ho ripresi anche dal sito di Sparkfun dove alcuni lettori hanno specificato come usare l'MQ-4, che è il più complicato della famiglia MQ-x.

Tornando ai C, sei sicuro che possano servire? A parte che hanno il C da 100uF subito a monte, ma i sensori sono passivissimi: si tratta di un fiamento di ossido di alluminio, nulla di più. Non penso risentano delle oscillazioni dell'alimentazione.

I C da 100nF non servono per dare stabilità alla tensione bensì per prevenire autooscillazioni e bloccare i disturbi che potrebbero falsare i valori in uscita dai sensori. Immagino non servano altrimenti li avrebbero previswti sullo schedino com'è possibile anche che non li abbiano messi dando per scontato che chi li usa sappia che sono componenti standard.

Sui sensori NON stavo mettendo in dubbio il collegamento/funzionamento, l'ho chiarito dal primo post che ero certo che avevi preso uno schema applicativo, tu hai usato il plurale ed io osservavo che sono alimentati in modo differente, tutto qui, ora mi è chiaro a cosa serve quel circuito, ma prima che ne potevo sapere? :cold_sweat:

menniti:
Sui sensori NON stavo mettendo in dubbio il collegamento/funzionamento, l'ho chiarito dal primo post che ero certo che avevi preso uno schema applicativo, tu hai usato il plurale ed io osservavo che sono alimentati in modo differente, tutto qui, ora mi è chiaro a cosa serve quel circuito, ma prima che ne potevo sapere? :cold_sweat:

Hai ragione, ho spiegato a grandi linee come operavano ma non ero sceso nei dettagli.

Bene, ho cercato di seguire i tuoi consigli:

  1. messo un C ceramico da 100 nF anche sulle alimentazioni dei sensori;
  2. invertita la logica del pulsantino S1 e del jumper 1 collegato al pin PROGR: adesso sono normalmente pullati alto, e vengono messi a massa con R di pull-down.
  3. messo un jumper anche all'ingresso del transistor Q2 in modo da isolarlo in caso di riprogrammazione ISP. Anche in questo caso ho messo una R di pull-up
  4. messa R di 22K tra B e E del transistor Q1
  5. messo C da 100 uF sull'ingresso dell'alimentazione

Relativamente ai punti 2 e 3, per programmare tramite ISP basta spostare il jumperino 2: gli altri sono già normalmente pullati alti.

Direi che è perfetto così XD
Fai solo una prova, perché non so che effetti può avere sul filtro, metti una R da 22K anche tra base di Q2 del e GND, per lo stesso motivo di Q1.
Riguardo le R di pull-up sui jumper in posizione "ISP": nel caso di PROG se non ricordo male ti serve per la sua operatività, nel caso di V_REG, se non ti serve, non è necessario usarla, è sufficiente che il pin sia "libero", quindi potresti non metterla; il fatto che gli altri due pin MISO e SCK siano in pull-up non ha alcuna importanza rispetto a questo.

Ok. Aggiungerò anche la R sulla base di Q2. Sei un "tesssoro" :stuck_out_tongue_closed_eyes:

leo72:
Ok. Aggiungerò anche la R sulla base di Q2. Sei un "tesssoro" :stuck_out_tongue_closed_eyes:

sssssssìììì, nel senso che te lo sto facendo ssssspendere a botte di R aggiunte :~

Ecchemmefrega :smiley:
L'importante è che funzioni bene. Come detto, vorrei farci il PCB. Se non funziona, spendo molto di più ]:smiley:

leo72:
Ecchemmefrega :smiley:
L'importante è che funzioni bene. Come detto, vorrei farci il PCB. Se non funziona, spendo molto di più ]:smiley:

Funziona, funziona :wink:
Prima di andare "in stampa" conta su di me :wink:

:wink:

A distanza astronomica, pubblico il codice per chi volesse replicare il progetto oppure usare parti di esso.
Il codice è rilasciato sotto licenza GNU GPL 3.0.

Ho riscritto lo sketch in modo che sia compatibile con l'IDE 1.0.x. Utilizzo inoltre la mia libreria secTimer come contasecondi (potete scaricarla dal mio sito, link nella mia firma).

CO_CH4_sensor_tiny84_new.zip (3.81 KB)

Ottimo.

Hai anche realizzato un PCB?