Von David Peaslee

Der Bau eines CO-Detektors (Kohlenmonoxid-Detektors), der dich vor gefährlichen CO-Werten warnt, kann mit nur einem Gassensor, einem Arduino (oder einem anderen Mikrocontroller) und einigen Widerständen erfolgen. Durch Hinzufügen einiger Operationsverstärker kann die Empfindlichkeit zur Messung der in der Umgebung vorhandenen CO-Menge erhöht werden. Mit diesem Wissen kannst du deine eigene Station zur Überwachung der Luftqualität bauen und die Werte in deinem Garten mit denen der örtlichen Wetterstationen vergleichen.

Benötigte Materialien

  • 1 Arduino Uno
  • 1 Multimeter (DMM)
  • 1 Lochrasterplatine mit verschiedenen Überbrückungsdrähten
  • 2 Widerstände 10 kΩ
  • 1 Widerstand 100 kΩ
  • 1 SPEC CO-Gassensor (Digi-Key Teilenummer: 1684-1000-ND)

Projektgeschichte

Während meiner Arbeit bei einer Gassensor-Firma habe ich mit vielen Startups zusammengearbeitet, die viele großartige Ideen zur Messung der Luftqualität hatten. Ich hoffe sehr, dass eines Tages alle Menschen Gassensoren in ihren Handys und Computern haben werden, aber im Moment möchte ich den Menschen helfen, ihre eigenen Luftüberwachungssysteme zu bauen.

Für dieses Projekt möchte ich mit den Grundlagen beginnen: Wie funktioniert ein elektrochemischer Sensor?

  • Es gibt zwei Grundtypen von elektrochemischen Gassensoren, 2-Elektroden und 3-Elektroden. Beide arbeiten nach dem gleichen Grundprinzip. Ein Gas diffundiert in den Sensor und gelangt zur Arbeitselektrode. Dort reagiert es mit einem Katalysator und erzeugt Ionen (geladene Moleküle). Diese Ionen wandern durch den Elektrolyten (manchmal ähnlich wie Batteriesäure) und reagieren wiederum an der Gegenelektrode, wo die Elektronen freigesetzt (oder gesammelt) werden, um sich durch den Stromkreis zu bewegen. Je nach reagierendem Gas und Katalysator können diese Elektronen in eine der beiden Elektroden hinein oder aus ihr heraus fließen. Durch die Messung dieses Elektronenflusses (Strom) erhalten wir eine Vorstellung davon, wie viele Teilchen pro Sekunde reagieren, was uns eine Vorstellung davon gibt, wie viele Teilchen überhaupt vorhanden sind.
  • Mit dem Hinzufügen einer dritten Elektrode, der Referenz, können wir eine konstante Spannungsdifferenz zwischen der Referenz- und der Arbeitsspannung erzeugen. Dies nennen wir das Vorspannungspotential. Wenn beispielsweise die Referenzspannung 1,25 V und die Arbeitsspannung 1,35 V beträgt, spricht man von einer Vorspannung von +100 mV. Die Chemie hat nichts mit den 1,25 und 1,35 Volt zu tun, sie kümmert sich nur darum, dass an der Arbeitselektrode ein Potenzial von +100 mV vorhanden ist. Zu dieser elektrochemischen Zelle gehört noch viel mehr, aber das ist alles, was wir wissen müssen, um loszulegen. In diesem Projekt nehmen wir einen 3-Elektroden-Sensor und verwenden ihn in einer 2-Elektroden-Konfiguration wie in Abbildung 1.

  • Eine letzte Information: PPM, oder Teile pro Million, ist ein Standard zur Angabe der Konzentration. Zum Beispiel ist 1 ppm ein Teilchen eines bestimmten Gases pro Million Gesamtteilchen des vorhandenen Gases.

SPEC Sensor - Kohlenmonoxid

Abbildung 1. Ein 3-Elektroden-Gassensor, der in einer 2-Elektroden-Konfiguration angeschlossen ist. (Bild mit freundlicher Genehmigung von SPEC Sensors)

Haftungsausschluss 1: Vorsicht: Ich werde Ihnen einige Ergebnisse von Tests zeigen, die ich mit unter Druck stehendem Kohlenmonoxidgas durchgeführt habe. Eine kleine Flasche CO ist online erhältlich, aber es ist tödlich. Du solltest dich darüber informieren, bevor du dich entscheidest, CO in einem Projekt zu verwenden.1 Haftungsausschluss 2: Wenn du eine alternative CO-Quelle finden musst, produziert eine Zigarette etwa 300 ppm CO im eingeatmeten Strom.

How-to

Grundlegender Gassensor-Prototypaufbau.

Abbildung 2. Grundlegender Aufbau eines Gassensor-Prototyps. (Bild mit freundlicher Genehmigung von SPEC Sensors)

Teil 1 – Grundlegender Sensoraufbau

Ich beginne mit der grundlegendsten Schaltung und zeige Ihnen, wie Sie den Sensor nur mit einem Sensor, einem 10 kΩ-Widerstand und einem Multimeter messen können.

i. Schneiden Sie die beiden nicht beschrifteten Stifte ab (siehe Abbildung 2) und zentrieren Sie den Sensor auf dem Breadboard.

ii. Verwenden Sie einen kurzen Jumper, um die Stifte R und C (Zähler und Referenz) kurzzuschließen. Verwenden Sie eine weitere kurze Brücke, um die Stifte W1 und W2 kurzzuschließen (dies ist nur ein zusätzlicher Weg für den Strom, da die Stifte bereits auf der Platine kurzgeschlossen sind).

iii. Verbinden Sie die positive Leitung des Multimeters mit der R/C-Seite des Sensors. Die negative Seite des Messgeräts mit der W1/W2-Seite des Sensors verbinden.

iv. Verbinden Sie abschließend die R/C-Stifte mit den W1/W2-Stiften mit einem 10 kΩ-Widerstand (R1).

Jetzt können Sie den Sensor testen. Du kannst ein Streichholz oder Rauch verwenden, aber es funktioniert besser, wenn er sich in einem versiegelten Behälter befindet. Eine Pyrex-/Glasschale mit luftdichtem Deckel eignet sich hervorragend. Zünden Sie ein Streichholz an, blasen Sie es aus und legen Sie es in die Schale mit dem Sensor. Möglicherweise müssen Sie Löcher schneiden, um die elektrischen Leitungen hindurchzuführen. Bei meinem Aufbau habe ich 200 ppm CO mit etwa 100 Kubikzentimetern pro Minute gemessen, was ziemlich langsam ist. Wie in Abbildung 3 dargestellt, ist nur das Multimeter an den Sensor angeschlossen.

CO-Sensoraufbau mit nur einem angeschlossenen Multimeter

Abbildung 3. Aufbau eines CO-Sensors, an den nur ein Multimeter angeschlossen ist, um den Ausgang anzuzeigen. (Bild mit freundlicher Genehmigung von SPEC Sensors)

Einige erforderliche Berechnungen:

Die zu erwartenden Messwerte hängen von Ihrer Einrichtung und der Empfindlichkeit des Sensors ab. In diesem 2-Elektroden-Modus können Sie etwa die Hälfte der Empfindlichkeit erwarten, also wenn Ihr Sensor 4,0 nA/ppm angibt, können Sie etwa 2 nA/ppm erwarten. Um mV in ppm umzurechnen, verwenden Sie das Ohmsche Gesetz: Spannung (V) = Strom (A) x Widerstand (Ω). Beispiel:

In Abbildung 3 beginne ich mit 0,2 mV ohne Gas und ende mit 4,8 mV, wenn etwa 200 ppm in die Box und durch eine Entlüftung nach außen fließen. Die Spannungsdifferenz beträgt 4,6 mV. Der Widerstand R1 ist 10 kΩ, so dass der Strom 0,0046 V/ 10.000 Ω oder 460 nA beträgt. Um ppm zu erhalten, teilen Sie den gemessenen Strom durch die Empfindlichkeit: 460 nA / ~2 nA/ppm, oder 230 ppm. Dies entspricht ziemlich genau dem, was ich in der Box angegeben habe: 200 ppm. Um die neue Empfindlichkeit zu berechnen, verwenden Sie mV und ppm. Meine neue Empfindlichkeit beträgt 4,6 mV/200 ppm oder 0,23 mV/ppm.

