Prikaz jedne poruke
Stara 31.1.2019, 20:41   #2
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
Određen forumom Re: DIY: Mini Meteorološka Stanica

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



Kod:
#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 i Adafruit_GFX. Za BMP280 sam upotrebio Adafruit_Sensor i Adafruit_BMP280 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.




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.





Šta vi mislite o ovom projektu? Imate li kakve sugestije?
Dekip je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Dekip na korisnoj poruci:
Psychon@ut (3.2.2019)