Od Davida Peasleeho

Vytvořit detektor CO (oxidu uhelnatého), který vás upozorní na nebezpečnou hladinu CO, lze jen s pomocí čidla plynu, Arduina (nebo jiného mikrokontroléru) a několika rezistorů. Přidáním několika optických zesilovačů lze zvýšit citlivost měření množství CO přítomného v prostředí. Na základě těchto znalostí si můžete postavit vlastní stanici pro monitorování kvality ovzduší a porovnávat hodnoty na vlastním dvorku s hodnotami hlášenými místními meteorologickými stanicemi.

Potřebný materiál

  • 1 Arduino Uno
  • 1 multimetr (DMM)
  • 1 deska s různými propojovacími vodiči
  • 2 rezistory 10 kΩ
  • 1 rezistor 100 kΩ
  • 1 senzor CO SPEC (Digi-Key Part Number: 1684-1000-ND)

Příběh projektu

Když jsem pracoval ve firmě vyrábějící plynové senzory, spolupracoval jsem s mnoha začínajícími firmami, které měly mnoho skvělých nápadů na měření kvality ovzduší. I když opravdu doufám, že jednou budou mít všichni senzory plynu v telefonech a počítačích, prozatím bych rád pomohl běžným Tvůrcům vytvořit jejich vlastní systémy pro monitorování ovzduší.

Pro tento projekt bych rád začal od základů:

  • Existují dva základní typy elektrochemických senzorů plynů, dvouelektrodové a tříelektrodové. Oba pracují na stejných základních principech. Plyn difunduje do senzoru a dostává se k pracovní elektrodě. Tam reaguje s katalyzátorem a vytváří ionty (nabité molekuly). Tyto ionty procházejí elektrolytem (někdy podobným kyselině akumulátorové) a opět reagují na protielektrodě, kde se uvolňují (nebo shromažďují) elektrony, které se pohybují obvodem. V závislosti na reagujícím plynu a katalyzátoru mohou tyto elektrony proudit do obou elektrod nebo z nich. Měřením tohoto toku elektronů (proudu) získáme představu o tom, kolik částic reaguje za sekundu, což nám dává představu o tom, kolik částic tam vůbec je.
  • Přidáním třetí elektrody, referenční, můžeme vytvořit konstantní rozdíl napětí mezi referenčním a pracovním napětím. Tomu říkáme potenciál předpětí. Je-li například referenční napětí 1,25 V a pracovní 1,35 V, říkáme, že předpětí je +100 mV. Chemie nemá nic společného s 1,25 a 1,35 V, zajímá ji pouze to, že na pracovní elektrodě je potenciál +100 mV. V tomto elektrochemickém článku je toho mnohem více, ale toto je vše, co opravdu potřebujeme vědět, abychom mohli začít. V tomto projektu vezmeme tříelektrodový senzor a použijeme ho v konfiguraci se dvěma elektrodami, jak je znázorněno na obrázku 1.
  • Ještě poslední informace, PPM neboli parts per million, je standard pro udávání koncentrace. Například 1 ppm je jedna částice určitého plynu na milion všech přítomných částic plynu.

Senzor SPEC - oxid uhelnatý

Obrázek 1. Tříelektrodový senzor plynu zapojený ve dvouelektrodovém uspořádání. (Obrázek se svolením společnosti SPEC Sensors)

Upozornění 1: Pozor: Ukážu vám výsledky testů, které jsem provedl s tlakovým plynem oxidem uhelnatým. Malá tlaková láhev s CO je k dispozici na internetu, ale je smrtelně nebezpečná. Než se rozhodnete CO v projektu použít, měli byste si o tom něco přečíst.1 Disclaimer 2: Pokud potřebujete najít alternativní zdroj CO, cigareta vyprodukuje ve vdechovaném proudu asi 300 ppm CO.

Jak na to

Základní nastavení prototypu plynového senzoru.

Obrázek 2: Pokud potřebujete najít alternativní zdroj CO, cigareta vyprodukuje ve vdechovaném proudu asi 300 ppm CO. Základní nastavení prototypu senzoru plynu. (Obrázek s laskavým svolením společnosti SPEC Sensors)

Část 1 – Základní nastavení senzoru

Začnu s nejzákladnějším zapojením a ukážu vám, jak změřit senzor pouze pomocí senzoru, rezistoru 10 kΩ a multimetru.

i. Odřízněte dva vývody, které nejsou označeny (viz obrázek 2), a poté vycentrujte senzor na desce s plošnými spoji.

ii. Pomocí krátké propojky zkratujte vývody R a C (čítač a reference). Pomocí další krátké propojky zkratujte vývody W1 a W2 (tím pouze získáte další cestu pro proud, protože vývody jsou již zkratovány na desce plošných spojů).

iii. Připojte kladný vodič multimetru k R/C straně snímače. Záporný vodič multimetru připojte ke straně W1/W2 snímače.

iv. Nakonec pomocí rezistoru 10 kΩ (R1) připojte vývody R/C k vývodům W1/W2.

V tomto okamžiku jste připraveni k testování senzoru. Můžete použít sirku nebo kouř, ale lépe bude fungovat, když bude v uzavřené nádobě. Skvěle bude fungovat pyrexová/skleněná miska se vzduchotěsným víčkem. Zkuste zapálit sirku a poté ji sfouknout a vložit do misky se senzorem. Možná budete muset vyříznout otvory pro elektrické vedení. V mém nastavení jsem měl 200 ppm CO při rychlosti asi 100 kubických centimetrů za minutu, což je poměrně pomalé. Jak je znázorněno na obrázku 3, k senzoru je připojen pouze multimetr.

Nastavení senzoru CO s připojeným pouze multimetrem

Obrázek 3. Nastavení snímače CO s připojeným pouze multimetrem pro zobrazení výstupu. (Obrázek se svolením společnosti SPEC Sensors)

Několik potřebných matematických úkonů:

Měření, které můžete očekávat, závisí na vašem nastavení a citlivosti senzoru. V tomto režimu se dvěma elektrodami můžete očekávat přibližně poloviční citlivost, takže pokud váš senzor uvádí 4,0 nA/ppm, můžete očekávat přibližně 2 nA/ppm. Pro převod mV na ppm použijte Ohmův zákon: Napětí (V) = proud (A) x odpor (Ω). Například:

V sestavě na obrázku 3 začínám s 0,2 mV bez plynu a končím s 4,8 mV při průtoku asi 200 ppm do krabičky a ven ventilačním otvorem. Rozdíl napětí je 4,6 mV. Odpor R1 je 10 kΩ, takže proud je 0,0046 V/ 10 000 Ω, tedy 460 nA. Chcete-li získat ppm, vydělte naměřený proud citlivostí; 460 nA / ~2 nA/ppm, neboli 230 ppm. To je docela blízko tomu, co jsem uvedl v krabici; 200 ppm. Pro výpočet nové citlivosti použijte mV a ppm. Moje nová citlivost je 4,6 mV/200 ppm nebo 0,23 mV/ppm.

Obrázek 4 ukazuje směr, kterým proud prochází obvodem. Svorka A je kladný vodič DMM a B je záporný (společný) vodič. Můžete si představit, že elektrony jsou spotřebovávány na pracovní elektrodě a vytvářeny na proti/referenční elektrodě. Pokud jsou vodiče snímače v opačném směru, naměříte místo toho záporné napětí.

Směr toku proudu v nastavení snímače

Obrázek č. 4. Směr toku proudu v nastavení senzoru. (Obrázek s laskavým svolením společnosti SPEC Sensors)

Část 2 – Pokročilé nastavení senzoru

Nyní do tohoto projektu zapojíme Arduino Uno. Provedeme několik změn, abychom překonali jeho omezení, ale ve skutečnosti jej můžete zapojit stejným způsobem jako multimetr. Kladnou stranou připojíme analogový pin A0 k pinům R/C senzoru a zápornou stranou připojíme GND k pinům W1/W2 senzoru. Pomocí funkce analogRead() změřte napětí na senzoru a rezistoru R1. Finální kód Arduina najdete na konci tohoto článku a obsahuje vylepšení vzorkování, které jsem uvedl níže.

Poznámky k ADC Arduina:

Z výše uvedeného výpočtu je vidět, že 1 ppm vygeneruje napětí 0,23 mV. To je pro 10bitový ADC převodník Arduino problém, protože minimální rozlišení Uno je 4,88 mV (5 V/1024 úrovní). To znamená, že minimum, které může Arduino detekovat, je 21 ppm, což je stále příliš vysoká hodnota.

Prvním zlepšením je změna analogové reference na interní referenci 1,1 V . Tím se minimální rozlišení změní na 4,7 ppm, což je lepší. Přečtěte si k tomu návod na adrese https://www.arduino.cc/en/Reference/AnalogReference. Další opravou je zavedení průměrování. Maximální rychlost čtení funkce analogRead() je 10 000krát za sekundu. Pokud zprůměrujete několik těchto čtení za sekundu, řekněme 256, rozlišení se tím výrazně zlepší. 2

UH-OH MOMENT

Nakonec, když jste zvýšili rozlišení, můžete zjistit, že nula už není 0 V na ADC převodníku Arduino. Abychom to napravili, musíme toto nulové napětí (tedy nulový proud) přivést na vyšší hodnotu, kterou může ADC přečíst. Zde budeme realizovat napěťový žebřík s přidáním rezistoru 100 kΩ a 10 kΩ. Když je v senzoru generován nulový proud, budeme měřit napětí mezi oběma novými rezistory. Proud procházející rezistory je 3,3 V/ (100 000 +10 000 Ω), tedy 30 mikroampérů. Mezi oběma novými rezistory tedy budeme měřit 10 000 Ω * 30 mikroampérů nebo 0,3 V. Tento napěťový žebřík bude využívat 30 mikroAmpérů, takže pokud potřebujete ušetřit energii, kvůli výdrži baterie zkuste zvýšit hodnotu rezistoru 100 kΩ. Nyní se naše nové nulové napětí blíží hodnotě 0,3 V a vše, co je nad touto hodnotou, je způsobeno tím, že plyn CO generuje napětí na rezistoru R1.

 Prototyp senzoru CO s deskou Arduino

Obrázek 5. Prototyp senzoru CO s deskou Arduino. (Obrázek s laskavým svolením společnosti SPEC Sensors)

Takže jako poslední příklad uvádíme, že s tímto nastavením měříme 0,355 voltu. Nejprve odečteme nulové napětí 0,3 V, čímž získáme 0,055 V neboli 55 mV. Nyní vydělte naší novou citlivostí 0,23 mV/ppm a měříme 240 ppm CO, což je nebezpečná úroveň pro dlouhodobé dýchání.

Shrnutí a další kroky:

Pomocí sériového terminálu se mi podařilo zachytit asi 2 hodiny záznamu při přibližně 1 vzorku za 1,5 sekundy. Obrázek 6 ukazuje, co je možné s Arduinem, několika rezistory, senzorem a trochou průměrování. Dalším krokem by bylo použití senzoru v tříelektrodové konfiguraci, která poskytuje větší stabilitu, a zesílení signálu. Součástky pro to zahrnují dvojitý operační zesilovač nebo dva dvojité operační zesilovače a nějaké rezistory. Ve skutečnosti může výstup snímače záviset na dalších faktorech, jako je teplota a změny vlhkosti, ale dobrá meteorologická stanice bude zaznamenávat i tyto věci.

Výstup sestavy snímače Arduino s průměrováním dat

Obrázek 6: Výstup snímače Arduino s průměrováním dat. Výstup ze sestavy senzorů Arduino s průměrováním dat. (Obrázek s laskavým svolením společnosti SPEC Sensors)

V příštích článcích představím další projekty, včetně tříelektrodového zapojení a použití digitálních verzí těchto senzorů. Pokud jste připraveni sestavit si vlastní obvod, můžete se podívat na aplikační poznámky na stránkách SPEC Sensors.

Kód Arduino použitý pro tento projekt:

Kopírovat kód

/*
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
}

Pro další knihovny Spec Sensor pro práci s různými senzory ULP přejděte na tento odkaz na GitHub: https://github.com/SPEC-Sensors/ULPSM

Articles

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.