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
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html