» Elektronika » Arduino »Namų orų stotis GY-BMP280-3.3 ir Ds18b20

Namų oro stotis GY-BMP280-3.3 ir Ds18b20


Noriu kolekcionuoti daryk pats prietaisas, kuris išmatuos atmosferos slėgį ir temperatūrą. Temperatūros jutiklis turi būti nutolęs ir sandarus, nes jis turi matuoti temperatūrą tam tikru atstumu nuo prietaiso. Norėčiau turėti tokį nešiojamąjį prietaisą, kurio darbo diapazonas būtų nuo -30 ° C iki 50 ° C. Bet tam reikia, kad visi komponentai galėtų veikti šiame temperatūros diapazone. Komponentai, kurie gali veikti išplėstame temperatūrų diapazone, yra brangesni, ir juos sunkiau nusipirkti.
Įgyvendinti savo svajonę realybe man padės taryba, kurią aprašiau straipsnyje „GY-BMP280-3.3 plokštė barometriniam slėgiui ir temperatūrai matuoti».

Iš praktikos žinoma, kad surinkimo ir konfigūravimo metu elektroninis Prieš gamindami gaminius, turite patikrinti visų medžiagų ir komponentų tinkamumą naudoti atskirai. Priešingu atveju vėliau galite susipainioti, ir dėl to elektroninis gaminys neveiks, todėl bus labai sunku rasti gedimo priežastį.

Pradėkime.

Pirmasis etapas. Į savo kompiuterį įdiekite nemokamą programinės įrangos apvalkalą Arduino IDE programų (eskizų) rašymui, jų sudarymui ir rašymui į lentoje įdiegtą mikrovaldiklį „Mega328P“. Aš rekomenduoju atsisiųsti apvalią ARDUINO 1.6.5 versiją. Kodėl? Iš pradžių ARDUINO projektas buvo vienas, dabar kūrėjai išsisklaidė ir toliau plėtoja ARDUINO sistemą, tačiau kiekvienas savaip, su mažais niuansais. Aš naudojau ARDUINO 1.6.5 versiją. Jis turėtų būti įdiegtas ir išbandytas bendradarbiaujant su „Arduino Uno“ lenta, naudojant paprasčiausius pavyzdžius.

Antrasis etapas. Mes patikriname plokštę GY-BMP280-3.3, kad būtų galima išmatuoti barometrinį slėgį ir temperatūrą. Mes paimame 4 laidus, mes sujungiame juos GY-BMP280-3.3 ir Arduino Uno, kaip parodyta nuotraukoje ir diagramoje. Kreivės plonos daugiaspalvės linijos yra laidininkai.



Pradėkime tikrinti plokštę GY-BMP280-3.3. Norėdami tai padaryti, turite įdiegti biblioteką „Arduino IDE“, kurią parašė svetainėje dirbantys programuotojai. Paprastai įdiegus biblioteką Arduino IDE, pasirodo kodo pavyzdžiai (pavyzdžiai). Šiek tiek pakeisdami pavyzdžio kodą, mes galėsime sudaryti jį į mikrovaldikliui suprantamus duomenis, tada nusiųsti jį į mikrovaldiklio atmintį. Galite rasti pavyzdį (pavyzdį) atkreipdami dėmesį į dvi žemiau pateiktas ekrano nuotraukas.


Surašęs duomenis „Arduino Uno“ plokštės mikrovaldikliui, jis iškart pradeda vykdyti programą (kodą) ir per USB kabelį siunčia duomenis į kompiuterį, prie kurio prijungta „Arduino Uno“ plokštė.„GY-BMP280-3.3“ plokštės matavimo rezultatą galime pamatyti „Arduino IDE“ lange, vadinamame „nuosekliojo prievado monitoriumi“.


Matavimų rezultatą galime pamatyti GY-BMP280-3.3 plokštėje standartinėje „Windows Hyper Terminal“ programoje, uždarius „Arduino Uno“ apvalkalą ir nustatę seansą „Hyper Terminal“ programoje. Tai yra, mes galime gauti „GY-BMP280-3.3“ plokštės rezultatus, prijungdami „Arduino Uno“ prie bet kurio kompiuterio, naudodami USB kabelį, kuriame įdiegta „Arduino Uno“ plokštės tvarkyklė. Yra keletas bibliotekų, skirtų darbui su GY-BMP280-3.3. Viskas man veikė su biblioteka. Iš šios svetainės atsisiųstas failas atrodys taip: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Jis turi būti pervadintas taip: iarduino_Pressure_BMP.zip. Dabar turime įdiegti „iarduino_Pressure_BMP“ biblioteką „Arduino IDE“ apvalkale.


Paleiskite „Arduino IDE“, eikite į meniu „Sketch / Include Librari / Add.ZIP Library“ ... tada pasirinkite failą iarduino_Pressure_BMP.zip ir spustelėkite mygtuką Atidaryti. Taip pat turite įdiegti bibliotekas:,. Įdiegę bibliotekas, mes perkuriame „Arduino IDE“ apvalkalą, tai yra, uždarykite jį ir paleiskite iš naujo. Tada pasirinkite meniu File / Samples / iarduino Pressure BMP (slėgio jutikliai) / pavyzdys.

Lange matome kodą.

Kodas turės būti šiek tiek pakeistas.

Penktoje eilutėje pašalinkite du brūkšnius „//“ ir vienuoliktoje eilutėje pridėkite (0x76) arba (0x77). (0x76) yra barometro plokštės adresas. Pasirodė, kad mano „GY-BMP280-3.3“ plokštė, prijungta prie „I2C“ magistralės, turi tą patį adresą (0x76). Kaip sužinoti prie I2C magistralės prijungto įrenginio numerį? Atsakymą į šį klausimą gausite perskaitę visą straipsnį.

Taigi, mes pataisėme kodą lange, dabar mes pradedame tikrinti ir kaupti kodą meniu Eskizas / Patikrinti / Kompiliuoti. Jei kodo patikrinimas ir sukompiliavimas yra sėkmingas, tada meniu Eskizas / Įkelti mes pradedame programos įrašymą Arduino Uno.

Jei atsisiųsti pavyko, atidarę nuosekliojo prievado monitorių meniu: Įrankiai / Serial Port Monitor, pamatysime duomenis, kuriuos atsiuntė GY-BMP280-3.3 plokštė.

Tolesniame ekrano kopijoje pateiktas GY-BMP280-3.3 plokštės darbo kompiuteryje, kuriame neįdiegtas „Arduino IDE“ apvalkalas, rezultatas. Duomenis gauna „PuTTY“ programa.

Tuo pačiu metu buvo nufotografuotas laboratorinis aneroidinis barometras, kuris buvo šalia GY-BMP280-3.3 plokštės. Palyginę prietaiso rodmenis, jūs patys galite padaryti išvadas apie plokštės GY-BMP280-3.3 tikslumą. Aneroidinis barometras sertifikuotas valstybinėje laboratorijoje.


Trečias etapas. LCD ekrano tikrinimas naudojant I2C sąsajos modulį. Mes randame LDC ekraną su sąsajos moduliu, kuris jungiamas per I2C magistralę prie Arduino UNO.
Namų oro stotis GY-BMP280-3.3 ir Ds18b20

Mes patikriname jo veikimą naudodami „Arduino IDE“ apvalkalo pavyzdžius. Bet prieš tai mes nustatome sąsajos modulio adresą. Mano sąsajos modulio adresas yra 0x3F. Įrašiau šį adresą į eskizo eilutę: „LiquidCrystal_I2C lcd“ (0x3F, 16,2);
Šį adresą nustatiau naudodamas „I2C įrenginio adresų skaitytuvo“ eskizą, aprašytą.
Aš paleidau „Arduino IDE“ apvalkalą, iš straipsnio nukopijavau programos kodą ir įklijavau jo „Arduino IDE“ langą.

Aš pradėjau kompiliaciją, tada įrašiau kodą į Arduino UNO plokštę, prie kurios buvo prijungta plokštė GY-BMP280-3.3 ir LDC ekranas su I2C sąsajos moduliu. Tada nuosekliojo prievado monitoriuje gavau tokį rezultatą. Mano sąsajos modulio adresas yra 0x3F.

Ketvirtasis etapas. Patikrinkite DS18b20 temperatūros jutiklį. Mes sujungiame taip.

„OneWire Arduino“ biblioteka, skirta darbui su DS18b20 temperatūros jutikliu, jau įdiegta.

Atidarykite DS18x20_Temperatūros pavyzdį, sudarykite, įkelkite, stebėkite matavimo rezultatą nuosekliojo prievado monitoriuje. Jei viskas veikia, pereikite prie kito veiksmo.

Penktas etapas. Asamblėja namo orų stotys GY-BMP280-3.3 ir Ds18b20.
Mes surenkame įrenginį pagal schemą:

Gavau įrenginio kodą, sujungdamas visus pavyzdžius į vieną ir nustatydamas išvestį LDC ekrane. Štai ką gavau:

// I2C magistralės programinės įrangos diegimo komentaras: //
// #define pin_SW_SDA 3 // Priskirkite bet kurį „Arduino“ kaištį kaip „I2C“ programinės įrangos magistralės SDA liniją.
// #define pin_SW_SCL 9 // Priskirkite bet kurį „Arduino“ kaištį, kad jis veiktų kaip SCL linija I2C programinės įrangos magistralėje.
// Neatitikimas suderinamumui su dauguma plokščių: //
# įtraukti
#include // iarduino bibliotekoje bus naudojami laidų bibliotekos metodai ir funkcijos.
#include // 1602 tipo LDC darbo biblioteka I2C magistralėje

                                                            //
