- Components necessaris
- Nova PM Sensor SDS011 per mesurar PM2.5 i PM10
- Conceptes bàsics del mòdul de pantalla OLED de 0,96 '
- Preparació del sensor MQ-7 per mesurar el monòxid de carboni (CO)
- Càlcul de l’índex de qualitat de l’aire
- Esquema de connexions
- Construint el circuit del sistema de control de qualitat de l’aire a la placa Perf
- Configuració d'Adafruit IO
- Explicació del codi per a
- Carcassa impresa en 3D per al sistema de control AQI
- Prova del sistema de control AQI
Quan s’instal·la l’hivern, l’aire que penja sobre nosaltres s’engreix amb fum i emissions gasoses dels camps en flames, les fàbriques industrials i el trànsit de vehicles, bloquejant el sol i dificultant la respiració. Els experts diuen que els alts nivells de contaminació atmosfèrica i la pandèmia COVID-19 poden ser una barreja perillosa que pot tenir greus conseqüències. La necessitat d’un control en temps real de la qualitat de l’aire és molt flagrant.
Així doncs, en aquest projecte, construirem un sistema de control de la qualitat de l’aire ESP32 que utilitza el sensor Nova PM SDS011, el sensor MQ-7 i el sensor DHT11. També utilitzarem un mòdul de pantalla OLED per mostrar els valors de qualitat de l’aire. L’ Índex de qualitat de l’aire (AQI) a l’Índia es basa en vuit contaminants, PM10, PM2.5, SO2 i NO2, CO, Ozó, NH3 i Pb. Tot i això, no cal mesurar tots els contaminants. Per tant, mesurarem la concentració de PM2,5, PM10 i monòxid de carboni per calcular l’índex de qualitat de l’aire. Els valors AQI es publicaran a Adafruit IO perquè puguem controlar-lo des de qualsevol lloc. Anteriorment també hem mesurat la concentració de gas GLP, fum i amoníac mitjançant Arduino.
Components necessaris
- ESP32
- Nova PM Sensor SDS011
- Mòdul de pantalla OLED de 0,96 '
- Sensor DHT11
- Sensor MQ-7
- Jumper Wires
Nova PM Sensor SDS011 per mesurar PM2.5 i PM10
El sensor SDS011 és un sensor de qualitat de l’aire molt recent desenvolupat per Nova Fitness. Funciona sobre el principi de dispersió làser i pot obtenir la concentració de partícules entre 0,3 i 10 μm a l’aire. Aquest sensor està format per un petit ventilador, una vàlvula d’entrada d’aire, un díode làser i un fotodiode. L’aire entra a través de l’entrada d’aire on una font de llum (làser) il·lumina les partícules i la llum dispersa es transforma en un senyal mitjançant un fotodetector. Aquests senyals s’amplifiquen i processen per obtenir la concentració de partícules de PM2,5 i PM10. Prèviament, hem utilitzat el sensor Nova PM amb Arduino per calcular la concentració de PM10 i PM2.5.
Especificacions del sensor SDS011:
- Sortida: PM2.5, PM10
- Rang de mesura: 0,0-999,9 μg / m3
- Voltatge d'entrada: 4,7V a 5,3V
- Corrent màxim: 100mA
- Corrent de son: 2 mA
- Temps de resposta: 1 segon
- Freqüència de sortida de dades en sèrie: 1 vegada / segon
- Resolució del diàmetre de les partícules: ≤0,3μm
- Error relatiu: 10%
- Rang de temperatura: -20 ~ 50 ° C
Conceptes bàsics del mòdul de pantalla OLED de 0,96 '
OLED (Organic Light Emitting Diode) és un tipus de díode emissor de llum que es fabrica amb compostos orgànics que exciten quan el corrent elèctric flueix a través d’ells. Aquests compostos orgànics tenen llum pròpia, per tant no requereixen cap circuit de retroil·luminació com els LCD normals. Per aquest motiu, la tecnologia de visualització OLED és eficient en el consum energètic i és àmpliament utilitzada en televisors i altres productes de visualització.

Hi ha disponibles diversos tipus de dispositius OLED al mercat basats en el color de la pantalla, el nombre de pins, la mida i l’IC del controlador. En aquest tutorial, farem servir el mòdul OLED SSD1306 de 0,96 polzades de color blanc monocrom, de 128 píxels d'ample i 64 píxels de llarg. Aquest OLED de 7 pins admet el protocol SPI i el controlador IC SSD1306 ajuda l'OLED a mostrar els caràcters rebuts. Seguiu l’enllaç per obtenir més informació sobre OLED i la seva interfície amb diferents microcontroladors.
Preparació del sensor MQ-7 per mesurar el monòxid de carboni (CO)
El mòdul del sensor de gas monòxid de carboni MQ-7 CO detecta les concentracions de CO a l’aire. El sensor pot mesurar concentracions de 10 a 10.000 ppm. El sensor MQ-7 es pot adquirir com a mòdul o només com a sensor. Anteriorment hem utilitzat molts tipus diferents de sensors de gas per detectar i mesurar diversos gasos, també els podeu comprovar si esteu interessats. En aquest projecte, estem utilitzant el mòdul del sensor MQ-7 per mesurar la concentració de monòxid de carboni en PPM. A continuació es mostra el diagrama de circuits de la placa MQ-7:

La resistència de càrrega RL té un paper molt important a l’hora de fer funcionar el sensor. Aquesta resistència canvia el seu valor de resistència segons la concentració de gas. La placa del sensor MQ-7 inclou una resistència a la càrrega d’1 KΩ que no serveix de res i afecta les lectures del sensor. Per tant, per mesurar els valors de concentració de CO adequats, heu de substituir la resistència de 1KΩ per una resistència de 10KΩ.

Càlcul de l’índex de qualitat de l’aire
L’AQI a l’Índia es calcula sobre la base de la concentració mitjana d’un determinat contaminant mesurada en un interval de temps estàndard (24 hores per a la majoria dels contaminants, 8 hores per al monòxid de carboni i l’ozó). Per exemple, l’AQI de PM2,5 i PM10 es basa en una concentració mitjana de 24 hores i l’AQI de monòxid de carboni es basa en una concentració mitjana de 8 hores). Els càlculs de l’AQI inclouen els vuit contaminants que són PM10, PM2.5, diòxid de nitrogen (NO 2), diòxid de sofre (SO 2), monòxid de carboni (CO), ozó a nivell del sòl (O 3), amoníac (NH 3), i el plom (Pb). Tot i això, no es mesuren tots els contaminants en tots els llocs.
Basant-se en les concentracions ambientals mesurades les 24 hores d’un contaminant, es calcula un subíndex, que és una funció lineal de concentració (per exemple, el subíndex de PM2,5 serà 51 a la concentració 31 µg / m3, 100 a la concentració 60 µg / m3 i 75 a una concentració de 45 µg / m3). El pitjor subíndex (o màxim de tots els paràmetres) determina l'AQI global.
Esquema de connexions
El diagrama del circuit per al sistema de control de qualitat de l’aire basat en IoT és molt senzill i es mostra a continuació:

El sensor SDS011, el sensor DHT11 i MQ-7 s’alimenten amb + 5V mentre que el mòdul OLED Display s’alimenta amb 3,3V. Els pins del receptor i del transmissor de SDS011 estan connectats a GPIO16 i 17 d’ESP32. El pin de sortida analògica del sensor MQ-7 està connectat a GPIO 25 i el pin de dades del sensor DHT11 al sensor GPIO27. Com que el mòdul OLED Display utilitza la comunicació SPI, hem establert una comunicació SPI entre el mòdul OLED i ESP32. Les connexions es mostren a la taula següent:
|
S.No |
Pin del mòdul OLED |
Pin ESP32 |
|
1 |
GND |
Terra |
|
2 |
VCC |
5V |
|
3 |
D0 |
18 |
|
4 |
D1 |
23 |
|
5 |
RES |
2 |
|
6 |
DC |
4 |
|
7 |
CS |
5 |
|
S.No |
Pin SDS011 |
Pin ESP32 |
|
1 |
5V |
5V |
|
2 |
GND |
GND |
|
3 |
RX |
17 |
|
4 |
TX |
16 |
|
S.No |
Pin DHT |
Pin ESP32 |
|
1 |
Vcc |
5V |
|
2 |
GND |
GND |
|
3 |
Dades |
27 |
|
S.No |
Pin MQ-7 |
Pin ESP32 |
|
1 |
Vcc |
5V |
|
2 |
GND |
GND |
|
3 |
A0 |
25 |
Construint el circuit del sistema de control de qualitat de l’aire a la placa Perf
Com es pot veure a la imatge principal, la idea era utilitzar aquest circuit dins d’una carcassa impresa en 3D. Per tant, el circuit complet que es mostra anteriorment es solda a una placa perf. Assegureu-vos d’utilitzar cables per deixar la distància suficient per muntar l’OLED i els sensors. La meva placa de perfils es va soldar a OLED i el mòdul del sensor es mostra a continuació.

Configuració d'Adafruit IO
Adafruit IO és una plataforma de dades obertes que us permet agregar, visualitzar i analitzar dades en viu al núvol. Mitjançant Adafruit IO, podeu penjar, mostrar i supervisar les vostres dades a través d’Internet i habilitar el vostre projecte IoT. Podeu controlar motors, llegir dades del sensor i crear aplicacions IoT genials a Internet mitjançant Adafruit IO.
Per utilitzar Adafruit IO, primer creeu un compte a Adafruit IO. Per fer-ho, aneu al lloc web d'Adafruit IO i feu clic a "Comença de franc" a la part superior dreta de la pantalla.

Després d'acabar el procés de creació del compte, inicieu sessió al compte i feu clic a "Mostra la clau AIO" a l'extrem superior dret per obtenir el nom d'usuari del compte i la clau AIO.

Quan feu clic a "Clau AIO", apareixerà una finestra amb la clau i el nom d'usuari AO Adafruit IO. Copieu aquesta clau i aquest nom d'usuari, que s'utilitzarà al codi.

Ara, després d’obtenir les claus AIO, creeu un feed per emmagatzemar les dades del sensor DHT. Per crear un feed, feu clic a "Feed". A continuació, feu clic a "Accions" i, a continuació, seleccioneu "Crea un feed nou" entre les opcions disponibles.

Després d'això, s'obrirà una nova finestra on cal introduir el nom i la descripció del feed. Escriure una descripció és opcional.

Feu clic a "Crea" després; se us redirigirà al feed recentment creat.
Per a aquest projecte, hem creat un total de sis feeds per als valors PM10, PM2.5, CO, Temperatura, Humitat i AQI. Seguiu el mateix procediment anterior per crear la resta de feeds.

Després de crear feeds, ara crearem una funció de tauler d’Adafruit IO per visualitzar les dades del sensor en una sola pàgina. Per a això, primer, creeu un tauler de control i, a continuació, afegiu tots aquests feeds al tauler de control.
Per crear un tauler, feu clic a l'opció Tauler i, a continuació, feu clic a "Acció" i, després, feu clic a "Crea un tauler nou".
A la finestra següent, introduïu el nom del tauler i feu clic a "Crea".

A mesura que es va creant el tauler, ara farem servir els blocs d'Adafruit IO com Gauge i Slider per visualitzar les dades. Per afegir un bloc, feu clic al '+' a l'extrem superior dret.

A continuació, seleccioneu el bloc "Indicador".

A la finestra següent, seleccioneu les dades del feed que vulgueu visualitzar.

Al darrer pas, canvieu la configuració del bloc per personalitzar-la.

Ara seguiu el mateix procediment anterior per afegir blocs de visualització per a la resta de feeds. El meu tauler de control d'Adafruit IO tenia aquest aspecte:

Explicació del codi per a
El codi complet d’aquest projecte es dóna al final del document. Aquí expliquem algunes parts importants del codi.
El codi utilitza les SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, i DHT.h biblioteques. Les biblioteques SDS011, Adafruit_GFX i Adafruit_SSD1306 es poden descarregar des del gestor de biblioteques a l'IDE Arduino i instal·lar-les des d'allà. Per a això, obriu l'IDE d'Arduino i aneu a Sketch <Inclou biblioteca <Gestiona biblioteques . Ara cerqueu SDS011 i instal·leu la biblioteca SDS Sensor de R. Zschiegner.
De la mateixa manera, instal·leu les biblioteques Adafruit GFX i Adafruit SSD1306 d'Adafruit. Adafruit_MQTT.h i DHT11.h es poden descarregar des dels enllaços indicats.
Després d'instal·lar les biblioteques a Arduino IDE, inicieu el codi incloent els fitxers de biblioteques necessaris.
#incloure
A les línies següents, definiu l'amplada i l'alçada de la pantalla OLED. En aquest projecte, he utilitzat una pantalla OLED de 128 × 64 SPI. Es pot canviar el SCREEN_WIDTH i SCREEN_HEIGHT variables d'acord a la seva pantalla.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
A continuació, definiu els pins de comunicació SPI on està connectada la pantalla OLED.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
A continuació, creeu una instància per a la pantalla d'Adafruit amb l'amplada i l'alçada i el protocol de comunicació SPI que es defineix anteriorment.
Pantalla Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
A continuació, incloeu les credencials d’IO WiFi i Adafruit que heu copiat del servidor d’Adafruit IO. Aquests inclouen el servidor MQTT, el número de port, el nom d’usuari i la clau AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
A continuació, configureu els canals IO Adafruit per emmagatzemar les dades del sensor. En el meu cas, he definit sis feeds per emmagatzemar diferents dades del sensor, a saber: AirQuality, Temperatura, Humitat, PM10, PM25 i CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Ara dins de la funció setup () , inicialitzeu el monitor sèrie a una velocitat de transmissió de 9600 per a la depuració. També inicialitzeu la pantalla OLED, el sensor DHT i el sensor SDS011 amb la funció begin () .
configuració nul·la () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
El bucle for dins de la funció de configuració s'utilitza per recollir els valors fins a un nombre definit i, a continuació, establir el comptador a zero.
per a (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {lecturesPM10 = 0; }
Lectura dels valors del sensor:
Ara dins de la funció de bucle, utilitzeu el mètode millis () per llegir els valors del sensor cada hora. Cadascun dels sensors de gas emet un valor analògic de 0 a 4095. Per convertir aquest valor en tensió, utilitzeu la següent equació: RvRo = MQ7Raw * (3.3 / 4095); on MQ7Raw és el valor analògic del pin analògic del sensor. Llegiu també les lectures PM2.5 i PM10 del sensor SDS011.
if ((sense signar llarg) (currentMillis - previousMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + Cadena (p25)); Serial.println ("P10:" + Cadena (p10)); }}
Conversió dels valors:
Els valors de PM2.5 i PM10 ja són en µg / m 3, però hem de convertir els valors de monòxid de carboni de PPM a mg / m 3. A continuació es mostra la fórmula de conversió:
Concentració (mg / m 3) = Concentració (PPM) × (massa molecular (g / mol) / volum molar (L))
On: la massa molecular de CO és de 28,06 g / mol i el volum molar és de 24,45 L a 25 0 C
Concentració INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
Càlcul de la mitjana de 24 hores:
A continuació, a les línies següents, calculeu la mitjana de 24 hores per a la lectura de PM10, PM2,5 i la mitjana de 8 hores per a les lectures de monòxid de carboni. A la primera línia de codi, agafeu el total actual i resteu el primer element de la matriu; ara deseu-lo com a total nou. Inicialment, serà Zero. A continuació, obteniu els valors del sensor i afegiu la lectura actual al total i augmenteu l'índex numèric. Si el valor de l’índex és igual o superior a numReadings, torneu a establir l’índex a zero.
totalPM10 = totalPM10 - lecturesPM10; lecturesPM10 = p10; totalPM10 = totalPM10 + lecturesPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Després, per fi, publiqueu aquests valors a Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Humidity.publish (humitat)) {delay (30000); ………………………………………………………. ……………………………………………………….
Carcassa impresa en 3D per al sistema de control AQI
A continuació, vaig mesurar les dimensions de la configuració amb el meu vernier i també vaig mesurar les dimensions dels sensors i OLED per dissenyar una carcassa. Un cop acabat, el meu disseny tenia un aspecte semblant a la següent.

Després d’haver estat satisfet amb el disseny, el vaig exportar com a fitxer STL, el vaig tallar segons la configuració de la impressora i finalment el vaig imprimir. Una vegada més, el fitxer STL també està disponible per descarregar-lo des de Thingiverse i podeu imprimir la carcassa amb ell.
Un cop feta la impressió, vaig procedir al muntatge del projecte instal·lat en un recinte permanent per instal·lar-lo en una instal·lació. Amb la connexió completa feta, vaig muntar el circuit a la meva carcassa i tot va anar bé, com podeu veure aquí.

Prova del sistema de control AQI
Un cop el maquinari i el codi estiguin preparats, és hora de provar el dispositiu. Hem utilitzat un adaptador extern de 12V 1A per alimentar el dispositiu. Com podeu veure, el dispositiu mostrarà la concentració de PM10, PM2.5 i monòxid de carboni a la pantalla OLED. La concentració de PM2,5 i PM10 és en µg / m 3 mentre que la concentració de monòxid de carboni és en mg / m 3.


Aquestes lectures també es publicaran al tauler de control d’Adafruit IO. El màxim de tots els paràmetres (PM10, PM2.5 i CO) serà l’AQI.

Els valors AQI dels darrers 30 dies es mostraran com a gràfic.

Així és com podeu utilitzar els sensors SDS011 i MQ-7 per calcular l’índex de qualitat de l’aire. El funcionament complet del projecte també es pot trobar al vídeo enllaçat a continuació. Espero que us hagi agradat el projecte i us hagi semblat interessant construir el vostre propi. Si teniu cap pregunta, deixeu-les a la secció de comentaris a continuació.
