Inhaltsverzeichnis:

Arduino CO-Monitor mit MQ-7-Sensor - Gunook
Arduino CO-Monitor mit MQ-7-Sensor - Gunook

Video: Arduino CO-Monitor mit MQ-7-Sensor - Gunook

Video: Arduino CO-Monitor mit MQ-7-Sensor - Gunook
Video: How to use a MQ-7 carbon monoxide detector module 2024, November
Anonim
Arduino CO-Monitor mit MQ-7-Sensor
Arduino CO-Monitor mit MQ-7-Sensor
Arduino CO-Monitor mit MQ-7-Sensor
Arduino CO-Monitor mit MQ-7-Sensor

Ein paar Worte, warum dieses instructable erstellt wurde: Eines Tages rief uns die Mutter meiner Freundin mitten in der Nacht an, weil sie sich wirklich krank fühlte - sie hatte Schwindel, Tachykardie, Übelkeit, Bluthochdruck, sie wurde sogar für unbekannte Zeit ohnmächtig (wahrscheinlich ~ 5.) Minuten, aber es gibt keine Möglichkeit zu sagen), alles ohne ersichtlichen Grund. Sie lebt in einem kleinen Dorf weit weg von Krankenhäusern (60 km von uns entfernt, 30 km zum nächsten Krankenhaus, 10 km ohne normale Straße dazwischen), also eilten wir zu ihr und kamen kurz nach dem Krankenwagen dort an. Sie wurde ins Krankenhaus eingeliefert und am Morgen fühlte sie sich fast gut, aber die Ärzte konnten die Ursache nicht finden. Am nächsten Tag hatten wir eine Idee: Es könnte eine CO-Vergiftung sein, da sie einen Gaswasserboiler hat (auf dem Foto) und den ganzen Abend daneben saß, als es passierte. Wir haben kürzlich den CO-Sensor MQ-7 gekauft, hatte aber nie Zeit, einen Schaltplan dafür zusammenzustellen, also war dies der perfekte Zeitpunkt dafür. Nachdem ich eine Stunde im Internet nach Anleitungen gesucht hatte, stellte ich fest, dass ich keine Anleitung finden kann, die gleichzeitig den Anweisungen des Sensorherstellers in seinem Datenblatt folgt und überhaupt alles erklärt (ein Beispiel schien einen ziemlich guten Code zu haben, aber es war nicht klar, wie man es anwendet, andere waren zu stark vereinfacht und würden nicht gut funktionieren). Also verbrachten wir ungefähr 12 Stunden damit, Schaltpläne zu entwickeln, 3D-Gehäuse zu erstellen und zu drucken, den Sensor zu testen und zu kalibrieren, und gingen am nächsten Tag zum verdächtigen Kessel. Es stellte sich heraus, dass der CO-Gehalt dort extrem hoch war und bei längerer CO-Exposition tödlich sein könnte. Ich glaube also, dass jeder, der eine ähnliche Situation hat (wie ein Gaskessel oder eine andere Verbrennung in einem Wohnraum), einen solchen Sensor bekommen sollte, um zu verhindern, dass etwas Schlimmes passiert.

All das ist vor zwei Wochen passiert, seitdem habe ich Schaltpläne und Programm ziemlich verbessert, und jetzt scheint es einigermaßen gut und relativ einfach zu sein (nicht 3-Zeilen-Code einfach, aber immer noch). Obwohl ich hoffe, dass mir jemand mit einem präzisen CO-Meter Feedback zur Standardkalibrierung gibt, die ich in die Skizze eingefügt habe, vermute ich, dass es alles andere als gut ist. Hier ist eine vollständige Anleitung mit einigen experimentellen Daten.

Schritt 1: Stückliste

Stückliste
Stückliste

Sie benötigen: 0. Arduino-Board. Ich bevorzuge den chinesischen Klon von Arduino Nano für seinen hervorragenden Preis von 3 US-Dollar, aber jedes 8-Bit-Arduino wird hier funktionieren. Sketch verwendet einige erweiterte Timer-Operationen und wurde nur auf dem atmega328-Mikrocontroller getestet - obwohl es wahrscheinlich auch auf anderen gut funktionieren wird.1. CO-Sensor MQ-7. Am häufigsten mit diesem Flying Fish Sensormodul erhältlich, muss es eine kleine Modifikation durchlaufen, Details im nächsten Schritt, oder Sie können einen separaten MQ-7sensor verwenden.

2. NPN-Bipolartransistor. Praktisch jeder NPN-Transistor, der 300 mA oder mehr verarbeiten kann, funktioniert hier. Der PNP-Transistor funktioniert nicht mit einem erwähnten Flying-Fish-Modul (da ein Heizstift an den Sensorausgang gelötet ist), kann aber mit einem diskreten MQ-7-Sensor verwendet werden.

3. Widerstände: 2 x 1k (von 0,5k bis 1,2k funktioniert gut) und 1 x 10k (dieser wird am besten genau gehalten - wenn Sie jedoch unbedingt einen anderen Wert verwenden müssen, passen Sie die Variable reference_resistor_kOhm in der Skizze entsprechend an).

4. Kondensatoren: 2 x 10uF oder mehr. Tantal oder Keramik sind erforderlich, die Elektrolyse funktioniert aufgrund des hohen ESR nicht gut (sie können nicht genug Strom liefern, um die Hochstromwelligkeit zu glätten).5. Grüne und rote LEDs zur Anzeige des aktuellen CO-Gehalts (Sie können auch eine einzelne zweifarbige LED mit 3 Anschlüssen verwenden, wie wir sie in unserem Prototyp der gelben Box verwendet haben).6. Piezo-Summer zur Anzeige eines hohen CO-Gehalts.7. Steckbrett und Drähte (Sie können auch alles auf Nano-Pins löten oder in Uno-Buchsen quetschen, aber auf diese Weise kann man leicht einen Fehler machen).

Schritt 2: Modulmodifikation oder diskrete Sensorverkabelung

Modulmodifikation oder diskrete Sensorverkabelung
Modulmodifikation oder diskrete Sensorverkabelung

Für das Modul müssen Sie Widerstand und Kondensator entlöten, wie auf dem Foto gezeigt. Sie können im Grunde alles entlöten, wenn Sie möchten - die Modulelektronik ist völlig nutzlos, wir verwenden sie nur als Halterung für den Sensor selbst, aber diese beiden Komponenten verhindern, dass Sie korrekte Messwerte erhalten, Wenn Sie einen diskreten Sensor verwenden, schließen Sie die Heizstifte (H1 und H2) an 5 V und den Kollektor des Transistors entsprechend an. Befestigen Sie eine Sensorseite (beliebiger A-Pin) an 5V, eine andere Sensorseite (beliebiger B-Pin) an 10k-Widerstand, genau wie der analoge Pin des Moduls im Schaltplan.

Schritt 3: Funktionsprinzip

Funktionsprinzip
Funktionsprinzip
Funktionsprinzip
Funktionsprinzip

Warum brauchen wir all diese Komplikationen überhaupt, warum nicht 5V, Masse anschließen und nur Messwerte erhalten?Nun, auf diese Weise erhalten Sie leider nichts Brauchbares. Laut MQ-7-Datenblatt muss der Sensor durch Hoch- und Niedrigerhitzungszyklen, um korrekte Messungen zu erhalten. Während der Tieftemperaturphase wird CO auf der Platte absorbiert, was aussagekräftige Daten liefert. Während der Hochtemperaturphase verdampfen absorbiertes CO und andere Verbindungen von der Sensorplatte und reinigen sie für die nächste Messung.

Im Allgemeinen ist die Bedienung also einfach:

1. Legen Sie 60 Sekunden lang 5 V an, verwenden Sie diese Messwerte nicht für die CO-Messung.

2. Legen Sie 1,4 V 90 Sekunden lang an und verwenden Sie diese Messwerte für die CO-Messung.

3. Gehen Sie zu Schritt 1.