#include // Prijunkite iarduino_Pressure_BMP biblioteką, kad galėtumėte dirbti su BMP180 arba BMP280.
iarduino_Slėgis_BMP jutiklis (0x76); // Paskelbkite jutiklio objektą darbui su slėgio jutikliu, naudodamiesi iarduino_Pressure_BMP bibliotekos funkcijomis ir metodais.
„LiquidCrystal_I2C LCD“ (0x3F, 16,2);
„OneWire“ ds (10);
negaliojanti sąranka () {
    lcd.init ();
    lcd.backlight ();
    „Serial.begin“ (9600); // Pradėkite duomenų perdavimą į nuosekliojo prievado monitorių 9600 baudų greičiu.
    vėlavimas (1000); // Taikydami galią laukiame pereinamųjų įvykių
    jutiklis. pradžia (73); // Pradėkite darbą su jutikliu. Dabartinis aukštis bus 73 m - Buzuluk miesto aukštis virš jūros lygio
} //
tuščia kilpa () {
// Perskaitykite duomenis ir ekraną: temperatūra ° C, slėgis mm. rt., aukščio pokytis, palyginti su nurodytu pradžios funkcijoje (numatytieji 0 metrų).
lcd.setCursor (0,0); // apibrėžkite išėjimo tašką "P =" LDC
lcd.print („P =“);
lcd.print (sensor.pressure / 1000.3); // padalinkite BMP280 išleistą P vertę iš 1000 ir nustatykite 3 skaičių po kablelio tikslumą
„lcd.setCursor“ (12.0); // apibrėžkite išėjimo tašką "kPa" LDC
lcd.print („kPa“);
lcd.setCursor (0,1);
lcd.print („T =“);
lcd.print (jutiklio temperatūra, 1); // nustatykite išvestį po kablelio 1
lcd.setCursor (6.1);
// lcd.print („C“);
// lcd.setCursor (9,1);
// lcd.print („H =“);
// lcd.print (sensor.altitude, 1);
    if (sensor.read (1)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tMM.PT.CT, t = "+ jutiklis.temperatūra +" * C, \ t \ t B = "+ jutiklis.altitudė +" M. ");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
// Perskaitykite duomenis ir ekraną: temperatūra ° C ir slėgis Pa, slėgis mm. rt., aukščio pokytis, palyginti su nurodytu pradžios funkcijoje (numatytieji 0 metrų).
    if (sensor.read (2)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tPa, \ t =" + jutiklis.temperatūra + "* C, \ t \ t B =" + jutiklis.altitudė + "M.");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
    i baitas;
  dabartinis baitas = 0;
  baitų tipas_s;
  baitų duomenys [12];
  baitų pridėtojas [8];
  plūduriuojantis Celsijus, farenheitas;
  if (! ds.search (addr)) {
    „Serial.println“ („Daugiau adresų nėra“.);
    Serial.println ();
    ds.reset_search ();
    vėlavimas (250);
    grįžti
  }
  „Serial.print“ („ROM =“);
  už (i = 0; i <8; i ++) {
    Serialas.rašymas ('');
    Serial.print (addr [i], HEX);
  }
  if (OneWire :: crc8 (addr, 7)! = addr [7]) {
      Serial.println („CRC negalioja!“);
      grįžti
  }
  Serial.println ();
  // pirmasis ROM baitas nurodo, kuri mikroschema
  jungiklis (addr [0]) {
    atvejis 0x10:
      „Serial.println“ („Chip = DS18S20“); // arba senasis DS1820
      tipas_s = 1;
      pertrauka;
    0x28 atvejis:
      „Serial.println“ („Chip = DS18B20“);
      tipas_s = 0;
      pertrauka;
    atvejis 0x22:
      „Serial.println“ („Chip = DS1822“);
      tipas_s = 0;
      pertrauka;
    numatytasis:
      „Serial.println“ („Įrenginys nėra DS18x20 šeimos įrenginys.“);
      grįžti
  }
  ds.reset ();
  ds.select (addr);
  dswrite (0x44, 1); // pradėkite konversiją, kai parazito galia įjungta
  
  vėlavimas (1000); // gal pakanka 750ms, gal ne
  // Mes čia galime padaryti ds.depower (), bet atstatymas pasirūpins tuo.
  dabartinis = ds.reset ();
  ds.select (addr);
  dswrite (0xBE); // Skaitykite „Scratchpad“
  „Serial.print“ („Data =“);
  Serijos spausdinimas (dabartinis, HEX);
  Serial.print ("");
  už (i = 0; i & lt; 9; i ++) {// mums reikia 9 baitų
    duomenys [i] = ds.read ();
    Serial.print (duomenys [i], HEX);
    Serial.print ("");
  }
  „Serial.print“ („CRC =“);
  „Serial.print“ („OneWire“: crc8 (duomenys, 8), HEX);
  Serial.println ();
  // Konvertuokite duomenis į faktinę temperatūrą
  // nes rezultatas yra 16 bitų pasirašytas sveikasis skaičius, jis turėtų
  // saugomi „int16_t“ tipo, kuris visada yra 16 bitų
  // net kai sudaroma 32 bitų procesoriuje.
  int16_t raw = (duomenys [1] & lt; & lt; 8) | duomenys [0];
  if (type_s) {
    raw = raw & lt; & lt; 3; // Numatyta 9 bitų skiriamoji geba
    if (duomenys [7] == 0x10) {
      // "skaičius lieka" suteikia visą 12 bitų skiriamąją gebą
      raw = (raw & 0xFFF0) + 12 - duomenys [6];
    }
  } dar {
    baitas cfg = (duomenys [4] ir 0x60);
    // esant mažesnei daliai, žemieji bitai yra neapibrėžti, todėl nuliuokime juos
    if (cfg == 0x00) raw = raw & amp; ~ 7; // 9 bitų skiriamoji geba, 93,75 ms
    dar jei (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bitų res, 187,5 ms
    dar jei (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bitų res, 375 ms
    //// numatytoji reikšmė yra 12 bitų skiriamoji geba, 750 ms konvertavimo laikas
  }
  Celsijaus = (plūduriuojantis) neapdorotas / 16,0;
  farenheitas = celsius * 1,8 + 32,0;
  „Serial.print“ („Temperatūra =“);
  Serial.print (celsius);
  Serial.print („Celsijaus“);
  Serial.print (farenheitas);
  Serial.println („Fahrenheit“);
„lcd.setCursor“ (8.1); // apibrėžkite išėjimo tašką "Tds =" LDC
lcd.print („Tds =“);
lcd.print (celsius, 1);
    vėlavimas (3000);
}


Štai ką gavau:


GY-BMP280-3.3 plokštė sukuria slėgį paskaliuose, o tai nėra labai patogu. Negalėjau išspręsti problemos, kaip GY-BMP280-3.3 plokštės išėjimo slėgio duomenis pateikti kilopaskaliais. Šią problemą išsprendžiau LDC ekrano išvesties linijoje.

lcd.print (sensor.pressure / 1000.3); // padalinkite BMP280 išleistą P vertę iš 1000 ir nustatykite 3 skaičių po kablelio tikslumą
„GY-BMP280-3.3“ plokštė taip pat pateikia aukščio reikšmes.

jutiklis. pradžia (73); // Pradėkite darbą su jutikliu. Dabartinis aukštis bus 73 m - Buzuluk miesto aukštis virš jūros lygio
Jei atsipalaiduosite jūroje ir pakeisite „sensor.begin (73);“ ant „sensor.begin (0);“ kode, o tada sukompiliuokite ir išsaugokite programą namų orų stotyje GY-BMP280-3.3 ir Ds18b20 ir atlikite aukščio išvestį į LDC ekraną, taip pat gausite aukščio matuoklį.
// lcd.setCursor (9,1);
// lcd.print („H =“);
// lcd.print (sensor.altitude, 1); // Atspausdinkite aukščio vertes metrais, po kablelio
Mano versijos grandinė tiekiama per USB laidą. Galite naudoti 5 V / 600 mA žemos įtampos impulsų keitiklį, o jūsų oro stotis taps nešiojama. Šis maitinimo tipas yra gerai aprašytas straipsnis.

Sėkmingas kompiliacija!
5
8.8
6.3

Pridėti komentarą

    • šypsotisšypsosixaxagerainežiniaYahoonea
      viršininkassubraižytikvailystaiptaip-taipagresyvusslapta
      atsiprašaušoktišokis2šokis3atleiskpadėtigėrimai
      sustotidraugaigeraigerašvilpukassupyktiliežuvis
      rūkytiplojimaiklastingaspareikštiniokojantisdon-t_mentionatsisiųsti
      šilumanedrąsusjuoktis1mdasusitikimasmoskingneigiamas
      not_ipopkornasnubaustiskaitytigąsdintigąsdinapaieška
      gundytiačiūtaito_clueumnikūmussusitarti
      blogaibičiųjuoda akisblum3skaistalaipasigirtinuobodulys
      cenzūruotamalonumasslapta2grasintipergalėju„sun_bespectacled“
      šoktipagarbalolišlenktaslaukiamekrutojusya_za
      ya_dobryipagalbininkasne_huliganne_othodifludisuždraustiarti

Mes patariame perskaityti:

Perduokite jį išmaniajam telefonui ...