PDA

Prikaži potpunu verziju : DIY: Mini Meteorološka Stanica


Dekip
31.1.2019, 20:40
Na ono čuveno pitanje, a šta taj Arduino može da uradi, odgovor bi mogao biti, svašta. Arduino, ili bolje reći mikorkontroleri mogu da urade baš svašta. Od paljenja jedne obične LE diode, do pokretanja robota veličine porodične kuće. Od merenja obične temperature, do upravljanja CNC mašinom. Dugo nisam postavljao DIY projekte ovde, pa je red da to ispravim. Ovih dana sam pravio jednu manju meteorološku stanicu, pa je prava prilika da je na ovaj način predstavim.

Ideja je da se u malo prikladno kućište spakuje neophodna elektronika za merenje i očitavanje temperature. Izbor je pao na klon Pro Minija, ali usled brzopletosti pri naručivanju, naručio sam model koji je klon na kvadrat. Naleteo sam na Wavgatovu varijantu Pro Minija sa sopstvenim mikrokontrolerom AVGA328p. Prema rečima proizvođača u pitanju je potpuno kompatibilna ploča sa Pro Minijem. Ma kako da ne. Naručio sam nekoliko primeraka i kod svih sam imao iste probleme. Prvi problem se ogleda u tome da pozivanjem serijala u setup funkciji (Serial.begin()), dolazi do potpunog blokiranja ploče. Probao sam sa raznim vrednostima bauda ali ništa nije vredelo. Ovo je u startu dovelo do toga da se ceo projekat razvija na krštenoj ploči pa da se posle isti prebaci na ovaj Wavgat uz prekrštene fige da će isti proraditi. Drugi problem se ogleda u tome da ploča ima problematičnu naponsku sekciju. Ukoliko ploču napajamo preko RAW pina naponima od, recimo 9 volti, na VCC ćemo imati jedva 1,7V. Wavgat se mora napajti direktno preko VCC pina regulisanim naponom od 5 volti, jer govorimo o 5-voltnoj ploči. Inače, iako istih dimenzija sa istim pinoutom i ipak u velikoj meri kompatibilna sa Pro Minijem, za ovu ploču moramo dodati definicije i biblioteke u IDE. Iste možete preuzeti odavde (https://drive.google.com/open?id=10gwrG9uTDwaEO-7EudsmBkfgdcyrcABI).


https://i.imgur.com/67fcbKU.jpg?1
Kompletan projekat će se lemiti na perforiranu PCB dimenzija 5x7cm. Za merenje temperature sam upotrebio BMP280 modul koji osim temperature može da meri i atmosferski pritisak, a preko njega, posredno i nadmorsku visinu. Za komunikaciju sa MCU koristi I2C interfejs a radi na 3,3V. Logička kola su tolerantna na 5V, tako da se ne moraju koristiti level šifteri. Za prikaz sam upoterbio Oled ekran 0,96" sa rezolucijom 128x64 piksela. I ova ploča koristi I2C interfejs ali radi na 5 volti. Za "peglanje" napona na 3,3V sam upotrebio AMS1117 3,3V naponski regulator, uz par kondenzatora od 100uF i 10uF. Crvena LED i otpornik od 150 oma su tu na 3,3V liniji da malo zašarenim kućište. Kad sam kod kućišta, uzeo sam jedno sa dimenzijama 85x58x33mm. Kućište ima providni poklopac i vodonepropusno je. Unutrašnjost je dovoljno prostrana da se sva elektronika lepo spakuje a tu su i padovi za pričvršćavanje PCB-a. Na kraju je ostalo dovoljno prostora za neko eventualno dodavanje senzora vlažnosti vazduha, a isto putuje iz Kine brzinom kornjače. Kad stigne, ovaj post će dobiti jedan update.


https://i.imgur.com/B88Rbhh.jpg?1

https://i.imgur.com/NA9uL8l.jpg?1


https://i.imgur.com/651pspW.jpg?1


https://i.imgur.com/6xuShZa.jpg?1

https://i.imgur.com/Qx3UclS.jpg?1

https://i.imgur.com/hS7zn9d.jpg?1

https://i.imgur.com/WaEclBH.jpg?1

https://i.imgur.com/O78H87m.jpg?1

https://i.imgur.com/QQJQoOc.jpg?2

https://i.imgur.com/5wOpYzo.jpg?2

Na PCB sam prvo zalemio mikro USB modul pod uglom od 90 stepeni a preko ugaonih muških hedera. Na taj način je sam konektor zapravo došao ispod PCB. Za njega sam sa zadnje strane kućišta napravio otvor, dovoljan za priključivanje kabla. Od njega su 5V i GND išli na IN i GND nožice AMS1117 regulatora. Između 5V i GND sam postavio kondenzator od 100uF 16V. GND dalje ide na odgovarajuće pinove Wavgata, BMP280 i Oled ekrana. 5V ide dalje ka VCC mikrokontrolera i VDD pinu ekrana. Sa OUT nožice naponskog regulatora vodimo 3,3V ka VCC senzora. Na 3,3V i GND sam dodao 10uF 20V kondenzator. Takođe sam dodao crvenu LED i 150 oma otpronik. Ona će svetleti ako ima 3,3V napon na izlazi regulatora. Naravno, moglo se i bez nje. Analogni I2C interfejs Wavgata je povezan na I2C ekrana i senzora. SDA ekrana i senzora sam povezao na A4. SCK ekrana i SCL senzora sam povezao na A5. Ekran, senzor i MCU su na PCB postavljeni preko ženskih hedera koji su zalemljnei na ploči. Na ovaj način se nešto od komponenti može lako zameniti ako zatreba.

Dekip
31.1.2019, 20:41
----------------------



#include <Wire.h>;
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
Adafruit_BMP280 bmp;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
delay(500);
if (!bmp.begin()) {
while (1);
}
}

void loop() {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
delay(1000);

display.setCursor(10,10);
display.print(int(bmp.readTemperature()));
display.print(" ");
display.print((char)247);
display.print("C");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();

display.clearDisplay();
display.setCursor(10,10);
display.print(int(bmp.readPressure()/100));
display.print(" ");
display.print("mbar");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();

display.clearDisplay();
display.setCursor(10,10);
display.print(int(bmp.readPressure()/1000));
display.print(" ");
display.print("kPa");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();

display.clearDisplay();
display.setCursor(10,10);
display.print(int(bmp.readAltitude(917)));
display.print(" ");
display.print("m");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();
}


-------------------------


Za ovaj projekat je potrebno nekoliko biblioteka. Prva je Wire.h koja je već dostupna u okviru IDE. Za ekran sam upotrebio Adafruit_SSD1306 (https://github.com/adafruit/Adafruit_SSD1306) i Adafruit_GFX (https://github.com/adafruit/Adafruit-GFX-Library). Za BMP280 sam upotrebio Adafruit_Sensor (https://github.com/adafruit/Adafruit_Sensor)i Adafruit_BMP280 (https://github.com/adafruit/Adafruit_BMP280_Library) biblioteke. Nakon pravljenja objekata ekrana i senzora u setup funkciji ih pokrećemo. Za ekran ovde upisujemo I2C adresu, a u mom kao i u većini slučajeva je 0x3C. BMP280 senzor nekad može da pravi problem prilikom inicijalizacije pa smo pribegli triku sa if petljom koja će se vrteti u okviru setup funkcije dok se senzor ne pokrene. I2C adresa senzora je najčešće 0x77 i ukoliko ne dobijete ikakva očitavanja, to jest, skeč ostane "zaglavljen" u setup funkciji treba ispratiti u okviru Adafruit_BMP280.h fajla liniju #define BMP280_ADDRESS i postaviti ispravnu I2C adresu. Nakon toga bi senzor morao da radi. U loop funkciji podešavamo ekran i formatiramo ga po potrebi. Ja sam dodao malo scroll efekta uz zastajanje skeča radi očitavanja određenih vrednosti. Ostaje još senzor vlage, ali o tom po tom.


https://i.imgur.com/GGY07Tl.jpg?2

Prilikom testiranja uređaj je trošio oko 22mA što se može prilično smanjiti slanjem mikrokontrolera na spavanje, i na taj način bi uređaj mogao da radi i na baterije. Litijum-jonska 18650 baterija na 3,7V u power banku se dobro držala satima i ovako. Nisam merio koliko dugo može da radi na bateriji ali govorimo o izuzetno štedljivim komponentama gde je samo Wavgat nepoznanica što se tiče potršnje, mada mislim da je u pitanju prilično mali potrošač. Ako će se ići na baterije, LED koju sam dodao bi trebalo izbaciti, scroll efekt, kao i učestalost merenja i očitavanja podataka. Uz uspavljivanje mikrokontrolera.



https://i.imgur.com/2MkN1oX.jpg?1

Šta vi mislite o ovom projektu? Imate li kakve sugestije?

Mario Pavićević
31.1.2019, 21:03
Te podatke imas na svakom telefonu, daj ti stavi PM10 i PM2.5 senzore u to, sa ovim zagadjenjem vazduha je to daleko bitniji parametar!

Dekip
31.1.2019, 21:20
Može! Odličan predlog.





Ipak, da li ovo imaš u telefonu ili nemaš, ideja je da se o ovakvim stvarima priča. Kako sa malo žica napraviti nešto korisno. Imam i ja telefon, nije u tome poenta. Ako imaš ti nešto da podeliš ovde, bilo bi ekstra.



O zagađenju vazduha uopšte ne razmišljam. Živim u sredini gde još uvek možeš da dišeš punim plućima.


Ova meteorološka stanica je nešto što sam pravio za drugara. Njemu treba. Moje je bilo da je sastavim. Nadam se da će nekom značiti ovaj post, makar kao referenca.

igor7
31.1.2019, 23:18
Vizuelno, vrlo pristojan rad. Odlicno odradjen raspored i lemljenje na plocicu.



Ne znam samo koliko bi uticaja moglo da ima to sto se senzor nalazi unutar zatvorene kutije? Jasno je da nisu u pitanju veliki potrosaci i da nema prevelikog izbacivanja toplote (osim AMS1117) ali posle jednog slucaja koji sam imao, sklon sam da posumnjam u sve. Dakle, pre nekoliko godina sam narucio iz Kine kombinovani termometar sa casovnikom koji je po noci mogao prikazivati podatke na zidu zahvaljujuci ugradjenom laseru. Kada je radio na baterije, bio je manje-vise OK ali kada sam mu prikljucio spoljasnje napajanje, poceo je da prikazuje temperaturu za 5-6 stepeni visu od realne. I tamo je krivac bilo kolo koje je napon spustalo na 3,3V. Eto zbog cega je taj moj crv sumnje.


BTW gde se nabavio ovu zicu za lemljenje i kojeg je tipa?

Dekip
31.1.2019, 23:34
Sve je tačno što si napisao. Idealnije bi bilo da sam zamenio mesta ekranu i senzoru. Što možda i uradim.



Žica za mostove? Nećeš verovati, njome se vezuju žice sa ušicom za gips-karton sistem. Nešto što se na kraju baca.

igor7
1.2.2019, 12:06
Kod nas je tesko naci zicu koja odgovara standardu AWG22, a koja se najvise preporucuje za ovakve stvari. Zato sam te pitao, da mozda nemas neki lokalni izvor ))


https://en.wikipedia.org/wiki/American_wire_gauge


A sto se tice ovog tvog projekta, mozda bi najpametnije bilo napraviti varijantu sa Arduinom Nano na 3,3V i 8MHz. Tada bi se resio naponskog shiftera, a sklop bi mogao da se dosta duze napaja preko baterije.

Dekip
1.2.2019, 12:22
Slazem se, ali treba se snalaziti sa onim sto imas. Ako nekad budem ima fabriku za to, znacu sta da radim. A u vezi ploce, mislio si Pro Mini na 3,3V? Ma sve je to jasno, ali kad narucujes a ne gledas onda uzmes Pro Mini koji nije Pr Mini. :D

igor7
1.2.2019, 21:33
Mislim da postoji i Pro Micro varijanta na 8MHz. Ja uvek mesam te minijaturne modele, kao sto mesam one drzavice na Baltiku: Letoniju i Litvaniju.Situaciju mi dodatno komplikuju ruski nazivi za njih: Litva i Latvija.

ZoNi
1.2.2019, 22:19
kao sto mesam one drzavice na Baltiku: Letoniju i Litvaniju.Situaciju mi dodatno komplikuju ruski nazivi za njih: Litva i Latvija.
Estonija, Letonija, Litvanija - redosled zapamti po abecednom redu.

Što se tiče Letonije, mi verovatno koristimo ime dospelo iz nemačkog jezika (Lettland), dok je "ruski" naziv (Latvija) zapravo njihovo originalno ime na letonskom jeziku ;) Da, malo je zamršeno, ali može i dodatno da se zamrsi: jezik im se na engleskom ponekad zove i Lettish, ne samo uobičajeno Latvian :D

Što se tiče Litvanije... Originalno ime (Lietuva) jeste bliže nazivu Litva, ali kod nas je samo dodat taj nastavak "nija", slično kao u slučaju Portugal-Portugalija.