Агуулгын хүснэгт:

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

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

Видео: Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем: 4 алхам
Видео: Jica - Agaariin bohirdol 2016,01,15 2024, Арваннэгдүгээр
Anonim
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем
Агаарын чанарыг бохирдуулах хэсгүүдэд хяналт тавих систем

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: Үр дүн

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

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