Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем: 4 алхам
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем: 4 алхам
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем

INTRO:

1 Энэхүү төсөлд би өгөгдөл харуулах, SD карт дээр өгөгдөл нөөцлөх, IOT ашиглан тоосонцор илрүүлэгчийг хэрхэн бүтээхийг үзүүлсэн. Неопикселийн цагираг дэлгэц нь агаарын чанарыг илтгэнэ.

2 Агаарын чанарын асуудал өнөөдөр улам бүр чухал болж байна. Тоосны хэмжээг хэмжих системүүд байдаг боловч маш үнэтэй байдаг. Зарим судалгаанаас харахад хямд үнэтэй, өндөр чанартай тоосонцор илрүүлэгч байдаг.

Жишээлбэл:

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

3 Тиймээс би тоосонцрын тоог (0.5µm -ээс 10 µm) ангиллаар хэмжих чадвартай төхөөрөмжийг бүтээхээр шийдлээ. SD карт дээр цаг дарсан нөөцлөлт.

4 Нэмж дурдахад би bluetooth холбооны модулийг нэмж андройд програмтай холбогдож, үр дүнг IOT сервер дээр нийтлэх боломжтой болсон.

5 Бүх нийт зардал 60 € -аас хэтрэхгүй

Хангамж

-Arduino uno R3

-Arduino прото бамбай

-TFT дэлгэц ST7735

-Неопикселийн цагираг 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 болгож өөрчлөхийг санал болгоорой

// Arduino -д хэдэн NeoPixel хавсаргасан бэ?

#тодорхойлох NUMPIXELS 24 // Алдартай NeoPixel бөгжний хэмжээ Adafruit_NeoPixel пиксел (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = пиксел Өнгө (0, 250, 0); uint32_t улбар шар = пиксел Өнгө (250, 250, 0); uint32_t rouge = пиксел. Өнгө (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; цаг агаарын температур; // temps d'acquisition давхар tempsInit; // эхлүүлэх du timer 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 -ийн хувьд 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)) // Нөхцөл байдал нь la la carte SD est présente dans l'appareil {Serial.print ("Defaut SD"); буцах; } Serial.print ("Carte SD OK");

Файлын өгөгдөл = SD.open ("donnees.txt", FILE_WRITE); // Ouvre le fichier "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);

пиксел.begin (); // NeoPixel зурвасын объектыг эхлүүлэх (шаардлагатай)

piksel.setBrightness (2);

}

pms5003 өгөгдөл {

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 (); // Бүх пикселийн өнгийг 'off' болгож тохируулна уу DateTime now = 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 хэсгүүд/ 0.1 л");

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

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 хэсгүүд/ 0.1 л");

// Serial.print (temps);

// 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); } if if ((nombre_leds = 8)) {пиксел.fill (vert, 0, 8); пиксел. бөглөх (улбар шар, 8, ((nombre_leds) -8)); } өөр бол (nombre_leds> 16) {

пиксел бөглөх (орой, 0, 8); пиксел бөглөх (улбар шар, 8, 8); piksel.fill (rouge, 16, ((nombre_leds) -16)); } if if (nombre_leds <= 1) {piksel.fill (vert, 0, 1); } пиксел.шоу (); // Шинэчлэгдсэн пикселийн өнгийг техник хангамж руу илгээх.

// Тодорхойлолт données String PM03 = String (data.particles_03um); PM05 мөр = String (data.particles_05um); PM10 мөр = String (data.particles_10um); PM25 мөр = String (data.particles_25um); PM50 мөр = String (data.particles_50um); 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 (); }

}

логик уншихPMSdata (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+= буфер ; }

/* дибаг хийх

for (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Serial.print (буфер , HEX); Serial.print (","); } Serial.println (); */ // Өгөгдөл endian'd хэлбэрээр ирдэг бөгөөд энэ нь үүнийг шийддэг тул бүх платформ дээр ажилладаг uint16_t buffer_u16 [15]; for (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 (нийлбэр! = өгөгдлийн чекийн дүн) {

Serial.println ("Хяналтын дүнгийн алдаа"); худал буцах; } // амжилт! үнэн рүү буцах; }

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

Donne_jour_semaine (uint8_t j) {switch (j) {тохиолдол 0: "DIM" -г буцаах; тохиолдол 1: "LUN" буцаах; тохиолдол 2: "MAR" буцаах; тохиолдол 3: "MER" буцаах; тохиолдол 4: "JEU" -г буцааж өгөх; тохиолдол 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 ()) + "/") + String (datetime.year (), DEC); // heure String heure = ""; heure = Vers2Chiffres (datetime.hour ()) + ":" + Vers2Chiffres (datetime.minute ()) + ":" + Vers2Chiffres (datetime.second ());

Цуваа.хэвлэх (сэтгүүл); Serial.print (""); Цуваа.хэвлэх (heure); //Serial.print (""); Файлын өгөгдөл = SD.open ("donnees.txt", FILE_WRITE); өгөгдөл.хэвлэх (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"; буцах үр дүн += String (nombre, DEC); }

Алхам 3: MIT App Inventor 2 програм

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

Энэ бол MIT програм зохион бүтээгчийн кодын блок юм

Алхам 4: Үр дүн

үр дүнгийн видео энд байна

Зөвлөмж болгож буй: