Taula de continguts:

Monitor Arduino CO amb sensor MQ-7: 8 passos (amb imatges)
Monitor Arduino CO amb sensor MQ-7: 8 passos (amb imatges)

Vídeo: Monitor Arduino CO amb sensor MQ-7: 8 passos (amb imatges)

Vídeo: Monitor Arduino CO amb sensor MQ-7: 8 passos (amb imatges)
Vídeo: Retrobrighting without Peroxide - Alternatives Tested 2024, Desembre
Anonim
Monitor Arduino CO mitjançant sensor MQ-7
Monitor Arduino CO mitjançant sensor MQ-7
Monitor Arduino CO mitjançant sensor MQ-7
Monitor Arduino CO mitjançant sensor MQ-7

Unes paraules per què es va crear aquest instructiu: un dia la mare de la meva xicota ens va trucar a mitja nit perquè se sentia molt malament: tenia marejos, taquicàrdia, nàusees, hipertensió arterial, fins i tot es va desmaiar per temps desconegut (probablement ~ 5 minuts, però no hi ha manera d’explicar-ho), tot sense cap motiu aparent. Viu en un petit poble allunyat dels hospitals (a 60 km del nostre lloc, a 30 km de l’hospital més proper, a 10 km sense cap carretera normal), així que ens vam dirigir cap a ella i hi vam arribar poc després de l’ambulància. Va ser hospitalitzada i al matí es va sentir gaire bé, però els metges no van poder trobar-ne la causa. L’endemà vam tenir una idea: podria haver estat una intoxicació per CO, ja que tenia una caldera d’aigua de gas (a la foto) i va estar asseguda a prop durant tota la nit quan va passar. però mai vaig tenir temps de muntar-hi un esquema, de manera que aquest va ser el moment perfecte per fer-ho. Després d’una hora buscant instruccions a Internet, em vaig adonar que no trobava cap guia que, al mateix temps, seguís les instruccions del fabricant del sensor proporcionades al full de dades i no expliqués res (un exemple semblava tenir un codi força bo, però no estava clar com aplicar-lo, d’altres se simplificaven massa i no funcionarien bé). Per tant, vam dedicar unes 12 hores a desenvolupar esquemes, fabricar i imprimir caixes en 3D, provar i calibrar el sensor, i l’endemà vam anar a la caldera sospitosa. Va resultar que els nivells de CO allí eren extremadament alts i podrien ser mortals si el temps d’exposició al CO fos més llarg. Per tant, crec que qualsevol persona que tingui una situació similar (com ara una caldera de gas o qualsevol altra combustió que passi a l'interior d'un espai habitable) hauria de disposar d'aquest sensor per evitar que passi alguna cosa dolenta.

Tot el que va passar fa dues setmanes, des de llavors vaig millorar els esquemes i el programa bastant, i ara sembla que és raonablement bo i relativament senzill (no de 3 línies de codi senzill, però encara). Tot i que espero que algú amb un mesurador de CO precís em doni alguns comentaris sobre el calibratge predeterminat que he posat a l’esbós; sospito que no és gens bo. Heus aquí una guia completa amb algunes dades experimentals.

Pas 1: llista de materials

Factura de materials
Factura de materials

Necessitareu: 0. Taula Arduino. Prefereixo el clon xinès d’Arduino Nano pel seu preu excepcional de 3 dòlars, però qualsevol arduino de 8 bits funcionarà aquí. Sketch utilitza alguns temporitzadors avançats i només s’ha provat amb microcontrolador atmega328, tot i que probablement també funcionarà bé en altres. Sensor de CO MQ-7. El més habitualment disponible amb aquest mòdul de sensor Flying Fish, ha d’executar-se amb una petita modificació, detalls al següent pas, o bé podeu utilitzar un sensor MQ-7 separat.

2. Transistor bipolar NPN. Pràcticament qualsevol transistor NPN que pugui manejar 300 mA o més funcionarà aquí. El transistor PNP no funcionarà amb un mòdul Flying Fish esmentat (perquè té un pin escalfador soldat a la sortida del sensor), però es pot utilitzar amb un sensor MQ-7 discret.

3. Resistències: 2 x 1 k (de 0,5 k a 1,2 k funcionaran bé) i 1 x 10 k (és millor mantenir-les precises, tot i que si heu d'utilitzar un valor diferent, ajusteu la variable reference_resistor_kOhm a l'esbós en conseqüència).

4. Condensadors: 2 x 10uF o més. Es requereixen tàntal o ceràmica, l’electrolític no funcionarà bé a causa de l’alta ESR (no serà capaç de proporcionar prou corrent per suavitzar l’ondulació d’alta intensitat). LEDs verds i vermells per indicar el nivell de CO actual (també podeu utilitzar un únic LED de doble color amb 3 terminals, tal com hem utilitzat al nostre prototip de caixa groga).6. Zumbador piezoelèctric per indicar un alt nivell de CO. Taula de pa i cables (també podeu soldar-ho tot amb passadors Nano o introduir-los a les preses de l'Uno, però és fàcil cometre un error d'aquesta manera).

Pas 2: modificació del mòdul o cablejat del sensor discret

Modificació del mòdul o cablejat del sensor discret
Modificació del mòdul o cablejat del sensor discret

Per al mòdul, heu de dessoldar la resistència i el condensador, tal com es mostra a la foto. Bàsicament podeu dessoldar-ho tot si voleu: l'electrònica del mòdul és totalment inútil, només l'utilitzem com a suport del sensor, però aquests dos components us impediran obtenir lectures correctes, Si utilitzeu un sensor discret, connecteu els passadors de l'escalfador (H1 i H2) a 5V i al col·lector del transistor corresponentment. Connecteu un costat de detecció (qualsevol dels pins A) a 5 V, un altre costat de detecció (qualsevol dels pins B) a la resistència de 10 k, igual que el pin analògic del mòdul en esquemes.

Pas 3: Principi de funcionament

Principi de funcionament
Principi de funcionament
Principi de funcionament
Principi de funcionament

Per què necessitem totes aquestes complicacions, per què no connectar 5V, terra i simplement obtenir lectures? Bé, no obtindreu res útil d’aquesta manera, malauradament. Segons el full de dades MQ-7, el sensor ha de funcionar i cicles de baix escalfament per obtenir mesures adequades. Durant la fase de baixa temperatura, el CO s’absorbeix a la placa, produint dades significatives. Durant la fase d’alta temperatura, el CO absorbit i altres compostos s’evaporen de la placa del sensor, netejant-la per a la següent mesura.

Per tant, en general l’operació és senzilla:

1. Apliqueu 5 V durant 60 segons, no utilitzeu aquestes lectures per mesurar CO.

2. Apliqueu 1,4 V durant 90 segons, utilitzeu aquestes lectures per mesurar CO.

3. Aneu al pas 1.

Però aquest és el problema: Arduino no pot proporcionar prou energia per fer funcionar aquest sensor des dels seus pins: l’escalfador del sensor requereix 150 mA, mentre que el pin Arduino no pot proporcionar més de 40 mA, de manera que, si s’adjunta directament, el pin Arduino es cremarà i el sensor encara guanyarà no funciona. Per tant, hem d’utilitzar algun tipus d’amplificador de corrent que necessiti corrent d’entrada petit per controlar el corrent de sortida gran. Un altre problema és aconseguir 1.4V. L’única manera d’obtenir aquest valor de forma fiable sense introduir molts components analògics és utilitzar l’enfocament PWM (Pulse Width Modulation) amb retroalimentació que controlarà el voltatge de sortida.

El transistor NPN resol tots dos problemes: quan s’encén constantment, el voltatge del sensor és de 5 V i s’escalfa per a la fase d’alta temperatura. Quan apliquem PWM a la seva entrada, el corrent polsa, després el suavitza el condensador i el voltatge mitjà es manté constant. Si fem servir PWM d’alta freqüència (a l’esbós té una freqüència de 62,5 kHz) i fem una mitjana de moltes lectures analògiques (a l’esbós fem una mitjana de més de 1000 lectures), el resultat és bastant fiable.

És fonamental afegir condensadors segons els esquemes. Les imatges aquí il·lustren la diferència de senyal amb i sense condensador C2: sense ell, la ondulació PWM és clarament visible i distorsiona significativament les lectures.

Pas 4: esquemes i taulers de pa

Esquemes i taulers de pa
Esquemes i taulers de pa
Esquemes i taulers de pa
Esquemes i taulers de pa
Esquemes i taulers de pa
Esquemes i taulers de pa

Aquí teniu el muntatge d’esquemes i taulers.

AVÍS! Es requereix la modificació d’un mòdul de ruptura estàndard. Sense modificació, el mòdul no serveix de res. La modificació es descriu al segon pas

És important utilitzar els pins D9 i D10 per als LED, ja que allà tenim sortides de maquinari Timer1, que permetran canviar els seus colors sense problemes. Els pins D5 i D6 s’utilitzen per al brunzidor, perquè D5 i D6 són sortides del temporitzador de maquinari0. Els configurarem perquè siguin inversos entre si, de manera que canviaran entre els estats (5V, 0V) i (0V, 5V), produint així so al timbre. Advertència: això afecta la principal interrupció de temps d'Arduino, de manera que totes les funcions dependents del temps (com millis ()) no produiran resultats correctes en aquest esbós (més informació sobre això més endavant). D11, però és menys convenient posar fil a D11 que a D3), de manera que l’utilitzem per proporcionar PWM per al transistor de control de voltatge. La resistència R1 s’utilitza per controlar la brillantor dels LED. Pot ser de 300 a 3000 Ohm, 1k és bastant òptim en lluminositat / consum d'energia. La resistència R2 s'utilitza per limitar el corrent base del transistor. No ha de ser inferior a 300 ohms (per no sobrecarregar el pin Arduino) ni superior a 1500 ohms. 1k hi ha una opció segura.

La resistència R3 s'utilitza en sèrie amb placa del sensor per crear un divisor de tensió. El voltatge a la sortida del sensor és igual a R3 / (R3 + Rs) * 5V, on Rs és la resistència del sensor actual. La resistència del sensor depèn de la concentració de CO, de manera que el voltatge canvia en conseqüència. El condensador C1 s’utilitza per suavitzar la tensió PWM d’entrada del sensor MQ-7, més gran és la seva capacitat, millor, però també ha de tenir una ESR baixa, de manera que ceràmica (o tàntal) aquí es prefereix un condensador, un electrolític no funcionarà bé.

El condensador C2 s’utilitza per suavitzar la sortida analògica del sensor (la tensió de sortida depèn de la tensió d’entrada, i aquí tenim un PWM de corrent força alt que afecta tots els esquemes, de manera que necessitem C2). La solució més senzilla és utilitzar el mateix condensador que el transistor C1. NPN o bé condueix corrent tot el temps per proporcionar corrent elevat a l'escalfador del sensor, o bé funciona en mode PWM reduint així el corrent de calefacció.

Pas 5: Programa Arduino

Programa Arduino
Programa Arduino

ADVERTÈNCIA: EL SENSOR requereix una calibració manual per a qualsevol ús pràctic. SENSE CALIBRACIÓ, EN FUNCIÓ DELS PARÀMETRES DEL SEU SENSOR PARTICULAR, AQUEST ESBOSC POT ACTIVAR L’ALARMA EN AIRE NET O NO DETECTAR LA CONCENTRACIÓ LETAL DE MONOXID DE CARBONI

La calibració es descriu als passos següents. El calibratge aproximat és molt senzill, el precís és força complex.

A nivell general, el programa és bastant senzill:

Primer calibram el nostre PWM per tal de produir 1,4 V estables requerits pel sensor (l’amplada adequada del PWM depèn de molts paràmetres com els valors exactes de la resistència, la resistència d’aquest sensor, la corba VA del transistor, etc.), de manera que la millor manera és provar diversos valors. A continuació, realitzem un cicle continu de 60 segons d’escalfament i 90 segons de mesura. A la implementació es complica una mica. Hem d’utilitzar temporitzadors de maquinari perquè tot el que tenim aquí necessita PWM estable a alta freqüència per funcionar correctament. El codi s’adjunta aquí i es pot descarregar des del nostre github, així com la font d’esquemes de Fritzing. Al programa hi ha 3 funcions que gestionen els temporitzadors: setTimer0PWM, setTimer1PWM, setTimer2PWM. manipula tot el que hi ha a dins. i estableix els valors del temporitzador adequats per canviar entre la calefacció de 5V i 1,4V. L’estat dels LEDs s’estableix mitjançant la funció setLEDs que accepta la brillantor verda i vermella a la seva entrada (a escala lineal 1-100) i el converteix en la configuració del temporitzador corresponent.

