Skip to Content

Sensore HCHO SFA40 con Arduino

Sensore HCHO SFA40 con Arduino

Il sensore di formaldeide (HCHO) SFA40 di DFRobot è un modulo compatto per il rilevamento di gas progettato per misurare la concentrazione di formaldeide (HCHO) nell’aria.

Il sensore si basa sul chip Sensirion SFA40 e fornisce misurazioni precise in un intervallo da 0 a 1000 ppb. La tecnologia di rilevamento SFA40 è progettata per una bassa cross-sensibilità. Di conseguenza, sostanze comuni in casa come alcol, profumi o vapori di agrumi sono meno propense a causare letture errate.

Il modulo integra anche una compensazione ambientale tramite un sensore di temperatura e umidità integrato, che aiuta a mantenere misurazioni stabili e accurate in condizioni ambientali variabili.

La scheda del sensore comunica con i microcontrollori tramite un’interfaccia I²C, permettendo un’integrazione semplice con piattaforme come Arduino, ESP32 o Raspberry Pi.

In questo tutorial imparerai come collegare il sensore SFA40 a un Arduino UNO e come leggere i dati dal sensore.

Parti necessarie

Ti servirà un Gravity: SFA40 Formaldehyde (HCHO) Sensor di DFRobot. Per quanto riguarda il microcontrollore, ho usato un Arduino UNO per questo progetto, ma qualsiasi altro Arduino o ESP32 funzionerà altrettanto bene.

Gravity: SFA40 Formaldehyde (HCHO) Sensor

Arduino

Arduino Uno

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Dupont wire set

Set di fili Dupont

Half_breadboard56a

Breadboard

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Hardware del sensore SFA40 HCHO

Il modulo sensore si basa sull’ Sensirion SFA40 elemento sensibile alla formaldeide. Questo elemento utilizza la tecnologia di rilevamento elettrochimico per individuare le molecole di formaldeide nell’aria circostante.

In un sensore elettrochimico per gas, una reazione chimica avviene sulla superficie di un elettrodo quando il gas target è presente. Questa reazione produce un piccolo segnale elettrico proporzionale alla concentrazione del gas. L’elettronica del sensore converte questo segnale in un valore di misura digitale.

Il sistema di rilevamento è ottimizzato specificamente per la formaldeide (HCHO). La chimica interna e le strutture di filtraggio sono progettate per minimizzare le reazioni con altri composti organici volatili. Questa elevata selettività permette al sensore di distinguere la formaldeide da molti gas interferenti comuni.

Il sensore fornisce un’uscita completamente calibrata. La calibrazione viene eseguita durante la produzione e memorizzata all’interno del dispositivo. L’utente non deve effettuare ulteriori calibrazioni durante il normale funzionamento.

Intervallo di misurazione e precisione

Il sensore SFA40 misura concentrazioni di formaldeide in un intervallo da 0 a 1000 parti per miliardo (ppb). Questo intervallo copre le concentrazioni tipiche indoor così come livelli elevati che possono verificarsi in ambienti poco ventilati o in stanze con mobili e materiali da costruzione nuovi.

Il valore di uscita è riportato direttamente in parti per miliardo. Questo semplifica l’elaborazione dei dati sui microcontrollori perché non è necessaria alcuna conversione o scala aggiuntiva.

Caratteristiche elettriche

L’elemento sensibile funziona con una tensione di alimentazione compresa tra 1,62 V e 3,6 V. Il modulo Gravity include circuiti aggiuntivi che permettono il funzionamento sia a 3,3 V che a 5 V quando collegato a piattaforme microcontrollore.

Il consumo energetico è ottimizzato per applicazioni di monitoraggio continuo. Il consumo medio di corrente è di circa 80 µA in modalità di misura con frequenza di campionamento di circa 2 Hz. La corrente di picco può raggiungere fino a 2 mA durante i cicli di misura.

Design fisico e integrazione del modulo

