Szeretnék gyűjteni csináld magad eszköz, amely méri a légköri nyomást és a hőmérsékletet. A hőmérséklet-érzékelőnek távolinak és szorosnak kell lennie, mivel mérnie kell a hőmérsékletet a készüléktől bizonyos távolságra. Szeretnék egy ilyen hordozható készüléket, amelynek működési hőmérséklete -30 ° C és 50 ° C között lenne. De ehhez az szükséges, hogy minden alkatrész képes legyen működni ebben a hőmérsékleti tartományban. Azok az alkatrészek, amelyek kibővített hőmérsékleti tartományban működnek, drágábbak, és nehezebb őket megvásárolni.
Az álmom valósággá válásáért az igazgatótanács segít, amelyet a „GY-BMP280-3.3 tábla a légköri nyomás és a hőmérséklet mérésére».
A gyakorlatból ismert, hogy az összeszerelés és a konfigurálás során elektronikus A termékek gyártása előtt meg kell vizsgálni minden anyag és alkatrész szervizképességét külön-külön. Ellenkező esetben később összezavarhatja, és ennek eredményeként az elektronikus termék nem fog működni, és nagyon nehéz lesz megtalálni a hibát.
Kezdjük!
Első szakasz. Telepítsen egy ingyenes szoftverhéjat a számítógépére Arduino Az IDE a programok (vázlatok) írására, összeállítására, majd a táblára telepített Mega328P mikrovezérlőbe történő írására. Azt javaslom, töltse le az ARDUINO 1.6.5 shell verzióját. Miért? Kezdetben az ARDUINO projekt egy volt, most a fejlesztők szétszórták és folytatják az ARDUINO rendszer fejlesztését, de mindegyik saját maga, apró árnyalatokkal. Az ARDUINO 1.6.5 verziót használtam. Telepíteni és tesztelni kell az Arduino Uno fórummal való együttműködés érdekében, a legegyszerűbb példák felhasználásával.
Második szakasz. Ellenőrizzük a GY-BMP280-3.3 táblát a légköri nyomás és a hőmérséklet mérésére. Vegyünk 4 vezetéket, összekapcsoljuk a GY-BMP280-3.3-at és az Arduino Uno-t, az ábra és az ábra szerint. A vékony, többszínű vonalak vezetői.
Kezdjük el ellenőrizni a GY-BMP280-3.3 táblát. Ehhez telepítenie kell a könyvtárat az Arduino IDE-be, amelyet a helyszínen dolgozó programozók írtak. Általános szabályként, miután a könyvtárat az Arduino IDE-be telepítette, megjelennek a példák (minták). A mintakód kissé megváltoztatásával olyan adatokba állíthatjuk össze azokat, amelyeket a mikrovezérlő megért, és elküldhetjük a mikrovezérlő memóriájához. Példát (mintát) találhat, ha figyelembe veszi az alábbi két képernyőképet.
Miután adatokat írt az Arduino Uno kártya mikrovezérlőjére, azonnal elkezdi végrehajtani a programot (kódot), és USB-kábellel továbbítja az adatokat a számítógéphez, amelyhez az Arduino Uno kártya csatlakozik.És láthatjuk a GY-BMP280-3.3 tábla mérési eredményét az Arduino IDE ablakban, amelyet soros portmonitornak hívunk.
A mérések eredményét a GY-BMP280-3.3 táblán láthatjuk a Windows Hyper Terminal programjában, miután bezártuk az Arduino Uno héjat és beállítottuk a munkamenetet a Hyper Terminal programban. Vagyis megkaphatjuk a GY-BMP280-3.3 tábla eredményeit, ha az Arduino Uno-t bármilyen számítógéphez csatlakoztatjuk egy USB kábellel, amelyre az Arduino Uno kártya illesztőprogramja telepítve van. Számos könyvtár létezik a GY-BMP280-3.3 használatához. Minden számomra működött a könyvtárban. A webhelyről letöltött fájl így néz ki: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Nevet kell átnevezni: iarduino_Pressure_BMP.zip. Most telepítenünk kell az iarduino_Pressure_BMP könyvtárat az Arduino IDE héjba.
Indítsa el az Arduino IDE-t, lépjen a Sketch / Include Librari / Add.ZIP Library menübe, majd válassza az iarduino_Pressure_BMP.zip fájlt és kattintson a Megnyitás gombra. Telepítenie kell a következő könyvtárakat:,. A könyvtárak telepítése után újraindítjuk az Arduino IDE héját, vagyis zárjuk le és indítsuk újra. Ezután válassza a Fájl / Minta / iarduino Pressure BMP (nyomásérzékelők) / példa menüt.
Látjuk a kódot az ablakban.
A kódot kissé módosítani kell.
Az ötödik sorból távolítson el két „//” perjelzést és adjon hozzá (0x76) vagy (0x77) a tizenegyedik sorhoz. (0x76) a barométer tábla címe. Az I2C buszhoz csatlakoztatott GY-BMP280-3.3 fórumom ugyanazzal a címmel rendelkezik (0x76). Hogyan lehet megtudni az I2C buszhoz csatlakoztatott eszköz számát? Erre a kérdésre a választ a teljes cikk elolvasásával kapja meg.
Tehát rögzítettük a kódot az ablakban, most megkezdjük a kód ellenőrzését és fordítását a Sketch / Check / Compile menüben. Ha a kód ellenőrzése és összeállítása sikeres, akkor a Sketch / Load menüben megkezdjük a program felvételét az Arduino Uno-ban.
Ha a letöltés sikeres, akkor a soros portmonitor megnyitásával: Eszközök / Serial Port Monitor menüben láthatjuk a GY-BMP280-3.3 fórum által küldött adatokat.
A következő képernyőképen a GY-BMP280-3.3 tábla eredménye olyan számítógépen dolgozik, amelyre az Arduino IDE héja nincs telepítve. Az adatokat a PuTTY program veszi át.
Ugyanakkor laboratóriumi aneroid barométert fényképeztek, amelyet a GY-BMP280-3.3 tábla mellett helyeztek el. A műszer leolvasásainak összehasonlításával magad következtetéseket vonhat le a GY-BMP280-3.3 tábla pontosságáról. Aneroid barométer, amelyet állami laboratórium tanúsít.
Harmadik szakasz. Az LCD kijelző ellenőrzése az I2C interfész modullal. Találunk egy LDC kijelzőt egy interfészmodullal, amely az I2C buszon keresztül kapcsolódik az Arduino UNO-hoz.
Működését az Arduino IDE héj példáival ellenőrizzük. De ezt megelőzően meghatározzuk az interfész modul címét. Az interfészmodulom címe 0x3F. Ezt a címet beillesztettem a vázlatba: LiquidCrystal_I2C lcd (0x3F, 16.2);
Ezt a címet az "I2C eszközcím-szkenner" vázlat segítségével határoztam meg.
Elindítottam az Arduino IDE héját, a cikkből lemásoltam a programkódot, és beillesztettem az Arduino IDE ablakot.
Megkezdtem a lefordítást, majd megírtam a kódot az Arduino UNO táblához, amelyhez a GY-BMP280-3.3 tábla és az LDC kijelző az I2C interfész modullal kapcsolódott. Aztán a soros port monitorán a következő eredményt kaptam. Az interfészmodulom címe 0x3F.
Negyedik szakasz. A DS18b20 hőmérséklet-érzékelő ellenőrzése. Az alábbiak szerint kapcsoljuk össze.
A DS18b20 hőmérséklet-érzékelővel való OneWire Arduino könyvtár már telepítve van.
Nyissa meg a DS18x20_Temperature mintát, állítsa össze, töltse be, nézze meg a mérési eredményt a soros port monitorján. Ha minden működik, folytassa a következő lépéssel.
Ötödik szakasz. gyülekezés otthon meteorológiai állomások a GY-BMP280-3.3-n és a Ds18b20-on.
A készüléket a séma szerint szereljük fel:
Az eszköz kódját az összes példa egyesítésével és a kimenet beállításával az LDC kijelzőn kaptam. Itt van, amit kaptam:
// Kommentáció az I2C busz szoftver megvalósításában: //
// #define pin_SW_SDA 3 // Minden Arduino tűt hozzá kell rendelni az I2C szoftverbusz SDA sorához.
// #define pin_SW_SCL 9 // Jelöljön meg minden Arduino tűt, hogy az I2C szoftver buszának SCL vonalaként működjön.
// Kommentáció a legtöbb táblával való kompatibilitással kapcsolatban: //
#include
#include // Az iarduino könyvtár a Wire könyvtár módszereit és funkcióit fogja használni.
#include // Könyvtár 1602-es LDC működéshez az I2C buszon
//
#include // Csatlakoztassa az iarduino_Pressure_BMP könyvtárat a BMP180 vagy BMP280 kezeléséhez.
iarduino_Pressure_BMP érzékelő (0x76); // Nyilatkozzon egy érzékelőobjektumot nyomásérzékelővel történő munkavégzésre az iarduino_Pressure_BMP könyvtár funkcióinak és módszereinek felhasználásával.
LiquidCrystal_I2C lcd (0x3F, 16,2);
OneWire ds (10);
érvénytelen beállítás () {
lcd.init ();
lcd. háttérvilágítás ();
Serial.begin (9600); // Indítsa el az adatátvitelt a soros port monitorjára 9600 baud sebességgel.
késleltetés (1000); // Várjuk a tranziensek befejezését, amikor áramot alkalmazunk
kezdeti érzékelő (73); // Kezdje meg a munkát az érzékelővel. A jelenlegi magasság 73 m lesz - Buzuluk városának tengerszint feletti magassága
} //
void loop () {
// Olvassa el az adatokat és a kijelzőt: hőmérséklet ° C-ban, nyomás mm-ben. rt., a magasság változása a start funkcióban megadotthoz képest (alapértelmezett 0 méter).
lcd.setCursor (0,0); // definiálja a "P =" kimeneti pontot az LDC-n
lcd.print ("P =");
lcd.print (szenzornyomás / 1000,3); // ossza meg a BMP280 által kibocsátott P értékét 1000-rel, és állítsa be a kimenetet 3 tizedes pontossággal
lcd.setCursor (12.0); // definiálja a kPa kimeneti pontot az LDC-n
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (szenzor hőmérséklet, 1); // állítsa be a kimenetet 1 tizedes pontossággal
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 = "+ szenzor.hőmérséklet +" * C, \ t \ t B = "+ érzékelő.magasság +" M. ");}
else {Serial.println ("HET OTBETA OT CEHCOPA");}
Olvassa el az adatokat és a kijelzőt: hőmérséklet ° C-ban és nyomás Pa-ban, nyomás mm-ben. rt., a magasság változása a start funkcióban megadotthoz képest (alapértelmezett 0 méter).
if (sensor.read (2)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tPa, t =" + szenzor.hőmérséklet + "* C, \ t \ t B =" + érzékelő.magasság + "M.");}
else {Serial.println ("HET OTBETA OT CEHCOPA");}
i bájt;
jelen lévő byte = 0;
byte type_s;
bájt adatok [12];
byte addr [8];
úszó celsius, fahrenheit;
if (! ds.search (addr)) {
Serial.println ("Nincs több cím.");
Serial.println ();
ds.reset_search ();
késleltetés (250);
return;
}
Serial.print ("ROM =");
(i = 0; i <8; i ++) {
Serial.write ('');
Serial.print (addr [i], HEX);
}
if (OneWire :: crc8 (addr, 7)! = addr [7]) {
Serial.println ("A CRC nem érvényes!");
return;
}
Serial.println ();
// az első ROM bájt jelzi, melyik chipet használja
kapcsoló (addr [0]) {
0x10 eset:
Serial.println ("Chip = DS18S20"); // vagy a régi DS1820
type_s = 1;
break;
0x28 eset:
Serial.println ("Chip = DS18B20");
type_s = 0;
break;
0x22 eset:
Serial.println ("Chip = DS1822");
type_s = 0;
break;
alapértelmezett:
Serial.println ("Az eszköz nem egy DS18x20 családhoz tartozó eszköz.");
return;
}
ds.reset ();
ds.select (addr);
dswrite (0x44, 1); // kezdje meg az átalakítást, miközben a végén be van kapcsolva a parazita
késleltetés (1000); // talán 750 ms elég, talán nem
// itt elvégezhetjük a ds.depower () parancsot, de a visszaállítás gondoskodik róla.
jelen = ds.reset ();
ds.select (addr);
ds.írás (0xBE); // Olvassa el a Scratchpadot
Serial.print ("Data =");
Serial.print (jelen, HEX);
Serial.print ("");
mert (i = 0; i <9; i ++) {// 9 bájtra van szükségünk
adatok [i] = ds.read ();
Serial.print (adatok [i], HEX);
Serial.print ("");
}
Serial.print ("CRC =");
Serial.print (OneWire :: crc8 (adatok, 8), HEX);
Serial.println ();
// Konvertálja az adatokat a tényleges hőmérsékletre
// mivel az eredmény egy 16 bites aláírt egész szám, így kell lennie
// "int16_t" típusú, amely mindig 16 bit
// még 32 bites processzoron történő fordításkor is.
int16_t raw = ([1] <8 adat) | adatok [0];
if (type_s) {
nyers = nyers & lt; & lt; 3; // 9 bites felbontás alapértelmezett
if (adatok [7] == 0x10) {
// A "szám marad" teljes 12 bites felbontást ad
nyers = (nyers és 0xFFF0) + 12 - adatok [6];
}
} egyéb {
cfg byte = (adatok [4] és 0x60);
// alacsonyabb felbontásnál az alacsony bitek nincs meghatározva, tehát nullázjuk őket
if (cfg == 0x00) nyers = nyers & amp; ~ 7; // 9 bites felbontás, 93,75 ms
egyébként, ha (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bites res, 187,5 ms
egyébként, ha (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bites res, 375 ms
//// Az alapértelmezett beállítás 12 bites felbontás, 750 ms átalakítási idő
}
celsius = (úszó) nyers / 16,0;
fahrenheit = celsius * 1,8 + 32,0;
Serial.print ("Temperature =");
Soros nyomtatás (celsius);
Soros nyomtatás ("Celsius");
Serial.print (fahrenheit);
Serial.println ("Fahrenheit");
lcd.setCursor (8.1); // definiálja a "Tds =" kimeneti pontot az LDC-n
lcd.print ("Tds =");
lcd.print (celsius, 1);
késés (3000);
}
Itt van, amit kaptam:
A GY-BMP280-3.3 tábla nyomást ad pasztillákban, ami nem túl kényelmes. Nem tudtam megoldani azt a problémát, hogy hogyan lehet a GY-BMP280-3.3 kártya kimeneti nyomási adatait kilopaskalokban megadni. Megoldottam ezt a problémát az LDC kijelző kimeneti sorában.
lcd.print (szenzornyomás / 1000,3); // ossza meg a BMP280 által kibocsátott P értékét 1000-rel, és állítsa be a kimenetet 3 tizedes pontossággal
A GY-BMP280-3.3 tábla szintén nyújt magassági értékeket.
kezdeti érzékelő (73); // Kezdje meg a munkát az érzékelővel. A jelenlegi magasság 73 m lesz - Buzuluk városának tengerszint feletti magassága
Ha ellazul a tengeren, és megváltoztatja a „sensor.begin (73);” on "sensor.begin (0);" a kódban, majd fordítsa le és mentse el a programot az otthoni meteorológiai állomásra a GY-BMP280-3.3 és Ds18b20 készülékeken, és készítsen magassági kimenetet az LDC kijelzőn, és magasságmérőt is kap.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (sensor.altitude, 1); // Nyomtassa ki a magassági értékeket méterben egy tizedes pontossággal
Az áramot az én verziómban USB-kábel segítségével látják el. Használhat 5 V / 600 mA-os kisfeszültségű impulzus-átalakítót, és az időjárás-állomás hordozhatóvá válik. Ez a fajta tápegység jól leírható a cikk.
Sikeres összeállítás!