Orodha ya maudhui:

Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi: Hatua 4
Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi: Hatua 4

Video: Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi: Hatua 4

Video: Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi: Hatua 4
Video: Mambo 3 Ya Kufanya Leo Ili Uondoe Stress Maishani Mwako 2024, Novemba
Anonim
Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kuacha uchafuzi wa mazingira
Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kuacha uchafuzi wa mazingira
Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi
Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi

INTRO:

1 Katika mradi huu ninaonyesha jinsi ya kujenga kipelelezi cha chembe na kuonyesha data, kuhifadhi data kwenye kadi ya SD na IOT. Kwa kuibua onyesho la pete za neopixels linaonyesha ubora wa hewa.

2 Ubora wa hewa ni jambo linalozidi kuwa muhimu leo. kuna mifumo ya kupima kiwango cha vumbi lakini ni ghali sana. Kuna vifaa vya kugundua chembe za bei ya chini na za hali ya juu kwenye soko, kama inavyoonyeshwa na tafiti zingine.

kwa mfano:

www.atmos-meas-tech.net/11/4823/2018/amt-1…

3 Kwa hivyo niliamua kuunda kifaa kinachoweza kupima idadi ya chembe kwa madarasa ya saizi (0.5µm hadi 10 µm), kuibua na onyesho rahisi la matokeo (pete ya pikseli mpya), onyesho la kina zaidi kwenye skrini ya TFT na chelezo kilichopigwa muda kwenye kadi ya SD.

4 Kwa kuongeza nimeongeza moduli ya mawasiliano ya bluetooth kuweza kuwasiliana na programu tumizi ya android na hivyo kuchapisha matokeo kwenye seva ya IOT.

5 Gharama ya jumla haizidi 60 €

Vifaa

-Arduino uno R3

-Arduino proto ngao

Skrini -TFT ST7735

-Pete ya Neopixel 24 imeongozwa

-Mkulima PMS5003

-HC-06 moduli ya Bluetooth

Hatua ya 1: Kuunganisha Vipengele

Kuunganisha Vipengele
Kuunganisha Vipengele

vifaa tofauti vimeunganishwa kulingana na mchoro hapo juu

Hatua ya 2: Programu ya Maktaba na Arduino

1 maktaba

kwa skrini ya TFT

github.com/adafruit/Adafruit-GFX-Library

kwa pete ya pikseli mamboleo

github.com/adafruit/Adafruit_NeoPixel

kwa kadi ya sd

github.com/arduino-libraries/SD

2 mchoro wa arduino

# pamoja # # pamoja // Bibliothèque pour l'I2C # pamoja na "RTClib.h" // Bibliothèque pour le module RTC RTC_DS1307 RTC; # pamoja

// Je! Ni pini ipi kwenye Arduino iliyounganishwa na NeoPixels?

#fafanua PIN 6 // Kwenye Trinket au Gemma, pendekeza kubadilisha hii iwe 1

// Je, ni NeoPixels ngapi zimeunganishwa na Arduino?

#fafanua NUMPIXELS 24 // Saizi maarufu ya pete ya NeoPixel Adikseli_NeoPixel saizi (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = saizi Rangi (0, 250, 0); uint32_t machungwa = saizi Rangi (250, 250, 0); uint32_t rouge = saizi Rangi (255, 0, 0);

Programu Pms za ulimwenguSerial (2, 3);

#fafanua cs 10 #fafanua dc 9 #fafanua rst 8 // unaweza pia kuunganisha hii kwa kuweka upya Arduino

#jumuisha # maktaba ya picha kuu

# pamoja # maktaba mahususi ya vifaa # pamoja na # pamoja na const int cs_sd = 4; muda; // muda wa upatikanaji mara mbiliInit; // uanzishaji wa kipima muda au démarrage du kitanzi ()

# ikiwa imefafanuliwa (_ SAM3X8E_)

#undef _FlashStringHelper:: F (string_literal) #fasili F (string_literal) string_literal # endif

// Chaguo 1: tumia pini yoyote lakini polepole kidogo

// Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, mosi, sclk, rst);

// Chaguo 2: lazima utumie pini za vifaa vya SPI

// (kwa UNO thats sclk = 13 na sid = 11) na pin 10 lazima iwe // pato. Hii ni haraka sana - pia inahitajika ikiwa unataka // kutumia kadi ya MicroSD (angalia mfano wa kuchora picha) Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); kuelea nombre_leds = 0; kuanzisha batili () {Serial.begin (9600); // Kuanzisha uhusiano wa I2C Wire. Kuanza (); // Kuanzisha moduli ya RTC RTC. Kuanza (); Serial.print ("init SD"); kuchelewesha (1000); ikiwa (! SD.begin (cs_sd)) // Sharti la kutekelezwa kwa SD SD linaweza kutekelezwa {Serial.print ("Defaut SD"); kurudi; } Serial.print ("Carte SD OK");

