Pe piață există zeci de senzori de particule fine, dar SDS011 de la Nova Fitness s-a impus ca standardul de facto pentru proiectele DIY de monitorizare a calității aerului. Folosește un laser real (nu LED infraroșu, ca senzorii ieftini), citește concentrații până la 999.9 µg/m³ cu eroare sub 10%, comunică prin UART la 9600 baud și are ventilator integrat pentru flux constant de aer. Plus că vine pre-calibrat din fabrică, ceea ce înseamnă că funcționează „out of the box" - lucru rar la senzorii sub 200 lei.
În acest ghid construiești un monitor compact cu Arduino Nano, SDS011 și un ecran OLED 0.96". Citirile PM2.5 și PM10 apar live, în µg/m³, cu actualizare la fiecare secundă.
Demonstrație video
Înainte să intri în detalii, uite cum arată proiectul în lucru:
Ce vei construi
Un dispozitiv care:
- aspiră aer prin ventilatorul intern al SDS011;
- măsoară particulele PM2.5 (sub 2.5 µm) și PM10 (sub 10 µm);
- afișează valorile în µg/m³ pe un OLED 128x64;
- trimite citirile și pe Serial Monitor, util pentru debugging și logging extern.

Lista de componente
| Componentă | Detalii |
|---|---|
| Senzor Nova SDS011 | Senzor laser PM2.5/PM10 cu UART și ventilator integrat |
| Arduino Nano (compatibil) | Microcontroler ATmega328P pe modul mic |
| OLED 0.96" SSD1306 | 128x64 pixeli, conexiune SPI |
| Fire jumper și breadboard | Pentru prototipare rapidă |
| Sursă 5V | USB, baterie sau adaptor extern |
Cum funcționează senzorul SDS011
Principiul fizic se numește laser scattering (împrăștiere a luminii laser) și e folosit și de senzorii profesionali, doar că la o scară mult mai compactă. Pașii interni:
- Ventilatorul mic trage aer constant prin orificiul de admisie.
- Un fascicul laser intersectează curentul de aer din camera de măsurare.
- Fiecare particulă care trece prin laser împrăștie lumina în toate direcțiile, proporțional cu mărimea ei.
- Un fotodetector poziționat lateral captează lumina împrăștiată și o convertește în impulsuri electrice.
- Microcontrolerul intern numără impulsurile, clasifică particulele pe categorii (2.5 µm și 10 µm) și calculează masa lor în µg/m³.
- Rezultatul iese pe UART la 9600 baud, în formă de mesaj binar standardizat.
Specificații tehnice
- Domeniu de măsură: 0.0 - 999.9 µg/m³
- Timp de răspuns: ~1 secundă
- Eroare: ±10% sau ±10 µg/m³ (la valori mici)
- Temperatură de operare: -20°C până la +50°C
- Curent: 100 mA activ, sub 4 mA în standby (sleep)
- Alimentare: 5V DC, dar pinii RX/TX sunt toleranți la 3.3V
- Durată de viață estimată: ~8000 ore de funcționare continuă (~10 ani la o citire pe minut)
SDS011 față de alți senzori populari
Dacă te întrebi de ce am ales SDS011 și nu altceva, uite o comparație rapidă:
| Senzor | Tehnologie | Preț orientativ | Observații |
|---|---|---|---|
| SDS011 | Laser scattering | ~150 lei | Cel mai bun raport preț/precizie. Ventilator integrat. UART simplu. |
| PMS5003 / PMS7003 | Laser scattering | ~120-180 lei | Mai compact decât SDS011, dar fără carcasă metalică. Citește și PM1.0. |
| GP2Y1010AU0F | Optic IR | ~50 lei | Ieftin, dar imprecis. Necesită calibrare manuală și nu separă PM2.5 de PM10. |
| Senzori industriali | Beta attenuation | 5000+ lei | Standard de referință, dar inaccesibil pentru DIY. |
Pentru proiecte DIY, SDS011 lovește exact punctul „precizie decentă la preț accesibil".
Schema de conexiuni
SDS011 → Arduino Nano
| Pin SDS011 | Pin Arduino Nano |
|---|---|
| TX | D3 |
| RX | D4 |
| VCC (5V) | 5V |
| GND | GND |
OLED SSD1306 (mod SPI) → Arduino Nano
| Pin OLED | Pin Arduino Nano |
|---|---|
| VCC | 5V |
| GND | GND |
| D0 (Clock) | D10 |
| D1 (MOSI / Data) | D9 |
| RES (Reset) | D13 |
| DC (Data/Command) | D11 |
| CS (Chip Select) | D12 |

Biblioteci necesare
Toate sunt în Arduino Library Manager (Sketch → Include Library → Manage Libraries):
- SDS011 de R. Zschiegner - driver pentru senzor
- Adafruit GFX Library - grafică de bază pentru OLED
- Adafruit SSD1306 - driver pentru controller-ul ecranului
Codul sursă
Codul citește valorile PM la fiecare ciclu și le afișează simultan pe OLED și pe Serial Monitor:
// Monitor calitate aer cu SDS011 + OLED SSD1306
// Adaptat dupa: circuitdigest.com (link in finalul articolului)
#include <SDS011.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
float p10, p25;
int error;
SDS011 my_sds;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup() {
// comunicatie cu SDS011: RX pe pinul 3, TX pe pinul 4
my_sds.begin(3, 4);
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.display();
}
void loop() {
error = my_sds.read(&p25, &p10);
if (!error) {
// afiseaza pe Serial pentru debugging
Serial.println("PM2.5: " + String(p25));
Serial.println("PM10: " + String(p10));
// afiseaza pe OLED
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 15);
display.println("PM2.5");
display.setCursor(67, 15);
display.println(p25);
display.setCursor(0, 40);
display.println("PM10");
display.setCursor(67, 40);
display.println(p10);
display.display();
display.clearDisplay();
}
delay(100);
}
Asamblare și testare pas cu pas
- Identifică pinii senzorului. SDS011 are un cablu JST cu 7 pini, dar pentru proiectul ăsta folosești doar 4: TX, RX, 5V și GND. Verifică marcajul de pe cablu sau datasheet-ul oficial înainte să conectezi - dacă inversezi VCC cu GND, riști să arzi senzorul.
- Conectează SDS011 la Arduino conform primului tabel. Folosește breadboard la prima rulare; perfboard-ul vine la final.
- Conectează OLED-ul pe pinii SPI. Cele 7 conexiuni sunt ușor de încurcat - merită să le bifezi una câte una.
- Alimentează Arduino prin USB de la calculator.
- În Arduino IDE alege Board: Arduino Nano, procesorul corect (ATmega328P sau "Old Bootloader" în funcție de cipul ce vine pe placă) și COM-portul.
- Instalează cele trei biblioteci din Library Manager.
- Copiază codul de mai sus, apasă Verify (bifa) ca să compileze, apoi Upload (săgeată).
- După upload, deschide Serial Monitor la 9600 baud. Ar trebui să vezi linii cu „PM2.5: ..." și „PM10: ..." la fiecare câteva sutimi de secundă.
- Privește OLED-ul: aceleași valori trebuie să apară și acolo, cu actualizare aproape în timp real.
Dacă auzi ventilatorul senzorului pornit (un zgomot fin, similar cu un mini-cooler), e semn bun. Senzorul are nevoie de 10-15 secunde după pornire pentru citiri stabile.

Calibrare și precizie
SDS011 vine pre-calibrat din fabrică și nu necesită ajustări pentru utilizare normală. Totuși, dacă vrei date foarte precise (de exemplu, pentru un proiect de cercetare), reține:
- Umiditate ridicată (peste 70%) supraestimează valorile, pentru că laserul „vede" și picăturile de apă ca pe particule. O corecție simplă: ignoră citirile sau aplică un factor de scădere la umiditate mare.
- Senzorul îmbătrânește - după 3-4 ani, sensibilitatea poate scădea cu 10-15%. Poți recalibra comparând cu o stație oficială (de exemplu, datele de la aqicn.org sau sensor.community) și ajustând prin software cu un factor de scală.
- Sleep mode - SDS011 are durată de viață limitată (~8000 ore active). Dacă vrei să-l ții pornit non-stop, e mai bine să-l rotești 30 secunde pornit, 4-5 minute oprit (sleep). Comanda e disponibilă în biblioteca SDS011.
Cum interpretezi valorile
PM2.5 este indicatorul cel mai important pentru sănătate - particulele mici ajung adânc în plămâni și chiar în sânge. Iată ghidul orientativ pentru PM2.5 (µg/m³), aliniat la scara AQI și OMS:
- 0 - 12 - aer bun, fără riscuri
- 12 - 35 - moderat, persoanele foarte sensibile pot resimți disconfort
- 35 - 55 - nesănătos pentru grupuri sensibile (astm, copii, vârstnici)
- 55 - 150 - nesănătos pentru toată populația
- peste 150 - foarte nesănătos, evită activitățile în aer liber
Pentru context: OMS recomandă media anuală sub 5 µg/m³, iar UE impune limita anuală de 25 µg/m³. În București media depășește frecvent 20 µg/m³, cu vârfuri iarna peste 100 µg/m³ în zilele cu inversiune termică.
Upgrade-uri și extinderi
Monitorul de bază e doar punctul de plecare. Cele mai utile direcții în care îl poți duce:
- LED-uri „semafor" - verde / galben / roșu, controlate de Arduino în funcție de pragul PM2.5. Lampă vizuală pe birou care îți spune când să aerisești.
- Buzzer de alertă - un beep scurt când valoarea trece de 35 µg/m³.
- WiFi cu ESP8266 sau ESP32 - cel mai popular upgrade. Înlocuiești Arduino Nano cu un NodeMCU ESP8266 sau ESP32 și trimiți datele către Home Assistant, ThingsBoard, MQTT sau un Google Sheet via Apps Script. SDS011 e direct compatibil cu plăcile ESP (tolerează 3.3V pe UART).
- Card SD pentru logging - cu modul SD card și un RTC (Real Time Clock) salvezi istoricul cu timestamp și îl analizezi mai târziu în Excel sau Python (matplotlib).
- Sensor.Community - proiectul fost Luftdaten. Cu un firmware special urci datele tale pe harta colaborativă globală de calitate a aerului și contribui la știință cetățenească. Setup-ul oficial folosește ESP8266.
- Carcasă imprimată 3D - protejează electronica și permite montaj exterior. Există zeci de modele open-source pe Thingiverse pentru SDS011, multe gândite să direcționeze fluxul de aer corect și să țină ploaia departe.
- Power management - pentru un monitor portabil cu baterie, folosește comanda de sleep a SDS011 (citire o dată pe minut, restul timpului oprit). Reduci consumul mediu de la 100 mA la ~5 mA.
Probleme frecvente și depanare
- Senzorul nu răspunde: verifică alimentarea (trebuie strict 5V) și că nu ai inversat TX cu RX. Ventilatorul trebuie să se audă pornit - dacă nu se aude, e probabil problemă de alimentare.
-
Valori constante 0.0: alimentare ok, dar comunicarea pe UART e ratată. Verifică pinii din
my_sds.begin(3, 4)și asigură-te că nu folosești același Serial cu cel hardware (pinii 0 și 1 ai Arduino Nano). - OLED rămâne negru: probabil ai un OLED cu I2C, nu SPI. Verifică - dacă are doar 4 pini (VCC, GND, SCL, SDA), e I2C. În acest caz schimbă biblioteca pe inițializare I2C cu adresa 0x3C.
- Valori care oscilează puternic: normal în primele 30 de secunde, după mișcări bruște sau lângă o sursă de praf (un soclu, un calorifer). Așteaptă să se stabilizeze.
- Eroare la compilare: de obicei lipsește o bibliotecă. Verifică în Library Manager dacă toate trei sunt instalate (SDS011, Adafruit_GFX, Adafruit_SSD1306).
- Valori prea mari iarna: probabil normal - iarna calitatea aerului scade real, mai ales în orașele cu încălzire pe lemne. Compară cu stația oficială cea mai apropiată pe aqicn.org ca să confirmi.
Proiect adaptat după tutorialul publicat de CircuitDigest: Air Quality Analyzer using Arduino and Nova PM Sensor SDS011. Video demonstrativ: CircuitDigest pe YouTube. Pentru variante alternative (cu ESP8266, ESP32 sau ESPHome), recomandăm și sursa originală.
0 comments