Il sensore di particolato SPS30 della Sensirion
In questo articolo illustro il sensore SPS30 prodotto dalla Sensirion. Si tratta di un sensore per il monitoraggio delle polveri sottili. In un articolo precedente vi ho già illustrato l’SDS011 della Novafitness e vi ho già parlato, sia in un articolo che in una live su youtube (durante la quale ho anche anticipato qualcosa sul prodotto della Sensirion) di un progetto in cui usavo quel sensore. Ci sono molti motivi validi per passare all’SPS30 e in questo articolo ve li illustrerò in maniera dettagliata come sono solito fare.
Il sensore SPS30 ci è stato gentilmente offerto dalla REPCOM S.R.L. a scopo didattico e divulgativo, per cui li ringraziamo per la gentilezza. Repcom Srl opera nel settore dei componenti elettronici per l’industria dal 1974 e offre ai propri Clienti sensori e trasmettitori di pressione, di umidità e temperatura, di flusso per gas e liquidi, di CO2 e gas ad infrarossi, sensori di bolle e di livello non invasivi: componenti elettronici altamente selezionati e di elevata precisione per applicazioni industriali, medicali, HVAC, domotica, automotive. Le opinioni qui riportate sono del tutto personali e non influenzate in alcun modo dal fornitore del prodotto.
Se desiderate avere risposte alla domanda Cosa sono le polveri sottili e come si misurano cliccate sul link per leggere il precedente articolo in cui ho spiegato queste cose.
Indice dei contenuti
Documentazione SPS30
Da quello che ho potuto vedere un po’ in giro, avendo utilizzato già altri tipi di questi sensori e letto parecchia documentazione, mi sento di poter affermare con una certa sicurezza che l’SPS30 della Sensirion è un sensore di particolato allo stato dell’arte, per tutta una serie di motivi che sto per illustrarvi.
Partiamo dal primo motivo, per me uno di quelli più importanti: la documentazione e il supporto. La Sensirion ha fatto un lavoro eccezionale da questo punto di vista: documentazione impeccabile, comprensibile, dettagliata, congruente. Sito ben organizzato e pulito. La REPCOM, che lo distribuisce in Italia, poi, si è dimostrata attiva, pronta e competente, segno che la Sensirion stessa ha messo una cura certosina anche nella scelta dei propri distributori di zona e per questo mi sento in dovere di ringraziare Fabrizio Celsi per disponibilità e supporto.
Sembrano cose da poco, ma non avete idea di quanto tempo si possa perdere su un componente, sia pur esso di qualità eccellente, quando la documentazione è scarsa o, peggio, assente: tempo che si sarebbe potuto dedicare ad altri aspetti della realizzazione quando chi ha realizzato il componente stesso poteva spendere due parole di più per non far impazzire gli sviluppatori. Sensirion mi ha davvero deliziato su questo aspetto.
Senza spendere inutili parole, date un occhio al Download Center della Sensirion e scorrete in basso per raggiungere il paragrafo Particulate Matter Sensors (PM). La notate la differenza con altri siti? Ci tengo a sottolineare che hanno anche un proprio repository Github in cui hanno pubblicato librerie ed esempi di utilizzo generici, per Arduino e per Raspberry Pi. E’ addirittura presente il file STEP che è possibile importare nei propri progetti di grafica 3D: oggi con la diffusione massiccia dei sistemi di prototipazione rapida è diventato quasi indispensabile fornire i modelli dei propri prodotti. Un modello 3D fornisce un valore aggiunto non indifferente dal momento che permette a chiunque di fare prove dimensionali per poter posizionare meglio il prodotto nei propri progetti.
Capite quindi come diventa facile lavorare con un componente quando hai a disposizione tutto il materiale che ti serve (e anche di più). Gli altri motivi che, secondo me, fanno dell’SPS30 un sensore d’eccellenza sono prettamente tecnici.
Durata
Una delle prime cose che molti di noi hanno notato, relativamente a sensori di particolato come l’SDS011, è la questione della durata nel tempo. L’SDS011 in particolare ha una durata stimata di 8000 ore di lavoro, che corrispondono a circa 11 mesi di funzionamento H24. Altri sensori molto diffusi hanno una durata dichiarata di 3anni ma non è sempre chiaramente specificato se tale durata è relativa ad un funzionamento H24. Andando a leggere il datasheet del dispositivo realizzato dalla Sensirion salta subito all’occhio un dato:
La durata stimata è, cioè, superiore a 10 anni con un funzionamento continuo di 24 ore al giorno! Sembra incredibile se ricordiamo il principio di funzionamento di questi sensori:
- una ventola aspira l’aria dall’esterno
- l’aria viene immessa in una camera di misura
- viene acceso un laser
- le particelle diffondono la luce laser
- dei fotorilevatori leggono la luce diffusa e un microcontrollore fa le opportune valutazioni
- l’aria viene espulsa
Immettere aria dall’esterno vuol dire, inevitabilmente, introdurre polvere (eh già… tra l’altro è proprio quello che ci interessa: quantificarla!). Anche se poi l’aria viene, per forza di cose, fatta fuoriuscire dopo la misura, un certo quantitativo di polvere si depositerà inevitabilmente sulla ventola e all’interno riducendo, nel tempo, sensibilità ed efficienza sia del laser che dei fotorilevatori di qualsiasi tipo essi siano. In aggiunta i laser stessi sono componenti che col passare del tempo si degadrano e non garantiscono più la stessa potenza nell’emissione del fascio luminoso (su cui i rilevatori sono calibrati) e, nel peggiore dei casi, si guastano definitivamente.
Modalità di auto-pulizia
Come ha fatto, quindi, Sensirion a raggiungere questo notevole risultato? Parte della risposta si trova nel datasheet: viene affermato che sono stati utilizzati componenti di elevata qualità e destinati a durare a lungo: con questo possiamo spiegare, ad esempio, la resistenza del laser. Ma l’impolveramento… Come lo risolvi? La Sensirion dice che utilizza una propria tecnologia che rende questo sensore molto resistente alle contaminazioni, e mi sembra giusto che non dica di più e quindi non voglia far sapere di cosa si tratti.
Chiaramente internet non se ne sta mai con le mani in mano e qualcuno ha cercato di capire quale fosse il sistema. Metto il link ma non me ne voglia a male la Sensirion: non ho fatto io quel Teardown e lo si trova facilmente cercando con Google, dopotutto una delle tante cose di cui noi smanettoni siamo appassionati è proprio il teardown (smontaggio) che ci permette di capire come funziona un sistema e di conseguenza ripararlo alla bisogna.
Tanto per fare due chiacchiere: la Sony da pochi giorni ha pubblicato il teardown ufficiale (è la prima volta che vedo accostato il termine ‘ufficiale’ con ‘teardown’) dell’ultimo modello di Playstation. A mio avviso erano talmente sicuri che qualcuno si sarebbe cimentato, che hanno preferito farlo loro per primi dando informazioni corrette!
Riassumendo, questo sensore possiede una routine di pulizia (Fan Auto Cleaning) che fa girare la ventola (a proposito: viene utilizzata una ventola maglev -a levitazione magnetica-, altro segno di elevata qualità) a massima velocità per liberarla dalla polvere accumulata: questo tra l’altro è anche specificato sul Datasheet, ma dal teardown si evidenzia un canale dotato di filtro HEPA, dal quale la ventola aspira l’aria soltanto per motivi di pulizia. Il sistema di canali a me risulta complesso e soltanto un esperto di fluidodinamica potrebbe apprezzare appieno il design del sensore. Quel che è certo è che la Sensirion deve aver messo sicuramente uno sforzo notevole nella realizzazione di questo componente, soprattutto considerate le dimensioni:
Specifiche
L’SPS 30 non misura soltanto il PM10 e il PM2.5 ma anche il PM1.0 e il PM4. In aggiunta, oltre a misurare la concentrazione, espressa in µg/cm³ (mass concentration), restituisce anche il conteggio espresso come numero di particelle per cm³ (number concentration): in quest’ultimo caso è anche disponibile la concentrazione numerica per il PM0.5.
Questa caratteristica, il conteggio del numero di particelle, sui datasheet di altri tipi di sensori è riportato anche con il termine bins number ovvero numero di recipienti: questo termine fa riferimento al fatto che è come se si prendessero tutte le particelle dell’aria aspirata e si dividessero per dimensioni in recipienti separati. Chiaramente questo non può essere fatto sul serio: è un calcolo che viene eseguito via software dalla CPU a bordo del sensore.
Il sensore in questione è in grado di rilevare particelle aventi un diametro aereodinamico minimo di 0.3µm. Il valore massimo di concentrazione in massa è 1000µg/m³, mentre in numero di particelle è 3000 per cm³.
Riporto di seguito una tabellina comparativa tra l’SPS30 ed altri sensori di particolato più o meno noti, tra cui l’SDS011 di cui vi ho già parlato e due sensori della cinese Plantower che vengono attualmente utilizzati nelle stazioni GAIA che inviano i dati al progetto Air Quality Index. Avrei potuto aggiungere altri sensori a questo confronto ma non l’ho fatto perchè alcuni sensori molto economici non sono dotati di ventola di aspirazione e non utilizzano un laser ma un sistema ad infrarossi (rientrano in questa categoria quelli che vengono chiamati sensori di polvere come lo Sharp GP2Y1010AUF) mentre altri sono dispositivi a sè stanti come l’Alphasense OPC-N3 che è un oggetto che ha già tutta la logica di visualizzazione dati a bordo (comunica via USB e registra i dati su micro-SD), mentre qui prendo in considerazione sensori che dovranno comunicare i loro dati ad un microcontrollore qualsiasi per il quale realizzeremo noi l’applicazione.
Parametro | Sensirion SPS30 | Novafitness SDS011 | Plantower PMS5003 / PMS7003 | Winsen ZH03A |
---|---|---|---|---|
PM misurabile | PM0.5 (solo #) PM1.0 PM2.5 PM4.0 PM10 | PM2.5 PM10 | PM0.3 (solo #) PM0.5 (solo #) PM1.0 PM2.5 PM5.0 (solo #) PM10 | PM1.0 PM2.5 PM10 |
Valori misurabili | Concentrazione in massa (µg/m³ - tranne PM0.5) Concentrazione in numero (#/cm³) | Concentrazione in massa (µg/m³) | Concentrazione in massa (µg/m³) Concentrazione in numero (#/cm³) | Concentrazione in massa (µg/m³) |
Valore massimo misurabile | 1000 µg/m³ (massa) 3000 #/cm³ (numero) | 999.9 µg/m³ | 500 µg/m³ | 1000 µg/m³ |
Precisione | PM1.0 e PM2.5: ±10µg/m³ (0÷100 μg/m³), ±10% m.v. (100÷1000 μg/m³) PM4.0 e PM10 : ±25µg/m³ (0÷100 μg/m³), ±25% m.v. (100÷1000 μg/m³) | ±15% e ±10μg/m³ | ±10μg/m³ (0÷100 μg/m³) ±10% (100÷500μg/m³) | ? |
Minima particella rilevabile | 0.3µm | 0.3µm | 0.3µm | 1µm |
Assorbimento max | 65mA | 80mA | 100mA | 140mA |
Assorbimento in sleep | 50µA | 4mA | 200µA | 70mA |
Ciclo di vita (24h) | 10 anni | 8000 ore | 3 anni | 3 anni |
Interfaccia | UART I2C | UART PWM | UART | UART PWM DAC |
Peso | ∼27g | ∼70g | ∼42g (5003) ∼27g (7003) | ? |
Dimensioni (mm) | 41x41x12 | 71x70x23 | 50x38x21 (5003) 48x37x12 (7003) | 50x32x21 |
Non ho potuto comparare più dati perchè i datasheet degli altri sensori non riportano alcune informazioni, altre sono confusionarie (come l’indicazione della precisione sul datasheet dell’SDS011, che riporta due valori insieme senza riferirsi nè al parametro nè al range), mentre il datasheet dell’SPS30 sovrabbonda di dati.
Montaggio
A differenza dell’SDS011 questo sensore non possiede delle connessioni per tubi: ci sono soltanto delle fessure che devono essere lasciate libere e a contatto con l’aria da analizzare:
Le raccomandazioni per il montaggio sono sempre le stesse: evitare il contatto diretto con sole e fonti di calore, dopodichè per essere sicuri di montare il sensore nel verso corretto, è disponibile il documento con le linee guida, scaricabile liberamente dalla sezione download del sito Sensirion (link all’ultimo paragrafo di questo articolo). In particolare, contrariamente a come verrebbe spontaneo pensare, nel caso in cui il sensore debba essere montato coricato, la parte verde con la scritta Sensirion è quella che va rivolta verso terra.
Protocolli di comunicazione
L’SPS30 possiede un connettore JST-ZHR a 5 poli (ZHR-5), avente, cioè, un minuscolo pitch di 1.5mm, in linea con il livello di miniaturizzazione di tutto il dispositivo ma che rende difficile l’interfacciamento se non si ha la strumentazione adatta. In un primo momento avevo acquistato i connettori ZHR da crimpare ma si è rivelata una scelta pessima in quanto i terminali metallici su cui vanno collegati i fili sono davvero minuscoli e personalmente non riuscivo a maneggiarli, poi per fortuna su aliexpress ho trovato i connettori ZHR già muniti di cavetti, in questo modo ho potuto collegare all’altra estremità il connettore che desidero. Chiaramente questi sono i problemi di noi makers, non certo delle industrie.
Sparkfun, che ritengo una ditta molto seria e attenta alle necessità di noi Makers, vende il sensore in questione fornendo già il cavetto ZHR-5 che termina con connettori dupont maschio separati, il che facilita il collegamento sui classici pin-strip femmina che usiamo normalmente. Anche su Amazon si trova il sensore più cavetto.
Il pinout sul connettore è il seguente:
In base allo stato del pin SELECT è possibile selezionare tra due modalità di comunicazione: UART (SELECT non connesso a nulla, lasciato flottante) e I2C (SELECT messo a GND). Il sensore viene alimentato a 5V e i livelli di uscita sono a 3.3V, mentre in ingresso può accettare i 5V, quindi non sono necessari adattamenti per l’interfacciamento a dispositivi funzionanti a 5 o 3.3V. E’ necessario mettere in conto un assorbimento di picco di 80mA dato che sul datasheet è specificato tale valore per i primi 200mS di funzionamento della ventola.
L’utilizzo in I2C è raccomandato solo nel caso in cui il collegamento tra sensore e dispositivo sia inferiore ai 20cm (consigliato max 10cm) di lunghezza. In questo caso il sensore ha indirizzo slave (7bit) 0x69 e comunica ad una velocità massima di 100kbit/s, sono consigliate resistenze di pull-up da 10kΩ verso la tensione VDD (5V) di alimentazione del sensore.
Attenzione! Se il vostro dispositivo (la MCU che leggerò i dati dal sensore) funziona ad una tensione più bassa di 5V (es.:3.3V) le resistenze di pull-up assolutamente NON devono essere collegate a 5V ma alla tensione di alimentazione della MCU stessa. (grazie Guido per la precisazione).
Sul datasheet è specificato chiaramente il protocollo di comunicazione (Sensirion ha realizzato la libreria e ne sono presenti altre di altri sviluppatori indipendenti).
Utilizzando l’UART bisogna impostare il microcontrollore per lavorare ad un baudrate di 115200bps e N,8,1 per cui, per esperienza personale, consiglio di non utilizzare le UART emulate via software. Al di sopra dell’interfaccia fisica UART la Sensirion utilizza un proprio protocollo di comunicazione standardizzato che prende il nome di SHDLC (Sensirion High-level Data Link Control) basato sul protocollo HDLC che è standardizzato ISO. Sebbene nel datasheet venga detto che è easy-to-implement e sono elencate in maniera dettagliata tutte le specifiche, non tutti sarebbero in grado di implementarlo da sè dato che trasporta una notevole quantità di dati organizzati in frames, i caratteri di delimitazione del frame sono uguali per cui la fine di un frame può anche indicare l’inizio di un frame successivo e in più, per fare in modo che bytes aventi lo stesso valore del carattere di delimitazione non vengano confusi con questo, utilizza la tecnica del bit-stuffing (inserimento di bit a zero). A questo punto utilizzare l’I2C potrebbe risultare più semplice, ma niente paura: la Sensirion ha preparato delle librerie agnostiche scritte in C: per adattarle al proprio microcontrollore è necessario cambiare solo delle funzioni specifiche messe in in un file a parte, in più ha anche rilasciato librerie scritte in Python per comunicare sia con l’UART che in I2C, che tornano utilissime per il collegamento del dispositivo a Raspberry Pi o a PC su cui gira Python, per cui non dobbiamo preoccuparci più di tanto nello sviluppo della parte di comunicazione. In aggiunta su Github sono presenti anche altre librerie scritte per Arduino, ESP32 e ESP8266, ma per questo dovrete attendere un prossimo articolo.
Links
- Acquisto SPS30 su Amazon
- Pagina ufficiale Sensirion
- Download documentazione
- Libreria Arduino (I2C)
- Libreria Arduino (UART)
- Driver Python per Protocollo SHDLC (UART)
- Driver Python per I2C
- Teardown sensore
- Stazione meteo con ESP32
- Progetto di Andreas Ginther