Мазмұны:
- Жабдықтар
- 1 -қадам: компоненттерді қосу
- 2 -қадам: Кітапхана және Arduino бағдарламасы
- 3 -қадам: MIT App Inventor 2 бағдарламасы
- 4 -қадам: НӘТИЖЕ
Бейне: Бөлшектердің ластануына ауа сапасын бақылау жүйесі: 4 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
INTRO:
1 Бұл жобада мен ақпаратты дисплейі бар бөлшектер детекторын қалай құру керектігін, SD картасында және IOT -та деректердің сақтық көшірмесін жасауды көрсетемін. Неопиксельді сақиналы дисплей визуалды түрде ауа сапасын көрсетеді.
2 Қазіргі таңда ауа сапасы маңызды мәселеге айналып отыр. шаңды өлшейтін жүйелер бар, бірақ олар өте қымбат. Кейбір зерттеулер көрсеткендей, нарықта арзан және жоғары сапалы бөлшектер детекторлары бар.
Мысалға:
www.atmos-meas-tech.net/11/4823/2018/amt-1…
3 Сондықтан мен бөлшектердің санын (0,5 мкм -ден 10 мкм) кластар бойынша өлшеуге қабілетті құрылғыны құруды шештім, нәтижені қарапайым көрсету (нео пиксель сақинасы), TFT экранында және SD картасындағы уақыт белгісі бар резервтік көшірме.
4 Сонымен қатар, мен Android қосымшасымен байланыса алу үшін Bluetooth байланыс модулін қостым, осылайша нәтижелерді IOT серверінде жариялай аламын.
5 Жалпы шығын 60 евродан аспайды
Жабдықтар
-Arduino uno R3
-Arduino прото қалқаны
-ST7735 TFT экраны
-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 -ке қосылған?
#6 PIN кодын анықтаңыз // Trinket немесе Gemma -де оны 1 -ге өзгертуді ұсыныңыз
// Arduino -ға қанша NeoPixels бекітілген?
#depine 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);
#dsefine cs 10 #decine dc 9 #define rst 8 // сіз мұны Arduino қалпына келтіруге қосуға болады
#қосу // Негізгі графикалық кітапхана
#include // Аппараттық құралдарға арналған кітапхана #include #include const int cs_sd = 4; температура; // temps d'acquisition қос tempsInit; // инициализация 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)) // // Шарт 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 жолақ объектісін инициализациялау (ҚАЖЕТ)
pixel.setBrightness (2);
}
pms5003data құрылымы {
uint16_t жақтау; uint16_t pm10_standart, pm25_standard, pm100_standard; uint16_t pm10_kz, pm25_kk, pm100_kk; uint16_t бөлшектер_03um, бөлшектер_05ум, бөлшектер_10um, бөлшектер_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 («бөлшектер/ 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 («бөлшектер/ 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)) {
pixel.fill (шың, 0, nombre_leds); } else if ((nombre_leds = 8)) {piksel.fill (vert, 0, 8); pixel.fill (қызғылт сары, 8, ((nombre_leds) -8))); } егер басқа (nombre_leds> 16) {
pixel.fill (шың, 0, 8); пиксель. толтыру (қызғылт сары, 8, 8); pixel.fill (rouge, 16, ((nombre_leds) -16)); } else if (nombre_leds <= 1) {piksel.fill (vert, 0, 1); } пиксель.шоу (); // Жаңартылған пиксель түстерін аппараттық құралға жіберіңіз.
// Données анықтамасы String PM03 = Жол (data.particles_03um); PM05 жолы = Жол (data.particles_05um); PM10 жолы = Жол (data.particles_10um); PM25 жолы = Жол (data.particles_25um); PM50 жолы = Жол (data.particles_50um); PM100 жолы = Жол (data.particles_100um); PMS10 жолы = Жол (data.pm10_standard); PMS25 жолы = Жол (data.pm25_standard); PMS100 жолы = Жол (data.pm100_standard); Жолдың темптері = Жол (темптер);
// 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);
// бақылау сомасын дайындаңыз
үшін (uint8_t i = 0; i <30; i ++) {sum+= буфер ; }
/* отладка
үшін (uint8_t i = 2; i <32; i ++) {Serial.print («0x»); Serial.print (буфер , HEX); Serial.print («,»); } Serial.println (); */ // Деректер ендіan'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);
егер (қосынды! = деректер.шексу) {
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 журналы = 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 (журнал + «» + heure + «»); data.close ();
tft.setCursor (2, 120);
tft.setTextColor (ST7735_GREEN); tft.setTextSize (1); tft.print («date»); 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
Жол2 VersionChiffres (байт саны) {String resultat = «»; if (nombre <10) resultat = «0»; нәтиже қайтару += Жол (nombre, DEC); }
3 -қадам: MIT App Inventor 2 бағдарламасы
бұл MIT қосымшасының өнертапқышының код блогы
4 -қадам: НӘТИЖЕ
міне, нәтиженің видеосы
Ұсынылған:
NodeMCU көмегімен Smart таратылған IoT ауа райын бақылау жүйесі: 11 қадам
NodeMCU көмегімен ақылды таратылған IoT ауа райын бақылау жүйесі: Сіздердің барлығыңыз дәстүрлі метеостанция туралы білетін шығарсыздар; бірақ сіз бұл қалай жұмыс істейтіні туралы ойландыңыз ба? Дәстүрлі метеостанция қымбат және көлемді болғандықтан, бұл станциялардың аудан бірлігіне тығыздығы өте төмен, бұл
CEL ауа ластануына қарсы құрал (өзгертілген): 7 қадам
CEL ауаның ластану көрсеткіші (өзгертілген): Ауаның ластануы қазіргі қоғамдағы жаһандық мәселе болып табылады, ол көптеген аурулардың себебі болып табылады және ыңғайсыздық туғызады. Сондықтан біз дәл GPS нүктесінің орналасуын да, ауаның ластануын да бақылай алатын жүйе құруға тырыстық
Nokia LCD көмегімен DSM501A көмегімен ауа сапасын бақылау: 7 қадам
Nokia LCD көмегімен DSM501A көмегімен ауа сапасының мониторингі: Сәлем достар! Бұл қысқаша нұсқаулықта мен сізге үйде немесе кез келген жерде ауаның қызмет етуін бақылауды көрсетемін
Бөлшек фотонды қолдану арқылы ауа сапасын бақылау: 11 қадам (суреттермен)
Бөлшек фотоны қолданатын ауа сапасының мониторингі: Бұл жобада PPD42NJ бөлшектер сенсоры бөлшектер фотоны бар ауадағы ауа сапасын (PM 2.5) өлшеу үшін қолданылады. Ол бөлшектер консолінде және dweet.io -да деректерді көрсетіп қана қоймайды, сонымен қатар оны өзгерту арқылы RGB жарықдиодты көмегімен ауа сапасын көрсетеді
AirCitizen - ауа сапасын бақылау: 11 қадам (суреттермен)
AirCitizen - Ауа сапасын бақылау: Барлығына сәлем! Бүгін біз сізге жобамызды қалай жаңғыртуға болатынын үйретеміз: AirCitizenPolytech тобы AirCitizen!-«OpenAir / Сіздің ауа қандай?» Жобалар, AirCitizen жобасы азаматтарға сапаны белсенді бағалауға мүмкіндік береді