Мазмуну:

Булганууну бөлүкчөлөр үчүн абанын сапатын көзөмөлдөө системасы: 4 кадам
Булганууну бөлүкчөлөр үчүн абанын сапатын көзөмөлдөө системасы: 4 кадам

Video: Булганууну бөлүкчөлөр үчүн абанын сапатын көзөмөлдөө системасы: 4 кадам

Video: Булганууну бөлүкчөлөр үчүн абанын сапатын көзөмөлдөө системасы: 4 кадам
Video: Дүйнөдөгү эң булганган шаарлар алардын ичиндеги булгануу көлөмү менен сизди таң калтырат 2024, Июль
Anonim
Булганууну бөлүкчөлөр үчүн абанын сапатына мониторинг жүргүзүү системасы
Булганууну бөлүкчөлөр үчүн абанын сапатына мониторинг жүргүзүү системасы
Булганууну бөлүкчөлөр үчүн абанын сапатына мониторинг жүргүзүү системасы
Булганууну бөлүкчөлөр үчүн абанын сапатына мониторинг жүргүзүү системасы

INTRO:

1 Бул долбоордо мен маалымат дисплейи менен бөлүкчө детекторун кантип түзүүнү, SD картадагы маалыматтын камдык көчүрмөсүн жана IOTту көрсөтөм. Неопикселдүү шакек дисплей абанын сапатын көрсөтөт.

2 Аба сапаты бүгүнкү күндө барган сайын маанилүү маселе. чаңдын ылдамдыгын өлчөөчү системалар бар, бирок алар абдан кымбат. Кээ бир изилдөөлөр көрсөткөндөй, рынокто арзан жана сапаттуу бөлүкчө детекторлору бар.

Мисалы:

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

3 Ошондуктан мен бөлүкчөлөрдүн санын класстар боюнча (0,5кмден 10мкмге чейин) өлчөй ала турган, натыйжаны жөнөкөй көрсөтүү менен (нео пикселдик шакекче), TFT экранда деталдуу дисплейди жана SD картада убакыт мөөрү камдалган.

4 Мындан тышкары, мен bluetooth байланыш модулун коштум, ал андроид тиркемеси менен байланышып, натыйжаларын IOT серверине жарыялай алат.

5 Жалпы наркы 60 € ашпайт

Жабдуулар

-Arduino uno R3

-Arduino прото калканы

-TFT экраны ST7735

-Neopixel шакеги 24 жетелейт

-Plantower PMS5003

-HC-06 Bluetooth модулу

1 -кадам: Компоненттерди туташтыруу

Компоненттерди туташтыруу
Компоненттерди туташтыруу

ар кандай компоненттер жогорудагы схемага ылайык туташтырылган

2 -кадам: Китепкана жана Arduino программасы

1 китепкана

TFT экраны үчүн

github.com/adafruit/Adafruit-GFX-Library

нео пикселдик шакек үчүн

github.com/adafruit/Adafruit_NeoPixel

sd карта үчүн

github.com/arduino-libraries/SD

2 arduino эскизи

#include #include // Bibliothèque pour l'I2C #include "RTClib.h" // Bibliothèque pour le module RTC RTC_DS1307 RTC; #кошуу

// Arduinoдогу кайсы пин NeoPixelsке туташкан?

#аныктоо PIN 6 // Trinket же Gemma боюнча, муну 1ге өзгөртүүнү сунуштаңыз

// Ардуиного канча NeoPixels тиркелет?

#define NUMPIXELS 24 // Популярдуу NeoPixel шакек өлчөмү Adafruit_NeoPixel пикселдери (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = пиксель. Color (0, 250, 0); uint32_t апельсин = пиксель. Түс (250, 250, 0); uint32_t rouge = пиксел. Color (255, 0, 0);

SoftwareSerial pmsSerial (2, 3);

#define cs 10 #define dc 9 #define rst 8 // сиз муну Arduino баштапкы абалына туташтырсаңыз болот

#кошуу // Негизги графикалык китепкана