Aber hier ist das Problem: Arduino kann nicht genug Strom liefern, um diesen Sensor von seinen Pins zu betreiben - die Heizung des Sensors benötigt 150 mA, während der Arduino-Pin nicht mehr als 40 mA liefern kann. Wenn er also direkt angeschlossen wird, brennt der Arduino-Pin und der Sensor gewinnt immer noch es funktioniert nicht. Wir müssen also eine Art Stromverstärker verwenden, der einen kleinen Eingangsstrom benötigt, um einen großen Ausgangsstrom zu steuern. Ein weiteres Problem ist, 1,4 V zu bekommen. Die einzige Möglichkeit, diesen Wert zuverlässig zu erhalten, ohne viele analoge Komponenten einzuführen, besteht darin, den PWM-Ansatz (Pulsweitenmodulation) mit Rückkopplung zu verwenden, die die Ausgangsspannung steuert.

Der NPN-Transistor löst beide Probleme: Wenn er ständig eingeschaltet ist, beträgt die Spannung am Sensor 5 V und er heizt für die Hochtemperaturphase. Wenn wir PWM auf seinen Eingang anwenden, pulsiert der Strom, dann wird er vom Kondensator geglättet und die durchschnittliche Spannung wird konstant gehalten. Wenn wir Hochfrequenz-PWM verwenden (in der Skizze hat sie eine Frequenz von 62,5 KHz) und viele analoge Messwerte durchschnittlich (in der Skizze durchschnittlich über ~ 1000 Messwerte), dann ist das Ergebnis ziemlich zuverlässig.

Es ist wichtig, Kondensatoren gemäß Schaltplan hinzuzufügen. Die Bilder hier veranschaulichen den Signalunterschied mit und ohne C2-Kondensator: Ohne ihn ist die PWM-Welligkeit deutlich sichtbar und verzerrt die Messwerte erheblich.

Schritt 4: Schaltpläne und Steckbrett

Schaltplan und Steckbrett
Schaltplan und Steckbrett
Schaltplan und Steckbrett
Schaltplan und Steckbrett
Schaltplan und Steckbrett
Schaltplan und Steckbrett

Hier ist der Schaltplan und die Steckbrettbaugruppe.

WARNUNG! Der Umbau eines Standard-Breakout-Moduls ist erforderlich! Ohne Modifikation Modul ist nutzlos. Die Modifikation wird im zweiten Schritt beschrieben

Es ist wichtig, die Pins D9 und D10 für LEDs zu verwenden, da wir dort Ausgänge von Hardware-Timer1 haben, die es ermöglichen, ihre Farben reibungslos zu ändern. Die Pins D5 und D6 werden für Summer verwendet, da D5 und D6 Ausgänge von Hardware-Timer0 sind. Wir werden sie so konfigurieren, dass sie invers zueinander sind, sodass sie zwischen den Zuständen (5 V, 0 V) und (0 V, 5 V) wechseln und so einen Ton auf dem Summer erzeugen. Warnung: Dies betrifft Arduinos Haupt-Timing-Interrupt, so dass alle zeitabhängigen Funktionen (wie millis()) in dieser Skizze keine korrekten Ergebnisse liefern (mehr dazu später). An Pin D3 ist ein Hardware-Timer2-Ausgang angeschlossen (sowie D11 - aber es ist weniger bequem, Kabel auf D11 zu legen als auf D3) - daher verwenden wir es, um PWM für den spannungssteuernden Transistor bereitzustellen. Der Widerstand R1 wird verwendet, um die Helligkeit von LEDs zu steuern. Er kann zwischen 300 und 3000 Ohm liegen, 1k ist in Bezug auf Helligkeit/Leistungsaufnahme eher optimal. Der Widerstand R2 wird verwendet, um den Basisstrom des Transistors zu begrenzen. Es sollte nicht niedriger als 300 Ohm sein (um den Arduino-Pin nicht zu überlasten) und nicht höher als 1500 Ohm. 1k gibt es eine sichere Wahl.

Der Widerstand R3 wird in Reihe mit der Sensorplatte verwendet, um einen Spannungsteiler zu bilden. Die Spannung am Ausgang des Sensors ist gleich R3 / (R3 + Rs) * 5V, wobei Rs der Widerstand des Stromsensors ist. Der Sensorwiderstand hängt von der CO-Konzentration ab, daher ändert sich die Spannung entsprechend. Der Kondensator C1 wird verwendet, um die PWM-Eingangsspannung des MQ-7-Sensors zu glätten, je höher seine Kapazität ist, desto besser, aber er muss auch einen niedrigen ESR haben - also Keramik (oder Tantal) Kondensator wird hier bevorzugt, Elektrolyt wird nicht gut funktionieren.

Kondensator C2 wird verwendet, um den analogen Ausgang des Sensors zu glätten (Ausgangsspannung hängt von der Eingangsspannung ab - und wir haben hier eine recht hohe Strom-PWM, die sich auf alle Schaltpläne auswirkt, daher benötigen wir C2). Die einfachste Lösung besteht darin, denselben Kondensator wie den C1. NPN-Transistor zu verwenden, der entweder ständig Strom leitet, um einen hohen Strom an der Heizung des Sensors bereitzustellen, oder im PWM-Modus arbeitet, wodurch der Heizstrom reduziert wird.

Schritt 5: Arduino-Programm

Arduino-Programm
Arduino-Programm

WARNUNG: DER SENSOR ERFORDERT MANUELLE KALIBRIERUNG FÜR JEDEN PRAKTISCHEN GEBRAUCH. OHNE KALIBRIERUNG, JE NACH PARAMETER IHRES BESTIMMTEN SENSORS, KÖNNTE DIESE SKIZZE IN REINER LUFT ALARM EINSCHALTEN ODER KEINE LETHALE KOHLENMONOXID-KONZENTRATION ERKENNEN

Die Kalibrierung wird in den folgenden Schritten beschrieben. Grobkalibrierung ist sehr einfach, präzise ist ziemlich komplex.

Auf der allgemeinen Ebene ist das Programm ziemlich einfach:

Zuerst kalibrieren wir unsere PWM, um stabile 1,4 V zu erzeugen, die vom Sensor benötigt werden (die richtige PWM-Breite hängt von vielen Parametern ab, wie den genauen Widerstandswerten, dem Widerstand dieses speziellen Sensors, der VA-Kurve des Transistors usw. usw.). und verwenden Sie eine, die am besten passt). Dann durchlaufen wir kontinuierlich einen Zyklus von 60 Sekunden Heizen und 90 Sekunden Messung. Bei der Umsetzung wird es etwas kompliziert. Wir müssen Hardware-Timer verwenden, da alles, was wir hier haben, hochfrequenzstabile PWM benötigt, um richtig zu funktionieren. Der Code ist hier angehängt und kann von unserem Github heruntergeladen werden, sowie die Schaltplanquelle in Fritzing. Im Programm gibt es 3 Funktionen, die Timer behandeln: setTimer0PWM, setTimer1PWM, setTimer2PWM. Jede von ihnen setzt den Timer im PWM-Modus mit gegebenen Parametern (im Code kommentiert) und stellt die Pulsbreite entsprechend den Eingangswerten ein. Messphasen werden mit den Funktionen startMeasurementPhase und startHeatingPhase umgeschaltet, sie alles drinnen handhaben. und stellen Sie die richtigen Timer-Werte für das Umschalten zwischen 5V und 1,4V Heizung ein. Der LED-Zustand wird durch die Funktion setLEDs eingestellt, die grüne und rote Helligkeit an ihrem Eingang akzeptiert (in linearer 1-100-Skala) und in eine entsprechende Timer-Einstellung umwandelt.

Der Summerzustand wird mit den Funktionen Buzz_on, Buzz_Off, Buzz_Beep gesteuert. Ein/Aus-Funktionen schalten den Ton ein und aus, die Beep-Funktion erzeugt eine bestimmte Piep-Sequenz mit einer Dauer von 1,5 Sekunden, wenn sie regelmäßig aufgerufen wird (diese Funktion kehrt sofort zurück, damit das Hauptprogramm nicht angehalten wird - aber Sie müssen sie immer wieder aufrufen Piepton erzeugen).

Das Programm führt zuerst die Funktion pwm_adjust aus, die die richtige PWM-Zyklusbreite ermittelt, um während der Messphase 1,4 V zu erreichen. Dann piept er einige Male, um anzuzeigen, dass der Sensor bereit ist, wechselt in die Messphase und startet die Hauptschleife.