Abbildung 4 zeigt die Richtung, in der der Strom durch den Stromkreis fließt. Klemme A ist die positive Leitung des DMM und B ist die negative (gemeinsame) Leitung. Man kann sich vorstellen, dass an der Arbeitselektrode Elektronen verbraucht und an der Gegen-/Referenzelektrode erzeugt werden. Wenn die Leitungen des Sensors verkehrt herum angeschlossen sind, messen Sie stattdessen eine negative Spannung.

Richtung des Stromflusses im Sensoraufbau

Abbildung 4. Richtung des Stromflusses in der Sensoranordnung. (Bild mit freundlicher Genehmigung von SPEC Sensors)

Teil 2 – Erweiterter Sensoraufbau

Nun werden wir den Arduino Uno in dieses Projekt einbinden. Es gibt ein paar Änderungen, die wir vornehmen werden, um seine Beschränkungen zu überwinden, aber in Wirklichkeit können Sie es auf die gleiche Weise anschließen, wie Sie es mit dem Multimeter getan haben. Die positive Seite wird den analogen Pin A0 mit den R/C-Pins des Sensors verbinden, und die negative Seite wird GND mit den W1/W2-Pins des Sensors verbinden. Verwenden Sie analogRead(), um die Spannung über dem Sensor und dem Widerstand R1 zu messen. Den endgültigen Arduino-Code finden Sie am Ende dieses Artikels, und er enthält die Verbesserungen bei der Abtastung, die ich unten beschrieben habe.

Hinweise zum ADC eines Arduino:

Aus der obigen Berechnung können Sie ersehen, dass 1 ppm eine Spannung von 0,23 mV erzeugen wird. Das ist ein Problem für den 10-Bit-ADC des Arduino, da die Mindestauflösung für den Uno 4,88 mV beträgt (5 V/1024 Stufen). Das bedeutet, dass das Minimum, das der Arduino erkennen kann, 21 ppm beträgt, was immer noch zu hoch ist.

Die erste Verbesserung besteht darin, die analoge Referenz auf die interne Referenz von 1,1 V zu ändern. Dadurch wird die Mindestauflösung auf 4,7 ppm geändert, was besser ist. Bitte lesen Sie dazu die Anweisungen unter https://www.arduino.cc/en/Reference/AnalogReference. Der nächste Schritt ist die Implementierung einer Mittelwertbildung. Die maximale Leserate von analogRead() beträgt 10.000 Mal pro Sekunde. Wenn man eine Reihe dieser Messwerte über eine Sekunde mittelt, sagen wir 256, wird das die Auflösung erheblich verbessern.2

UH-OH MOMENT

Schließlich, da man die Auflösung erhöht hat, kann man feststellen, dass Null nicht mehr 0 V auf dem ADC des Arduino ist. Um dies zu beheben, müssen wir die Nullspannung (d.h. den Nullstrom) auf einen höheren Wert bringen, der vom ADC gelesen werden kann. Hier werden wir eine Spannungsleiter mit einem 100 kΩ- und einem 10 kΩ-Widerstand implementieren. Wenn vom Sensor kein Strom erzeugt wird, messen wir die Spannung zwischen den beiden neuen Widerständen. Der Strom durch die Widerstände beträgt 3,3 V/(100.000 +10.000 Ω), also 30 Mikroampere. Zwischen den beiden neuen Widerständen messen wir also 10.000 Ω * 30 microAmps oder 0,3 Volt. Dieser Spannungsleiter verbraucht 30 Mikroampere. Wenn Sie also Strom sparen müssen, um die Lebensdauer der Batterie zu verlängern, sollten Sie den Wert des 100 kΩ-Widerstands erhöhen. Jetzt liegt unsere neue Nullspannung bei 0,3 Volt, und alles, was darüber liegt, ist darauf zurückzuführen, dass CO-Gas eine Spannung über dem Widerstand R1 erzeugt.

CO-Sensor-Prototyp mit einem Arduino-Board

Abbildung 5. CO-Sensor-Prototyp mit einem Arduino-Board. (Bild mit freundlicher Genehmigung von SPEC Sensors)