L’estat del brunzidor es controla mitjançant les funcions buzz_on, buzz_off, buzz_beep. Les funcions On / Off activen i desactiven el so, la funció de so produeix una seqüència de pitits específica amb un període de 1,5 segons si es crida periòdicament (aquesta funció torna immediatament, de manera que no posa en pausa el programa principal, però cal trucar-lo una i altra vegada per produir un patró de pit).

El programa executa primer la funció pwm_adjust que descobreix l’amplada adequada del cicle PWM per tal d’aconseguir 1,4 V durant la fase de mesura. A continuació, emet un so diverses vegades per indicar que el sensor està a punt, passa a la fase de mesura i inicia el bucle principal.

Al bucle principal, el programa comprova si hem passat prou temps a la fase actual (90 segons per a la fase de mesura, 60 segons per a la fase de calefacció) i, si és així, canvia la fase actual. També actualitza constantment les lectures del sensor mitjançant un suavitzat exponencial: new_value = 0,999 * old_value + 0,001 * new_reading. Amb aquests paràmetres i cicle de mesura, fa una mitjana del senyal durant aproximadament els darrers 300 mil·lisegons. SENSE CALIBRACIÓ, EN FUNCIÓ DELS PARÀMETRES DEL SEU SENSOR PARTICULAR, AQUEST ESBOSC POT ACTIVAR L’ALARMA EN AIRE NET O NO DETECTAR LA CONCENTRACIÓ LETAL DE MONOXID DE CARBONI.

Pas 6: Primera execució: què cal esperar

Primera carrera: què esperar
Primera carrera: què esperar

Si heu muntat tot correctament, després d’executar l’esbós, veureu alguna cosa així al monitor sèrie:

ajustant PWM w = 0, V = 4,93

ajustant PWM w = 17, V = 3,57 Resultat PWM: amplada 17, tensió 3,57

A continuació, una sèrie de números que representen les lectures del sensor actuals. Aquesta part ajusta l’amplada de PWM per tal de produir la tensió de l’escalfador del sensor el més propera a 1,4 V, la tensió mesurada es dedueix de 5 V, de manera que el nostre valor mesurat ideal és de 3,6 V. Si aquest procés mai no acaba ni acaba després d'un sol pas (donant com a amplada igual a 0 o 254), aleshores alguna cosa no va bé. Comproveu si el transistor és realment NPN i està connectat correctament (assegureu-vos que heu utilitzat la base, el col·lector, els pins de l’emissor a la dreta; la base va a D3, el col·lector a MQ-7 i l’emissor a terra. incorrecte per a alguns transistors) i assegureu-vos que heu connectat l’entrada del sensor a l’entrada A1 d’Arduino. Si tot està bé, hauríeu de veure al Serial Plotter de l’Arduino IDE una cosa similar a la imatge. Els cicles de calefacció i mesura de 60 i 90 segons de durada s’executen un darrere l’altre, amb CO ppm mesurats i actualitzats al final de cada cicle. Podeu agafar flama oberta a prop del sensor quan el cicle de mesurament estigui gairebé acabat i veure com afectarà les lectures (depenent del tipus de flama, pot produir fins a 2000 ppm de concentració de CO a l’aire lliure, de manera que tot i que només una petita part de de fet entra al sensor, encara activarà l'alarma i no s'apagarà fins al final del cicle següent). Ho vaig mostrar a la imatge, així com la resposta al foc de l'encenedor.

Pas 7: Calibració del sensor

Calibració del sensor
Calibració del sensor
Calibració del sensor
Calibració del sensor