#include // Hardware-specific library #include #include const int cs_sd = 4; int temps; // temps d'acquisition кош tempsInit; // баштоо дю таймер au démarrage du loop ()

#аныкталган болсо (_ SAM3X8E_)

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

// 1 -вариант: каалаган пиндерди колдонуңуз, бирок бир аз жайыраак

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

// 2 -вариант: SPI жабдыктарын колдонушу керек

// (UNO thats үчүн sclk = 13 жана sid = 11) жана пин 10 чыгарылышы болушу керек. Бул бир топ ылдамыраак - эгер сиз кааласаңыз // microSD картасын колдонууну кааласаңыз (сүрөттү тартуу мисалын караңыз) Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); float nombre_leds = 0; void setup () {Serial.begin (9600); // Баштоо I2C Wire.begin (); // Баштоо ле модулу RTC RTC.begin (); Serial.print ("init SD"); кечигүү (1000); if (! SD.begin (cs_sd)) // Шарт vérifiant si la carte SD est présente dans l'appareil {Serial.print ("Defaut SD"); кайтуу; } Serial.print ("Carte SD OK");

Файл маалыматы = SD.open ("donnees.txt", FILE_WRITE); // Ооба, "donnees.txt"

data.println (""); data.println ("Démarrage алуу"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // ST7735S чипин инициализациялоо, кара табулатура Serial.println ("init"); // биздин мүчүлүштүктөрдү оңдоо tft.fillScreen (ST7735_BLACK); // сенсордун ылдамдыгы 9600 pmsSerial.begin (9600);

piksel.begin (); // NeoPixel тилкесинин объектисин ИНТИЗАЛДОО (КЕРЕК)

piksel.setBrightness (2);

}

pms5003data түзүмү {

uint16_t framelen; uint16_t pm10_standard, pm25_standard, pm100_standard; uint16_t pm10_env, pm25_env, pm100_env; uint16_t бөлүкчөлөр_03ум, бөлүкчөлөр_05ум, бөлүкчөлөр_10ум, бөлүкчөлөр_25ум, бөлүкчөлөр_50ум, бөлүкчөлөр_100um; uint16_t колдонулбаган; uint16_t текшерүү суммасы; };

pms5003 маалыматынын структурасы; void loop () {piksel.clear (); // Бардык пиксель түстөрүн 'өчүрүү' DateTime азыр = RTC.now (); // Récupère l'heure et le date courante // affiche_date_heure (азыр);

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

if (readPMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.setCursor (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("nbre parts/ 0.1 l");

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

tft.setCursor (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.setCursor (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) " микрог/м3 ");

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/mrg (")

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 (") микроф.

tft.setCursor (10, 5);

tft.setTextColor (ST7735_WITE, ST7735_BLACK); tft.setTextSize (1); tft.println ("nbre parts/ 0.1 l");

// Serial.print (темптер);

// 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 (""); Serial.print ("25µm"); Serial.print (data.particles_25um); Serial.print (""); Serial.print ("50µm"); Serial.print (data.particles_50um); Serial.print (""); Serial.print ("100µm"); Serial.print (data.particles_100um); Serial.println (""); nombre_leds = int (((float (data.particles_03um)/65535)*24)); // nombre_leds = (8); Serial.println (nombre_leds);

эгер ((nombre_leds = 1)) {

piksel.fill (vert, 0, nombre_leds); } else if ((nombre_leds = 8)) {piksel.fill (vert, 0, 8); pixel.fill (кызгылт сары, 8, ((nombre_leds) -8))); } башка if (nombre_leds> 16) {

piksel.fill (vert, 0, 8); pixel.fill (кызгылт сары, 8, 8); pix.fill (rouge, 16, ((nombre_leds) -16))); } else if (nombre_leds <= 1) {piksel.fill (vert, 0, 1); } piksel.show (); // Аппаратурага жаңыртылган пиксел түстөрүн жөнөтүңүз.

// Dnfinition données String PM03 = String (data.particles_03um); String PM05 = String (data.particles_05um); String PM10 = String (data.particles_10um); String PM25 = String (data.particles_25um); String PM50 = String (data.particles_50um); String PM100 = String (data.particles_100um); String PMS10 = String (data.pm10_standard); String PMS25 = String (data.pm25_standard); String PMS100 = String (data.pm100_standard); String Temps = String (temps);

// Ecriture des données dans le fichier texte

Файл маалыматы = SD.open ("donnees.txt", FILE_WRITE); data.println (Temps+""+PM03+""+PM05+""+PM10+""+PM25+""+PM50+""+PM100+""+PMS10+""+PMS25+""+PMS100+""); data.close (); }

}

логикалык readPMSdata (Stream *s) {

if (! s-> available ()) {return false; } // Атайын '0x42' старт-байтына жеткенге чейин бир убакта байтты окуңуз (s-> peek ()! = 0x42) {s-> read (); жалган кайтаруу; }

// Эми 32 байттын баарын окуу

if (s-> available () readBytes (буфер, 32);

// текшерүү суммасын даярдаңыз

for (uint8_t i = 0; i <30; i ++) {sum+= buffer ; }

/* мүчүлүштүктөрдү оңдоо

үчүн (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Serial.print (буфер , HEX); Serial.print (","); } Serial.println (); */ // Маалыматтар endian'd түрүндө келет, бул аны чечет, андыктан ал бардык платформаларда иштейт uint16_t buffer_u16 [15]; үчүн (uint8_t i = 0; i <15; i ++) {buffer_u16 = буфер [2 + i*2 + 1]; buffer_u16 + = (буфер [2 + i*2] << 8); }

// аны жакшы структурага кой:)

memcpy ((void *) & data, (void *) buffer_u16, 30);

if (sum! = data.checksum) {

Serial.println ("Текшерүү суммасы ишке ашпай калды"); жалган кайтаруу; } // ийгилик! чындыкка кайтуу; }

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

String donne_jour_semaine (uint8_t j) {switch (j) {case 0: return "DIM"; 1 -абал: "LUN" кайтаруу; 2 -жагдай: "MAR" кайтаруу; 3 -жагдай: "MER" кайтаруу; 4 -жагдай: "ЖЭБди" кайтаруу; 5 -жагдай: "VEN" кайтаруу; 6 -жагдай: "SAM" кайтаруу; демейки: кайтаруу ""; }}

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

void affiche_date_heure (DateTime datetime) {// Date String jour = donne_jour_semaine (datetime.dayOfTheWeek ()) + "" + Vers2Chiffres (datetime.day ()) + "/" + Vers2Chiffres (datetime.month ()) + "/" + Сап (datetime.year (), DEC); // heure String heure = ""; heure = Vers2Chiffres (datetime.hour ()) + ":" + Vers2Chiffres (datetime.minute ()) + ":" + Vers2Chiffres (datetime.second ());

Serial.print (журналы); Serial.print (""); Serial.print (heure); //Serial.print (""); Файл маалыматы = SD.open ("donnees.txt", FILE_WRITE); data.print (jour + "" + heure + ""); data.close ();

tft.setCursor (2, 120);

tft.setTextColor (ST7735_GREEN); tft.setTextSize (1); tft.print ("дата"); tft.setTextColor (ST7735_YELLOW); tft.print (jour); tft.setTextColor (ST7735_GREEN); tft.setCursor (2, 130); tft.print ("heure"); tft. setTextColor (ST7735_YELLOW); tft.print (heure);

кечигүү (500);

}

// permet d'afficher les nombres sur deux chiffres

String Vers2Chiffres (байт номери) {String resultat = ""; if (nombre <10) resultat = "0"; returnatatat = = String (nombre, DEC); }

3 -кадам: MIT App Inventor 2 программасы

MIT App Inventor 2 программасы
MIT App Inventor 2 программасы

бул MIT колдонмосунун ойлоп табуучуларынын код блогу

4 -кадам: ЖЫЙЫНТЫК

бул жерде видеонун жыйынтыгы

Сунушталууда: