» Elektronika » Arduino »Domácí meteorologická stanice na GY-BMP280-3.3 a Ds18b20

Domácí meteorologická stanice na GY-BMP280-3.3 a Ds18b20


Chci sbírat udělej to sám přístroj, který bude měřit atmosférický tlak a teplotu. Čidlo teploty musí být vzdálené a těsné, protože musí měřit teplotu v určité vzdálenosti od zařízení. Chtěl bych mít takové přenosné zařízení s pracovním rozsahem od -30 ° C do 50 ° C. To však vyžaduje, aby všechny komponenty mohly pracovat v tomto teplotním rozsahu. Komponenty, které mohou pracovat v rozšířeném teplotním rozsahu, jsou dražší a je obtížnější je koupit.
Abych splnil svůj sen do reality, pomůže mi rada, kterou jsem popsal v článku „Deska GY-BMP280-3.3 pro měření barometrického tlaku a teploty».

Z praxe je známo, že během montáže a konfigurace elektronický Před výrobou musíte zkontrolovat použitelnost všech materiálů a součástí každého zvlášť. V opačném případě můžete být zmateni později a v důsledku toho nebude elektronický produkt fungovat a bude velmi obtížné najít příčinu poruchy.

Pojďme začít.

První fáze. Nainstalujte do počítače shell bezplatného softwaru Arduino IDE pro psaní programů (náčrtů), jejich kompilace a zápis do mikrokontroléru Mega328P nainstalovaného na desce. Doporučuji si stáhnout shell verzi ARDUINO 1.6.5. Proč? Projekt ARDUINO byl původně jeden, nyní se vývojáři rozptýlili a pokračovali ve vývoji systému ARDUINO, ale každý svým vlastním způsobem, s malými nuancemi. Použil jsem verzi ARDUINO 1.6.5. Měl by být nainstalován a otestován pro spolupráci s deskou Arduino Uno pomocí nejjednodušších příkladů.

Druhá fáze. Zkontrolujeme, zda deska GY-BMP280-3.3 měří barometrický tlak a teplotu. Bereme 4 dráty, spojíme je GY-BMP280-3.3 a Arduino Uno, jak je vidět na fotografii a diagramu. Křivky tenké vícebarevné čáry jsou vodiče.



Začněme kontrolou desky GY-BMP280-3.3. Chcete-li to provést, musíte nainstalovat knihovnu v Arduino IDE, napsanou programátory pracujícími na webu. Po instalaci knihovny v Arduino IDE se zpravidla objeví příklady (ukázky) kódu. Mírnou změnou ukázkového kódu je můžeme zkompilovat do dat, která jsou mikrokontroléru srozumitelná, a poté je odeslat do paměti mikrokontroléru. Příklad (ukázku) najdete tak, že věnujete pozornost dvěma níže uvedeným obrázkům na obrazovce.


Po zápisu dat do mikrokontroléru desky Arduino Uno okamžitě začne provádět program (kód) a odešle data pomocí kabelu USB do počítače, ke kterému je deska Arduino Uno připojena.A můžeme vidět výsledek měření desky GY-BMP280-3.3 v okně Arduino IDE nazvaném „monitor sériového portu“.


Výsledek měření můžeme vidět na desce GY-BMP280-3.3 ve standardním programu Windows Hyper Terminal, po uzavření prostředí Arduino Uno a nastavení relace v programu Hyper Terminal. To znamená, že můžeme získat výsledky desky GY-BMP280-3.3 připojením Arduino Uno k libovolnému počítači pomocí kabelu USB, na kterém je nainstalován ovladač pro desku Arduino Uno. Existuje několik knihoven pro práci s GY-BMP280-3.3. Všechno pro mě fungovalo s knihovnou. Soubor, který si stáhnete z tohoto webu, bude vypadat takto: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Musí být přejmenován na: iarduino_Pressure_BMP.zip. Nyní musíme nainstalovat knihovnu iarduino_Pressure_BMP do prostředí Arduino IDE.