Data ya faili = SD.open ("donnees.txt", FILE_WRITE); // Ouvre le fichier "donnees.txt"

data.println (""); data.println ("Upataji wa Darmarge"); // Ecrit dans ce fichier data. Funga (); tft.initR (INITR_GREENTAB); // anzisha chip ya ST7735S, tabo nyeusi Serial.println ("init"); // pato letu la utatuzi tft.fillScreen (ST7735_BLACK); // kiwango cha baud ya sensorer ni 9600 pmsSerial.begin (9600);

saizi. anza (); // INITIALIZE NeoPixel strip kitu (INAhitajika)

saizi. KuwekaUngu (2);

}

muundo pms5003data {

uint16_t bila fremu; uint16_t pm10_standard, pm25_standard, pm100_ kiwango; uint16_t pm10_env, pm25_env, jioni100_env; chembe uint16_t_03um, chembe_05um, chembe_10um, chembe_25um, chembe_50um, chembe_100um; uint16_ haitumiki; uint16_t checksum; };

data ya pms5003data; kitanzi batili () {pixels.clear (); // Weka rangi zote za pikseli 'kuzima' DateTime sasa = RTC.now (); // Récupère l'heure et le date courante // affiche_date_heure (sasa);

muda = ((millis () - tempsInit)) / 1000; // Démarrage du chrono

ikiwa (somaPMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.set Mshale (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("sehemu za nbre / 0.1 l");

tft.set Mshale (10, 17); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.set Mshale (10, 17); tft.print ("0.3 um"); tft.print (data.particles_03um); tft.print ("");

tft.set Mshale (10, 29);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("0.5 um"); tft.print (data.particles_05um); tft.print ("");

tft.setCursor (10, 41);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("1.0 um"); tft.print (data.particles_10um); tft.print ("");

tft.set Mshale (10, 53);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("2.5 um"); tft.print (data.particles_25um); tft.print ("");

tft.setCursor (10, 65);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("5.0 um"); tft.print (data.particles_50um); tft.print ("");

tft.setCursor (10, 77);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("10 um"); tft.print (data.particles_100um); tft.print ("");

tft.setCursor (2, 89);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 1.0"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm10_standard); tft.print (""); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print (" microg / m3 ");

tft.setCursor (2, 100); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 2.5"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm25_standard); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print ("microg / m3");

tft.setCursor (2, 110);

tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 10"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm100_standard); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print ("microg / m3");

tft.set Mshale (10, 5);

tft.setTextColor (ST7735_WHITE, ST7735_BLACK); tft.setTextSize (1); tft.println ("sehemu za nbre / 0.1 l");

// Serial.print (muda);

// Serial.print (""); Serial.print ("#"); Serial.print ("03µm"); Serial.print (data.particles_03um); Serial.print (""); Serial.print ("05µm"); Serial.print (data.particles_05um); Serial.print (""); Serial.print ("1µm"); Serial.print (data.particles_10um); Serial.print (""); Printa ya serial ("25µm"); Printa ya serial (data.particles_25um); Serial.print (""); Printa ya serial ("50µm"); Serial.print (data.particles_50um); Serial.print (""); Printa ya serial ("100µm"); Serial.print (data.particles_100um); Serial.println (""); nombre_leds = int (((kuelea (data. vifungu_03um) / 65535) * 24)); // nombre_leds = (8); Serial.println (nombre_leds);

ikiwa ((nombre_leds = 1)) {

saizi kujaza (vert, 0, nombre_leds); } vingine ikiwa ((nombre_leds = 8)) {pixels.fill (vert, 0, 8); saizi kujaza (machungwa, 8, ((nombre_leds) -8)); } mwingine ikiwa (nombled_leds> 16) {

saizi jaza (wima, 0, 8); saizi kujaza (machungwa, 8, 8); saizi kujaza (rouge, 16, ((nombre_leds) -16)); } mwingine ikiwa (nombre_leds <= 1) {pixels.fill (vert, 0, 1); saizi. onyesha (); // Tuma rangi za pikseli zilizosasishwa kwenye vifaa.

// Ufafanuzi haujapeana Kamba PM03 = Kamba (data.particles_03um); Kamba PM05 = Kamba (data.particles_05um); Kamba PM10 = Kamba (data.particles_10um); Kamba PM25 = Kamba (data.particles_25um); Kamba PM50 = Kamba (data.particles_50um); Kamba PM100 = Kamba (data.particles_100um); Kamba PMS10 = Kamba (data.pm10_standard); Kamba PMS25 = Kamba (data.pm25_standard); Kamba PMS100 = Kamba (data.pm100_standard); Majira ya Kamba = Kamba (muda);

// Ecriture des données dans le fichier texte

Data ya faili = SD.open ("donnees.txt", FILE_WRITE); data.println (Muda + "" + PM03 + "" + PM05 + "" + PM10 + "" + PM25 + "" + PM50 + "" + PM100 + "" + PMS10 + "" + PMS25 + "" "PMS100 +" "); data karibu (); }

}

kusoma booleanPMSdata (Mkondo * s) {

ikiwa (! s-> inapatikana ()) {kurudi uwongo; } // Soma kahawia kwa wakati hadi tutakapofika kwenye kitambulisho maalum cha '0x42' ikiwa (s-> peek ()! = 0x42) {s-> read (); kurudi uwongo; }

// Sasa soma ka 32 zote

ikiwa (s-> inapatikana () kusomaBytes (bafa, 32);

// pata checksum tayari

kwa (uint8_t i = 0; i <30; i ++) {sum + = bafa ; }

/ * utatuaji

kwa (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Printa ya serial (bafa , HEX); Serial.print (","); } Serial.println (); * / // Takwimu zinakuja endian'd, hii hutatua kwa hivyo inafanya kazi kwenye majukwaa yote uint16_t buffer_u16 [15]; kwa (uint8_t i = 0; i <15; i ++) {buffer_u16 = bafa [2 + i * 2 + 1]; bafa_u16 + = (bafa [2 + i * 2] << 8); }

// weka kwenye muundo mzuri:)

memcpy ((batili *) & data, (batili *) bafa_u16, 30);

ikiwa (jumla! = data.checksum) {

Serial.println ("Kushindwa kwa Checksum"); kurudi uwongo; } // mafanikio! kurudi kweli; }

// Converti le numéro de jour en jour /! / La semaine kuanza un dimanche

Kamba donne_jour_semaine (uint8_t j) {switch (j) {kesi 0: kurudi "DIM"; kesi 1: kurudi "LUN"; kesi 2: kurudi "MAR"; kesi 3: kurudi "MER"; kesi 4: kurudi "JEU"; kesi 5: kurudi "VEN"; kesi ya 6: kurudi "SAM"; chaguo-msingi: kurudi ""; }}

// affiche la tarehe et l'heure sur l'écran

tupu affiche_date_heure (Tarehe ya Wakati wa Tarehe) {// Tarehe ya Kamba jour = donne_jour_semaine (wakati wa siku. OdayTheFeek ()) "" + Vers2Chiffres (wakati wa siku.) (")" "/" + Vers2Chiffres (wakati wa miezi. + Kamba (wakati wa mwaka. (DEC); // heure String heure = ""; heure = Vers2Chiffres (wakati wa saa.hour ()) + ":" + Vers2Chiffres (datetime.minute ()) + ":" + Vers2Chiffres (datetime.second ());

Printa ya serial (safari); Serial.print (""); Serial.print (heure); //Serial.print (""); Data ya faili = SD.open ("donnees.txt", FILE_WRITE); alama ya data (safari + "" + heure + ""); data. karibu ();

tft.setCursor (2, 120);

tft.setTextColor (ST7735_GREEN); tft.setTextSize (1); tft.print ("tarehe"); tft.setTextColor (ST7735_YELLOW); tft.print (safari); tft.setTextColor (ST7735_GREEN); tft.setCursor (2, 130); tft.print ("heure"); tft. setTextColor (ST7735_YELLOW); tft.print (heure);

kuchelewesha (500);

}

// permet d'afficher les nombres sur deux chiffres

Kamba Vers2Chiffres (byte nombre) {String resultat = ""; ikiwa (nombre <10) resultat = "0"; matokeo ya kurudi + = Kamba (nombre, DEC); }

Hatua ya 3: Programu ya MIT App Inventor 2

Programu ya MIT App Inventor 2
Programu ya MIT App Inventor 2

hii ni kizuizi cha msimbo wa uvumbuzi wa programu ya MIT

Hatua ya 4: MATOKEO

hii hapa video ya matokeo

Ilipendekeza: