Taula de continguts:

Sistem De Monitorizare a Nivelului De Poluare (Arduino Uno): 9 Steps
Sistem De Monitorizare a Nivelului De Poluare (Arduino Uno): 9 Steps

Vídeo: Sistem De Monitorizare a Nivelului De Poluare (Arduino Uno): 9 Steps

Vídeo: Sistem De Monitorizare a Nivelului De Poluare (Arduino Uno): 9 Steps
Vídeo: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, Desembre
Anonim
Sistem De Monitorizare a Nivelului De Poluare (Arduino Uno)
Sistem De Monitorizare a Nivelului De Poluare (Arduino Uno)

Proiectul consta in realizarea unui dispositiu ce afiseaza diferiti parametrii de mediu (temperatura, umiditate, level de particule din atmosfera, cantitatea de compusi organici volatili) si envia aquestes dates a la plataforma IoT unde are realizate grafice si alte prelucrari.

Pas 1: Component Necesare

  • sensor de temperatura- eu am used senzorul de temperatura DHT22 per a aquest mai precisament decat DHT11 dar bastant de ieftin fata de alti senzori de temperatura - https://www.ebay.com/itm/DS18B20-KY-015-DHT11-DHT …
  • senzor de umiditat - tot DHT22 (aquest a fomenta un motiu per a cura per a aquest amic senzill, desi es pot seleccionar dues diferències per a temperatura i umiditat)
  • sensor de particule - am used DSM501A -
  • senzor per a components organitzats volàtils (VOC) - utilitzat MiCS5524 -
  • pantalla TFT - he used screen TFT de 1.8 "cu controller-ul ST7735S -
  • Arduino Uno R3 -
  • module Wi-Fi - ESP8266 ESP-01, l-am used per aquest perquè era cel mai ieftin si nu this need of one mai bun - https://www.ebay.com/itm/ESP8266-ESP-01-Serial- WI …
  • mini tauler de suport -
  • o resistenta de 2kOhm
  • foc -

Pas 2: Testarea Si configurar el mòdul Wi-Fi

Testarea Si Configurarea Modului Wi-Fi
Testarea Si Configurarea Modului Wi-Fi

Am realizat schema de mai sus, preluata din this tutorial pe care l-am urmat ca sa testez modulul.

Apoi, conform this tutorial, mi-am create one cont pe platforma IoT ThingSpeak, mi-am creat si configurat un field si utilitand codul from tutorial, am trimis cateva valori random si mi le-a pus pe grafic in acel field.

Pas 3: Testarea Senzorului DHT22

Conectand pin-ul modulului la pin-ul digital 7 al Arduino-ului, pin-ul + la 5V si pin-ul - la GND, am realizat codul:

#incloure; // pt DHT

#defineix DHTPIN 7

#define DHTTYPE DHT22

zumblit flotant;

temperatura de flotació;

DHT dht (DHTPIN, DHTTYPE);

configuració nul·la () {

Serial.begin (9600);

}

bucle buit () {

temp = dht.readTemperature (); Serial.print (temp); Serial.println ("grau C");

hum = dht.readHumidity (); Serial.print (hum); Serial.println ("%");

retard (500);

}

Pas 4: Testarea Senzorului De Particule

Am urmat acest tutorial, cu mentiunea ca ar need pus un delay in setup de 60000 ms for ca senzorul sa aiba timp sa se incalzeasca si sa fie precise.

Unitatea de masura care resulta in urma calculelor presentate in tutorial va fi.

Step 5: Testarea Senzorului De Compusi Organici Volatili

Am conectat pin-ul + al modulului la 5V, pin-ul - la GND si pin-ul A0 la A0 de la Arduino.

int voc;

configuració nul·la () {

Serial.begin (9600);

}

bucle buit () {

voc = analogRead (A0);

voc = mapa (voc, 0, 700, 0, 500);

Serial.println (voc);

retard (500);

}

Nu am gasit nicaieri o formula exacta de calcul pentru a converti valor de la senzor in ppm (parti pe milion) asa ca am testat cu etanol (alcool etilic) si la màxima am aproximat-o la maximul pe care senzorul il can citi la etanol (adica 500), de aceea am facut acea mapare.

