Orodha ya maudhui:
- Vifaa
- Hatua ya 1: Kuunganisha Vipengele
- Hatua ya 2: Programu ya Maktaba na Arduino
- Hatua ya 3: Programu ya MIT App Inventor 2
- Hatua ya 4: MATOKEO
Video: Mfumo wa Ufuatiliaji Ubora wa Hewa kwa Kubadilisha Uchafuzi: Hatua 4
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:51
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
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
hii ni kizuizi cha msimbo wa uvumbuzi wa programu ya MIT
Hatua ya 4: MATOKEO
hii hapa video ya matokeo
Ilipendekeza:
Ufuatiliaji Rahisi wa Ubora wa Hewa Na Uonyesho wa LCD wa TFT- Ameba Arduino: Hatua 3
Ufuatiliaji Rahisi wa Ubora wa Hewa na Uonyesho wa LCD wa TFT- Ameba Arduino: Utangulizi Sasa kwa kuwa watu wengi hukaa nyumbani ili kuepuka mawasiliano ya karibu na mtoaji wa virusi wa COVID-19, ubora wa hewa unakuwa jambo muhimu kwa ustawi wa watu, haswa katika nchi za joto. kutumia hewa-con ni lazima wakati wa da
Airduino: Ufuatiliaji wa Ubora wa Hewa ya rununu: Hatua 5
Airduino: Ufuatiliaji wa Ubora wa Hewa ya Mkononi: Karibu kwenye mradi wangu, Airduino. Naitwa Robbe Breens. Ninasoma teknolojia ya media titika na mawasiliano huko Howest huko Kortrijk, Ubelgiji. Mwisho wa muhula wa pili, lazima tutengeneze kifaa cha IoT, ambayo ni njia nzuri ya kuleta yote
Ufuatiliaji wa Ubora wa Hewa Na MQ135 na Joto la Nje na Sura ya Unyevu Zaidi ya MQTT: Hatua 4
Ufuatiliaji wa Ubora wa Hewa Na MQ135 na Joto la Nje na Sura ya Unyevu Zaidi ya MQTT: Hii ni kwa madhumuni ya mtihani
Kugundua Uchafuzi wa Hewa + Uchajiaji Wa Hewa: Hatua 4
Kugundua Uchafuzi wa Hewa + Usafi wa Anga: Wanafunzi (Aristobulus Lam, Victor Sim, Nathan Rosenzweig na Declan Loges) wa Shule ya Kimataifa ya Uswisi ya Ujerumani walifanya kazi na wafanyikazi wa MakerBay kutoa mfumo jumuishi wa upimaji wa uchafuzi wa hewa na ufanisi wa uchujaji wa hewa. Hii
Ufuatiliaji wa Uchafuzi wa Hewa - IoT-Data Viz-ML: 3 Hatua (na Picha)
Ufuatiliaji wa Uchafuzi wa Hewa | IoT-Data Viz-ML: Kwa hivyo hii kimsingi ni Maombi kamili ya IoT ambayo ni pamoja na sehemu ya vifaa na sehemu ya programu. Katika mafunzo haya utaona jinsi ya kuanzisha kifaa cha IoT na jinsi ya sisi kufuatilia aina tofauti za gesi za uchafuzi zilizopo hewani.