L’elemento sensibile SFA40 ha un package molto compatto di circa 13 mm × 10 mm × 2,4 mm. Il modulo Gravity SEN0661 integra questo elemento su una scheda breakout più grande. La dimensione della scheda è circa 32 mm × 22 mm. Include la regolazione di tensione necessaria e i circuiti di interfaccia per piattaforme microcontrollore.

Il modulo fornisce anche un connettore standard Gravity a 4 pin, che semplifica il cablaggio e permette una connessione plug-and-play alle schede di sviluppo. Di seguito trovi il pinout del connettore:

Pinout of Gravity SFA40 Sensor Board
Pinout della scheda sensore Gravity SFA40

Il sensore contiene una membrana protettiva di ventilazione sulla camera di rilevamento. Questa membrana permette la diffusione del gas proteggendo gli elementi sensibili interni da polvere e contaminanti. Non rimuovere questa membrana né esporla a solventi organici!

Membrana protettiva del sensore SFA40

Condizioni ambientali di funzionamento

Il modulo è progettato per operare in un ampio intervallo di condizioni ambientali. La temperatura di esercizio supportata va da −40 °C a +125 °C. Il sensore può funzionare in livelli di umidità relativa tra 0% e 100% purché non si verifichi condensazione. L’elemento sensibile include algoritmi interni per la compensazione della temperatura.

Specifiche tecniche

La tabella seguente riassume le specifiche tecniche del sensore di formaldeide (HCHO) SFA40:

Parametro Specifiche
Tipo di sensore Sensore elettrochimico per formaldeide (HCHO)
Elemento sensibile Sensirion SFA40
Intervallo di misura 0 a 1000 ppb (parti per miliardo)
Limite di rilevamento < 20 ppb (tipico)
Precisione ±20 ppb o ±20% del valore misurato (tipico)
Cross-sensibilità all’etanolo < 0,3%
Interfaccia Interfaccia digitale I²C
Indirizzo I²C 0x5D
Tensione di funzionamento (sensore) 1,62 V – 3,6 V
Tensione di funzionamento (modulo) 3,3 V – 5 V
Consumo medio di corrente ~80 µA
Corrente di picco Fino a ~2 mA durante la misura
Frequenza di aggiornamento della misura Fino a ~2 misurazioni al secondo
Temperatura di esercizio −40 °C a +125 °C
Umidità di esercizio 0% – 100% UR (senza condensa)
Dimensioni del modulo ~32 mm × 22 mm
Dimensioni del package del sensore ~13 mm × 10 mm × 2,4 mm
Unità di uscita Concentrazione di formaldeide in ppb
Calibrazione Calibrato in fabbrica

Installazione della libreria DFRobot_SFA40

Useremo la libreria DFRobot_SFA40 per leggere i dati dal sensore SFA40. Per installarla vai al github repo della libreria, clicca sul pulsante verde “<> Code” e poi su “Download ZIP” come mostrato di seguito:

Questo scarica la libreria DFRobot_SFA40 come file ZIP (DFRobot_SFA40-master.zip) sul tuo computer.

Apri quindi un nuovo Sketch, vai su Sketch -> Include Library -> Add .ZIP Library … per installare la libreria ZIP scaricata (DFRobot_SFA40-master.zip):

Collegamento del sensore SFA40 ad Arduino UNO

Il sensore SFA40 utilizza l’interfaccia I2C per la comunicazione ed è facile da collegare. Inizia collegando VCC a 5V e GND a massa. Poi collega semplicemente l’interfaccia I2C: SDA–SDA e SCL–SCL come mostrato di seguito:

Connecting SFA40 Sensor to Arduino UNO
Collegamento del sensore SFA40 ad Arduino UNO

Codice per leggere i dati dal sensore SFA40

Il codice seguente dimostra come interfacciare il sensore SFA40 con una scheda Arduino. Il sensore misura temperatura, umidità e concentrazione di formaldeide in parti per miliardo (ppb). Le letture vengono stampate sul Monitor Seriale ogni secondo.

// https://github.com/DFRobot/DFRobot_SFA40  V 1.0.3
// www.makerguides.com

#include "DFRobot_SFA40.h"

DFRobot_SFA40 SFA40;

void display(const char* text, float value, const char* unit) {
  Serial.print(text);
  Serial.print(value, 1);
  Serial.print(" ");
  Serial.println(unit);
}

void setup() {
  Serial.begin(115200);

  while (SFA40.begin() != 0) {
    Serial.println("Could not find sensor!");
    delay(1000);
  }

  SFA40.startMeasurement();
}

void loop() {
  uint8_t status = SFA40.readMeasurementData();

  if (status == 0) {
    Serial.println("\n----------------------------");
    display("Temperature: ", SFA40.temperatureC, "C");
    display("Temperature: ", SFA40.temperatureF, "F");
    display("Humidity   : ", SFA40.humidity, "%RH");
    display("HOCO       : ", SFA40.HCHO, "ppb");
  } 

  delay(1000);
}

Importazioni

All’inizio, il codice include la libreria per il sensore SFA40. Questa libreria contiene tutte le funzioni necessarie per comunicare con il sensore e recuperare i dati di misura.

#include "DFRobot_SFA40.h"

Inizializzazione dell’oggetto

Successivamente, viene creato un oggetto chiamato SFA40 della classe DFRobot_SFA40. Questo oggetto sarà usato per interagire con il sensore durante tutto il programma.

DFRobot_SFA40 SFA40;

Funzione di visualizzazione

La funzione display() è una funzione di supporto progettata per stampare le letture del sensore sul Monitor Seriale in modo formattato. Prende tre parametri: un’etichetta testuale, un valore in virgola mobile e una stringa di unità. Il valore viene stampato con una cifra decimale.

void display(const char* text, float value, const char* unit) {
  Serial.print(text);
  Serial.print(value, 1);
  Serial.print(" ");
  Serial.println(unit);
}

Funzione di setup

La funzione setup() inizializza la comunicazione seriale a 115200 baud per abilitare l’output dati sul Monitor Seriale. Poi tenta di inizializzare il sensore chiamando SFA40.begin(). Se il sensore non viene trovato, stampa un messaggio di errore ogni secondo finché il sensore non viene rilevato. Una volta che il sensore è inizializzato con successo, avvia la modalità di misura continua con SFA40.startMeasurement().

void setup() {
  Serial.begin(115200);

  while (SFA40.begin() != 0) {
    Serial.println("Could not find sensor!");
    delay(1000);
  }

  SFA40.startMeasurement();
}

Funzione loop

All’interno della funzione loop(), il codice legge i dati di misura più recenti dal sensore chiamando SFA40.readMeasurementData(). Questa funzione restituisce un codice di stato, dove 0 indica una lettura riuscita. Se la lettura ha successo, il programma stampa una linea separatrice e poi usa la funzione display() per mostrare temperatura in Celsius e Fahrenheit, umidità relativa e concentrazione di formaldeide (HCHO) in parti per miliardo. Infine, il programma attende 1 secondo prima di ripetere il processo.

void loop() {
  uint8_t status = SFA40.readMeasurementData();

  if (status == 0) {
    Serial.println("\n----------------------------");
    display("Temperature: ", SFA40.temperatureC, "C");
    display("Temperature: ", SFA40.temperatureF, "F");
    display("Humidity   : ", SFA40.humidity, "%RH");
    display("HOCO       : ", SFA40.HCHO, "ppb");
  } 

  delay(1000);
}

Esempio di output

L’esempio seguente mostra l’output sul Monitor Seriale:

----------------------------
Temperature: 22.1 C
Temperature: 71.8 F
Humidity   : 43.2 %RH
HOCO       : 39.0 ppb

Conclusione

In questo tutorial hai imparato come usare il sensore di formaldeide (HCHO) SFA40 con un Arduino UNO. Il sensore può essere facilmente utilizzato anche con altri microcontrollori come l’ESP32.

Se cerchi altri sensori di gas, dai un’occhiata ai seguenti post:

Se hai domande, sentiti libero di lasciarle nella sezione commenti.

Buon divertimento con il tinkering 😉