» Elektronika » Arduino »Mājas meteoroloģiskā stacija uz GY-BMP280-3.3 un Ds18b20

Mājas meteoroloģiskā stacija uz GY-BMP280-3.3 un Ds18b20


Es gribu vākt dari pats instruments, kas mērīs atmosfēras spiedienu un temperatūru. Temperatūras sensoram jābūt attālam un necaurlaidīgam, jo ​​tam jāmēra temperatūra noteiktā attālumā no ierīces. Es vēlētos, lai būtu šāda pārnēsājama ierīce ar darba diapazonu no -30 ° C līdz 50 ° C. Bet tas prasa, lai visi komponenti spētu darboties šajā temperatūras diapazonā. Komponenti, kas var darboties paplašinātā temperatūras diapazonā, ir dārgāki, un tos ir grūtāk iegādāties.
Lai piepildītu savu sapni realitātē, man palīdzēs valde, kuru aprakstīju rakstā “GY-BMP280-3.3 plātne barometriskā spiediena un temperatūras mērīšanai».

No prakses ir zināms, ka montāžas un konfigurēšanas laikā elektroniska pirms izstrādājumu izgatavošanas jums jāpārbauda visu materiālu un sastāvdaļu derīgums atsevišķi. Pretējā gadījumā jūs varat vēlāk sajaukt, un rezultātā elektroniskais produkts nedarbosies, un būs ļoti grūti atrast nepareizas darbības iemeslu.

Sāksim darbu.

Pirmais posms. Instalējiet datorā bezmaksas programmatūras apvalku Arduino IDE programmu (skices) rakstīšanai, to apkopošanai un pēc tam ierakstīšanai uz tāfeles uzstādītajā mikrokontrollerā Mega328P. Es iesaku jums lejupielādēt ARDUINO 1.6.5 apvalka versiju. Kāpēc? Sākumā ARDUINO projekts bija viens, tagad izstrādātāji ir izkliedējuši un turpina attīstīt ARDUINO sistēmu, taču katrs savā veidā, ar nelielām niansēm. Es izmantoju versiju ARDUINO 1.6.5. Tas jāinstalē un jāpārbauda sadarbībai ar Arduino Uno plati, izmantojot vienkāršākos piemērus.

Otrais posms. Mēs pārbaudām GY-BMP280-3.3 plāksni, lai noteiktu barometrisko spiedienu un temperatūru. Mēs ņemam 4 vadus, mēs tos savienojam GY-BMP280-3.3 un Arduino Uno, kā parādīts fotoattēlā un diagrammā. Liektas plānas daudzkrāsainas līnijas ir vadītāji.



Sāksim pārbaudīt GY-BMP280-3.3 plati. Lai to izdarītu, bibliotēka jāinstalē Arduino IDE, kuru uzrakstījuši vietnē strādājošie programmētāji. Pēc bibliotēkas instalēšanas Arduino IDE parasti parādās koda piemēri (paraugi). Nedaudz mainot parauga kodu, mēs to varam apkopot mikrokontrolleram saprotamos datos un pēc tam nosūtīt uz mikrokontrollera atmiņu. Jūs varat atrast piemēru (paraugu), pievēršot uzmanību diviem zemāk redzamajiem ekrāna fotoattēliem.


Pēc datu ierakstīšanas Arduino Uno paneļa mikrokontrolleram tas nekavējoties sāk izpildīt programmu (kodu) un ar USB kabeļa palīdzību nosūta datus uz datoru, kuram ir pievienota Arduino Uno plate.Un GY-BMP280-3.3 paneļa mērījumu rezultātu varam redzēt Arduino IDE logā, sauktu par “seriālā porta monitoru”.


Mērījumu rezultātu GY-BMP280-3.3 plāksnē mēs varam redzēt standarta Windows Hyper Terminal programmā pēc Arduino Uno apvalka aizvēršanas un sesijas iestatīšanas Hyper Terminal programmā. Tas ir, mēs varam iegūt GY-BMP280-3.3 plates rezultātus, savienojot Arduino Uno ar jebkuru datoru ar USB kabeli, kurā ir uzstādīts Arduino Uno plates draiveris. Darbam ar GY-BMP280-3.3 ir vairākas bibliotēkas. Ar bibliotēku man viss darbojās. Fails, kuru lejupielādējāt no šīs vietnes, izskatīsies šādi: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Tas jāpārdēvē par: iarduino_Pressure_BMP.zip. Tagad mums jāinstalē iarduino_Pressure_BMP bibliotēka Arduino IDE apvalkā.