In der Hauptschleife prüft das Programm, ob wir genug Zeit in der aktuellen Phase verbracht haben (90 Sekunden für die Messphase, 60 Sekunden für die Heizphase) und wenn ja, ändert es die aktuelle Phase. Außerdem aktualisiert es ständig Sensormesswerte mit exponentieller Glättung: neuer_Wert = 0,999*alter_Wert + 0,001*neuer_Wert. Mit solchen Parametern und Messzyklen mittelt er das Signal über ungefähr die letzten 300 Millisekunden. WARNUNG: SENSOR ERFORDERT MANUELLE KALIBRIERUNG FÜR JEDEN PRAKTISCHEN GEBRAUCH. OHNE KALIBRIERUNG, JE NACH PARAMETER IHRES BESTIMMTEN SENSORS, KÖNNTE DIESE SKIZZE IN REINER LUFT ALARM EINSCHALTEN ODER KEINE LETHALE KOHLENMONOXID-KONZENTRATION ERKENNEN.

Schritt 6: Erster Lauf: Was Sie erwartet

Erster Lauf: Was Sie erwartet
Erster Lauf: Was Sie erwartet

Wenn Sie alles richtig zusammengebaut haben, sehen Sie nach dem Ausführen der Skizze im seriellen Monitor Folgendes:

PWM einstellen w=0, V=4.93

Einstellung PWM w=17, V=3.57PWM Ergebnis: Breite 17, Spannung 3.57

und dann eine Reihe von Zahlen, die die aktuellen Sensormesswerte darstellen. Dieser Teil passt die PWM-Breite an, um die Heizspannung des Sensors so nahe wie möglich bei 1,4 V zu erzeugen. Die gemessene Spannung wird von 5 V abgezogen, sodass unser idealer Messwert 3,6 V beträgt. Wenn dieser Prozess nie oder nach einem einzigen Schritt endet (was eine Breite von 0 oder 254) ergibt, dann stimmt etwas nicht. Überprüfen Sie, ob Ihr Transistor wirklich NPN ist und richtig angeschlossen ist (stellen Sie sicher, dass Sie Basis-, Kollektor- und Emitterstifte richtig verwendet haben - Basis geht an D3, Kollektor an MQ-7 und Emitter an Masse, zählen Sie nicht auf Fritzing-Breadboard-Ansicht - es ist falsch für einige Transistoren) und stellen Sie sicher, dass Sie den Eingang des Sensors mit dem A1-Eingang von Arduino verbunden haben. Wenn alles in Ordnung ist, sollten Sie in Serial Plotter von Arduino IDE etwas Ähnliches wie im Bild sehen. Heiz- und Messzyklen von 60 und 90 Sekunden Länge laufen nacheinander, wobei CO ppm gemessen und am Ende jedes Zyklus aktualisiert wird. Wenn der Messzyklus fast abgeschlossen ist, können Sie eine offene Flamme in die Nähe des Sensors nehmen und sehen, wie sich dies auf die Messwerte auswirkt (je nach Flammentyp kann es in freier Luft eine CO-Konzentration von bis zu 2000 ppm erzeugen - auch wenn nur ein kleiner Teil der es geht tatsächlich in den Sensor, es schaltet immer noch den Alarm ein und geht erst am Ende des nächsten Zyklus aus). Ich habe es auf dem Bild gezeigt, sowie die Reaktion auf Feuer aus dem Feuerzeug.

Schritt 7: Sensorkalibrierung

Sensorkalibrierung
Sensorkalibrierung
Sensorkalibrierung
Sensorkalibrierung

Laut Datenblatt des Herstellers sollte der Sensor 48 Stunden hintereinander Heiz-Kühl-Zyklen durchlaufen, bevor er kalibriert werden kann. Und Sie sollten es tun, wenn Sie es für längere Zeit verwenden möchten: In meinem Fall änderte sich der Sensorwert in sauberer Luft über 10 Stunden um etwa 30%. Wenn Sie dies nicht berücksichtigen, erhalten Sie ein Ergebnis von 0 ppm, wo tatsächlich 100 ppm CO vorhanden sind. Wenn Sie nicht 48 Stunden warten möchten, können Sie die Sensorausgabe am Ende des Messzyklus überwachen. Wenn es über eine Stunde dauert, ändert es sich für mehr als 1-2 Punkte nicht - Sie können dort aufhören zu heizen.

Grobkalibrierung:

Nachdem Sie Sketch mindestens 10 Stunden in sauberer Luft ausgeführt haben, nehmen Sie den Rohsensorwert am Ende des Messzyklus, 2-3 Sekunden vor Beginn der Heizphase, und schreiben Sie ihn in die Variable sensor_reading_clean_air (Zeile 100). Das ist es. Das Programm schätzt andere Sensorparameter, diese sind nicht genau, sollten aber ausreichen, um zwischen 10 und 100 ppm Konzentration zu unterscheiden.

Präzise Kalibrierung:

Ich empfehle dringend, ein kalibriertes CO-Messgerät zu finden, eine 100-ppm-CO-Probe zu machen (dies kann getan werden, indem man etwas Rauchgas in eine Spritze nimmt - die CO-Konzentration kann leicht im Bereich von mehreren tausend ppm liegen - und es langsam in ein geschlossenes Glas mit kalibriertes Messgerät und MQ-7-Sensor), nehmen Sie den Rohsensormesswert bei dieser Konzentration und geben Sie ihn in die Variable sensor_reading_100_ppm_CO ein. Ohne diesen Schritt kann Ihre ppm-Messung in beide Richtungen mehrmals falsch sein (immer noch in Ordnung, wenn Sie zu Hause einen Alarm für eine gefährliche CO-Konzentration benötigen, wo normalerweise überhaupt kein CO vorhanden sein sollte, aber nicht gut für jede industrielle Anwendung).

Da ich kein CO-Messgerät hatte, habe ich einen ausgeklügelteren Ansatz gewählt. Zuerst stellte ich eine hohe CO-Konzentration durch Verbrennung in einem isolierten Volumen her (erstes Foto). In diesem Papier habe ich die nützlichsten Daten gefunden, einschließlich der CO-Ausbeute für verschiedene Flammentypen - es ist nicht auf dem Foto zu sehen, aber das letzte Experiment verwendete Propangasverbrennung mit dem gleichen Setup, was zu einer CO-Konzentration von ~ 5000 ppm führte. Dann wurde es 1:50 verdünnt, um 100 ppm zu erreichen, wie im zweiten Foto dargestellt, und zur Bestimmung des Referenzpunkts des Sensors verwendet.

Schritt 8: Einige experimentelle Daten

Einige experimentelle Daten
Einige experimentelle Daten

In meinem Fall funktionierte der Sensor recht gut - er ist nicht sehr empfindlich für wirklich niedrige Konzentrationen, aber gut genug, um alles über 50 ppm zu erkennen. Ich versuchte, die Konzentration nach und nach zu steigern, nahm Messungen vor und erstellte eine Reihe von Diagrammen. Es gibt zwei Sätze von 0-ppm-Linien – reines Grün vor der CO-Exposition und Gelbgrün danach. Der Sensor scheint seinen Reinluftwiderstand nach der Belichtung leicht zu ändern, aber dieser Effekt ist gering. Es scheint nicht in der Lage zu sein, zwischen 8 und 15, 15 und 26, 26 und 45 ppm Konzentrationen klar zu unterscheiden - aber der Trend ist sehr klar, so dass es erkennen kann, ob die Konzentration im Bereich von 0-20 oder 40-60 ppm liegt. Bei höheren Konzentrationen ist die Abhängigkeit viel ausgeprägter - wenn sie dem Abzug einer offenen Flamme ausgesetzt ist, steigt die Kurve von Anfang an an, ohne überhaupt abzusteigen, und ihre Dynamik ist völlig anders. Für hohe Konzentrationen gibt es also keinen Zweifel, dass es zuverlässig funktioniert, obwohl ich seine Genauigkeit nicht bestätigen kann, da ich kein bewertetes CO-Messgerät habe 10k als Standardwert zu empfehlen, sollte auf diese Weise sensibler sein. Das war's. Wenn Sie ein zuverlässiges CO-Messgerät haben und diese Platine zusammengebaut haben, geben Sie bitte Feedback zur Sensorpräzision - es wäre großartig, Statistiken über verschiedene Sensoren zu sammeln und die Annahmen für die Standardskizze zu verbessern.

Empfohlen: