Optický senzor kvality ovzduší Sharp GP2Y1010AU0F je velice vhodný při situacích, kdy by jsme rádi měřili ve svém okolí koncentraci prachu. Tento model je citlivý hlavně na velice jemné částice a často se používá v čističkách vzduchu či detektorech cigaretového kouře. Jeho funkce je založena na dvojici součástek – infračervené diodě a fototranzistoru, kdy právě vzduch obohacený jemnými částicemi mění intenzitu světla dopadajícího z diody na fototranzistor. My pak tuto změnu zachycené intenzity měříme pomocí napětí na fototranzistoru.
Pro úspěšné propojení s Arduino deskou je nutné propojit celkem 6 vodičů. Číslování je uvedeno na obrázku se zapojením níže (je nutné dodržet pořadí, barvy drátků se mohou změnit). Zapojíme 1 přes odpor na +5V, 2 na zem, 3 na digitální pin 3, 4 na zem, 5 na analogový pin 0 a poslední 6 na +5V. Dále je ještě nutné připojit kondenzátor dle schématu, tedy kladný pól na 1 a záporný pól na zem. Zmíněný digitální a analogový pin můžeme samozřejmě připojit na jiný volný, ale je nutné tuto změnu provést i v programu pro Arduino desku.
Ukázkový kód obsahuje na svém začátku proměnné pro nastavení čísel pinů na Arduino desce a dále konstanty pro přesné měření. Tyto konstanty udává přímo výrobce, takže by jsme je neměli měnit. Jako další následují proměnné pro uložení výsledků měření a podprogram setup, ve kterém si nastavíme komunikaci přes sériovou linku a také pin ledPin jako výstupní. V nekonečné smyčce loop se nachází nejprve úsek kódu s provedením měření dle pokynů výrobce a dále jsou uvedeny výpočty pro získání reálné hodnoty napětí a poté přepočtení této hodnoty na výslednou prašnost. Poté jsou už jen výsledky vytištěny na sériovou linku a na konci smyčky je pauza 1 vteřina pro přehledný výpis výsledků.
// Optický senzor kvality ovzduší Sharp GP2Y1010AU0F // proměnné pro nastavení propojovacích pinů int mericiPin = A0; int ledPin = 3; // konstanty pro přesné měření const int casMereni = 280; const int casUstaleni = 40; const int casSpanku = 9680; // proměnné pro uložení výsledků měření float napetiAnalog = 0; float napetiPrepocet = 0; float prasnost = 0; void setup() { // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // nastavení ledPin jako výstupní pinMode(ledPin,OUTPUT); } void loop() { // zahájení měření digitalWrite(ledPin,LOW); delayMicroseconds(casMereni); // načtení analogové hodnoty napětí napetiAnalog = analogRead(mericiPin); delayMicroseconds(casUstaleni); digitalWrite(ledPin,HIGH); delayMicroseconds(casSpanku); // přepočet analogové hodnoty na digitální napetiPrepocet = napetiAnalog * (5.0 / 1024.0); // výpočet koncentrace prachu v okolí dle // informací od výrobce prasnost = (0.17 * napetiPrepocet - 0.1)*1000; Serial.print("Napeti ze senzoru: "); Serial.print(napetiPrepocet); Serial.print(" V"); Serial.print(" -> Koncentrace prachu: "); Serial.print(prasnost); Serial.println(" ug/m3"); // pauza pro přehlednější výpis delay(1000); }
Po nahrání programu do Arduino desky dostaneme například tento výpis:
Napeti ze senzoru: 0.72 V -> Koncentrace prachu: 22.02 ug/m3 Napeti ze senzoru: 0.71 V -> Koncentrace prachu: 21.19 ug/m3 Napeti ze senzoru: 0.70 V -> Koncentrace prachu: 18.70 ug/m3 Napeti ze senzoru: 0.67 V -> Koncentrace prachu: 13.72 ug/m3 Napeti ze senzoru: 0.73 V -> Koncentrace prachu: 23.68 ug/m3 Napeti ze senzoru: 0.72 V -> Koncentrace prachu: 22.02 ug/m3 Napeti ze senzoru: 0.65 V -> Koncentrace prachu: 10.40 ug/m3
Jak je vidět, naměřené výsledky senzoru kvality ovzduší Sharp GP2Y1010AU0F jsou poněkud méně přesné. Je však nutné zmínit, že samotný senzor není schopný měřit úplně od nuly a pro naměření nějakých rozumných hodnot je třeba ho umístit někam do prašnějšího prostředí, v mém případě to bylo testování na rušné ulici. Při měření v pokoji totiž senzor při nízkých hodnotách prachu v okolí nenaměří výsledky správně a přibližně do napětí 0,6 V jsou tak přepočtené hodnoty koncentrace mínusové. A co se týká maximálních hodnot, tak ty by se podle zákonů v České republice měly pohybovat do hranice 50 ug/m3.
Seznam použitých komponent:
http://dratek.cz/arduino/1126-opticky-senzor-prachu-sharp-gp2y1010au0f-1449872536.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html