Als letztes Beispiel messen wir mit diesem Aufbau 0,355 Volt. Ziehen Sie zunächst die Nullspannung von 0,3 V ab, was 0,055 V oder 55 mV ergibt. Nun teilen wir durch unsere neue Empfindlichkeit von 0,23 mV/ppm und messen 240 ppm CO, was ein gefährlicher Wert ist, wenn man über längere Zeit einatmet.

Zusammenfassung und nächste Schritte:

Mit Hilfe des seriellen Terminals konnte ich etwa 2 Stunden Protokollierung bei etwa 1 Probe alle 1,5 Sekunden erfassen. Abbildung 6 zeigt, was mit dem Arduino, einigen Widerständen, dem Sensor und etwas Mittelwertbildung möglich ist. Die nächsten Schritte wären die Verwendung des Sensors in einer 3-Elektroden-Konfiguration, die zusätzliche Stabilität und eine Signalverstärkung bietet. Die Teile dafür umfassen einen doppelten Operationsverstärker, oder zwei doppelte Operationsverstärker, und einige Widerstände. In der Realität kann der Sensorausgang von anderen Faktoren wie Temperatur und Luftfeuchtigkeit abhängen, aber eine gute Wetterstation wird auch diese Dinge aufzeichnen.

Ausgang des Arduino-Sensoraufbaus mit Datenmittelung

Abbildung 6. Ausgabe des Arduino-Sensoraufbaus mit Datenmittelung. (Bild mit freundlicher Genehmigung von SPEC Sensors)

In zukünftigen Artikeln werde ich weitere Projekte vorstellen, darunter die 3-Elektroden-Schaltung und die Verwendung digitaler Versionen dieser Sensoren. Wenn Sie bereit sind, Ihre eigene Schaltung zu bauen, können Sie sich die Anwendungshinweise bei SPEC Sensors ansehen.

Der für dieses Projekt verwendete Arduino-Code:

Kopieren Sie den Code

/*
Analog input, Serial output
Reads an analog gas sensor at pins A0,
Also prints the results to the serial monitor.
The circuit:
Gas sensor pin W (Working) connected to middle of resistor ladder (I used 10k and 100k).
Gas sensor C (counter) and R (reference) connected together and then jumped to analog pin A0.
10 kOhm resistor between W1/W2 and C/R.
created 01 Jul. 2017
by David Peaslee
*/
// these constants won't change. They're used to give names to the pins used:
const int analogInPin = A0; // Analog input pin that the sensor is attached to
const int resValue = 9700; // Value of 10kOhm resistor !change this to match your resistor
const float Vref = 1.1; //This is the voltage of the internal reference
const long int cOff = 68286; //286mV offset due to resistor ladder. Try taking the average of a long
//measurement of the counts without a sensor in place. This should give a good Zero.
const float Sf = 2.11; // sensitivity in nA/ppm,
//this is roughly about 1/2 the sensitivity of the barcode on the sensor. Try finding a known
//concentration of CO to measure, or just approximate.
const int extraBit = 256; //Number of samples averaged, like adding 8 bits to ADC
long int sensorValue = 0; // value read from the sensor
float currentValue = 0; // current read from the sensor
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
// !!!set analog reference to 1.1 Volts!!!
analogReference(INTERNAL);
}
void loop() {
// read the analog in value:
sensorValue = 0;
for (int i = 0; i < extraBit; i++) {
sensorValue = analogRead(analogInPin) + sensorValue;
delay(3); // needs 2 ms for the analog-to-digital converter to settle after the last reading
}
sensorValue = sensorValue - cOff; //subtract the offset of the resistor ladder * 256.
// print the results to the serial monitor:
Serial.print("PPM = ");
Serial.print( ((float) sensorValue / extraBit / 1024 * Vref / resValue * 1000000000) / Sf);
Serial.print("\tnA = ");
Serial.print( (float) (sensorValue) / extraBit / 1024 * Vref / resValue * 1000000000);
Serial.print("\tCounts = " );
Serial.println(sensorValue);
//Trying to make each loop 1 second
delay(218); //1 second – 3ms*256ms (each adc read)-14ms (for printing)= 218ms
}

Für weitere Spec Sensor Libraries, die mit verschiedenen ULP-Sensoren arbeiten, gehen Sie zu diesem Link auf GitHub: https://github.com/SPEC-Sensors/ULPSM

Articles

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.