Il sensore SDS011 e le polveri sottili
L’Associazione Nazionale Tutela Energie Rinnovabili, un po’ di tempo fa ha pubblicato un articolo (basato su uno studio dell’autorevole rivista medica The Lancet) in cui viene detto che in Europa, e soprattutto in Italia, è aumentato il numero di morti causati dalle polveri sottili.
Premetto che non sono un medico e che quello che segue non costituisce un consiglio medico o il parere di un esperto: mi sono semplicemente informato, ho letto un po’ di cose in giro su quelli che mi sembravano i siti più autorevoli in materia e riporto qui alcune informazioni: a me basta sapere che certe cose sicuramente salutari non sono e quindi avere la possibilità di misurare queste cose onde avere parametri di riferimento e quindi tenermi alla larga dai pericoli. Per cui, dopo una prima parte in cui spiego cosa è il particolato, andremo ad analizzare un sensore adatto allo scopo.
Il sensore di cui si parla nell’articolo, insieme ad altri componenti, è stato gentilmente offerto da DigitSpace – Negozio online di componenti elettronici e kit ad ottimi prezzi situato in Cina. Pagamento con paypal e spedizioni con corriere espresso.
Indice dei contenuti
Cosa sono le polveri sottili
Le polveri sottili, anche dette particolato, sono particelle molto molto piccole (fino a 500µm) di sostanze solide che vagano nell’aria (questa miscela è definita aerosol, ovvero particelle solide o liquide disperse in un gas, qual’è l’aria): polveri, appunto, ma talmente piccole da riuscire a penetrare nel nostro corpo attraverso la respirazione senza che le nostre difese naturali (l’epitelio ciliato della cavità nasale) riescano a bloccarle.
Chi/Cosa causa la presenza di polveri sottili? Nelle città è in gran parte l’uomo con scarichi industriali nell’atmosfera, scarichi degli autoveicoli, roghi, la polvere che rilasciano i freni delle auto, le emissioni delle industrie che lavorano materiali “polverosi” come i cementifici, altre emissioni in genere come anche il fumo delle stufe, giusto per elencare qualche sorgente.
Per fortuna le industrie di amianto non esistono più sebbene ci sia ancora tanto amianto in circolazione
Ci sono poi le cause naturali, sulle quali l’uomo non ha il controllo: polvere, terra e sale marino alzati dal vento, pollini e spore, erosione delle rocce ecc. Il polline, ad esempio, sappiamo bene cosa causa a chi soffre di allergie.
Tutta questa robaccia, quindi, è polveri sottili o, più comunemente, particolato.
Sono due i tipi di particolato che vengono monitorati: il PM10 e il PM2.5. PM sta per Particulate Matter (Materia Particolata) mentre il numero (10 o 2.5) indica il diametro aerodinamico delle particelle, espresso in µm.
Il diametro aerodinamico di una particella è un parametro che tiene conto della sua densità piuttosto che del diametro fisico dal momento che le particelle hanno forme irregolari. Per dirla in maniera nostrana: si tiene conto di questo parametro perchè non è la dimensione che conta ma come si muovono. Alcune particelle, anche aventi dimensioni molto diverse tra loro, possono comportarsi in maniera uguale, ovvero viaggiare nell’aria in un certo modo, perchè hanno diverse densità che compensano le dimensioni.
Per farvi rendere conto della grandezza di queste particelle: un globulo rosso ha un diametro di 8 µm.
Circa il 60% del PM10 è costituito da PM2.5, questo perchè si fa riferimento alla grandezza massima delle particelle, per cui nell’insieme di dimensioni “grandi” rientrano sicuramente quelle più piccole e non è vero il contrario.
Le particelle più grandi non sono eccessivamente pericolose perchè, data l’elevata velocità con cui cadono, l’esposizione per gli umani è minore: in parole povere la polvere si deposita, perchè pesante, non va a finire nell’aria e di conseguenza non la respiriamo. In più al di sopra dei 7µm le particelle vengono fermate nel naso: quindi le nostre difese naturali sono già belle potenti riuscendo a fermare addirittura particelle così piccole.
Il vero problema c0è per le particelle più piccole ancora (PM2.5 – ovvero con diametro aerodinamico da 2.5μm a scendere): queste difatti non riescono ad essere trattenute dal naso e possono tranquillamente raggiungere i bronchi, e quelle più piccole ancora gli alveoli polmonari. In dipendenza della composizione chimica di queste particelle, si possono avere varie patologie (l’asma ne è un esempio). Il guaio è che, raggiungendo gli alveoli, le particelle così piccole possono essere assorbite dal sangue e qui, è oggetto di dibattito, si può arrivare a problemi ben più gravi come i tumori. Per questo motivo, soprattutto le grandi città monitorano costantemente il livello di particolato nell’aria, e, COVID a parte, vediamo che il motivo per indossare una mascherina di tipo FFP3 è sicuramente un altro e forse ben più grave.
Il sensore SDS011
In questo articolo parlerò del sensore SDS011 prodotto dalla cinese NovaFitness.
Principio di funzionamento
Il sensore in questione basa il suo funzionamento sul principio della diffusione ottica (detta anche dispersione o scattering). Ovvero: un raggio luminoso che procede in una certa direzione, quando colpisce una particella, viene diffuso in maniera disordinata in tutte le direzioni.
Questo fenomeno è molto diverso dalla rilessione e dalla rifrazione nei quali, invece, il raggio viene deviato in maniera precisa e prevedibile.
Questo fenomeno è generalmente legato all’interazione della luce con particelle microscopiche disperse in un fluido, come colloidi, gel e aerosol.
Un esempio classico del fenomeno della diffusione ottica lo abbiamo tutti i giorni sotto gli occhi: il colore blu del cielo. Il sole emana luce perfettamente bianca, questa arriva nell’atmosfera terrestre e le particelle che costituiscono l’atmosfera stessa, a causa della loro conformazione chimico-fisica, diffondono più facilmente la luce a frequenze elevate (luce blu e viola) mentre lasciano passare inalterate le altre frequenze: la conseguenza è che il cielo ci appare blu proprio perchè la parte blu/viola che costituisce la luce del sole viene diffusa in tutte le direzioni, e il sole invece ci appare di un colore giallo/arancione perchè al fascio di luce bianca sono state sottratte le frequenze superiori.
Il sensore SDS011 è costituito da una ventola che aspira l’aria esterna per convogliarla in una camera di misura stagna. All’interno della camera di misura è contenuto un diodo laser e un fotodiodo rilevatore. L’aria viene immessa nella camera, il laser viene acceso: un fascio di luce laser procede “dritto” senza diffondersi. Quando il laser colpisce il particolato, la sua luce viene diffusa e l’intensità luminosa che si disperde nella camera può essere rilevata dal fotodiodo. Il sensore riesce a distinguere tra il PM10 e il PM2.5 perché la forma d’onda della luce rilevata dal fotodiodo è correlata con il numero e le dimensioni delle particelle: per questo motivo a bordo del sensore c’è un microcontrollore ad 8 bit che esegue l’analisi.
Su questo sito viene mostrato il sensore smontato con l’evidenziazione delle parti che lo costituiscono: http://aqicn.org/sensor/sds011/
Le specifiche del sensore
Di seguito ci sono le specifiche del sensore come riportate dal datasheet:
Parametro | Specifica |
---|---|
Misurazione di | PM10 e PM2.5 |
Range di misura | 0 ÷ 999.9 µg/m3 |
Risoluzione | 0.3µg/m3 |
Tensione di alimentazione | 4.7 ÷ 5.3V |
Assorbimento | max 80mA |
Assorbimento a riposo | <4mA |
Condizioni ambientali di funzionamento | Temperatura: -10 ÷ 50°C Umidità: max 70% Pressione: 86kPa ÷ 110kPa |
Certificazioni | CE, FCC, RoHS |
Uscite | UART a livello TTL 3.3V (9600,N,8,1) - 1 pacchetto al secondo oppure due uscite PWM separate per PM2.5 e PM10 |
Ciclo di vita | 8000 ore |
Dimensioni | 71x70x23mm |
Ciclo di vita
Quello che salta subito all’occhio dalla tabella delle caratteristiche, o quanto meno ci fa porre delle domande, è sicuramente il ciclo di vita: 8000 ore sono qualcosa come 11 mesi. Questo dato si riferisce, chiaramente, al funzionamento continuo ed è determinato dal tempo di vita del diodo laser : dopo questo numero di ore si esaurisce e le misure sono falsate. Fortunatamente non abbiamo la necessità di tenerlo in funzione in continuo e c’è la possibilità di mettere il sensore in modalità sleep, durante la quale diodo e ventola sono spenti e c’è il minimo assorbimento possibile. Di default, all’accensione, il sensore è in modalità continua ed esegue una misurazione al secondo ma, tramite comandi seriali, è possibile impostare una modalità di lavoro discontinua, che vedremo dopo.
Anatomia del sensore
Il sensore è un quadrato con un lato di circa 70mm di lato ed un’altezza, nel punto più alto in cui è presente la ventola, di 23mm. Nella parte superiore è presente l’attacco per un tubicino: questo è il punto da cui l’aria viene aspirata ed è possibile lasciarlo così oppure collegare un tubo con un diametro interno di 6mm e diametro esterno 8mm, il tubo non deve assolutamente essere più lungo di 1m: più corto è meglio è. Io raccomanderei inoltre di utilizzare un tubo trasparente per verificare visivamente se può risultare ostruito o meno. Per quanto riguarda il montaggio, sul datasheet sono raccomandate 3 posizioni differenti rispetto alla forza di gravità:
Dalla parte inferiore, ovvero opposta al tubo, viene espulsa l’aria, direttamente dal corpo ventola. Un’altra raccomandazione è quella di fare in modo che non entri luce dagli unici due punti in contatto con la camera di misura: ovvero ingresso e uscita aria, sebbene siano protetti, il datasheet raccomanda di non farci entrare la luce solare. Bisogna poi, chiaramente, fare in modo che non vengano ostruiti questi due passaggi.
Foto
Pinout
Nella parte inferiore, subito sotto il connettore di alimentazione della ventola, è presente un connettore JST-XH maschio a 7 pin (passo 2.54mm, connettore 6SP1), il cui pinout è il seguente:
Vediamo che oltre all’UART (che, ripeto, ha i livelli a 3.3V nonostante il sensore sia alimentato a 5V), sono presenti le due uscite PWM separate per il PM2.5 e il PM10. La riportata anche sulle serigrafie al lato inferiore del PCB dove, però, l’uscita PWM per il PM2.5 è riportata come 1um e quella per il PM10 come 25um.
Protocollo di comunicazione UART
Sul datasheet e sul sito della NovaFitness non è riportato il protocollo di comunicazione esteso, ad ogni modo è possibile reperire in rete un PDF che illustra in maniera dettagliata tutti i comandi inviabili al modulo. Potete scaricare questo documento in fondo all’articolo.
Il sensore normalmente risponde con un pacchetto formato da 10 bytes, mentre il dispositivo che interroga il sensore (PC, Microcontrollore) deve invece inviare un pacchetto costituito da 19bytes. I dati sono inviati in formato byte (quindi non ASCII) con i livelli a 3.3V (sul documento del protocollo esteso invece è riportato 5V: è sbagliato).
Al primo avvio il sensore si trova in modalità di lavoro cosiddetta attiva-continua ed invia alla frequenza di 1Hz un pacchetto così costituito:
# Byte | Significato | Valore |
---|---|---|
0 | Header | 0xAA |
1 | Tipo comando | 0xC0 |
2 | Dato 1 | Byte basso PM2.5 |
3 | Dato 2 | Byte alto PM2.5 |
4 | Dato 3 | Byte basso PM10 |
5 | Dato 4 | Byte alto PM10 |
6 | Dato 5 | Byte basso Identificativo sensore |
7 | Dato 6 | Byte alto identificativo sensore |
8 | Check-Sum | OR dei 6 dati |
9 | Tail | 0xAB |
Il valore di checksum si ottiene sommando tutti i bytes di dati (sono esclusi Head, Tail e ID comando) e prelevandone solo la parte bassa.
Il valore finito di PM2.5 e PM10, espresso in µg/m³, si calcola come:
[(Byte alto << 8) + (Byte basso)] /10
Il byte 1 (il secondo) indica il tipo di risposta inviata dal sensore che determina anche il significato dei bytes di dati da 1 a 4 compresi. Il microcontrollore o il PC, quando devono inviare un comando, inviano invece un pacchetto costituito da 19 bytes: il significato dei primi 6 bytes è lo stesso (header, id comando, 3 o 4 bytes di dati), dopodichè ci sono altri 10/11 bytes di dati seguiti da due bytes che identificano l’ID del dispositivo, dal checksum e dal tail (oxAB). In particolare i bytes 14 e 15 del comando inviato dall’host (gli ultimi due) identificano il sensore a cui è rivolto il comando e mettendoli entrambi a 0xFF si fa in modo che tutti i sensori (o l’unico sensore di cui non si conosce l’ID) rispondano: questo è da usare nel caso in cui sulla stessa linea UART siano presenti più sensori.
Senza elencare tutti i comandi, che sono comunque riportati in maniera comprensibilissima sul documento alla fine dell’articolo insieme ad esempi che fanno capire bene come usarli, evidenzio giusto un paio di cose importanti:
Data Reporting Mode
Il sensore ha due modalità di invio dati (Data Reporting Mode): query e active. In modalità query il sensore risponde soltanto quando viene interrogato. In questo caso, quindi, l’invio dati da parte del sensore non è continuo ma questi si mette in stand-by e va in modalità misura solo quando gli viene inviato l’apposito comando. Il data reporting active è la modalità attiva di default all’accensione: il sensore invia dati continuamente senza bisogno di essere interrogato e li invia ad una frequenza che di default è 1Hz. La modalità attiva/sleep può essere cambiata con il comando Set Sleep and Work mentre il periodo di lavoro (default 1Hz) viene cambiato con il comando Set Working Period
Set Sleep and Work
E’ possibile mettere il modulo in stand-by e riattivarlo per avere i dati. Tuttavia questa modalità di lavoro non è vantaggiosa: è più facile settare il modulo per un periodo di lavoro, in modo che esegua da solo queste operazioni. Sul documento è specificato che il settaggio Set Sleep & Work NON viene memorizzato:
The setting is not effective after power off
Set Working Period
Il sensore ha due modalità di funzionamento per la modalità di invio dati active: continuo e ad intervalli. Di default è attiva la modalità di invio dati continua che prevede l’invio di dati 1 volta al secondo, è possibile però impostare una modalità che prevede l’invio dei dati da 1 fino a 30 minuti. Se impostiamo, ad esempio, che il sensore debba inviare i dati ogni 30 minuti, esso rimarrà in funzione 30 secondi (parametro fisso, durante il quale la ventola aspira aria e la immette nella camera) e, dopo aver eseguito l’elaborazione, invierà i dati una sola volta, dopodichè rimarrà in sleep per 30 minuti meno 30 secondi. Questa modalità è sicuramente la migliore da utilizzare per preservare la vita del sensore: sebbene anche la modalità invio dati via query è vantaggiosa, la richiesta, in questo caso, va gestita lato microcontrollore/computer, mentre con la modalità invio dati in continuo settata a X minuti, si fa in modo che sia il sensore a fare tutto da solo e noi dovremo solo preoccuparci, lato host, di rilevare un’interrupt sulla ricezione UART per poi controllare i dati ricevuti.
Sul documento non è purtroppo specificato se questo settaggio viene memorizzato, quindi è conveniente darlo ogni volta all’avvio per essere sicuri.
Protocollo di comunicazione PWM
Sul sensore, oltre all’UART, abbiamo la possibilità di ricevere (solo ricevere) i dati su altri due pin contrassegnati sul PCB come 1um (PM2.5) e 25um (PM10). Sul datasheet è riportato un esempio di invio dei dati:
Il periodo del segnale PWM è di 1004mS±1% (quindi 994÷1014mS). Il sensore comincia ad inviare i dati con una transizione da livello basso ad alto che dura sempre minimo 2mS e termina con un livello basso di minimo 2 mS, la durata del livello alto è proporzionale alla concentrazione.
Una durata dell’impulso ad alto livello pari a 1001mS corrisponde a 999µg/m³, mentre una durata di 2mS vale 0. Si capisce quindi che il valore espresso in µg/m³ è pari alla durata dell’impulso alto espressa in millisecondi meno 2.
Non so se ci siano vantaggi o meno nell’utilizzare l’uscita PWM rispetto alla UART, ma ad occhio preferisco di gran lunga la UART.
Collegamento del sensore al PC
Nella confezione del sensore, normalmente viene anche fornito un adattatore USB/UART con il cavetto già cablato che permette di collegare il sensore al PC. Sull’adattatore è presente un bridge USB/UART CH340G. Nella pagina ufficiale del prodotto, alla sezione download, è possibile scaricare un pacchetto, Software Downloading, che comprende i driver per il bridge seriale ed una applicazione. Il materiale è solo per windows. Una volta scaricato il pacchetto bisogna installare i drivers ed essere sicuri che il bridge seriale sia riconosciuto dal sistema.
Collegare l’adattatore al sensore e quindi connetterlo ad una porta USB prima di avviare il software. Il programma va avviato in modalità amministratore altrimenti non trova le porte seriali, su windows 7 bisogna cliccare col tasto destro sull’eseguibile SPM25Data.exe e selezionare Esegui come amministratore.
Si presenta questa schermata:
In alto a destra bisogna scegliere il tipo di sensore, è selezionato SDS011 di default, e in basso è necessario specificare la porta seriale: il programma in automatico cerca dei sensori sulle porte disponibili e li elenca nel riquadro destro. Nel frattempo potete notare due cose:
- Il sensore è silenziosissimo nonostante la ventola stia girando
- Il sensore sta già funzionando al ritmo di una misura al secondo (impostazione di default) e lo notiamo dal led rosso sul bridge USB che si accende alla frequenza di 1Hz
Premendo OK si viene portati sulla seconda schermata che presenta un grafico:
Nella scheda a destra Display selezioniamo l’ultima opzione come nella schermata sopra: PM2.5 and PM10 for Selected devices, in questo modo sul grafico viene mostrato l’andamento sia del PM10 (linea blu) che del PM2.5 (linea rossa) scritto erroneamente come PM25(!). In realtà non è specificato, sul grafico, le due linee a quale parametro corrispondono, ma se ricordate quanto ho scritto prima: il PM10 è più alto e un buon 60% del PM10 è costituito da PM2.5, capite che la linea più in alto rappresenta il PM10. In realtà nella schermata che ho messo sopra non di distinguono le due linee: ho fatto una prova veloce nel mio laboratorio aspettandomi di trovare dei numeri alti causa vari lavori da maker che faccio e invece è venuto fuori che non c’è particolato (buon per me!), ho provato anche fuori e i valori sono bassi. Allego quindi l’immagine che si trova sul manuale:
Limiti di legge
In Italia la concentrazione di PM10 e PM2.5 è regolata dal Dlgs 155/2010 – Attuazione della direttiva 2008/50/CE relativa alla qualità dell’aria ambiente e per un’aria più pulita in Europa. Sul sito del ministero della salute sono riportate due relazioni, in formato PDF, che illustrano in maniera più semplice i limiti. Tutti i link sono riportati a fine articolo. Per il PM10 è riportato un valore limite annuale di 40µg/m³ oppure un massimo di 50µg/m³ per 24 ore da non superare più di 35 volte all’anno. Per il PM2.5 c’è un valore limite annuale di 20µg/m³ entrato in vigore quest’anno.
Capite quindi che quell’immagine presa dal manuale… è stata catturata in qualche posto in cui fanno sicuramente bene a camminare con le mascherine FFP3 sempre addosso.
Links
- SDS011 – Pagina ufficiale prodotto
- Acquisto SDS011 su Digitspace
- Acquisto SDS011 su Futura Elettronica
- Acquisto SDS011 su Amazon
- Libreria per Arduino (supporta il protocollo completo, quindi anche sleep/work)
- The SDS011 Air quality sensor experiment (World Air Quality Project)
- Articolo con immagini esemplificative del funzionamento del sensore
- Datasheet SDS011 (208 download)
- Protocollo comunicazione SDS011 (191 download)
- DLGS 155/2010 – Gazzetta ufficiale
- DLGS 155/2010 – ARPA Veneto, formato PDF
- Relazione ministero della salute sul PM10 – PDF
- Relazione ministero della salute sul PM2.5 – PDF