Spusťte Arduino IDE, přejděte do nabídky Sketch / Include Librari / Add.ZIP Library ... poté vyberte soubor iarduino_Pressure_BMP.zip a klikněte na tlačítko Otevřít. Musíte také nainstalovat knihovny:,. Po instalaci knihoven restartujeme prostředí Arduino IDE, to znamená, zavřete jej a znovu spusťte. Poté vyberte nabídku Soubor / Vzorky / iarduino Pressure BMP (tlakové senzory) / příklad.

V okně vidíme kód.

Kód bude třeba mírně upravit.

V pátém řádku odeberte dvě lomítka „//“ a do jedenáctého řádku přidejte (0x76) nebo (0x77). (0x76) je adresa desky barometrů. Moje deska GY-BMP280-3.3 připojená ke sběrnici I2C měla stejnou adresu (0x76). Jak zjistit číslo zařízení připojeného ke sběrnici I2C? Odpověď na tuto otázku získáte přečtením celého článku.

Opravili jsme tedy kód v okně, nyní začneme kontrolovat a kompilovat kód v nabídce Skica / Kontrola / Kompilace. Pokud je ověření a kompilace kódu úspěšné, pak v nabídce Skica / Load zahájíme nahrávání programu v Arduino Uno.

Pokud je stahování úspěšné, pak otevřením monitoru sériového portu v nabídce: Tools / Serial Port Monitor, uvidíme data odeslaná deskou GY-BMP280-3.3.

Na následující obrazovce je výsledek desky GY-BMP280-3.3 pracující na počítači, na kterém není nainstalován shell Arduino IDE. Data jsou přijímána programem PuTTY.

Současně byl vyfotografován laboratorní aneroidní barometr, který byl umístěn vedle desky GY-BMP280-3.3. Porovnáním údajů o přístroji můžete vyvodit závěry o přesnosti desky GY-BMP280-3.3. Aneroidní barometr certifikovaný státní laboratoří.


Třetí fáze. Kontrola LCD displeje pomocí modulu rozhraní I2C. Nacházíme LDC displej s modulem rozhraní, který se připojuje přes sběrnici I2C k Arduino UNO.
Domácí meteorologická stanice na GY-BMP280-3.3 a Ds18b20

Funkčnost kontrolujeme pomocí příkladů z prostředí Arduino IDE. Ale předtím určíme adresu modulu rozhraní. Můj modul rozhraní má adresu 0x3F. Tuto adresu jsem vložil do náčrtu: LiquidCrystal_I2C lcd (0x3F, 16.2);
Tuto adresu jsem určil pomocí náčrtu „skener adresy I2C“ popsaného v části.
Spustil jsem prostředí Arduino IDE, z článku jsem zkopíroval programový kód a vložil jeho okno Arduino IDE.

Začal jsem kompilaci a potom jsem kód zapsal na desku Arduino UNO, ke které byla připojena deska GY-BMP280-3.3 a displej LDC s modulem rozhraní I2C. Poté jsem na monitoru sériového portu získal následující výsledek. Můj modul rozhraní má adresu 0x3F.

Čtvrtá fáze. Kontrola teplotního senzoru DS18b20. Připojujeme ji následujícím způsobem.

Knihovna OneWire Arduino pro práci s teplotním senzorem DS18b20 je již nainstalována.

Otevřete vzorek DS18x20_Temperature, kompilujte, načtěte a sledujte výsledek měření na monitoru sériového portu. Pokud vše funguje, pokračujte dalším krokem.

Pátá fáze. Shromáždění domů meteorologické stanice na GY-BMP280-3.3 a Ds18b20.
Montujeme zařízení podle schématu:

Kód zařízení jsem obdržel spojením všech příkladů do jednoho a nastavením výstupu na obrazovce LDC. Tady je to, co jsem dostal:

// Nevyhovující softwarová implementace sběrnice I2C: //
// #define pin_SW_SDA 3 // Přiřaďte libovolný Arduino pin, aby fungoval jako SDA linka softwarové sběrnice I2C.
// #define pin_SW_SCL 9 // Přiřaďte libovolný Arduino pin, aby pracoval jako softwarová sběrnice I2C jako SCL linka.
// Nevyhovující kompatibilita s většinou desek: //
#include
#include // Knihovna iarduino použije metody a funkce knihovny Wire.
#include // Knihovna pro práci LDC typu 1602 na sběrnici I2C

                                                            //
#include // Připojte knihovnu iarduino_Pressure_BMP k práci s BMP180 nebo BMP280.
senzor iarduino_Pressure_BMP (0x76); // Deklarovat objekt senzoru pro práci s tlakovým senzorem pomocí funkcí a metod knihovny iarduino_Pressure_BMP.
LiquidCrystal_I2C lcd (0x3F, 16.2);
OneWire ds (10);
neplatné nastavení () {
    lcd.init ();
    lcd.backlight ();
    Serial.egegin (9600); // Zahajte přenos dat na monitor sériového portu rychlostí 9600 baudů.
    zpoždění (1000); // Při použití napájení čekáme na dokončení přechodných období
    senzor.begin (73); // Zahajte práci se senzorem. Aktuální nadmořská výška bude 73 metrů - výška města Buzuluk nad hladinou moře
} //
void loop () {
// Přečtěte si data a zobrazte: teplota ve ° C, tlak v mm. rt., změna výšky vzhledem k zadané funkci start (výchozí 0 metrů).
lcd.setCursor (0,0); // definuje výstupní bod "P =" v LDC
lcd.print ("P =");
lcd.print (sensor.pressure / 1000.3); // rozdělí hodnotu P vydanou BMP280 hodnotou 1000 a nastaví výstup na 3 desetinná místa
lcd.setCursor (12.0); // definujte výstupní bod „kPa“ v LDC
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (teplota snímače, 1); // nastaví výstup na 1 desetinné místo
lcd.setCursor (6.1);
// lcd.print ("C");
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (senzor.altitude, 1);
    if (sensor.read (1)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tMM.PT.CT, \ t T = "+ sensor.temperature +" * C, \ t \ t B = "+ sensor.altitude +" M. ");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
// Čtení dat a zobrazení: teplota ve ° C a tlak v Pa, tlak v mm. rt., změna výšky vzhledem k zadané funkci start (výchozí 0 metrů).
    if (sensor.read (2)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tPa, \ t \ t T =" + sensor.temperature + "* C, \ t \ t B =" + senzor.altitude + "M.");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
    byte i;
  byte present = 0;
  byte type_s;
  bajtová data [12];
  byte addr [8];
  float celsius, fahrenheit;
  if (! ds.search (addr)) {
    Serial.println („Žádné další adresy.“);
    Serial.println ();
    ds.reset_search ();
    zpoždění (250);
    návrat
  }
  Serial.print ("ROM =");
  pro (i = 0; i <8; i ++) {
    Serial.write ('');
    Serial.print (addr [i], HEX);
  }
  if (OneWire :: crc8 (addr, 7)! = addr [7]) {
      Serial.println („CRC není platný!“);
      návrat
  }
  Serial.println ();
  // první ROM bajt označuje, který čip
  switch (addr [0]) {
    případ 0x10:
      Serial.println ("Chip = DS18S20"); // nebo starý DS1820
      type_s = 1;
      rozbít;
    případ 0x28:
      Serial.println ("Chip = DS18B20");
      type_s = 0;
      rozbít;
    případ 0x22:
      Serial.println ("Chip = DS1822");
      type_s = 0;
      rozbít;
    výchozí:
      Serial.println („Zařízení není zařízením řady DS18x20.“);
      návrat
  }
  ds.reset ();
  ds.select (addr);
  ds.write (0x44, 1); // zahájit konverzi, na konci se zapne parazit
  
  zpoždění (1000); // možná 750ms stačí, možná ne
  // můžeme zde provést ds.depower (), ale reset se o to postará.
  present = ds.reset ();
  ds.select (addr);
  ds.write (0xBE); // Přečtěte si zápisník
  Serial.print ("Data =");
  Serial.print (present, HEX);
  Serial.print ("");
  pro (i = 0; i <9; i ++) {// potřebujeme 9 bytů
    data [i] = ds.read ();
    Serial.print (data [i], HEX);
    Serial.print ("");
  }
  Serial.print ("CRC =");
  Serial.print (OneWire :: crc8 (data, 8), HEX);
  Serial.println ();
  // Převeďte data na skutečnou teplotu
  // protože výsledkem je 16 bitové celé číslo se znaménkem, mělo by
  // být uložen do typu "int16_t", což je vždy 16 bitů
  // i když je kompilován na 32bitovém procesoru.
  int16_t raw = (data [1] <8) | data [0];
  if (type_s) {
    raw = raw < 3; // 9 bitové rozlišení výchozí
    if (data [7] == 0x10) {
      // "count zůstane" dává plné 12 bitové rozlišení
      raw = (raw & 0xFFF0) + 12 - data [6];
    }
  } jinde {
    byte cfg = (data [4] & 0x60);
    // při nižším rozlišení jsou nízké bity nedefinované, takže je vynulovejte
    pokud (cfg == 0x00) raw = raw & amp; ~ 7; // 9 bitové rozlišení, 93,75 ms
    jinak pokud (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bit res, 187,5 ms
    jinak pokud (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bit res, 375 ms
    //// výchozí je rozlišení 12 bitů, doba převodu 750 ms
  }
  celsius = (float) raw / 16,0;
  fahrenheit = celsius * 1,8 + 32,0;
  Serial.print ("Teplota =");
  Serial.print (celsius);
  Serial.print („Celsius“);
  Serial.print (fahrenheit);
  Serial.println ("Fahrenheit");
lcd.setCursor (8.1); // definuje výstupní bod "Tds =" v LDC
lcd.print ("Tds =");
lcd.print (celsius, 1);
    zpoždění (3000);
}


Tady je to, co jsem dostal:


Deska GY-BMP280-3.3 vytváří tlak v pascalech, což není příliš pohodlné. Nemohl jsem vyřešit problém, jak vyrobit údaje o výstupním tlaku desky GY-BMP280-3.3 v kilopascalech. Tento problém jsem vyřešil na výstupním řádku displeje LDC.

lcd.print (sensor.pressure / 1000.3); // rozdělí hodnotu P vydanou BMP280 hodnotou 1000 a nastaví výstup na 3 desetinná místa
Deska GY-BMP280-3.3 také poskytuje hodnoty nadmořské výšky.

senzor.begin (73); // Zahajte práci se senzorem. Aktuální nadmořská výška bude 73 metrů - výška města Buzuluk nad hladinou moře
Pokud si odpočinete na moři a změníte „sensor.begin (73);“ na "sensor.begin (0);" v kódu a poté kompilovat a uložit program do domácí meteorologické stanice na GY-BMP280-3.3 a Ds18b20 a provést výškový výstup na displej LDC, dostanete také výškoměr.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (senzor.altitude, 1); // Vytiskněte hodnoty výšky v metrech s jedním desetinným místem
Napájení je do obvodu v mé verzi dodáváno prostřednictvím kabelu USB. Můžete použít 5V / 600 mA nízkonapěťový boostovací pulzní převodník a vaše meteorologická stanice se stane přenosnou. Tento typ napájení je dobře popsán v článek.

Úspěšná kompilace!
5
8.8
6.3

Přidejte komentář

    • úsměvúsměvyxaxaokdontknowyahoone
      šéfeškrábnutíhlupákanoano-anoagresivnítajemství
      promiňtanecdance2dance3prominoutpomocnápoje
      zastavitpřátelédobředobrá náladapískatlžícejazyk
      kouřtleskánícrayprohlásitvýsměšnýdon-t_mentionstáhnout
      teploirefulsmích1mdasetkánímoskingnegativní
      not_ipopcorntrestatčístvyděsitděsíhledat
      posměchděkujitototo_clueumnikakutnísouhlasím
      špatnévčelablack_eyeblum3červenat sechlubit senuda
      cenzurovánopleasantrysecret2hrozitvítězstvíyusun_bespectacled
      třástrespektlolprovedenívítejtekrutoyya_za
      ya_dobryipomocníkne_huliganne_othodibludzákazblízko

Doporučujeme si přečíst:

Podejte to pro smartphone ...