Premessa: Si tratta di un monitor multifunzione della qualità dell’aria in grado di rilevare non solo la concentrazione di particelle e formaldeide ma anche il valore di temperatura e umidità.Come sensore di concentrazione di particelle può essere utilizzato per ottenere tramite laser il numero di particelle sospese nell’aria. Integra inoltre al suo interno una sonda elettrochimica per formaldeide e un sensore a un chip per temperatura e umidità Il sensore può essere inserito in strumenti variabili in relazione ai parametri ambientali nell’aria o altre apparecchiature di miglioramento ambientale per fornire dati corretti nel tempo.
CARATTERISTICHE TECNICHE:
- Tasso di falsi allarmi zero
- Risposta in tempo reale
- Dati corretti
- Diametro minimo delle particelle distinguibili: 0,3 micrometri
- Elevate prestazioni anti-interferenza grazie alla struttura brevettata della schermatura a sei lati
- Direzione opzionale di ingresso e uscita dell’aria per adattare il diverso design
- Concentrazione della produzione di formaldeide
- Uscita temperatura e umidità
- Tensione di esercizio: 5.0VDC
- Corrente attiva: 100 mA
- Corrente di standby: 200 uA
- Livello interfaccia: L< 0.8V@3.3V ; H> 2.7V@3.3V
- Intervallo di misurazione delle particelle: 0,3 ~ 1,0 μm; 1,0 ~ 2,5 μm; 2,5 ~ 10 μm
- Efficienza di conteggio delle particelle: 50%@0.3μm 98%@>=0.5μm
- Intervallo efficace delle particelle (standard PM2.5): 0 ~ 500μg/m
- Intervallo massimo di particelle (standard PM2.5): >0 ~ 2000ug / m³
- Risoluzione delle particelle: 1ug / m³
- Errore di consistenza massima delle particelle (dati standard PM2.5):
- ±10%@100~500μg/m³
- ±10μg/m@0~100μg/m
- Volume standard delle particelle: 0,1 L
- Intervallo efficace della formaldeide: 0 ~ 1 mg / m³
- Intervallo massimo di formaldeide: 0 ~ 2 mg / m³
- Risoluzione formaldeide: 0.001
- Errore di consistenza massima formaldeide: <± 5%
- Intervallo massimo di temperatura: -10~50 ℃
- Risoluzione della temperatura: 0,1 ℃
- Errore massimo di temperatura: ± 0,5
- Intervallo massimo di umidità: 0 ~ 99%
- Risoluzione umidità: 0,1%
- Errore massimo di umidità: ± 2%
- Velocità di trasmissione predefinita: 9600 bps
- Tempo di risposta totale: 10s
- Intervallo di temperatura di esercizio: -10 ~ +60 ℃
- Intervallo di umidità di lavoro: 0 ~ 99%
- MTTF: ≥ 3 anni
- Dimensioni: 50x38x21 mm / 1,97×1,50×0,83 pollici
- Peso: 50 g
LISTA MATERIALI:
numero Etichetta Descrizione
PIN1 VCC 5V
PIN2 GND GND
PIN3 IMPOSTATO Imposta pin / livello TTL a 3,3 V , il livello alto o la sospensione è lo stato di funzionamento normale, mentre il livello basso è la modalità di sospensione.
PIN4 RXD Pin di ricezione della porta seriale/livello TTL a 3,3 V
PIN5 TXD Pin di invio porta seriale/livello TTL@3.3V
PIN6 RIPRISTINA Segnale di reset del modulo/livello TTL@3.3V , reset basso.
PIN7 NC
PIN8 NC
In questa sezione, dimostreremo come utilizzare questo sensore.
CODICE DI ESEMPIO:
Librerie:
- SoftwareSerial LGPL: arduino.cc/en/Reference/SoftwareSerial
#include <SoftwareSerial.h>
SoftwareSerial Serial1(10, 11); // Software RX, TX
char col;
unsigned int PMSa = 0,FMHDSa = 0,TPSa = 0,HDSa = 0,PMSb = 0,FMHDSb = 0,TPSb = 0,HDSb = 0;
unsigned int PMS = 0,FMHDS = 0,TPS = 0,HDS = 0,CR1 = 0,CR2 = 0;
unsigned char buffer_RTT[40]={}; //Serial buffer; Received Data
char tempStr[15];
void setup()
{
Serial.begin(115200);
Serial1.begin(9600);
}
void loop()
{
while(!Serial1.available());
while(Serial1.available()>0) //Data check: weather there is any Data in Serial1
{
for(int i=0;i<40;i++)
{
col =Serial1.read();
buffer_RTT[i]=(char)col;
delay(2);
}
Serial1.flush();
CR1 =(buffer_RTT[38]<<8) + buffer_RTT[39];
CR2 = 0;
for(int i=0;i<38;i++)
CR2 += buffer_RTT[i];
if(CR1 == CR2) //Check
{
PMSa=buffer_RTT[12]; //Read PM2.5 High 8-bit
PMSb=buffer_RTT[13]; //Read PM2.5 Low 8-bit
PMS=(PMSa<<8)+PMSb; //PM2.5 value
FMHDSa=buffer_RTT[28]; //Read Formaldehyde High 8-bit
FMHDSb=buffer_RTT[29]; //Read Formaldehyde Low 8-bit
FMHDS=(FMHDSa<<8)+FMHDSb; //Formaldehyde value
TPSa=buffer_RTT[30]; //Read Temperature High 8-bit
TPSb=buffer_RTT[31]; //Read Temperature Low 8-bit
TPS=(TPSa<<8)+TPSb; //Temperature value
HDSa=buffer_RTT[32]; //Read Humidity High 8-bit
HDSb=buffer_RTT[33]; //Read Humidity Low 8-bit
HDS=(HDSa<<8)+HDSb; //Humidity value
}
else
{
PMS = 0;
FMHDS = 0;
TPS = 0;
HDS = 0;
}
}
Serial.println("-----------------------uart--------------------------");
Serial.print("Temp : ");
sprintf(tempStr,"%d%d.%d",TPS/100,(TPS/10)%10,TPS%10);
Serial.print(tempStr);
Serial.println(" C"); //Serial pring Temperature
Serial.print("RH : ");
sprintf(tempStr,"%d%d.%d",HDS/100,(HDS/10)%10,HDS%10);
Serial.print(tempStr); //Serial print humidity
Serial.println(" %");
Serial.print("HCHO : ");
Serial.print(FMHDS);
Serial.println(" ug/m3"); //Serial print formaldehyde, unit: ug/m³
Serial.print("PM2.5: ");
Serial.print(PMS);
Serial.println(" ug/m3"); //Serial print PM2.5, unit: ug/m³
Serial.println();
}
APPLICAZIONE CON LCD:
Librerie:
- Wire LGPL: arduino.cc/en/Reference/Wire
- DFRobot_RGBLCD LGPL: github.com/DFRobot/DFRobot_RGBLCD
#include <Wire.h>
#include "DFRobot_RGBLCD.h"
char col;
unsigned int PMSa = 0, FMHDSa = 0, TPSa = 0, HDSa = 0, PMSb = 0, FMHDSb = 0, TPSb = 0,
HDSb = 0,PMS = 0,TPS= 0, HDS = 0, CR1 = 0, CR2 = 0,FMHDS = 0;
unsigned char buffer_RTT[40] = {}; //Serial buffer; Received Data
char tempStr[15];
DFRobot_RGBLCD lcd(16, 2); //RGB address; 16 characters and 2 lines of show
void setup()
{
Serial.begin(9600);
lcd.init(); //Initialize LCD RGB Screen
lcd.setRGB(0, 255, 0); //Set backlight color
lcd.setCursor(0, 0 ); //Start from (0, 0)
lcd.print("T:");
lcd.setCursor(9, 0 );
lcd.print("H:");
lcd.setCursor(0, 1 );
lcd.print("F:");
lcd.setCursor(9, 1 );
lcd.print("P:");
}
void loop()
{
while (Serial.available() > 0) //Data check: weather there is any Data in Serial1
{
for (int i = 0; i < 40; i++) //Read Serial port data
{
col = Serial.read();
buffer_RTT[i] = (char)col;
delay(2);
}
Serial.flush();
CR1 = (buffer_RTT[38] << 8) + buffer_RTT[39];
CR2 = 0;
for (int i = 0; i < 38; i++)
CR2 += buffer_RTT[i];
if (CR1 == CR2) //Check
{
PMSa = buffer_RTT[12]; //Read PM2.5 High 8-bit
PMSb = buffer_RTT[13]; //Read PM2.5 Low 8-bit
PMS = (PMSa << 8) + PMSb; //PM2.5 value
FMHDSa = buffer_RTT[28]; //Read Formaldehyde High 8-bit
FMHDSb = buffer_RTT[29]; //Read Formaldehyde Low 8-bit
FMHDS = (FMHDSa << 8) + FMHDSb; //Formaldehyde value
TPSa = buffer_RTT[30]; //Read Temperature High 8-bit
TPSb = buffer_RTT[31]; ///Read Temperature Low 8-bit
TPS = (TPSa << 8) + TPSb; //Temperature value
HDSa = buffer_RTT[32]; //Read Humidity High 8-bit
HDSb = buffer_RTT[33]; //Read Humidity Low 8-bit
HDS = (HDSa << 8) + HDSb; //Humidity value
}
else
{
PMS = 0;
FMHDS = 0;
TPS = 0;
HDS = 0;
}
}
lcd.setCursor(2, 0 );
sprintf(tempStr,"%d%d.%d",TPS/100,(TPS/10)%10,TPS%10); //Temperature display
lcd.print(tempStr);
lcd.write(0xdf); //°
lcd.print('C'); //C
lcd.setCursor(11, 0 );
sprintf(tempStr,"%d%d.%d",HDS/100,(HDS/10)%10,HDS%10); //Humidity display
lcd.print(tempStr);
lcd.print('%'); //%
lcd.setCursor(2, 1 );
lcd.print((float)FMHDS/1000); //print formaldehyde, unit: ug/m³
lcd.print((int)FMHDS%10);
lcd.setCursor(11, 1 );
sprintf(tempStr,"%d%d%d",PMS/100,(PMS/10)%10,PMS%10); //print PM2.5, unit: ug/m³
lcd.print(tempStr);
}
Buon progetto.