Palaidiet Arduino IDE, dodieties uz izvēlni Skice / Include Librari / Add.ZIP Library ... pēc tam atlasiet failu iarduino_Pressure_BMP.zip un noklikšķiniet uz pogas Atvērt. Jāinstalē arī bibliotēkas:,. Pēc bibliotēku instalēšanas mēs atsāknējam Arduino IDE apvalku, tas ir, aizveriet to un sāciet to no jauna. Pēc tam atlasiet izvēlni File / Paraples / iarduino Pressure BMP (spiediena sensori) / piemērs.

Mēs redzam kodu logā.

Kods būs nedaudz jāmaina.

Piektajā rindā noņemiet divas slīpsvītras “//” un vienpadsmitajā rindā pievienojiet (0x76) vai (0x77). (0x76) ir barometra paneļa adrese. Manai GY-BMP280-3.3 plāksnei, kas savienota ar I2C kopni, izrādījās tāda pati adrese (0x76). Kā uzzināt I2C kopnei pievienotās ierīces numuru? Atbildi uz šo jautājumu jūs saņemsit, izlasot pilnu rakstu.

Tātad, mēs labojām kodu logā, tagad mēs sākam pārbaudīt un apkopot izvēlni Sketch / Check / Compile. Ja koda pārbaude un apkopošana ir veiksmīga, izvēlnē Sketch / Load mēs sākam programmas ierakstīšanu Arduino Uno.

Ja lejupielāde ir veiksmīga, atverot seriālā porta monitoru izvēlnē: Tools / Serial Port Monitor, mēs redzēsim datus, ko nosūtījusi GY-BMP280-3.3 plate.

Nākamajā ekrānuzņēmumā GY-BMP280-3.3 paneļa darba rezultāts datorā, kurā nav instalēts Arduino IDE apvalks. Dati tiek saņemti no PuTTY programmas.

Tajā pašā laikā tika fotografēts laboratorijas aneroīdu barometrs, kas atradās blakus GY-BMP280-3.3 plāksnei. Salīdzinot instrumenta rādījumus, jūs pats varat izdarīt secinājumus par GY-BMP280-3.3 plāksnes precizitāti. Aneroīdu barometrs, ko sertificējusi valsts laboratorija.


Trešais posms. LCD displeja pārbaude ar I2C interfeisa moduli. Mēs atrodam LDC displeju ar saskarnes moduli, kas caur I2C kopni tiek savienots ar Arduino UNO.
Mājas meteoroloģiskā stacija uz GY-BMP280-3.3 un Ds18b20

Mēs pārbaudām tā darbību, izmantojot Arduino IDE čaulas piemērus. Bet pirms tam mēs nosakām interfeisa moduļa adresi. Mana interfeisa moduļa adrese ir 0x3F. Es ievietoju šo adresi skices rindā: LiquidCrystal_I2C lcd (0x3F, 16,2);
Es noskaidroju šo adresi, izmantojot skici “I2C ierīces adreses skeneris”, kas aprakstīta.
Es palaidu Arduino IDE apvalku, no raksta es nokopēju programmas kodu un ielīmēju tā Arduino IDE logu.

Es sāku kompilāciju, pēc tam uzrakstīju kodu Arduino UNO tāfelei, kurai bija savienota GY-BMP280-3.3 plate un LDC displejs ar I2C interfeisa moduli. Tad seriālā porta monitorā es saņēmu šādu rezultātu. Mana interfeisa moduļa adrese ir 0x3F.

Ceturtais posms. DS18b20 temperatūras sensora pārbaude. Mēs to savienojam šādi.

OneWire Arduino bibliotēka darbam ar DS18b20 temperatūras sensoru jau ir instalēta.

Atveriet DS18x20_Temperatūras paraugu, apkopojiet, ielādējiet, skatiet mērījumu rezultātu seriālā porta monitorā. Ja viss darbojas, pārejiet pie nākamās darbības.

Piektais posms. Montāža mājās meteoroloģiskās stacijas uz GY-BMP280-3.3 un Ds18b20.
Mēs saliekam ierīci atbilstoši shēmai:

Ierīces kodu saņēmu, apvienojot visus piemērus vienā un iestatot izvadi LDC displeja ekrānā. Lūk, ko es ieguvu:

// Komentārs I2C kopnes programmatūras ieviešanai: //
// #definēt pin_SW_SDA 3 // Piešķiriet jebkuram Arduino tapa darbam kā I2C programmatūras kopnes SDA līnijai.
// #definēt pin_SW_SCL 9 // I2C programmatūras kopnei piešķiriet jebkuru Arduino tapu darbībai kā SCL līniju.
// Komentārs par savietojamību ar lielāko daļu dēļu: //
# iekļaut
#include // iarduino bibliotēka izmantos vadu bibliotēkas metodes un funkcijas.
# iekļaut // Bibliotēka, lai darbotos LDC tips 1602 I2C autobusā

                                                            //
#include // Pievienojiet iarduino_Pressure_BMP bibliotēku darbam ar BMP180 vai BMP280.
iarduino_Pressure_BMP sensors (0x76); // Paziņojiet sensora objektu darbam ar spiediena sensoru, izmantojot bibliotēkas iarduino_Pressure_BMP funkcijas un metodes.
LiquidCrystal_I2C LCD (0x3F, 16,2);
OneWire ds (10);
Nederīga iestatīšana () {
    lcd.init ();
    LCD displejs ();
    Sērijas.begin (9600); // Sāciet datu pārsūtīšanu uz seriālā porta monitoru ar ātrumu 9600 baud.
    kavēšanās (1000); // Pielietojot jaudu, mēs gaidām pārejas posmu pabeigšanu
    sensors.sākums (73); // Sāciet darbu ar sensoru. Pašreizējais augstums tiks uzskatīts par 73 m - Buzuluk pilsētas augstums virs jūras līmeņa
} //
tukšs cilpa () {
// Nolasiet datus un parādiet: temperatūra ° C, spiediens mm. rt., augstuma izmaiņas attiecībā pret sākuma funkcijā norādīto (noklusējuma 0 metri).
lcd.setCursor (0,0); // definējiet izvades punktu "P =" LDC
lcd.print ("P =");
lcd.print (sensora spiediens / 1000,3); // daliet BMP280 izdoto P vērtību ar 1000 un iestatiet iznākumu no 3 zīmēm aiz komata
lcd.setCursor (12.0); // definējiet izvades punktu "kPa" LDC
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (sensora temperatūra, 1); // iestatiet iznākumu ar 1 zīmi aiz komata
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 = "+ sensors.temperatūra +" * C, \ B = "+ sensors.altitude +" M. ");}
    cits {Serial.println ("HET OTBETA OT CEHCOPA");}
Nolasiet datus un displeju: temperatūra ° C un spiediens Pa, spiediens mm. rt., augstuma izmaiņas attiecībā pret sākuma funkcijā norādīto (noklusējuma 0 metri).
    if (sensor.read (2)) {Serial.println ((string) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tPa, \ t =" + sensors.temperatūra + "* C, \ t \ t B =" + sensors.altitude + "M.");}
    cits {Serial.println ("HET OTBETA OT CEHCOPA");}
    i baits;
  klāt esošais baits = 0;
  baitu tips_s;
  baitu dati [12];
  baitu pievienotājs [8];
  peldēt pēc Celsija, Fārenheita;
  if (! ds.search (addr)) {
    Serial.println ("Nav vairāk adrešu.");
    Serial.println ();
    ds.reset_search ();
    kavēšanās (250);
    atgriezties
  }
  Serial.print ("ROM =");
  priekš (i = 0; i & lt; 8; i ++) {
    Seriāls.raksti ('');
    Serial.print (addr [i], HEX);
  }
  if (OneWire :: crc8 (addr, 7)! = addr [7]) {
      Serial.println ("CRC nav derīgs!");
      atgriezties
  }
  Serial.println ();
  // pirmais ROM baits norāda, kura mikroshēma
  slēdzis (addr [0]) {
    gadījums 0x10:
      Serial.println ("Chip = DS18S20"); // vai vecais DS1820
      tips_s = 1;
      pārtraukums;
    gadījums 0x28:
      Serial.println ("Chip = DS18B20");
      tips_s = 0;
      pārtraukums;
    gadījums 0x22:
      Serial.println ("Chip = DS1822");
      tips_s = 0;
      pārtraukums;
    noklusējums:
      Serial.println ("Ierīce nav DS18x20 saimes ierīce.");
      atgriezties
  }
  ds.reset ();
  ds.select (addr);
  dswrite (0x44, 1); // sāk pārveidi, parazītu ieslēdzot beigās
  
  kavēšanās (1000); // varbūt pietiek ar 750ms, varbūt nē
  // mēs šeit varētu darīt ds.depower (), bet par to rūpēsies atiestatīšana.
  klāt = ds.reset ();
  ds.select (addr);
  dswrite (0xBE); // Lasīt Scratchpad
  Serial.print ("Data =");
  Serial.print (klāt, HEX);
  Serial.print ("");
  priekš (i = 0; i & lt; 9; i ++) {// mums nepieciešami 9 baiti
    dati [i] = ds.read ();
    Serial.print (dati [i], HEX);
    Serial.print ("");
  }
  Serial.print ("CRC =");
  Serial.print (OneWire :: crc8 (dati, 8), HEX);
  Serial.println ();
  // Konvertējiet datus uz faktisko temperatūru
  // jo rezultāts ir 16 bitu paraksts vesels skaitlis, tam vajadzētu
  // jāglabā “int16_t” tipā, kas vienmēr ir 16 bitu
  // pat ja tiek apkopots 32 bitu procesorā.
  int16_t raw = (dati [1] & lt; & lt; 8) | dati [0];
  if (type_s) {
    raw = raw & lt; & lt; 3; // 9 bitu izšķirtspēja pēc noklusējuma
    if (dati [7] == 0x10) {
      // "skaits paliek" nodrošina pilnu 12 bitu izšķirtspēju
      raw = (raw & 0xFFF0) + 12 - dati [6];
    }
  } cits {
    baits cfg = (dati [4] un 0x60);
    // apakšējā izšķirtspējā zemie biti nav definēti, tāpēc tos nullēsim
    if (cfg == 0x00) raw = raw & amp; ~ 7; // 9 bitu izšķirtspēja, 93,75 ms
    cits, ja (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bitu rez., 187,5 ms
    cits, ja (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bitu res, 375 ms
    //// noklusējums ir 12 bitu izšķirtspēja, konvertēšanas laiks 750 ms
  }
  celsius = (pludiņš) neapstrādāts / 16,0;
  farenheits = Celsijs * 1,8 + 32,0;
  Serial.print ("Temperatūra =");
  Serial.print (Celsija);
  Serial.print ("Celsija",);
  Serial.print (fahrenheit);
  Serial.println ("Fahrenheit");
lcd.setCursor (8.1); // definējiet izvades punktu "Tds =" LDC
lcd.print ("Tds =");
lcd.print (celsius, 1);
    kavēšanās (3000);
}


Lūk, ko es ieguvu:


GY-BMP280-3.3 plāksne izdala spiedienu paskālos, kas nav ļoti ērti. Es nevarēju atrisināt problēmu, kā iegūt GY-BMP280-3.3 paneļa izejas spiediena datus kilopaskālos. Es atrisināju šo problēmu LDC displeja izejas rindā.

lcd.print (sensora spiediens / 1000,3); // daliet BMP280 izdoto P vērtību ar 1000 un iestatiet iznākumu no 3 zīmēm aiz komata
GY-BMP280-3.3 plāksne nodrošina arī augstuma vērtības.

sensors.sākums (73); // Sāciet darbu ar sensoru. Pašreizējais augstums tiks pieņemts kā 73 m - Buzuluk pilsētas augstums virs jūras līmeņa
Ja jūs atpūtīsities jūrā un mainīsit “sensor.begin (73);” uz "sensors.begin (0);" kodā, pēc tam apkopojiet un saglabājiet programmu mājas laika stacijā GY-BMP280-3.3 un Ds18b20, kā arī veiciet LDC displeja augstuma izvadi, un jūs iegūsit arī altimetru.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (sensor.altitude, 1); // Izdrukājiet augstuma vērtības metros ar vienu zīmi aiz komata
Manā versijā strāva tiek piegādāta, izmantojot USB kabeli. Jūs varat izmantot 5V / 600 mA zemsprieguma impulsa pārveidotāju, un jūsu laika stacija kļūs pārnēsājama. Šis barošanas veids ir labi aprakstīts raksts.

Veiksmīgu apkopošanu!
5
8.8
6.3

Pievienojiet komentāru

    • smaidismaidaxaxalabinezinuYahoonea
      priekšniekssaskrāpētmuļķisjājā-jāagresīvsslepeni
      žēldejotdeja2deja3apžēlošanapalīdzētdzērieni
      apstātiesdraugilabilabsirdīgssvilpegulbismēle
      smēķētaplaudēkrauklispaziņodrausmīgsdon-t_mentionlejupielādēt
      karstumsdrausmīgssmieties1mdasapulceņirgāšanāsnegatīvs
      not_ipopkornssodītlasītnobiedētbiedēmeklēt
      ņurdētpaldiesšoto_clueumņikakūtapiekrītu
      sliktibēmelnā acsblum3sarktlielītiesgarlaicība
      cenzētspleasantryslepens2draudētuzvarajusun_bespectacled
      šoksrespektlolprevedlaipni gaidītikrutojsya_za
      ya_dobryipalīgsne_huliganne_othodifludsaizliegumstuvu

Mēs iesakām izlasīt:

Nododiet to viedtālrunim ...