» elektronika » Arduino »Domáce meteorologické stanice na GY-BMP280-3.3 a Ds18b20

Domáce meteorologické stanice na GY-BMP280-3.3 a Ds18b20


Chcem zbierať Urob to sám prístroj, ktorý bude merať atmosférický tlak a teplotu. Snímač teploty musí byť vzdialený a tesný, pretože musí merať teplotu v určitej vzdialenosti od zariadenia. Chcel by som mať také prenosné zariadenie s pracovným rozsahom od -30 ° C do 50 ° C. To však vyžaduje, aby všetky komponenty mohli pracovať v tomto teplotnom rozsahu. Komponenty, ktoré môžu pracovať v rozšírenom teplotnom rozsahu, sú drahšie a je ťažšie ich kúpiť.
Na splnenie svojho sna do reality mi pomôže rada, ktorú som opísal v článku „Doska GY-BMP280-3.3 na meranie barometrického tlaku a teploty».

Z praxe je známe, že počas montáže a konfigurácie elektronický pred výrobou musíte skontrolovať použiteľnosť všetkých materiálov a komponentov každého z nich osobitne. V opačnom prípade môžete byť zmätení neskôr, v dôsledku čoho elektronický produkt nebude fungovať a bude veľmi ťažké nájsť príčinu poruchy.

Začnime.

Prvá etapa, Nainštalujte do svojho počítača shell bezplatného softvéru Arduino IDE pre písanie programov (náčrtov), ​​ich kompilovanie a následné zapisovanie do mikrokontroléra Mega328P nainštalovaného na doske. Odporúčam vám stiahnuť shell verziu ARDUINO 1.6.5. Prečo? Projekt ARDUINO bol spočiatku jedným projektom, teraz vývojári rozptýlili a pokračovali vo vývoji systému ARDUINO, ale každý svojím vlastným spôsobom, s malými nuansami. Použil som verziu ARDUINO 1.6.5. Mal by byť nainštalovaný a testovaný na spoluprácu s doskou Arduino Uno pomocou najjednoduchších príkladov.

Druhá fáza, Dosku GY-BMP280-3.3 kontrolujeme na meranie barometrického tlaku a teploty. Berieme 4 vodiče, spájame ich GY-BMP280-3.3 a Arduino Uno, ako je to znázornené na fotografii a obrázku. Krivky tenké viacfarebné čiary sú vodiče.



Začnime kontrolou dosky GY-BMP280-3.3. Aby ste to dosiahli, musíte nainštalovať knižnicu do Arduino IDE napísanú programátormi pracujúcimi na webe. Spravidla sa po inštalácii knižnice v Arduino IDE objavia príklady (ukážky) kódu. Miernou zmenou vzorového kódu ho môžeme zostaviť do údajov, ktorým mikrokontrolér rozumie, a potom ho odoslať do pamäte mikrokontroléra. Príklad (ukážka) nájdete tak, že venujete pozornosť dvom fotografiám na obrazovke nižšie.


Po zápise údajov do mikrokontroléra dosky Arduino Uno okamžite začne vykonávať program (kód) a odosiela údaje pomocou kábla USB do počítača, ku ktorému je karta Arduino Uno pripojená.A vidíme výsledok merania dosky GY-BMP280-3.3 v okne Arduino IDE nazvanom „monitor sériového portu“.


Výsledok meraní vidíme na doske GY-BMP280-3.3 v štandardnom programe Windows Hyper Terminal, po uzavretí shellu Arduino Uno a nastavení relácie v programe Hyper Terminal. To znamená, že môžeme získať výsledky dosky GY-BMP280-3.3 pripojením Arduino Uno k akémukoľvek počítaču pomocou kábla USB, na ktorom je nainštalovaný ovládač pre dosku Arduino Uno. Existuje niekoľko knižníc pre prácu s GY-BMP280-3.3. Všetko pre mňa pracovalo v knižnici. Súbor, ktorý si stiahnete z tejto stránky, bude vyzerať takto: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Musí sa premenovať na: iarduino_Pressure_BMP.zip. Teraz musíme nainštalovať knižnicu iarduino_Pressure_BMP do shellu Arduino IDE.


Spustite Arduino IDE, prejdite do ponuky Sketch / Include Librari / Add.ZIP Library ... potom vyberte súbor iarduino_Pressure_BMP.zip a kliknite na tlačidlo Open. Musíte tiež nainštalovať knižnice:,. Po inštalácii knižníc reštartujeme prostredie Arduino IDE, to znamená, zavrite ho a znova ho spustite. Potom vyberte ponuku File / Samples / iarduino Pressure BMP (tlakové senzory) / príklad.

V okne vidíme kód.

Kód bude potrebné mierne upraviť.

V piatom riadku odstráňte dve lomky „//“ a do jedenásteho riadku pridajte (0x76) alebo (0x77). (0x76) je adresa dosky barometra. Doska GY-BMP280-3.3 pripojená k zbernici I2C mala rovnakú adresu (0x76). Ako zistiť číslo zariadenia pripojeného na zbernicu I2C? Odpoveď na túto otázku získate prečítaním celého článku.

Kód sme opravili v okne, teraz začneme s kontrolou a kompiláciou kódu v ponuke Skica / Kontrola / Kompilácia. Ak je overenie a kompilácia kódu úspešné, spustíme nahrávanie programu v Arduino Uno v ponuke Skica / Load.

Ak je sťahovanie úspešné, otvorením monitora sériového portu v ponuke Nástroje / Monitor sériového portu sa zobrazia údaje odoslané doskou GY-BMP280-3.3.

Na nasledujúcom obrázku je výsledok dosky GY-BMP280-3.3 pracujúcej na počítači, na ktorom nie je nainštalovaná vrstva Arduino IDE. Dáta sú prijímané programom PuTTY.

Súčasne bol fotografovaný laboratórny aneroidný barometer, ktorý bol umiestnený vedľa dosky GY-BMP280-3.3. Porovnaním hodnôt prístrojov môžete vyvodiť závery o presnosti dosky GY-BMP280-3.3. Aneroidný barometer certifikovaný štátnym laboratóriom.


Tretia fáza, Kontrola LCD displeja pomocou modulu rozhrania I2C. Nájdeme LDC displej s modulom rozhrania, ktorý sa pripája cez zbernicu I2C k Arduino UNO.
Domáce meteorologické stanice na GY-BMP280-3.3 a Ds18b20

Jeho fungovanie kontrolujeme pomocou príkladov z prostredia Arduino IDE. Predtým však určíme adresu modulu rozhrania. Môj modul rozhrania má adresu 0x3F. Túto adresu som vložil do náčrtu: LiquidCrystal_I2C lcd (0x3F, 16.2);
Túto adresu som určil pomocou náčrtu „Skener adries zariadení I2C“ opísaného v časti.
Spustil som prostredie Arduino IDE, z článku som skopíroval programový kód a vložil jeho okno Arduino IDE.

Spustil som kompiláciu a potom som kód zapísal do dosky Arduino UNO, ku ktorej boli pripojené doska GY-BMP280-3.3 a displej LDC s modulom rozhrania I2C. Potom na monitore sériový port som dostal nasledujúci výsledok. Môj modul rozhrania má adresu 0x3F.

Štvrtá fáza, Kontrola teplotného senzora DS18b20. Pripojíme ho nasledovne.

Knižnica OneWire Arduino pre prácu s teplotným senzorom DS18b20 je už nainštalovaná.

Otvorte vzorku vzorky DS18x20_Temperature, kompilujte, vložte a sledujte výsledok merania na monitore sériového portu. Ak všetko funguje, prejdite na ďalší krok.

Piata fáza, zhromaždenia domov meteorologické stanice na GY-BMP280-3.3 a Ds18b20.
Zostavujeme zariadenie podľa schémy:

Kód pre zariadenie som dostal spojením všetkých príkladov do jedného a nastavením výstupu na obrazovke LDC. Tu je to, čo som dostal:

// Odovzdanie softvérovej implementácie zbernice I2C: //
// #definovať pin_SW_SDA 3 // Priradiť ľubovoľný Arduino pin, aby fungoval ako SDA linka softvérovej zbernice I2C.
// #definovať pin_SW_SCL 9 // Priradiť ľubovoľný Arduino pin, aby fungoval ako SCL linka k softvérovej zbernici I2C.
// Zrušenie kompatibility s väčšinou kariet: //
#include
#include // Knižnica iarduino použije metódy a funkcie knižnice Wire.
#include // Knižnica pre prácu LDC typu 1602 na zbernici I2C

                                                            //
#include // Pripojte knižnicu iarduino_Pressure_BMP, aby ste mohli pracovať s BMP180 alebo BMP280.
senzor iarduino_Pressure_BMP (0x76); // Vyhlásite objekt snímača na prácu so snímačom tlaku pomocou funkcií a metód knižnice iarduino_Pressure_BMP.
LiquidCrystal_I2C lcd (0x3F, 16.2);
OneWire ds (10);
neplatné nastavenie () {
    lcd.init ();
    lcd.backlight ();
    Serial.egegin (9600); // Začatie prenosu údajov na monitor sériového portu pri 9600 baudoch.
    oneskorenie (1000); // Pri použití energie čakáme na dokončenie prechodných období
    snímač senzora (73); // Začať prácu so senzorom. Aktuálna nadmorská výška bude 73 metrov - výška mesta Buzuluk nad hladinou mora
} //
void loop () {
// Prečítajte si údaje a zobrazte: teplota v ° C, tlak v mm. rt., zmena výšky vzhľadom na zadanú funkciu začiatku (predvolená hodnota je 0 metrov).
lcd.setCursor (0,0); // definovať výstupný bod "P =" v LDC
lcd.print ("P =");
lcd.print (senzor.pressure / 1000.3); // vydelíme hodnotu P vydanú BMP280 číslom 1000 a nastavíme výstup na 3 desatinné miesta
lcd.setCursor (12.0); // definujú výstupný bod „kPa“ v LDC
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (teplota snímača, 1); // nastaví výstup na jedno desatinné miesto
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 = "+ senzor.teplota +" * C, \ t \ t B = "+ senzor.altitude +" M. ");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
// Prečítajte si údaje a zobrazte: teplota v ° C a tlak v Pa, tlak v mm. rt., zmena výšky vzhľadom na zadanú funkciu začiatku (predvolená hodnota je 0 metrov).
    if (senzor.read (2)) {Serial.println ((String) "CEHCOP BMP" + senzor.type + ": \ t P =" + senzor.tlak + "\ tPa, \ t \ t T =" + teplota senzora + "* C, \ t \ t B =" + senzor.altitude + "M.");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
    bajt i;
  prítomný bajt = 0;
  byte type_s;
  bajtové údaje [12];
  byte addr [8];
  float celsius, fahrenheit;
  if (! ds.search (addr)) {
    Serial.println („Už žiadne adresy.“);
    Serial.println ();
    ds.reset_search ();
    oneskorenie (250);
    return;
  }
  Serial.print ("ROM =");
  pre (i = 0; i <8; i ++) {
    Serial.write ('');
    Serial.print (addr [i], HEX);
  }
  if (OneWire :: crc8 (addr, 7)! = addr [7]) {
      Serial.println („CRC nie je platný!“);
      return;
  }
  Serial.println ();
  // prvý bajt ROM označuje, ktorý čip
  prepínač (addr [0]) {
    prípad 0x10:
      Serial.println ("Chip = DS18S20"); // alebo starý DS1820
      type_s = 1;
      break;
    prípad 0x28:
      Serial.println ("Chip = DS18B20");
      type_s = 0;
      break;
    prípad 0x22:
      Serial.println ("Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println („Zariadenie nie je zariadením rodiny DS18x20.“);
      return;
  }
  ds.reset ();
  ds.select (addr);
  ds.write (0x44, 1); // začatie konverzie so zapnutým parazitom na konci
  
  oneskorenie (1000); // Možno 750ms stačí, možno nie
  // tu by sme mohli urobiť ds.depower (), ale reset sa o to postará.
  present = ds.reset ();
  ds.select (addr);
  ds.write (0xBE); // Prečítajte si zápisník
  Serial.print ("Data =");
  Serial.print (súčasný, HEX);
  Serial.print ("");
  pre (i = 0; i <9; i ++) {// potrebujeme 9 bajtov
    údaje [i] = ds.read ();
    Serial.print (dáta [i], HEX);
    Serial.print ("");
  }
  Serial.print ("CRC =");
  Serial.print (OneWire :: crc8 (dáta, 8), HEX);
  Serial.println ();
  // Prevod údajov na skutočnú teplotu
  // pretože výsledkom je celé 16-bitové celé číslo so znamienkom, malo by byť
  // byť uložený do typu „int16_t“, ktorý je vždy 16 bitov
  // aj keď je kompilovaný na 32 bitovom procesore.
  int16_t raw = (údaje [1] <8) | údaje [0];
  if (type_s) {
    raw = raw < 3; // Predvolené rozlíšenie 9 bitov
    if (data [7] == 0x10) {
      // "count zostáva" dáva plné 12 bitové rozlíšenie
      raw = (raw & 0xFFF0) + 12 - údaje [6];
    }
  } else {
    byte cfg = (dáta [4] & 0x60);
    // pri nižších rozlíšeniach sú nízke bity nedefinované, takže ich vynulujte
    ak (cfg == 0x00) raw = raw & amp; ~ 7; // 9 bitové rozlíšenie, 93,75 ms
    inak, ak (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bit res, 187,5 ms
    inak, ak (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bit res, 375 ms
    //// predvolené je rozlíšenie 12 bitov, doba konverzie 750 ms
  }
  celsius = (float) raw / 16,0;
  fahrenheit = celsius * 1,8 + 32,0;
  Serial.print ("Teplota =");
  Serial.print (celsius);
  Serial.print („Celzia“);
  Serial.print (fahrenheit);
  Serial.println ("Fahrenheit");
lcd.setCursor (8.1); // definovať výstupný bod „Tds =“ na LDC
lcd.print ("Tds =");
lcdprint (celsius, 1);
    oneskorenie (3000);
}


Tu je to, čo som dostal:


Doska GY-BMP280-3.3 vytvára tlak v pascaloch, čo nie je príliš pohodlné. Nemohol som vyriešiť problém, ako urobiť údaje o výstupnom tlaku dosky GY-BMP280-3.3 v kilopascaloch. Tento problém som vyriešil vo výstupnom riadku displeja LDC.

lcd.print (senzor.pressure / 1000.3); // vydelíme hodnotu P vydanú BMP280 číslom 1000 a nastavíme výstup na 3 desatinné miesta
Doska GY-BMP280-3.3 poskytuje aj hodnoty nadmorskej výšky.

snímač senzora (73); // Začať prácu so senzorom. Aktuálna nadmorská výška bude 73 metrov - výška mesta Buzuluk nad hladinou mora
Ak si oddýchnete pri mori a zmeníte „sensor.begin (73);“ na "sensor.begin (0);" v kóde a potom kompilovať a uložiť program do domácej meteorologickej stanice na GY-BMP280-3.3 a Ds18b20 a vykonať výškový výstup na displej LDC, dostanete tiež výškomer.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (senzor.altitude, 1); // Tlačte výšku v metroch s jedným desatinným miestom
Napájanie sa do obvodu v mojej verzii dodáva prostredníctvom kábla USB. Môžete použiť 5V / 600 mA nízkonapäťový zosilňovač impulzov a vaša meteorologická stanica sa stane prenosnou. Tento typ zdroja napájania je dobre opísaný v článok.

Úspešná kompilácia!
5
8.8
6.3

Pridajte komentár

    • usmievaťúsmevyxaxaokdontknowyahoonea
      bossškrabanecoklamaťánoáno, ánoútočnýtajomstvo
      ľutovaťtanecdance2dance3odpusteniehelpnápoje
      zastávkapriateliadobrýgoodgoodpíšťalaomdlieťjazyk
      dymtlieskanieCraydeklarovaťvýsměšnýdon-t_mentiondownload
      teplohnevlivýlaugh1MDAstretnutiemoskingnegatívny
      not_ipražená kukuricatrestaťprečítaťvydesiťzdesenievyhľadávať
      posmechthank_youtototo_clueumnikakútnasúhlasiť
      zlýbeeeblack_eyeblum3očervenieťchvastanienuda
      cenzurovanéžartysecret2hroziťvíťazstvoyusun_bespectacled
      shokrešpektlolprevedievitajtekrutoyya_za
      ya_dobryipomocníkne_huliganne_othodiFLUDzákazzavrieť

Odporúčame vám prečítať si:

Ruku pre smartphone ...