Step 6: Afisarea Acestor Date Pe Ecranul TFT

Folosindu-ma d'aquest tutorial, am realziat afisarea pe o scara colorata a valorilor. Pentru aquesta, a trebuit sa adaptez acel cod din tutorial for ecranul meu, fiind prea lung for a include here, se can parcurge in codul final din arhiva, unde o sa fie si bibliotecile required.

Pas 7: Prelucrari Pe ThingSpeak

Prelucrari Pe ThingSpeak
Prelucrari Pe ThingSpeak
Prelucrari Pe ThingSpeak
Prelucrari Pe ThingSpeak

La pasul 2, urmand tutorialul atasat, s-a pogut observar com se pot trimtie date pe platforma de la Arduino.

Acum, o sa ne utilitzant de acele date for a could prelucra, de example eu am facut media valorilor din jumatate in jumatate de ora.

Asa ca am trimis din arduino dades in campurile 1, 3, 5 si 7, iar in 2, 4, 6 si 8 vor si afisate prelucrarile facute de scriptures MATLAB de pe platforma.

Din bara de sus, de la App, la MATLAB Analysis, se apasa New, es pot seleccionar un exemple predefinit o personalitzat, si introdueix el codi de mai més:

readChannelID = 482860;

temperatureFieldID = 1;

readAPIKey = 'KBPNYSUY0BLWE5H4';

[tempC, timeStamp] = thingSpeakRead (readChannelID, 'Fields', temperatureFieldID, 'NumMinutes', 5, 'ReadKey', readAPIKey); visualització (tempC);

AnyMissingValues = suma (isnan (tempC));

if sum (anyMissingValues)> 0

missingValueIndex = find (~ sum (isnan (tempC), 2));

cleantempC = tempC (missingValueIndex,:);

cleanTimeStamps = timeStamp (missingValueIndex);

en cas contrari

cleantempC = tempC;

cleanTimeStamps = timbre;

final

avgTempC = mitjana (cleantempC);

tempF = avgTempC * 9/5 + 32; display (tempF, 'Temperatura medie in Fahrenheit');

writeChannelID = 483860; writeAPIKey = 'V2DR3QMRD7NXU8PD';

thingSpeakWrite (writeChannelID, 'Camps', 2, 'Valors', tempF, 'writekey', writeAPIKey);

NU UITATI SA MODIFICATI ID-urile SI KEY-urile for a nu imi prelua date sau write pe canal, multumesc frumos

Al lloc de 'NumMinutes' es pot utilitzar si 'NumPoints'.

Sintaxa de la ThingSpeakRead si Write this ca mai intai se write intre ghilimele ce urmeaza sa introduci si then pui altar acelui parametru. Podeu consultar si manualment cadascuna de les comencions es troba a Help in dreapta paginii.

Acest cod preia dades del camp 1 si per ca pe langa ce a primit mai sunt si niste NaN-uri, acel if the approximeaza the valors similare celor from campul 1. Dupa aceea, are vectorial of values ii this facuta media iar apoi this medie aquest convertit en grau Celsius en grau Fahrenheit.

Codurile pentru celelalte campuri se fac separat amb diferenta ca each o sa ia din campul relevant marimii si nu o sa se mai faca acel calcul de conversie din Celsius in Fahrenheit.

Per a una regla automàtica d'aquests script-uri, de les aplicacions -> TimeControl -> New TimeControl si es configura optiunile dorite, optiunile pe care le-am ales eu se pot veure in poza de mai sus.

thingspeak.com/channels/483860

Pas 8: Imbinarea Tutor Pasilor

M-am used in codul final de "millis ()" si variabile care retin acesti timpi for a ordona afisajele si trimiterile the server (trebuie o data cam pe the 25 de secunde sa se trimita qualcosa, mai repede nu are rost for ca oricum platforma nu le-ar primi).

Pas 9: Carcasa

Carcasa
Carcasa

Am luat un plastic de la Dedeman (Hobbycolor) si l-am taiat in forma de cutie si i-am decupat niste "ochiuri" for senzori. Arata inicial ca in poza de mai sus:).

Eventual se poate scapa de breadboard si sa se aranjeze mult mai frumos, eu deocamdata l-am lasat asa.

Recomanat: