- Componente necesare
- Senzor Sharp GP2Y1014AU0F
- Modul de afișare OLED
- Diagrama circuitului
- Construirea circuitului pe placa de perfecționare
- Explicație privind codul pentru analizatorul calității aerului
- Testarea interfaței senzorului Sharp GP2Y1014AU0F cu Arduino
Poluarea aerului este o problemă majoră în multe orașe, iar indicele calității aerului se înrăutățește în fiecare zi. Potrivit raportului Organizației Mondiale a Sănătății, mai multe persoane sunt ucise prematur de efectele particulelor periculoase prezentate în aer decât din cauza accidentelor de mașină. Potrivit Agenției pentru Protecția Mediului (EPA), aerul din interior poate fi de 2 până la 5 ori mai toxic decât aerul din exterior. Deci, aici construim un proiect de monitorizare a calității aerului prin măsurarea densității particulelor de praf în aer.
Deci, în continuarea proiectelor noastre anterioare, cum ar fi detectorul GPL, detectorul de fum și monitorul calității aerului, aici vom interfața senzorul Sharp GP2Y1014AU0F cu Arduino Nano pentru a măsura densitatea prafului în aer. În afară de senzorul de praf și Arduino Nano, este afișat și un ecran OLED pentru a afișa valorile măsurate. Senzorul de praf GP2Y1014AU0F de la Sharp este foarte eficient în detectarea particulelor foarte fine precum fumul de țigară. Este proiectat pentru utilizare în purificatoare de aer și aparate de aer condiționat.
Componente necesare
- Arduino Nano
- Senzor Sharp GP2Y1014AU0F
- Modul de afișaj SPI OLED de 0,96 '
- Sârme jumper
- Condensator 220 µf
- Rezistor de 150 Ω
Senzor Sharp GP2Y1014AU0F
GP2Y1014AU0F de la Sharp este un senzor de ieșire analogică cu șase pini, cu o calitate optică a aerului / senzor optic de praf, care este proiectat pentru a simți particulele de praf din aer. Funcționează pe principiul împrăștierii cu laser. În interiorul modulului senzor, o diodă cu emisie în infraroșu și un senzor fotosensibil sunt dispuse în diagonală în apropierea orificiului de intrare a aerului, așa cum se arată în imaginea de mai jos:
Când aerul care conține particule de praf intră în camera senzorului, particulele de praf împrăștie lumina LED IR către foto-detector. Intensitatea luminii împrăștiate depinde de particulele de praf. Cu cât sunt mai multe particule de praf în aer, cu atât este mai mare intensitatea luminii. Tensiunea de ieșire la pinul V OUT al senzorului se modifică în funcție de intensitatea luminii împrăștiate.
GP2Y1014AU0F Pinout senzor:
Așa cum am menționat anterior, senzorul GP2Y1014AU0F vine cu un conector cu 6 pini. Figura și tabelul de mai jos arată atribuirea pinilor pentru GP2Y1014AU0F:
S. NR. |
Nume PIN |
Descrierea pinului |
1 |
V-LED |
LED Vcc Pin. Conectați-vă la rezistența de 5V până la 150Ω |
2 |
LED-GND |
Pin de masă cu LED. Conectați-vă la GND |
3 |
LED |
Folosit pentru a comuta LED-ul pornit / oprit. Conectați-vă la orice pin digital al Arduino |
4 |
S-GND |
Pinul de masă al senzorului. Conectați-vă la GND din Arduino |
5 |
V OUT |
Pin de ieșire analogică a senzorului. Conectați-vă la orice Pin analogic |
6 |
V CC |
Pin de alimentare pozitiv. Conectați-vă la 5V de Arduino |
Specificații senzor GP2Y1014AU0F:
- Consum redus de curent: 20mA max
- Tensiune de funcționare tipică: 4,5V până la 5,5V
- Dimensiune minimă de praf detectabilă: 0,5µm
- Gama de detectare a densității prafului: până la 580 ug / m 3
- Timp de detectare: mai puțin de 1 secundă
- Dimensiuni: 1,81 x 1,18 x 0,69 "(46,0 x 30,0 x 17,6 mm)
Modul de afișare OLED
OLED (Organic Light-Emitting Diodes) este o tehnologie auto-emitentă de lumină, construită prin plasarea unei serii de filme organice subțiri între doi conductori. O lumină puternică este produsă atunci când se aplică un curent electric acestor filme. OLED-urile folosesc aceeași tehnologie ca și televizoarele, dar au mai puțini pixeli decât în majoritatea televizoarelor noastre.
Pentru acest proiect, folosim un ecran OLED monocrom cu 7 pini SSD1306 0,96 ”. Poate funcționa pe trei protocoale de comunicații diferite: modul SPI 3 Wire, modul SPI cu patru fire și modul I2C. Pinii și funcțiile sale sunt explicate în tabelul de mai jos:
Am tratat deja OLED și tipurile sale în detalii în articolul anterior.
Nume PIN |
Alte nume |
Descriere |
Gnd |
Sol |
Pinul de masă al modulului |
Vdd |
Vcc, 5V |
Pin de alimentare (3-5V tolerabil) |
SCK |
D0, SCL, CLK |
Acționează ca știftul ceasului. Folosit atât pentru I2C, cât și pentru SPI |
SDA |
D1, MOSI |
Pinul de date al modulului. Folosit atât pentru IIC, cât și pentru SPI |
RES |
RST, RESET |
Resetează modulul (util în timpul SPI) |
DC |
A0 |
Pinul de comandă a datelor. Folosit pentru protocolul SPI |
CS |
Chip Select |
Util când sunt utilizate mai multe module în cadrul protocolului SPI |
Specificații OLED:
- IC driver OLED: SSD1306
- Rezoluție: 128 x 64
- Unghi vizual:> 160 °
- Tensiunea de intrare: 3.3V ~ 6V
- Culoare pixel: albastru
- Temperatura de lucru: -30 ° C ~ 70 ° C
Aflați mai multe despre OLED și interfața acestuia cu diferite microcontrolere, urmând linkul.
Diagrama circuitului
Schema circuitului pentru interfața senzorului Sharp GP2Y1014AU0F cu Arduino este prezentată mai jos:
Circuitul este foarte simplu, deoarece conectăm doar senzorul GP2Y10 și modulul OLED Display cu Arduino Nano. Senzorul GP2Y10 și modulul de afișare OLED sunt alimentate cu + 5V și GND. Pinul V0 este conectat cu pinul A5 al Arduino Nano. Pinul LED al senzorului este conectat la pinul digital 12 al Arduino. Deoarece modulul OLED Display utilizează comunicarea SPI, am stabilit o comunicare SPI între modulul OLED și Arduino Nano. Conexiunile sunt prezentate în tabelul de mai jos:
S. Nu |
Pin modul OLED |
Pinul Arduino |
1 |
GND |
Sol |
2 |
VCC |
5V |
3 |
D0 |
10 |
4 |
D1 |
9 |
5 |
RES |
13 |
6 |
DC |
11 |
7 |
CS |
12 |
S. Nu |
Pinul senzorului |
Pinul Arduino |
1 |
Vcc |
5V |
2 |
V O |
A5 |
3 |
S-GND |
GND |
4 |
LED |
7 |
5 |
LED-GND |
GND |
6 |
V-LED |
Rezistor 5V prin 150Ω |
Construirea circuitului pe placa de perfecționare
După lipirea tuturor componentelor de pe placa de perf, va arăta ceva mai jos. Dar poate fi, de asemenea, construit pe un panou. Am lipit senzorul GP2Y1014 pe aceeași placă pe care am folosit-o pentru interfața senzorului SDS011. În timp ce lipiți, asigurați-vă că firele de lipit trebuie să fie la suficientă distanță una de cealaltă.
Explicație privind codul pentru analizatorul calității aerului
Codul complet pentru acest proiect este dat la sfârșitul documentului. Aici explicăm câteva părți importante ale codului.
Codul folosește Adafruit_GFX , și Adafruit_SSD1306 biblioteci. Aceste biblioteci pot fi descărcate din Managerul de biblioteci din Arduino IDE și le pot instala de acolo. Pentru aceasta, deschideți IDE-ul Arduino și accesați Sketch <Include Library <Manage Libraries . Acum căutați Adafruit GFX și instalați biblioteca Adafruit GFX de la Adafruit.
În mod similar, instalați bibliotecile Adafruit SSD1306 de la Adafruit.
După instalarea bibliotecilor pe Arduino IDE, porniți codul incluzând fișierele bibliotecilor necesare. Senzorul de praf nu necesită nicio bibliotecă, deoarece citim valorile tensiunii direct de la pinul analogic al Arduino.
#include
Apoi, definiți lățimea și înălțimea OLED. În acest proiect, folosim un ecran OLED 128 × 64 SPI. Puteți schimba SCREEN_WIDTH și SCREEN_HEIGHT variabile în funcție de ecran.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Apoi definiți pinii de comunicație SPI unde este conectat ecranul OLED.
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
Apoi, creați o instanță de afișare Adafruit cu lățimea și înălțimea definite anterior cu protocolul de comunicație SPI.
Afișaj Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
După aceea, definiți senzorul senzorului de praf și pinii led. Pinul de detectare este pinul de ieșire al senzorului de praf care este utilizat pentru a citi valorile de tensiune, în timp ce pinul LED este utilizat pentru a porni / opri ledul IR.
int sensePin = A5; int ledPin = 7;
Acum, în interiorul funcției setup () , inițializați Serial Monitor la o rată de transmisie de 9600 în scopuri de depanare. De asemenea, inițializați afișajul OLED cu funcția begin () .
Serial.begin (9600); display.begin (SSD1306_SWITCHCAPVCC);
În interiorul funcției loop () , citiți valorile tensiunii de la pinul analogic 5 al Arduino Nano. Mai întâi, porniți LED-ul IR și apoi așteptați 0,28 ms înainte de a citi tensiunea de ieșire. După aceea, citiți valorile tensiunii de pe pinul analogic. Această operație durează în jur de 40-50 microsecunde, așa că introduceți o întârziere de 40 microsecunde înainte de a opri ledul senzorului de praf. Conform specificațiilor, LED-ul ar trebui să fie aprins o dată la fiecare 10 ms, așa că așteptați restul ciclului de 10 ms = 10000 - 280 - 40 = 9680 microsecunde .
digitalWrite (ledPin, LOW); delayMicroseconds (280); outVo = analogRead (sensePin); delayMicroseconds (40); digitalWrite (ledPin, HIGH); delayMicroseconds (9680);
Apoi, în următoarele linii, calculați densitatea prafului utilizând tensiunea de ieșire și valoarea semnalului.
sigVolt = outVo * (5/1024); dustLevel = 0,17 * sigVolt - 0,1;
După aceea, setați dimensiunea și culoarea textului folosind setTextSize () și setTextColor () .
display.setTextSize (1); display.setTextColor (ALB);
Apoi, în linia următoare, definiți poziția în care începe textul folosind metoda setCursor (x, y) . Și tipăriți valorile densității prafului pe afișajul OLED utilizând funcția display.println () .
display.println ("Praf"); display.println ("Densitate"); display.setTextSize (3); display.println (dustLevel);
Și în ultimul rând, apelați metoda display () pentru a afișa textul pe ecranul OLED.
display.display (); display.clearDisplay ();
Testarea interfaței senzorului Sharp GP2Y1014AU0F cu Arduino
Odată ce hardware-ul și codul sunt gata, este timpul să testați senzorul. Pentru aceasta, conectați Arduino la laptop, selectați placa și portul și apăsați butonul de încărcare. După cum puteți vedea în imaginea de mai jos, acesta va afișa Densitatea prafului pe afișajul OLED.
Videoclipul complet de lucru și codul sunt date mai jos. Sper că ți-a plăcut tutorialul și ai învățat ceva util. Dacă aveți întrebări, lăsați-le în secțiunea de comentarii sau utilizați forumurile noastre pentru alte întrebări tehnice.