Haluan kerätä tee se itse laite, joka mittaa ilmanpainetta ja lämpötilaa. Lämpötila-anturin on oltava etäällä ja tiukka, koska sen on mitattava lämpötila tietyllä etäisyydellä laitteesta. Haluaisin tällaisen kannettavan laitteen, jonka toiminta-alue on -30 ° C - 50 ° C. Mutta tämä edellyttää, että kaikki komponentit pystyvät toimimaan tällä lämpötila-alueella. Komponentit, jotka voivat toimia laajassa lämpötila-alueella, ovat kalliimpia, ja niiden hankkiminen on vaikeampaa.
Toteuttaakseni unelmani todellisuudeksi, minua avustaa hallitus, jonka kuvasin artikkelissa “GY-BMP280-3.3 -levy ilmanpaineen ja lämpötilan mittaamiseen».
Käytännöstä tiedetään, että kokoonpanon ja konfiguroinnin aikana elektroninen Tuotteet ennen niiden valmistamista, sinun on tarkistettava kaikkien materiaalien ja komponenttien käyttökelpoisuus erikseen. Muuten voit hämmentyä myöhemmin, ja sen seurauksena elektroniikkalaite ei toimi, ja vian syyn löytäminen on erittäin vaikeaa.
Aloitetaan.
Ensimmäinen vaihe. Asenna ilmainen ohjelmistokuori tietokoneellesi Työläs IDE ohjelmien (luonnosten) kirjoittamiseen, niiden kokoamiseen ja kirjoittamiseen sitten taululle asennettuun Mega328P-mikrokontrolleriin. Suosittelen, että lataat ARDUINO 1.6.5: n shell-version. Miksi? Aluksi ARDUINO-projekti oli yksi, nyt kehittäjät ovat levittäytyneet ja jatkavat ARDUINO-järjestelmän kehittämistä, mutta kukin omalla tavallaan pienillä vivahteilla. Käytin versiota ARDUINO 1.6.5. Se tulisi asentaa ja testata yhteistyöhön Arduino Uno -kortin kanssa yksinkertaisimpia esimerkkejä käyttämällä.
Toinen vaihe. Tarkastamme GY-BMP280-3.3 -levyltä ilmanpaineen ja lämpötilan mittaamisen. Otamme 4 johtoa, yhdistämme ne GY-BMP280-3.3 ja Arduino Uno kuvan osoittamalla tavalla. Käyrät ohuet moniväriset viivat ovat johtimia.
Aloitetaan GY-BMP280-3.3 -levyn tarkistaminen. Tätä varten sinun on asennettava kirjasto Arduino IDE: hen, jonka ovat kirjoittaneet sivustolla työskentelevät ohjelmoijat. Yleensä asennettuaan kirjaston Arduino IDE: hen ilmestyy esimerkkejä (näytteistä) koodista. Muuttamalla näytteen koodia hiukan, voimme koota sen mikrokontrollerille ymmärrettävään tietoon ja lähettää sen sitten mikrokontrollerin muistiin. Voit löytää esimerkin (näytteen) kiinnittämällä huomiota kahteen alla olevaan näyttökuvaan.
Kun se on kirjoittanut tietoja Arduino Uno -kortin mikro-ohjaimelle, se aloittaa välittömästi ohjelman (koodin) suorittamisen ja lähettää tiedot USB-kaapelin kautta tietokoneeseen, johon Arduino Uno -kortti on kytketty.Ja näemme GY-BMP280-3.3 -levyn mittaustuloksen Arduino IDE -ikkunassa, nimeltään “sarjaporttinäyttö”.
Näemme mittaustulokset GY-BMP280-3.3 -levyllä tavanomaisessa Windows Hyper Terminal -ohjelmassa, sulkeessamme Arduino Uno -kuoren ja määrittäessään istunnon Hyper Terminal -ohjelmassa. Eli voimme saada GY-BMP280-3.3-kortin tulokset kytkemällä Arduino Uno mihin tahansa tietokoneeseen USB-kaapelilla, johon Arduino Uno -kortin ohjain on asennettu. GY-BMP280-3.3: n kanssa työskentelemiseen on useita kirjastoja. Kaikki toimi kirjaston kanssa minulle. Tältä sivustolta lataamasi tiedosto näyttää tältä: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Se on nimettävä uudelleen nimellä: iarduino_Pressure_BMP.zip. Nyt meidän on asennettava iarduino_Pressure_BMP-kirjasto Arduino IDE -kuoreen.
Käynnistä Arduino IDE, siirry Sketch / Include Librari / Add.ZIP Library -valikkoon ... valitse sitten iarduino_Pressure_BMP.zip-tiedosto ja napsauta Avaa-painiketta. Sinun on myös asennettava kirjastot:,. Kirjastojen asentamisen jälkeen käynnistämme Arduino IDE -kuoren uudelleen, ts. Suljemme sen ja käynnistämme sen uudelleen. Valitse sitten valikko Tiedosto / Näytteet / iarduino Pressure BMP (paineanturit) / esimerkki.
Näemme koodin ikkunassa.
Koodia on muutettava hieman.
Poista viidennestä rivistä kaksi viivaa ”//” ja lisää (0x76) tai (0x77) yhdeksänteen riviin. (0x76) on barometrikortin osoite. I2C-väylään kytketyllä GY-BMP280-3.3 -kortillani osoittautui sama osoite (0x76). Kuinka selvittää I2C-väylään kytketyn laitteen numero? Saat vastauksen tähän kysymykseen lukemalla koko artikkelin.
Joten korjasimme koodin ikkunaan, nyt aloitamme koodin tarkistamisen ja kääntämisen luonnoksessa / Tarkista / käännä-valikossa. Jos koodin varmistus ja kokoaminen onnistuu, aloitamme Sketch / Load -valikossa ohjelman tallennuksen Arduino Unossa.
Jos lataus onnistuu, avaamalla sarjaporttimonitori valikosta Työkalut / Serial Port Monitor, näemme GY-BMP280-3.3 -kortin lähettämät tiedot.
Seuraavassa kuvakaappauksessa tulos GY-BMP280-3.3 -kortista työskentelee tietokoneella, johon Arduino IDE -kuoria ei ole asennettu. Tiedot vastaanottaa PuTTY.
Samaan aikaan valokuvattiin laboratorioaneroidipomometri, joka sijaitsi GY-BMP280-3.3 -levyn vieressä. Kun vertaat instrumentin lukemia, voit itse tehdä johtopäätöksiä GY-BMP280-3.3 -levyn tarkkuudesta. Valtion laboratorion sertifioima aneroidiputki.
Kolmas vaihe. LCD-näytön tarkistaminen I2C-liitäntämoduulilla. Löydämme LDC-näytön liitäntämoduulilla, joka yhdistyy I2C-väylän kautta Arduino UNO: hon.
Tarkastamme sen toiminnan käyttämällä Arduino IDE -kuoren esimerkkejä. Mutta ennen sitä määrittelemme käyttöliittymämoduulin osoitteen. Liitäntämoduulini osoite on 0x3F. Lisäsin tämän osoitteen luonnosriville: LiquidCrystal_I2C lcd (0x3F, 16,2);
Määritin tämän osoitteen käyttämällä I2C-laitteen osoiteskanneria.
Käynnistin Arduino IDE -kuoren, artikkelista kopioin ohjelmakoodin ja liitin sen Arduino IDE -ikkunan.
Aloitin kokoamisen, kirjoitin sitten koodin Arduino UNO -kortille, johon GY-BMP280-3.3 -kortti ja LDC-näyttö I2C-liitäntämoduulilla oli kytketty. Sitten sarjaporttinäytössä sain seuraavan tuloksen. Liitäntämoduulini osoite on 0x3F.
Neljäs vaihe. Tarkistetaan DS18b20-lämpötila-anturi. Yhdistämme sen seuraavasti.
DS18b20-lämpötila-anturin kanssa työskentelevä OneWire Arduino -kirjasto on jo asennettu.
Avaa DS18x20_Temperatuurinäyte, käännä, lataa, tarkkaile mittaustulosta sarjaporttinäytössä. Jos kaikki toimii, siirry seuraavaan vaiheeseen.
Viides vaihe. kokoonpano koti sääasemien GY-BMP280-3.3 ja Ds18b20.
Kokoonpanamme laitteen kaavion mukaan:
Sain laitteen koodin yhdistämällä kaikki esimerkit yhdeksi ja asettamalla lähdön LDC-näytölle. Tässä on mitä sain:
// Kommentit I2C-väylän ohjelmistototeutuksessa: //
// #define pin_SW_SDA 3 // Määritä mikä tahansa Arduino-nasta toimimaan I2C-ohjelmistoväylän SDA-linjana.
// #define pin_SW_SCL 9 // Määritä mikä tahansa Arduino-nasta toimimaan SCL-linjana I2C-ohjelmistoväylälle.
// Kommentti yhteensopivuudesta useimpien korttien kanssa: //
#include
#include // iarduino-kirjasto käyttää Wire-kirjaston menetelmiä ja toimintoja.
#include // Kirjasto LDC-tyypin 1602 työskentelemiseen I2C-väylällä
//
#include // Yhdistä iarduino_Pressure_BMP-kirjasto työskennelläksesi BMP180: n tai BMP280: n kanssa.
iarduino_Pressure_BMP -anturi (0x76); // Ilmoita anturiobjekti paineanturin kanssa työskentelemistä varten iarduino_Pressure_BMP-kirjaston toimintojen ja menetelmien avulla.
LiquidCrystal_I2C lcd (0x3F, 16,2);
OneWire-ds (10);
tyhjä asennus () {
lcd.init ();
lcd taustavalo ();
Serial.begin (9600); // Aloita tiedonsiirto sarjaporttinäytölle 9600 baudilla.
viive (1000); // Odotamme transienttien valmistumista virran kytkemisessä
anturi.alku (73); // Aloita työskentely anturilla. Nykyisen korkeuden pidetään 73 m. - Buzulukin kaupungin korkeus merenpinnan yläpuolella
} //
tyhjä silmukka () {
// Lue tiedot ja näyttö: lämpötila ° C, paine millimetreinä. rt., korkeuden muutos suhteessa määriteltyyn aloitustoimintoon (oletus 0 metriä).
lcd.setCursor (0,0); // määritä lähtöpiste "P =" LDC: ssä
lcd.print ("P =");
lcd.print (anturipaine / 1000,3); // jaa BMP280: n antaman P: n arvo 1000: lla ja aseta tulos kolmen desimaalin tarkkuudella
lcd.setCursor (12,0); // määritä lähtöpiste "kPa" LDC: ssä
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (anturin lämpötila, 1); // asettaa tulosteen yhden desimaalin tarkkuudella
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 = "+ anturi.lämpötila +" * C, \ t \ t B = "+ anturi.korkeus +" M. ");}
else {Serial.println ("HET OTBETA OT CEHCOPA");}
// Lue tiedot ja näyttö: lämpötila ° C ja paine Pa, paine millimetreinä. rt., korkeuden muutos suhteessa määriteltyyn aloitustoimintoon (oletus 0 metriä).
if (sensor.read (2)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.paine + "\ tPa, \ t =" + anturi.lämpötila + "* C, \ t \ t B =" + anturi.korkeus + "M.");}
else {Serial.println ("HET OTBETA OT CEHCOPA");}
tavu i;
läsnä oleva tavu = 0;
tavutyypit_;
tavutiedot [12];
tavun addr [8];
kelluva celsius, fahrenheit;
if (! ds.search (addr)) {
Serial.println ("Ei enää osoitteita.");
Serial.println ();
ds.reset_search ();
viive (250);
palata;
}
Serial.print ("ROM =");
(i = 0; i <8; i ++) {
Serial.write ('');
Sarjajälki (addr [i], HEX);
}
if (OneWire :: crc8 (addr, 7)! = addr [7]) {
Serial.println ("CRC ei kelpaa!");
palata;
}
Serial.println ();
// ensimmäinen ROM-tavu osoittaa minkä sirun
kytkin (addr [0]) {
tapaus 0x10:
Serial.println ("Chip = DS18S20"); // tai vanha DS1820
tyyppi_s = 1;
break;
tapaus 0x28:
Serial.println ("Chip = DS18B20");
tyyppi_s = 0;
break;
tapaus 0x22:
Serial.println ("Chip = DS1822");
tyyppi_s = 0;
break;
oletus:
Serial.println ("Laite ei ole DS18x20-perheen laite.");
palata;
}
ds.reset ();
ds.select (addr);
dswrite (0x44, 1); // aloita muuntaminen, loisen virta päällä lopussa
viive (1000); // Ehkä 750 ms riittää, ehkä ei
// saatamme tehdä ds.depower () täällä, mutta nollaus huolehtii siitä.
läsnä = ds.reset ();
ds.select (addr);
dswrite (0xBE); // Lue Scratchpad
Serial.print ("Data =");
Sarjakuva (nykyinen, HEX);
Serial.print ("");
varten (i = 0; i <9; i ++) {// tarvitsemme 9 tavua
data [i] = ds.read ();
Sarjajälki (data [i], HEX);
Serial.print ("");
}
Serial.print ("CRC =");
Serial.print (OneWire :: crc8 (data, 8), HEX);
Serial.println ();
// Muunna tiedot todelliseen lämpötilaan
// koska tulos on 16-bittinen allekirjoitettu kokonaisluku, sen pitäisi olla
// tallennetaan tyyppiin "int16_t", joka on aina 16 bittiä
// jopa käännettynä 32-bittiselle prosessorille.
int16_t raw = (tiedot [1] & lt; <8) | tiedot [0];
if (type_s) {
raaka = raaka & lt; & lt; 3; // 9-bittinen tarkkuus oletus
if (tiedot [7] == 0x10) {
// "count pysyy" antaa täyden 12 bitin tarkkuuden
raa'at = (raa'at ja 0xFFF0) + 12 - tiedot [6];
}
} muuta {
tavu cfg = (tiedot [4] & 0x60);
// alempana, pieniä bittejä ei ole määritelty, joten nollataan ne
if (cfg == 0x00) raw = raw & amp; ~ 7; // 9-bittinen resoluutio, 93,75 ms
muuten, jos (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bitin res., 187,5 ms
muuten, jos (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bitin res, 375 ms
//// oletus on 12-bittinen resoluutio, 750 ms: n muuntamisaika
}
celsius = (kelluva) raaka / 16,0;
fahrenheit = celsius * 1,8 + 32,0;
Serial.print ("Temperature =");
Sarjajälki (celsius);
Sarjajälki ("Celsius");
Sarjajälki (fahrenheit);
Serial.println ("Fahrenheit");
lcd.setCursor (8.1); // määritä lähtöpiste "Tds =" LDC: ssä
lcd.print ("Tds =");
lcd-painos (celsius, 1);
viive (3000);
}
Tässä on mitä sain:
GY-BMP280-3.3 -levy antaa paineen passaaleissa, mikä ei ole kovin kätevää. En pystynyt ratkaisemaan ongelmaa, miten GY-BMP280-3.3 -levyn lähtöpainedata saadaan kilopaskalina. Ratkaisin tämän ongelman LDC-näytön lähtölinjalla.
lcd.print (anturipaine / 1000,3); // jaa BMP280: n antaman P: n arvo 1000: lla ja aseta tulos kolmen desimaalin tarkkuudella
GY-BMP280-3.3 -kortti tarjoaa myös korkeusarvot.
anturi.alku (73); // Aloita työskentely anturilla. Nykyisen korkeuden pidetään 73 m. - Buzulukin kaupungin korkeus merenpinnan yläpuolella
Jos rentoudut merellä ja vaihdat “sensor.begin (73);” kohdasta "sensor.begin (0);" koodiin, ja sitten koota ja tallenna ohjelma kotisääasemalle GY-BMP280-3.3 ja Ds18b20, ja suorita korkeustulos LDC-näyttöön, saat myös korkeusmittarin.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (sensor.altitude, 1); // Tulosta korkeusarvot metreinä yhden desimaalin tarkkuudella
Virta syötetään versioni piiriin USB-kaapelin avulla. Voit käyttää 5 V / 600 mA: n matalajännitteistä pulssimuunninta ja sääasemastasi tulee kannettava. Tämän tyyppinen virransyöttö on kuvattu hyvin artikkeli.
Onnistunut kokoaminen!