Segons el full de dades del fabricant, el sensor hauria d’executar cicles de calefacció-refrigeració durant 48 hores seguides abans de poder calibrar-lo. I ho hauríeu de fer si teniu intenció d’utilitzar-lo durant molt de temps: en el meu cas, la lectura del sensor a l’aire net va canviar durant un 30% al llarg de 10 hores. Si no ho teniu en compte, podeu obtenir un resultat de 0 ppm quan hi hagi 100 ppm de CO. Si no voleu esperar 48 hores, podeu controlar la sortida del sensor al final del cicle de mesura. Quan passi més d'una hora no canviarà durant més de 1-2 punts; podeu deixar d'escalfar-hi.

Calibratge aproximat:

Després d'executar l'esbós durant almenys 10 hores en aire net, preneu el valor del sensor brut al final del cicle de mesura, 2-3 segons abans de començar la fase d'escalfament, i escriviu-lo a la variable sensor_reading_clean_air (línia 100). Això és. El programa estimarà altres paràmetres del sensor, no seran precisos, però haurien de ser suficients per distingir entre 10 i 100 ppm de concentració.

Calibratge precís:

Recomano encaridament trobar un mesurador de CO calibrat, fer una mostra de CO de 100 ppm (això es pot fer prenent una mica de gasos de combustió a la xeringa - la concentració de CO pot arribar a ser de diversos milers de ppm - i posar-la lentament a un pot tancat amb mesurador calibrat i sensor MQ-7), agafeu la lectura del sensor en brut a aquesta concentració i poseu-la a la variable sensor_reading_100_ppm_CO. Sense aquest pas, la vostra mesura de ppm es pot equivocar diverses vegades en qualsevol direcció (encara està bé si necessiteu una alarma per concentració perillosa de CO a casa, on normalment no hi hauria d’haver CO, però no és bona per a cap aplicació industrial).

Com que no tenia cap mesurador de CO, vaig utilitzar un enfocament més sofisticat. Primer vaig preparar una alta concentració de CO mitjançant combustió en volum aïllat (primera foto). En aquest article he trobat les dades més útils, inclòs el rendiment de CO per a diferents tipus de flama; no apareix a la foto, però l’experiment final va utilitzar la combustió de gas propà, amb la mateixa configuració, que va resultar en una concentració de CO de 5.000 ppm. Després es va diluir 1:50 per aconseguir 100 ppm, tal com es mostra a la segona foto, i es va utilitzar per determinar el punt de referència del sensor.

Pas 8: algunes dades experimentals

Algunes dades experimentals
Algunes dades experimentals

En el meu cas, el sensor va funcionar bastant bé: no és molt sensible per a concentracions realment baixes, però prou bo per detectar res superior a 50 ppm. Vaig intentar augmentar la concentració gradualment, fent mesures, i vaig construir un conjunt de gràfics. Hi ha dos conjunts de línies 0ppm: verd pur abans de l'exposició al CO i verd groc després. Sembla que el sensor canvia lleugerament la seva resistència a l’aire net després de l’exposició, però aquest efecte és petit. Sembla que no sigui capaç de distingir clarament entre les concentracions de 8 i 15, 15 i 26, 26 i 45 ppm, però la tendència és molt clara, de manera que es pot saber si la concentració està en el rang de 0-20 o 40-60 ppm.. Per a concentracions més altes, la dependència és molt més distintiva: quan s’exposa a l’escapament d’una flama oberta, la corba puja des del principi sense baixar del tot i la seva dinàmica és totalment diferent. Per tant, per a concentracions elevades no hi ha dubte que funciona de manera fiable, tot i que no puc confirmar-ne la precisió, ja que no tinc cap mesurador de CO nominal. A més, aquest conjunt d’experiments es van fer amb una resistència de càrrega de 20 k i, després, vaig decidir per recomanar 10k com a valor per defecte, hauria de ser més sensible d’aquesta manera. Si teniu un mesurador de CO fiable i heu muntat aquest tauler, compartiu-nos alguns comentaris sobre la precisió del sensor; seria fantàstic recollir estadístiques sobre diversos sensors i millorar els supòsits d’esbós per defecte.

Recomanat: