- Būtini komponentai
- „Sharp GP2Y1014AU0F“ jutiklis
- OLED ekrano modulis
- Grandinės schema
- Grandinės sukūrimas ant „Perf Board“
- Oro kokybės analizatoriaus kodo paaiškinimas
- „Sharp GP2Y1014AU0F“ jutiklio sąsajos su „Arduino“ bandymas
Oro tarša yra pagrindinė problema daugelyje miestų, o oro kokybės indeksas kasdien blogėja. Remiantis Pasaulio sveikatos organizacijos ataskaita, dėl ore esančių pavojingų dalelių poveikio anksčiau laiko žūsta daugiau žmonių nei dėl autoįvykių. Anot Aplinkos apsaugos agentūros (EPA), patalpų oras gali būti 2–5 kartus toksiškesnis nei lauko oras. Taigi čia mes sukursime projektą oro kokybei stebėti, matuodami dulkių dalelių tankį ore.
Taigi, tęsdami ankstesnius mūsų projektus, tokius kaip SND detektorius, dūmų detektorius ir oro kokybės monitorius, mes sujungsime „Sharp GP2Y1014AU0F“ jutiklį su „Arduino Nano“, kad pamatuotume oro dulkių tankį. Išmatuotoms reikšmėms rodyti naudojamas ne tik „Dust sensor“ ir „Arduino Nano“, bet ir OLED ekranas. „Sharp“ GP2Y1014AU0F dulkių jutiklis labai efektyviai nustato labai smulkias daleles, pavyzdžiui, cigarečių dūmus. Jis skirtas naudoti oro valytuvuose ir oro kondicionieriuose.
Būtini komponentai
- „Arduino Nano“
- „Sharp GP2Y1014AU0F“ jutiklis
- 0,96 'SPI OLED ekrano modulis
- Šuolių laidai
- 220 µf kondensatorius
- 150 Ω rezistorius
„Sharp GP2Y1014AU0F“ jutiklis
„Sharp“ GP2Y1014AU0F yra mažas šešių kontaktų analoginis išvesties optinis oro kokybės / optinis dulkių jutiklis, suprojektuotas ore esančiose dulkių dalelėse. Jis veikia lazerio sklaidos principu. Jutiklio modulio viduje šalia oro įleidimo angos įstrižai išdėstyti infraraudonųjų spindulių diodas ir fotojutiklis, kaip parodyta žemiau esančiame paveikslėlyje:
Kai oras, kuriame yra dulkių dalelių, patenka į jutiklio kamerą, dulkių dalelės išsklaido IR šviesos diodo šviesą foto detektoriaus link. Išsisklaidžiusios šviesos intensyvumas priklauso nuo dulkių dalelių. Kuo daugiau dulkių dalelių ore, tuo didesnis šviesos intensyvumas. Išėjimo įtampa jutiklio V OUT kaištyje keičiasi atsižvelgiant į išsklaidytos šviesos intensyvumą.
GP2Y1014AU0F jutiklio kištukas:
Kaip minėta anksčiau, GP2Y1014AU0F jutiklis yra su 6 kontaktų jungtimi. Žemiau pateiktame paveikslėlyje ir lentelėje pateikiami GP2Y1014AU0F kaiščių priskyrimai:
S. NE. |
PIN vardas |
Smeigtuko aprašymas |
1 |
V-LED |
LED Vcc kaištis. Prijunkite prie 5V per 150Ω rezistorių |
2 |
LED-GND |
LED įžeminimo kaištis. Prisijunkite prie GND |
3 |
LED |
Naudojamas įjungti / išjungti šviesos diodus. Prisijunkite prie bet kurio „Arduino“ skaitmeninio kaiščio |
4 |
S-GND |
Jutiklio įžeminimo kaištis. Prisijunkite prie „Arduino“ GND |
5 |
V OUT |
Jutiklio analoginis išvesties kaištis. Prijunkite bet kurį analoginį kaištį |
6 |
V CC |
Teigiamas tiekimo kaištis. Prijunkite prie 5 V „Arduino“ |
GP2Y1014AU0F jutiklio specifikacijos:
- Mažas srovės suvartojimas: maks. 20mA
- Tipinė darbinė įtampa: nuo 4,5 iki 5,5 V
- Mažiausias aptinkamas dulkių dydis: 0,5 μm
- Dulkių tankio jutimo diapazonas: iki 580 ug / m 3
- Jutimo laikas: mažiau nei 1 sekundė
- Matmenys: 1,81 x 1,18 x 0,69 "(46,0 x 30,0 x 17,6 mm)
OLED ekrano modulis
OLED (organiniai šviesą skleidžiantys diodai) yra savaime skleidžianti technologija, sukonstruota tarp dviejų laidininkų uždėjus organinių plonų plėvelių seriją. Ryški šviesa susidaro, kai šioms plėvelėms paduodama elektros srovė. OLED naudoja tą pačią technologiją kaip ir televizoriai, tačiau turi mažiau taškų nei daugumoje mūsų televizorių.
Šiam projektui naudojame vienspalvį 7 kontaktų SSD1306 0,96 ”OLED ekraną. Jis gali veikti trimis skirtingais ryšių protokolais: SPI 3 vielos režimu, SPI keturių laidų režimu ir I2C režimu. Smeigtukai ir jo funkcijos paaiškinti toliau pateiktoje lentelėje:
Mes jau išsamiau aptarėme OLED ir jo tipus ankstesniame straipsnyje.
PIN vardas |
Kiti vardai |
apibūdinimas |
Gnd |
Žemė |
Įžemintas modulio kaištis |
Vdd |
Vcc, 5 V |
Maitinimo kaištis (3-5V toleruojamas) |
SCK |
D0, SCL, CLK |
Veikia kaip laikrodžio kaištis. Naudojamas tiek I2C, tiek SPI |
SDA |
D1, MOSI |
Modulio duomenų kaištis. Naudojamas tiek IIC, tiek SPI |
RES |
RST, RESET |
Iš naujo nustatomas modulis (naudinga SPI metu) |
DC |
A0 |
Duomenų komandos kaištis. Naudojamas SPI protokolui |
CS |
Chip Select |
Naudinga, kai pagal SPI protokolą naudojami daugiau nei vienas moduliai |
OLED specifikacijos:
- OLED tvarkyklės IC: SSD1306
- Rezoliucija: 128 x 64
- Vaizdinis kampas:> 160 °
- Įėjimo įtampa: 3.3V ~ 6V
- Pikselių spalva: mėlyna
- Darbinė temperatūra: -30 ° C ~ 70 ° C
Sužinokite daugiau apie OLED ir jo sąsają su skirtingais mikrovaldikliais, spustelėdami nuorodą.
Grandinės schema
Žemiau pateikiama „ Sharp GP2Y1014AU0F“ jutiklio su „Arduino“ grandinės schema:
Grandinė yra labai paprasta, nes GP2Y10 jutiklį ir OLED ekrano modulį jungiame tik su „Arduino Nano“. GP2Y10 jutiklis ir OLED ekrano modulis tiekiami su + 5 V ir GND. V0 kaištis yra sujungtas su „Arduino Nano“ A5 kaiščiu. Jutiklio LED kaištis yra prijungtas prie „Arduino“ skaitmeninio kaiščio12. Kadangi „OLED Display“ modulis naudoja SPI ryšį, mes sukūrėme SPI ryšį tarp OLED modulio ir „Arduino Nano“. Jungtys parodytos žemiau esančioje lentelėje:
S.No |
OLED modulio kaištis |
Arduino kaištis |
1 |
BND |
Žemė |
2 |
VCC |
5V |
3 |
D0 |
10 |
4 |
D1 |
9 |
5 |
RES |
13 |
6 |
DC |
11 |
7 |
CS |
12 |
S.No |
Jutiklio kaištis |
Arduino kaištis |
1 |
Vcc |
5V |
2 |
V O |
A5 |
3 |
S-GND |
BND |
4 |
LED |
7 |
5 |
LED-GND |
BND |
6 |
V-LED |
5V per 150Ω varžą |
Grandinės sukūrimas ant „Perf Board“
Pritvirtinus visus komponentus ant perf lentos, jis atrodys panašiai kaip žemiau. Bet jis taip pat gali būti pastatytas ant duonos lentos. Pritvirtinau GP2Y1014 jutiklį toje pačioje plokštėje, kurią naudojau SDS011 jutikliui sąsajai. Lituodami įsitikinkite, kad litavimo laidai turi būti pakankamai nutolę vienas nuo kito.
Oro kokybės analizatoriaus kodo paaiškinimas
Visas šio projekto kodas pateikiamas dokumento pabaigoje. Čia mes paaiškiname keletą svarbių kodo dalių.
Kodas naudoja Adafruit_GFX , ir Adafruit_SSD1306 bibliotekas. Šias bibliotekas galima atsisiųsti iš „Arduino IDE“ esančios bibliotekos tvarkyklės ir ją įdiegti iš ten. Tam atidarykite „Arduino IDE“ ir eikite į „ Sketch <Include Library <Manage Libraries“ . Dabar ieškokite „ Adafruit GFX“ ir įdiekite „ Adafruit GFX“ biblioteką.
Panašiai įdiekite „ Adafruit“ „SSD1306“ bibliotekas.
Įdiegę bibliotekas į „Arduino IDE“, paleiskite kodą įtraukdami reikalingus bibliotekų failus. Dulkių jutikliui nereikia jokios bibliotekos, nes įtampos reikšmes skaitome tiesiai iš analoginio „Arduino“ kaiščio.
# įtraukti
Tada nustatykite OLED plotį ir aukštį. Šiame projekte mes naudojame 128 × 64 SPI OLED ekraną. Kintamuosius SCREEN_WIDTH ir SCREEN_HEIGHT galite pakeisti pagal savo ekraną.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Tada nustatykite SPI ryšio kaiščius, kur prijungtas OLED ekranas.
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
Tada sukurkite „Adafruit“ ekrano egzempliorių, kurio plotis ir aukštis buvo apibrėžti anksčiau naudojant SPI ryšio protokolą.
„Adafruit_SSD1306“ ekranas (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Po to nustatykite dulkių jutiklių jutiklius ir LED kaiščius. „Sense pin“ yra dulkių jutiklio išvesties kaištis, naudojamas įtampos vertėms nuskaityti, o „led“ kaištis naudojamas įjungti / išjungti IR lemputę.
int prasmePin = A5; int ledPin = 7;
Dabar, kai yra sąrankos () funkcija, inicializuokite „Serial Monitor“ 9600 perdavimo greičiu derinimo tikslais. Be to, inicializuokite OLED ekraną su pradžios () funkcija.
Serijos pradžia (9600); display.begin (SSD1306_SWITCHCAPVCC);
Funkcijos „ loop“ () viduje nuskaitykite įtampos reikšmes iš „Arduino Nano“ analoginio kaiščio 5. Pirmiausia įjunkite IR šviesos diodą ir palaukite 0,28 ms, kol nuskaitysite išėjimo įtampą. Po to perskaitykite įtampos vertes iš analoginio kaiščio. Ši operacija trunka apie 40–50 mikrosekundžių, todėl prieš išjungdami dulkių jutiklio laidą, nustatykite 40 mikrosekundžių vėlavimą. Pagal specifikacijas šviesos diodas turėtų būti įjungtas kas 10ms, todėl palaukite likusio 10ms ciklo laiko = 10000 - 280 - 40 = 9680 mikrosekundžių .
„digitalWrite“ („ledPin“, LOW); vėlavimasMikrosekundės (280); outVo = analogRead (sensePin); vėlavimasMikrosekundės (40); „digitalWrite“ („ledPin“, HIGH); vėlavimasMikrosekundės (9680);
Tada kitose eilutėse apskaičiuokite dulkių tankį naudodami išėjimo įtampą ir signalo vertę.
sigVolt = outVo * (5/1024); dustLevel = 0,17 * sigVolt - 0,1;
Po to nustatykite teksto dydį ir spalvą naudodami setTextSize () ir setTextColor () .
display.setTextSize (1); display.setTextColor (BALTAS);
Tada kitoje eilutėje nustatykite vietą, kurioje tekstas pradedamas naudoti naudojant setCursor (x, y) metodą. Ir atsispausdinkite Dulkių tankio vertes OLED ekrane naudodamiesi funkcija display.println () .
display.println („Dulkės“); display.println ("Tankis"); display.setTextSize (3); display.println (dustLevel);
Paskutiniame, iškvieskite display () metodą, kad tekstas būtų rodomas OLED Display.
display.display (); display.clearDisplay ();
„Sharp GP2Y1014AU0F“ jutiklio sąsajos su „Arduino“ bandymas
Kai aparatinė įranga ir kodas bus paruošti, laikas išbandyti jutiklį. Tam prijunkite „Arduino“ prie nešiojamojo kompiuterio, pasirinkite „Board and Port“ ir paspauskite mygtuką „Įkelti“. Kaip matote žemiau esančiame paveikslėlyje, OLED ekrane bus rodomas dulkių tankis.
Visas darbinis vaizdo įrašas ir kodas pateikiami žemiau. Tikiuosi, kad jums patiko pamoka ir sužinojote ką nors naudingo. Jei turite klausimų, palikite juos komentarų skiltyje arba naudokitės mūsų forumais kitoms techninėms užklausoms.