MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR ROBERT BOSCH MECHATRONIKAI TANSZÉK
MÉRŐRENDSZER FEJLESZTÉSE RASPBERRY PI HARDVERRE KÉSZÍTETTE: Baróczi Gábor AFMS5S GX2BMR
Miskolc, 2014.
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR Szerszámgépészeti és Mechatronikai Intézet Robert Bosch Mechatronikai Intézeti Tanszék 3515 Miskolc-Egyetemváros
Szak: Mechatronikai mérnöki mesterszak Szakirány: Gyártóeszköz mechatronika
DIPLOMATERV FELADAT Baróczi Gábor részére Szám: RBMT-2013/14-II-D01. Gx2MRB tanulóköri okleveles mechatronikai mérnök jelölt (Neptun kód AFMS5S) A TERVEZÉS TÁRGYKÖRE: Mechatronikai rendszer tervezése A FELADAT CÍME: Mérőrendszer fejlesztése Raspberry PI hardverre A FELADAT RÉSZLETEZÉSE: Tervezzen a sörgyártás technológiához egy olyan beágyazott rendszert, amely három különböző helyen mér hőmérsékletet és nyomást. Foglalkozzon a mérés ipari kommunikációs megvalósításával a Raspberry PI hardverre. Írjon programot az adatok mérésére és ellenőrzésére a Raspberry PI rendszerre. Készítse el a megvalósításhoz szükséges dokumentációt. Lénárt József tanársegéd TÉMAVEZETŐ: ME, Robert Bosch Mechatronikai Tanszék
A FELADAT KIADÁSÁNAK IDŐPONTJA:
Hajdú István automatizálási mérnök Zip Bier Kft. 2014. február 21.
A FELADAT BEADÁSÁNAK HATÁRIDEJE:
2014. május 05.
KONZULENS:
Dr. Szabó Tamás Tanszékvezető, egyetemi docens Robert Bosch Mechatronikai Intézeti Tanszék
Mérőrendszer fejlesztése Raspberry PI hardverre
Tartalomjegyzék
1.
Bevezetés ............................................................................................................. 1
2.
A Zip Technologies Kft. bemutatása................................................................... 2
3.
A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése ....... 6
4.
5.
3.1.
DS18B20 hőmérsékletszenzor ..................................................................... 7
3.2.
Raspberry PI .............................................................................................. 10
3.3.
ADS1115 analóg-digitál konverter ............................................................ 13
3.4.
HDMI kapacitív érintőképernyős kijelző .................................................. 16
3.5.
M&M 2250 szolenoid és M&M B205DBZ szelep .................................... 17
3.6.
JUMO dTRANS p30 nyomás távadó ........................................................ 18
Raspberry PI Shield NYÁK tervezése .............................................................. 20 4.1.
NYÁK tervező program ............................................................................. 21
4.2.
5 V-os tápfeszültséget előállító áramkör ................................................... 21
4.3.
ADS1115 áramköre ................................................................................... 24
4.4.
Szolenoid meghajtó áramkör ..................................................................... 24
4.5.
A panel csatlakozói .................................................................................... 27
4.6.
Raspberry PI Shield NYÁK rajza .............................................................. 29
4.7.
Raspberry PI Shield NYÁK mechanikai rajza .......................................... 30
A Raspberry PI-n futó szoftver és programkódja.............................................. 31 5.1.
Qt fejlesztőprogram ................................................................................... 31
5.2.
Raspberry PI-n futó szoftver ...................................................................... 31
5.3.
Programkód struktúrája és magyarázata .................................................... 34
5.3.1. main.cpp ................................................................................................ 34 5.3.2. dialog.cpp .............................................................................................. 35 5.3.3. ds18b20.cpp ........................................................................................... 42 5.3.4. ads1115.cpp ........................................................................................... 45 -I-
Mérőrendszer fejlesztése Raspberry PI hardverre
5.3.5. setpoint.cpp............................................................................................ 48 5.3.6. settings.cpp ............................................................................................ 49 6.
Összefoglalás ..................................................................................................... 51
7.
Summary ........................................................................................................... 52
- II -
Mérőrendszer fejlesztése Raspberry PI hardverre Bevezetés
1. Bevezetés Diplomamunkám témája olyan rendszer fejlesztése Raspberry PI-re, ami sörerjesztő tartály hőmérsékletét méri három helyen és a mért értékeket kijelzi. A felhasználói felületen beállított értékektől függően a rendszer a sör hűtését szabályozó szelepeket kapcsolja. Ezen kívül még méri és literben kimutatja a zárt tartályban lévő folyadék térfogatát is. A sör erjesztési hőmérséklete döntően befolyásolja a végtermék minőségét, ezért fontos, hogy az a receptúrában előírt hőmérsékleti értékek között mozogjon. Az sör erjesztése a főzőházban történik, ahol a megfőzött, nyers sörlé cukor tartalma alkohollá alakul. Első lépésben a sörléhez hozzáadják az élesztőt és steril levegőt pumpálnak a tartályba. Erjesztés során a sörlé melegszik, ezért hűteni kell. Sörtípustól függően 12-18 ºC közötti fix hőmérsékleten történik a főerjesztés. A tartály hűtését a palástján elhelyezkedő csövekben átáramoltatott hűtőfolyadék végzi. Erjesztés során a cukor nagy részét az élesztő lebontja, közben CO2 és alkohol keletkezik. Ez a kiinduló cukortartalom lebontásának körülbelül 50%-ig történik. Ilyenkor a termelődött CO2 szabadba távozik. A palackozást megelőzően - sörtípustól függően - szűrés történik, és a terméket komlóval ízesítik. A diplomamunka feladatot konzulenseim, Lénárt József, a ME Robert Bosch Mechatronikai Tanszék tanársegédje és a Zip-Bier Kft-nél dolgozó Hajdú István automatizálási mérnök vezetésével készítettem el.
-1-
Mérőrendszer fejlesztése Raspberry PI hardverre A Zip Technologies Kft. bemutatása
2. A Zip Technologies Kft. bemutatása Az 1993-ban alapított ZIP Technologies Kft. egy egymodelles kis sörfőző berendezést gyártó manufaktúrából mára egy minden iparági igényt kielégíteni képes vállalattá fejlődött, mely több mint 50 féle berendezéssel (25 – 5000 liter/főzet) van jelen a piacon. Termékeikhez számos olyan kiegészítőt is kínálnak, melyek célja a sörértékesítés leegyszerűsítése, illetve monitorozása. Elsődleges profilja a sörgyártásban a korszerű technológiai berendezések, komplett éttermi, vagy üzemi sörfőzdék, mini és ipari sörgyárak tervezése, kivitelezése és beüzemelése kulcsrakész átadással. Tevékenységi körükhöz tartozik még a régi sörgyárak átalakítása, felújítása, korszerűsítése, újratervezése, komplett rekonstrukciója. A cég foglalkozik még a kapacitás- és termelékenységnövelés céljából új tartályok, berendezések beépítésével és új technológiák bevezetésével. A kínálatban szerepel még a teljes körű szaktanácsadás, sörfőzési receptúrák és az alapanyag ellátás biztosítása, logisztikai feladatok elvégzése. Alapelvük
a
partnereik
magas
színvonalú
kiszolgálása,
ennek
érdekében
élelmiszeripari technológusaik és élelmiszeripari gépésztervezőik korszerű gyártási technológiákat fejlesztenek ki, illetve a már alkalmazott technológiák korszerűsítését is vállalják.
1. ábra A sörfőző edény használat közben [10]
-2-
Mérőrendszer fejlesztése Raspberry PI hardverre A Zip Technologies Kft. bemutatása
A ZIP Technologies Kft. további célja a hatékony működés, az igényes vevői kör szerelő és karbantartó tevékenységgel történő mind teljesebb körű kiszolgálása. A több évtizedes folyamatos munka eredménye:
több mint 10 országra kiterjedő piaci jelenlét
világszerte több mint 150 sikeresen futó projekt változatos koncepciók szerint
folyamatos termelés, alvállalkozók bevonása nélkül
2. ábra Megrendelő cégek a világ számos országából [10] A cég termékei:
Mini sörfőzde: A cég legújabb terméke a ZIP’s Micro Sörfőző rendszer. A berendezéssel sörtípustól függően egyszerre 20-25 liter kész sört lehet előállítani.
Éttermi rendszerek: A sörfőzés a vendégek előtt történik, mint egy "látványkonyhában". Itt a sör friss helyben főzik, erjesztik, és ugyanitt szolgálják fel és fogyasztják el.
Ipari
rendszerek:
Szakítva
az
általánosan
elterjedt
sörfőzési
hagyományokkal, a sörfőzdék egy új generációja van jelen, mini-sörüzemek jönnek létre, az új receptek, új sörkultúrák folyamatos kutatásaiban úttörő szerepe van a cégnek. Az új trendek, a természetes, bio- és helyi ízvilágot előtérbe helyező kis "sörgyárak" világszerte felemelkedő ágban vannak köszönhetően megújító tevékenységüknek.
Uni-tank: Minden legyártott tartályuk, legyen az erjesztő vagy tároló, ugyanazon minőségi elvárásokkal, ugyanolyan anyagból és gyártási -3-
Mérőrendszer fejlesztése Raspberry PI hardverre A Zip Technologies Kft. bemutatása
technológiával készül. A különböző tartályok csak funkciókban különböznek egymástól.
Druck-tank: Ez egy olyan hengeres tartály íves tetővel és alsó résszel, mely a kész sört tárolja nyomás alatt a további felhasználás céljából – felhasználható bárpultoknál, asztaloknál - vagy palackozásra, KEG hordó töltésére stb.
Tabletap: Ez egy olyan sörcsapoló, ami multifunkciós kijelzők segítségével információkat, program ajánlókat oszthat meg a vendégekkel, illetve kiváló reklámfelületet biztosíthat partnerei számára. Mindemellett pincérhívó funkciót és chat felületet is biztosít a csapolós asztalok között.
Szint: A tartályra felszerelt színes grafikus érintőpanel, amelyen a legfontosabb tartályjellemzők leolvashatóak.
Hordómosó:
A
KEG
hordók
tisztítására
és
mosására
alkalmas,
automatikusan és kézi üzemmódban működtethető berendezés.
Kézi palacktöltő: A berendezés sör- és egyéb szénsavas italok üvegbe vagy PET-be való palackozására szolgál.
Minőségbiztosítás és környezetvédelem A társaság az MSZ EN ISO 9001:2001 szabvány szerint minőségirányítási rendszert alakított ki, és ezen rendszer megfelelőségét folyamatosan, független szervezettel tanúsíttatja. A menedzsment rendszerek integrálása, állandó fejlesztése biztosítja a fő cél elérését, az eredményes, vevő- és környezetbarát kivitelező-szolgáltató tevékenység végzését. A cég akkreditálását a TAM CERT Magyarország Kft. Brüsszelben bejegyzett független tanúsító cég végzi és kíséri figyelemmel. A társaság nagy hangsúlyt helyez a törvényi-jogszabályi előírások betartására, az Európai Unió műszaki szabványainak és direktíváinak alkalmazására, a minőség valamint a munkatársak biztonságára, egészségére. A cég a környezeti hatások értékelését figyelembe véve törekszik a leghatékonyabb technológiai megoldások alkalmazására, a fajlagos
anyag-
és
energiafelhasználás
ésszerűsítésére,
a
környezetszennyezés
kialakulásának megelőzésére, a környezethasználat szabályozására. A vezetés a rendszerek működtetésére megfelelő szervezetet állított fel, melynek élén a minőségügyi vezető áll. Infrastruktúrát biztosít a működéshez, célokat határoz meg, illetve ismétlődően ellenőrzi, felülvizsgálja a rendszerek működésének hatékonyságát és a kitűzött célok megvalósulását. -4-
Mérőrendszer fejlesztése Raspberry PI hardverre A Zip Technologies Kft. bemutatása
A cég jelmondata az, hogy „Cégünk értéke munkatársaink szaktudásában, gyakorlatában van”. A kivitelezői tevékenység eredményes és környezet kímélő végzéséhez - végső soron a vevői elégedettség eléréséhez - kiemelt fontosságú tényezőként kezelik az oktatást, és a továbbképzést. Valamennyi munkatársuk iránt igény a szakmai, környezeti, informatikai, idegen-nyelvi és menedzsmentirányú továbbképzésben való részvétel. Minden munkatársuktól elvárják ismereteik, gyakorlati tapasztalataik hatékony alkalmazását, a minőségi értéktermelésben, a környezeti tényezők kezelésében és a folyamatos fejlesztésben való aktív részvételt. Eddigi tevékenységükre jellemző, hogy a társaság szakemberei folyamatosan együttműködtek a TÜV Austria CERT GmbH. illetékeseivel, a Magyarországon gyártott nyomástartó berendezések és rendszerek megfelelőségének tanúsításában. A minősített hegesztőiket folyamatosan vizsgáztatják, valamint speciális feladat elvégzése előtt eljárásvizsgálatokat végeztetnek velük.
-5-
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
3. A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése A Raspberry PI a hozzá kapcsolt IC-ken és szenzorokon keresztül méri a tartály hőmérsékletét és nyomását. A mért értékeket a rendszeren futó program a kijelzőn keresztül jeleníti meg. A rendszer főbb elemei a következőek:
Raspberry PI
Három DS18B20 hőmérsékletszenzor
Három M&M 2250 szolenoid, három M&M B205DBZ szelep és a hozzájuk tartozó meghajtó áramkör.
ADS1115 analóg-digitál konverter
7”-os HDMI kapacitív érintőképernyős kijelző
JUMO dTRANS p30 nyomás távadó
3. ábra A rendszer sematikus felépítése Az 3. ábrán látható a rendszer sematikus felépítése. A három DS18B20 hőmérsékletmérő szenzor a tartály palástjára van felszerelve és a Raspberry PI GPIO4-es lábára van kötve. A zárt tartályban lévő sör térfogatának méréséhez két nyomás távadóra van szükségünk. Az egyik a tartály alján, a másik a tetején helyezkedik el. A feladathoz
-6-
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
használt és a cég által alkalmazott távadók kimeneti jele 0,5 – 4,5 V. Ezt az analóg értéket át kell alakítani digitálissá a Raspberry PI számára. Ezt az ADS1115 IC végzi el. A mért értékeket I2C protokollon továbbítja a PI-nek. A programban megadott tartály paraméterek, a nyomás értékek ismeretében és a hidrosztatikai törvényeket felhasználva, kiszámolható a sör térfogata. A hűtést kapcsoló M&M típusú szolenoidokat a Raspberry PI közvetlenül nem tudja működtetni, mivel azok áramfelvétele jóval meghaladja a PI képességét. E feladatot látja el a meghajtó áramkör, ami elegendő áramot tud szolgáltatni a szolenoidnak. Ezek a PI GPIO17, GPIO27 és GPIO22-es lábaira vannak kötve. A kijelző feladatát egy 7”–os érintőképernyős HDMI monitor látja el. A HDMI a vizuális adat továbbítását szolgálja, az USB-s kapcsolat pedig az érintőképernyő adatait küldi vissza a PI-nek. 3.1. DS18B20 hőmérsékletszenzor A hőmérsékletek méréséhez három Dallas DS18B20 típusú szenzort használunk. A szenzorral 1-Wire protokollon keresztül lehet kommunikálni, ahol az adat továbbításához mindössze egy vezetéket használ. A szenzor mérési tartománya -55 °C -tól +125 °C-ig terjed, ami lefedi a sör erjesztési receptúrákban használatos 12-18 °C közötti tartományt. Tápfeszültségnek 3V és 5,5V közötti értéket igényel. A táplálásuk kétféle módon történhet: három vagy egy vezetéken keresztül. Egyvezetékes módnál - másik nevén parazitamódnál - a tápfeszültségnek és kommunikációhoz ugyanazt az egy vezetéket használja a DQ lábon keresztül. Ilyenkor a VDD és a GND lábat földre kötjük. Háromvezetékes módnál a szenzor mindhárom lábát használjuk a funkciójuknak megfelelően. Feladatom megoldása során a háromvezetékes táplálás mellett döntöttem, mivel az egyvezetékes módot jóval bonyolultabb megvalósítani és jelen esetben nem szükséges. A 4. ábrán látható a szenzor lábkiosztása.
4. ábra Dallas DS18B20 hőmérséklet szenzor
-7-
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
A Dallas DS18B20 hőmérséklet szenzor lábkiosztásán szereplő jelölések: 1. VDD
- Tápfeszültség
2. DQ
- 1-Wire kommunikációs láb
3. GND
- Föld
A szenzor felbontása négy féle lehet: 9, 10, 11 vagy 12 bites. Ez hőmérsékletbeli pontosságában
sorra
a
következő:
0.5C,
0.25C,
0.125C,
vagy
0.0625C.
Alapbeállításnak 12 bit van megadva. A felbontás növelésével a konverziós idő is nő, ami 12 bit esetében 750 milliszekundum. A szenzorban van beépített vészjelző. Ez beállítható, hogy vészjelzést adjon a 1-Wire buszon keresztül, ha a hőmérséklet túllépi a megadott határokat. 3x
Raspberry PI
DS18B20
3,3 V GND
DQ
VDD
3,3 V
4,7k
GPIO4
5. ábra Hőmérséklet szenzor bekötése Az 5. ábrán látható a három DS18B20 szenzor GPIO4-es lábra való bekötése. Minden egyes szenzor egyedi címmel van ellátva, ami lehetővé teszi, hogy egy 1-Wire buszra több szenzort is ráköthetünk, így külön-külön lehetséges a kommunikáció azokkal. A Raspberry PI-n futó 1-Wire buszt kezelő modul is ezt a megoldást alkalmazza. A modul betöltése a „sudo modprobe w1-gpio” és „sudo modprobe w1-therm” utasításokkal történik, amit a parancssorba, az úgynevezett „terminálba” kell beírni. Ezt rendszerem elindításakor automatikusan megcsinálja. Ez után a modul elkezdi keresni a GPIO4 lábra kapcsolt összes szenzort. A sikeresen megtalált tagokat a /sys/bus/w1/devices/ mappában sorolja fel, ahol a nevük megegyezik az egyedi címükkel. A 6. ábrán lehet látni a PI –re kötött szenzorokat, aminek az azonosító címe „28-„–cal kezdődik. A hőmérséklet értéket a mappákban található „w1_slave” fájlból lehet megtudni és az egyik tartalmát a 6. ábrán
-8-
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
lehet látni, a „cat w1-slave” utasítás után. A szenzor által mért hőmérsékletet a „t=” után írja. A mérés időpontjában ez 22500, ami 22,5 °C-nak felel meg. A 1-Wire buszra szükséges még egy felhúzó ellenállást kötni, mivel a DQ láb nyitott kollektoros (open collector) vezérlésű tranzisztor, ami nem tud feszültséget kiadni, csak földre húzni tudja a buszt.
6. ábra A PI-re kötött hőmérsékletmérő szenzorok A 7. ábrán a Scratchpad látható, ami a hőmérséklet szenzor memóriája. Minden bájt olvasható, de nem mindegyik írható. Az első két bájtban tárolja a megmért hőmérsékletet. A 2. bájt a hőmérséklet riasztás felső határa, a 3. bájt az alsó határa. A 4. bájtban lehet beállítani a hőmérséklet szenzor felbontását. A 8. bájt a CRC, ami az szenzortól a mikrokontrollernek küldött adat ellenőrzésére szolgál.
7. ábra Scratchpad A szenzor és a PI közti kommunikáció 1-Wire vonalon jelszinthez és időhöz kötött. Az egyes parancsok a megfelelő bitkombináció elküldését jelentik. A szenzornak való -9-
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
adatküldéshez mindig a következő három lépést kell alkalmazni, ellenkező esetben az nem működik megfelelően. Ezt a kommunikációs protokollt a PI-n futtatott modul végzi. 1. Inicializáció: A mikrokontroller a 1-Wire buszt földre, azaz 0V-ra lehúzza legalább 480 us időtartamig. Ez a reset jelzés a szenzoroknak, ami a vonal felengedése után a vonal 0V-ra lehúzásával válaszol. Ezt követően jöhet a második lépés. 2. ROM parancs: Itt különböző utasítások vannak, amivel megtudjuk a vonalon lévő szenzorok címét vagy kijelölhetjük a szenzort, amivel kommunikálni akarunk. A ROM parancs után következik a funkció parancs. 3. Funkció parancs, ahol következő utasításokat használhatjuk:
„Convert T”: A hőmérsékletmérést indítja, majd a konverziós idő után eltárolja az értékét a Scratchpad első 2 bájtjában.
„Write Scratchpad”: Módosítani tudjuk a szenzor Scratchpadjét. A parancs elküldése után még három bájt adatot kell küldeni, ahol az első kettő a hőmérséklet riasztás felső és alsó határa, a harmadik bájt a konfigurációs bájt.
„Read Scratchpad”: A parancs után a szenzor elkezdi kiírni a Scratchpad tartalmát a soros buszra. Az elküldött byte sorozat tartalmazza a mért hőmérsékletet és a CRC-t, ami az elküldött bájtok helyességének ellenőrzésére szolgál.
3.2. Raspberry PI A Raspberry PI egy hitelkártya nagyságú, Linux operációs rendszert futtató számítógép, aminek megvan minden tulajdonsága, hogy a cégnél eddig használt AVR mikrocsipes rendszereket helyettesítse. A Raspberry PI-vel eredetileg a számítógép piac legolcsóbb szegmensét célozták meg. Célja a hátrányos helyzetű diákok megismertetése az informatikával. Olcsósága és sokoldalúsága mellett széles körben elterjedt a hobbi felhasználók körében. Nagy előnye, hogy valós idejű operációs rendszer fut rajta és mellette könnyen kezelhető kommunikációs és I/O portokokkal rendelkezik, amivel más rendszerekhez hozzácsatlakoztathatjuk és a megírt programmal irányíthatjuk, vagy szabályozhatjuk. Ezeket kihasználva tudjuk megvalósítani a hőmérsékletvezérlő rendszert is.
- 10 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
A 8. ábra mutatja a B típusú Raspberry PI-t. A rendszer működéséért a Broadcom BCM2835 processzor felel, ami 700 MHz órajelű és integrált grafikus videó vezérlővel ellátott. A B típus 512 Mb SDRAM-mal van felszerelve, ami a processzor és a videó vezérlő között megoszlik. A rendszer működéséhez 5V szükséges, amit a micro USB porton keresztül vagy a GPIO port megfelelő lábán kap meg. Fogyasztása 700mA és a felvett teljesítmény 3,5W maximum. Az operációs rendszer SD kártyáról fut, ami az adat tárolásra is szolgál. Hivatalos operációs rendszere a „Raspbian wheezy”, ami egy Linux Debian disztribúció, Raspberry PI-re optimalizálva. Ez a honlapjáról ingyenesen letölthető, majd az SD kártyára felmásolva kész is a futtatásra. Az SD kártya ajánlott legkisebb mérete 4 Gb. A rendszeren található portokkal és csatlakozókkal a PI-re perifériákat tudunk kötni. 1. 3,5 mm-es jack csatlakozó, amin keresztül hangszóróhoz köthető. 2. Kompozit RCA csatlakozó, egycsatornás analóg videó jel küldésére szolgál. A videó kép felbontása 480p vagy 576p. 3. GPIO port (General Purpose Input/Output): Programozható lábak. 4. SD kártya helye. 5. Micro USB csatlakozó, 5V-os tápfeszültséget szolgáltatja. 6. 2 db USB 2.0 port, amit USB elosztóval bővíteni lehet. Ide elsősorban a billentyűzet és az egér köthető be, de bármilyen USB-s periféria rácsatlakoztatható. 7. Ethernet csatlakozó, amin keresztül a Raspberry PI hálózatra vagy internetre köthető. 8. HDMI
csatlakozó,
amin
keresztül
a
Raspberry
PI
monitorhoz
csatlakoztatható. Magas minőségű videó és audió jel továbbítására képes. Manapság ez a legelterjedtebb.
- 11 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
1.
6.
2.
7.
3.
4. 8. 5. 8. ábra Raspberry PI B típus [11] A 9. ábra a Raspberry PI GPIO lábkiosztását mutatja. A képen különböző színekkel jelölik a funkciókat és egyes lábak I/O mellett kommunikációs buszként is funkcionálhatnak.
9. ábra GPIO port lábkiosztása [12] A színek jelentése a GPIO portnál:
Piros szín: 5V-os tápfeszültség.
Narancssárga szín: 3,3V-os feszültség, amit a NYÁK-on található IC állít elő.
Fekete szín: föld.
GPIO lábak összesen 16 db. Programozható input-output. Az elsődleges I/O funkciójú lábakat zöld szín jelöli.
- 12 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
Citromsárga szín: Soros kommunikációs busz vagy I/O funkciójú lábak.
Kék szín: I2C kommunikációs busz vagy I/O funkciójú lábak.
Lila szín: SPI kommunikációs busz vagy I/O funkciójú lábak.
3.3. ADS1115 analóg-digitál konverter A nyomás távadók analóg jelének digitálissá való átalakítását a Texas Instruments által gyártott ADS1115 végzi. Ez egy 16 bit felbontású delta-szigma konverter, ami a tokozatba épített oszcillátorral és feszültség referenciával rendelkezik. Ez azért előnyös, mert minimalizálható a működéshez szükséges külső alkatrészek száma. Az IC-vel történő kommunikáció I2C protokollon keresztül történik és összesen négy különböző cím rendelhető hozzá. Az AD konverter működéséhez szükséges tápfeszültségnek 2 és 5,5 V közöttinek kell lennie. Az IC két féle mintavételezési módban működhet. Az egyik a folyamatos, ilyenkor másodpercenként 860 mintát tud venni maximum, a másik pedig az egy mintavételes mód. Ilyenkor az IC csak akkor mér új értéket, ha arra kap jelet az I2C buszon és utána kikapcsol. Kikapcsolt állapotban az áramfogyasztása nagymértékben csökken, ami növeli az elemmel vagy akkumulátorral táplált rendszerek működési élettartamát. Az IC-be még bele van integrálva egy programozható jelerősítő (PGA) is.
10. ábra ADS1115 IC lábkiosztása Az IC lábkiosztását a 10. ábra mutatja. Az egyes lábak feladat a következő: 1. ADDR
I2C slave cím kiválasztás
2. ALERT/RDY
Komparátor kimenet vagy mérés kész láb
3. GND
Föld, 0V
4. AIN0
Analóg 0-s csatorna
5. AIN1
Analóg 1-es csatorna
6. AIN2
Analóg 2-es csatorna
7. AIN3
Analóg 3-as csatorna - 13 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
8. VDD
Tápfeszültség: 2 – 5,5V között
9. SDA
I2C adat küldés és fogadás
10. SCL
I2C órajel be
Az IC-n található ADDR láb segítségével az I2C kommunikáció slave választható ki. Ezt olyan módon lehet kivitelezni, hogy a lábat rákötjük a GND, VDD, SDA vagy SCL láb egyikére. Ilyenkor a címe az 1. táblázat szerinti értékeket veheti fel. Egy I2C buszra akár négy ADS1115 is ráköthető és működtethető. Az IC működése közben folyamatosan vizsgálja, hogy az ADDR melyik lábra van rákötve. ADDR láb rákötve
I2C slave cím
GND
1001000
VDD
1001001
SDA
1001010
SCL
1001011
1. táblázat ADS1115 cím kiválasztása Az ADS1115 belső blokkdiagramját a 11. ábra mutatja. Az IC maximum négy különböző csatornáról tud mérni analóg jelet. A csatorna kiválasztás funkcióját a MUX, azaz a multiplexer látja el, amit az I2C-n fogadott kódon keresztül lehet állítani. Kétfajta mérési módszer lehetséges az úgynevezett „single ended” és a „differential”. „Single ended” módban a csatornák analóg jelét 0V referencia feszültséghez viszonyítja. Ebben az esetben csak pozitív értékeket képes mérni. Ilyenkor AIN0, AIN1, AIN2 és AIN3 lábon külön-külön lehet analóg értéket mérni. „Differential” módban két csatorna pár van, AIN0 AIN1 és AIN2 AIN3. Az AIN1 és AIN3 lábra a referencia feszültséget kell kötni. Ez viszont nem lehet kisebb 0,3V-tal a GND vagy nagyobb 0,3V-tal a VDD feszültségtől. A mérendő feszültséget az AIN0-ra és az AIN2-re lehet kötni, és ezeket ilyenkor csatornához tartozó referencia feszültséghez képest méri.
- 14 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
11. ábra ADS1115 blokkdiagramja Az analóg jelet a MUX a PGA-hoz vezeti tovább. Ez lényegében egy műveleti erősítő és az a feladata, hogy a mért és a referencia éréket skálázza. A 2. táblázatban láthatóak a PGA értékei, amit a programkódon keresztül lehet beállítani. Ennek az előnye az, hogy a méréshatárt módosítani tudjuk a mérendő feszültség függvényében. Ilyenkor a felbontás optimálisabban ki van használva és pontosabb értékeket tudunk mérni. Fontos, hogy a mérendő analóg érték semmi esetben sem haladhatja meg a VDD+0,3V-os feszültséget, még a 2/3 értékre beállított PGA-nál sem. Ha ez megtörténik, az IC károsodhat. PGA érték
Maximális mérhető érték
2/3
±6.144V
1
±4.096V
2
±2.048V
4
±1.024V
8
±0.512V
16
±0.256V 2. táblázat
A rendszeremben használt ADS1115 10VSSOP tokozású, ami mindössze 5x3x1,1mm fizikai méretet jelent. Az ettől is kisebb „ultra-small QFN” tokozás mindössze 2x1,5x0,4mm. Az iparban ez a legkisebb 16 bit felbontású analóg-digitál konverter. A kis méret lehetővé teszi, hogy az IC-t olyan helyeken használják, ahol számít a helytakarékosság, például hordozható mérőberendezéseknél. Hátránya, hogy a 10VSSOP tokozás lábtávolsága mindössze 0,5mm, ami az IC beforrasztásánál jelenthet nehézségeket. 12. ábra mutatja a 10VSSOP tokozás méretét. - 15 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
12. ábra 10VSSOP tokozás 3.4. HDMI kapacitív érintőképernyős kijelző Az adatok kijelzését és az adatbevitelt a Chalkboard Electronics [7] által forgalmazott 7 colos érintőképernyős LCD monitor látja el. A kijelző a 13. ábrán látható.
13. ábra 7 colos LCD kijelző [14] A képernyő mindent egybe szerelt integrált megoldás, mivel működéséhez egy külső 5V-os tápegység, USB kábel és HDMI kábelen kívül nem igényel semmi más kelléket. A kijelző a hátulján lévő NYÁK vastagságával együtt kisebb, mint 10mm, ami előnyös a felszerelés szempontjából. A hátulján lévő micro HMDI csatlakozón keresztül kapja a
- 16 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
videó és audió jelet. Videó jelből Full HD, azaz 1920x1080-as felbontást képes maximum fogadni. A NYÁK-ra integrált HDMI audió dekóder lehetővé teszi, hogy a képernyőhöz egy hangfalat is csatlakoztassunk a hátulján lévő 2,5mm-es JACK csatlakozón keresztül. A mini USB csatlakozó felelős az érintőképernyő adatainak továbbításáért. A rendszer, amihez kötve van, képes bármi driver feltelepítése nélkül is „single touch” módban működtetni a kijelzőt. A megfelelő driverek feltelepítése után akár „multi touch” módban is üzemeltethető. A képernyő tulajdonságai a következők:
7 colos, színes, IPS technológiájú TFT képernyő, ami lehetővé teszi 89°-os látószöget minden irányból
A képernyő felbontása: 1280x800 pixel
Képarány: 16:10 szélesvásznú
Kontraszt arány: 800:1 és világosság: 400cd/m2
A kijelző súlya: 110 gramm
Képernyőhöz szükséges tápfeszültség: 5 V
A képernyő átlagos teljesítmény felvétele: 3,1 W
3.5. M&M 2250 szolenoid és M&M B205DBZ szelep A sörtartály palástján átáramló hűtőfolyadék mennyiségének értékét M&M B205DBZ szelepek végzik, melyeket M&M 2250 szolenoidok működtetnek. Ennek a két eszköznek a képe a 14. ábrán látható.
14. ábra Balra: szelep, jobbra: szolenoid [15] [16] Az M&M cég által gyártott 2250 típusú szolenoid folyamatos működésre lett tervezve és megfelel az EN60730 biztonsági szabványban leírtaknak. Tokozása - 17 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
gyulladásmentes szintetikus műanyag és emellett nagyfokú ütésállósággal és jó hővezető képességgel rendelkezik. A szolenoid kompatibilis bármilyen M&M által gyártott szeleppel és elromlása esetén - a moduláris felépítés miatt - könnyen cserélhető. Működéshez 24 V feszültséget igényel és átlagos fogyasztása 7 W. A gyártó által javasolt csatlakozóval IP65-ös védettségű. A M&M B205DBZ szelep víz, semleges folyadékok, valamit gázok és levegő vezérlésére alkalmas. Mechanikai és műszaki tulajdonságai a következők:
Csatlakozás:
G½
Névleges átmérő:
13 mm
Szelep test anyaga:
bronz
Maximális üzemi nyomás:
16 bar
Minimális működési nyomás:
0,3 bar
Maximális üzemi hőmérséklet:
50 °C
Minimális üzemi hőmérséklet:
-10 °C
Kv érték (ami meghatározza, hogy mekkora az 1 bar nyomású 5-30 °C hőmérsékletű víz átfolyási képessége):
63
3.6. JUMO dTRANS p30 nyomás távadó A tartályban lévő nyomás értékek mérésére JUMO dTRANS p30-as nyomás távadókat használunk. Ezek az eszközök relatív nyomás mérésére képesek folyékony vagy gáznemű közegben. Belsejükben piezo-rezisztív módon, vagy nyúlásmérő bélyeggel alakítják át a mért értéket azzal arányos elektromos jellé. Az elektromos jelet a belső elektronika kondicionálja, és feszültség értékké alakítja, ami ebben az esetben 0,5-4,5 V. A nyomás távadót a 15. ábra mutatja.
- 18 -
Mérőrendszer fejlesztése Raspberry PI hardverre A mérőrendszer felépítése és a rendszerhez használt egységek ismertetése
15. ábra JUMO dTRANS p30 nyomás távadó [17] A távadó tulajdonságai a következők:
A távadó típusa: 404366/999-457-999-997-20-36/631
Tápfeszültség: 10 - 30 V
Maximális nyomás: 4 bar
Kimeneti jel feszültség: 0,5 – 4,5 V
Nulla hiba: ≤ 0.3% a teljes felbontáshoz viszonyítva
Hiszterézis: ≤ 0.1% a teljes felbontáshoz viszonyítva
Ismételhetőségi hiba: ≤ 0.05% a teljes felbontáshoz viszonyítva
Megengedett környezeti hőmérséklet: -20-tól +100 °C-ig
- 19 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
4. Raspberry PI Shield NYÁK tervezése A rendszer fejlesztése során a hardverelemeket próbapanel segítségével kötöttem össze. Ez azért előnyös, mivel az IC-k és alkatrészek könnyen beilleszthetők, kicserélhetők. Vezetékek segítségével az egyes lábakat kapcsolási rajz alapján össze lehet kötni és hiba esetén könnyen újra huzalozható az egész rendszer. A 16. ábrán látható a fejlesztés alatt álló rendszer próbapanelon összerakott modellje, a Raspberry PI-vel, a DS18B20 hőmérsékletmérő szenzorokkal, az ADS1115 konverterrel. Jelenleg a szolenoidok működését LED-ek helyettesítik.
16. ábra Hardverelemek összekötése próbapanel segítségével Ebben a félkész állapotban a rendszer nem megfelelő ipari környezetben való alkalmazásra. A végleges kapcsolási rajzot NYÁK tervező programba be kell vinni, a NYÁK-ot megtervezni és külső céggel legyártatni. NYÁK tervezése során olyan megoldásra törekedtem, ahol:
A Raspberry PI és a Shield könnyen csatlakoztathatóak
A NYÁK elfér a PI-n található magasabb alkatrészek mellett
A panel csavarral rögzíthető a PI-hez és a felületre, ahova fel lesz szerelve
LED-ek jelezzék, ha a szolenoidok be vannak kapcsolva
A perifériákhoz az összetartozó kivezetések közel legyenek egymáshoz
Felirat jelölje, hogy a csatlakozókba milyen vezetéket kell bekötni
Kicsi, de könnyen hozzáférhető panel - 20 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
4.1. NYÁK tervező program A kapcsolási rajz összeállításához és a NYÁK panel megtervezéséhez az Altium Designer szoftvert
használtam.
Az
Altium Designer egy elektronikai
tervező
programcsomag, nyomtatott áramkörök, FPGA-k valamint beágyazott rendszerek tervezésére és analizálására. Előnyei: a sok alkatrészes adatbázis, alkatrész menedzselés, könnyen használható kapcsolási rajz tervező és 3D-s megjelenítés. A NYÁK panel megtervezésének első lépése a kapcsolási rajz összeállítása. Az alkatrészeket kikeressük az alkatrészkönyvtárból és beillesztjük a munkaoldalra. Abban az esetben, ha valamelyik nem található meg ott, akkor azt könnyen létrehozhatjuk a „Schematic Library”-ban. Ezután az alkatrészeket összekötjük vezetékkel, megadjuk a hozzájuk tartozó értékeket és kiválasztjuk, hogy mi legyen a NYÁK rajza. Ha nem találjuk a megfelelő NYÁK rajzot, akkor azt létrehozhatjuk a „PCB Libraryban”. A kapcsolási rajzot leellenőrizzük és ügyelünk a jó áttekinthetőségre. A következő lépés a NYÁK rajz megtervezése. NYÁK tervező nézetben betöltjük a kész kapcsolási rajzot. Ilyenkor a program az összes alkatrészt huzalozásukkal együtt megjeleníti. Itt megtervezzük a NYÁK méretét és elhelyezkedését a Raspberry PI-hez képest, elhelyezzük az alkatrészeket a panelon és összekötjük őket vezetékkel. A panelt feliratokkal látjuk el, hogy a perifériák vezetékeit egyszerűen és gyorsan be tudjuk kötni a megfelelő helyre. A NYÁK rajzot ellenőrizzük, kiszűrve ezzel a tervezéskor előforduló esetleges hibákat. Ezután a panel készen áll a gyártásra. A programmal „Gerber” és „NC drill” fájlt generálunk, ami tartalmazza a gyártáshoz szükséges paramétereket. A következő fejezetekben ismertetem az Altium Designerben megtervezett kapcsolási rajzot, a felhasznált alkatrészeket és a NYÁK rajzot. 4.2. 5 V-os tápfeszültséget előállító áramkör A rendszerhez használt egységeknek tápfeszültségre van szükségük. Ezek az értékek 24 V, 5 V és 3,3 V. A Raspberry PI és az LCD kijelző működéséhez 5 V szükséges. Ezt a feszültséget állítja elő a 17. ábrán látható blokk.
- 21 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
17. ábra 5 V tápfeszültséget előállító blokk A P1-es csatlakozó a tápcsatlakozó. Ide kell kötni egy külső 24 V-os tápegységet. Az 1-es lábra kerül a +24 V, 2-es lábra a föld (0 V) és a 3-as lábra a védőföld. Az F1-es alkatrész egy biztosíték, ami védelmet jelent a tápegység és a rendszer számára. Ha valamilyen alkatrész meghibásodna és rövidzárat okozna, akkor a biztosíték kiég, és ezzel megszakítja a rendszernek a tápellátását. Ennek a kiválasztása a maximális felvett áramtól függ. A C3-as és C5-ös alkatrészek Vishay VY2 222M típusú elektromágneses és rádió frekvenciás zavar szűrő kondenzátorok. Ezek az ipari környezetben jelen lévő feszültség impulzusokat szűrik ki, amiket elsősorban a nagy teljesítményű induktív fogyasztók állítanak elő működésük közben. Ilyenek például a villanymotorok. Ezek az impulzusok fém vezetőben és levegőben egyaránt terjedhetnek és minden elektronikai eszköz ki van téve a forrás közelében. A kisfeszültségű IC-ket akár egy ilyen impulzus is tönkre teheti. Ennek a kivédését szolgálja ez a két kondenzátor, ami a 24 V-os és a 0 V-os vonalról vezeti le a védőföldre az impulzusokat. Az elektronikai alkatrészek megvédését szolgálja még a külső fém doboz, amit szintén a védőföldre kell rákötni. Ez a levegőben terjedő elektromágneses
hullámokat
felveszi,
és
védőföldön
keresztül
elvezeti,
így
megakadályozza, hogy a belsejében lévő áramkört károsítsák. A C1-es alkatrész egy elektrolit kondenzátor, aminek a szerepe a bejövő feszültség simítása valamint pufferelése. A feltöltött kondenzátor energiatárolóként viselkedik, ami szolenoidok bekapcsolásakor a hirtelen nagy energiaszükségletet tudja fedezni; így stabilizálva a 24 V-ot. A kondenzátornak legalább 24 V-osnak kell lennie. 24 V feszültségből 5 V előállításához feszültség szabályzóra van szükségünk. Ha lineáris feszültség szabályzót használnánk, mint például a széles körben elterjedt 7805-ös
- 22 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
IC, akkor 0,5 A-os terhelésnél, ami a Raspberry PI átlagos fogyasztásának felel meg, a teljesítmény veszteség és a hatásfok a következőképpen számolható ki: (1) (
)
(
)
(2) (3)
Ebben az esetben a hőveszteség 9,5 W lenne, ami a 7805-ös feszültség szabályozót melegítené és ennek következtében jelentős hűtésre szorulna. A hatásfok növelése és a veszteség csökkentése érdekében másfajta szabályzóra van szükség. Ezt a feladatot látja el a Traco Power által gyártott TSR 1-2450. Ez egy „step-down” feszültség szabályozó, aminek a jellemzője a jó hatásfok, körülbelül 90%-os. Ennek következtében a hőveszteség kicsi lesz, nem melegszik fel az IC és nem szorul hűtésre. Az IC képét és a lábkiosztását 18. ábra mutatja.
18. ábra TSR 1-2450-es „step-down” feszültsége szabályozó [18] Jellemzője, hogy a 7805-tel láb kompatibilis, ami azt jelenti, hogy a NYÁK terven nem kell módosítani csere esetén. Az IC maximális folyamatos terhelhetősége 1 A és védett rövidzár ellen. A Raspberry PI és az LCD monitor közös maximális áramfelvétele meghaladja az 1 A-t, ezért két TSR feszültség szabályzót kell alkalmazni, melyek különkülön biztosítják a feszültséget azoknak. A Raspberry PI tápfeszültség jelölése 5V-RPI az LCD-é pedig 5V-LCD. Az L1 és L2 alkatrészek tekercsek, a C4 és a C8 alkatrészek kondenzátorok. Feladatuk a magas frekvenciás zajok kiszűrése. A C2 és C7 alkatrészek puffer kondenzátorok, amik az 5 V feszültséget stabilizálják.
- 23 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
4.3. ADS1115 áramköre
19. ábra ADS1115 analóg-digitál konverter A 19. ábrán látható az ADS1115 analóg-digitál konverter kapcsolási vázlata. Az IC 5 V-os tápfeszültséget az 5V-LCD vonalról kapja. A C6-os kondenzátor magas frekvenciás zajszűrés szerepét látja el. Az ADDR lábra a föld van rákötve, amivel így az I2C slave címét 1001000-re állítjuk be. Az SCL és az SCA láb rá vannak kötve az 5 V-os tápfeszültségre egy felhúzó ellenállással. Ezt azért kell, mert ez a két láb nyitott kollektoros, ami azt jelenti, hogy az IC-ben lévő tranzisztorok csak 0 V-ra tudják lehúzni a vonalakat. A két nyomásszenzor az AIN0-ra és az AIN2-re van kötve. Az ALERT/RDY láb nincs használva. 4.4. Szolenoid meghajtó áramkör A 20. ábrán látható az 1-es szolenoid meghajtó áramköre. A szolenoidok működéséhez 24 V feszültség és körülbelül 0,3 A áramerősség szükséges. A Raspberry PI önmagában nem lenne képes ezeket vezérelni, mivel a I/O kimenetein 3,3 V-ot tud leadni és a GPIO portjain összesen 50 mA áramot. A SZOL1_3,3V láb egy 2,2 kOhmos ellenálláson keresztül rá van kötve egy BC182-es tranzisztorra. Ha a PI erre a lábra nem ad ki feszültséget, akkor a tranzisztor nem kapcsolódik be és a szolenoid nem fog kinyitni. Ha a PI az erre a lábra kapcsolt GPIO portot vezérli, akkor a lábon 3,3 V jelenik meg. A feszültség hatására áram indul meg az ellenálláson és a tranzisztoron keresztül a föld felé. Ez a bázisáram a következőképpen számolható ki: (
)
(4)
- 24 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
20. ábra Szolenoid meghajtó áramkör UBE a bázis-emitter feszültség, ami a tranzisztoroknál jellemzően 0,7 V. A bázisáram bekapcsolja a tranzisztort. A tranzisztorra egy ellenálláson keresztül egy LED, valamint egy ellenálláson keresztül két AQY212EH optocsatoló van rákötve. Az optocsatolók kapcsolják rá a 24V-os feszültséget a szolenoidokra így működtetve azokat. Az optocsatoló olyan elektronikai alkatrész, amely fémes/galvanikus kapcsolat nélküli egyirányú jel és adatátvitelt biztosít különböző elektromos feszültségszinten lévő áramkörök között, infravörös fény segítségével. A tokozáson belül található egy LED és egy fényérzékeny félvezető eszköz, ami lehet tranzisztor vagy MOSFET is. A LED a rajta átfolyó áram hatására világítani fog. A fény hatására a tokozatba integrált félvezető eszköz kinyit és átengedi az áramot a 4-es lábról a 3-asra. Az AQY212EH lábkiosztása és belső kapcsolási rajza a 21. ábrán látható. Az AQY212EH optocsatoló főbb tulajdonságai:
Kimenő maximális feszültség 60 V, kimenő maximális áram 550mA
Több mint 0,4 mm belső szigetelési távolság a be- és kimenet között
5000 V átütési feszültség
Alacsony szivárgási áram zárt állapotban, maximum 1 μA
LED-en eső feszültség: 1,25 V
Ajánlott LED áram: 5-10 mA
- 25 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
21. ábra AQY212EH lábkiosztása és belső kapcsolási rajza [19] Egy M&M 2250 működtetéséhez elég lenne egy AQY212EH, mivel a szolenoid működési árama 300 mA és az optocsatoló maximális árama 550mA. Két optocsatoló párhuzamosan kapcsolva dupla akkora áramerősség vezérlésére képes, ami 1100 mA. A két IC párhuzamosítása során a terhelést elosztják egymás között, mivel a MOSFET pozitív hőmérsékleti együtthatójú. Ez azt jelenti, hogy melegedés hatására nő a belső ellenállása. Például ha az egyik IC-n nő az átfolyó áram, akkor az melegedni fog. Melegedés hatására megnő a belső ellenállása, ami miatt csökken a rajta átfolyó áram. A LED-eken átfolyó áram ajánlott értéke 5-10 mA, amit én 5 mA-re méreteztem. A két optocsatoló sorosan van kötve így a rajtuk átfolyó áram ugyanaz, és a rajtuk eső feszültség pedig összeadódik. Az átfolyó áramot a következőképpen lehet kiszámolni: (5) (6) (7) Az 500 Ω-os ellenállás nem szabványos. A hozzá legközelebb eső érték 470 Ω. Az optocsatolók 4-es lába 24 V-ra van rákötve és ezt bekapcsolt állapotban a 3-as lábaikra kivezetik. A D4-es dióda védődióda, amit azért alkalmazunk, mert a szolenoid induktív terhelés. Kikapcsolásakor a tekercsben felhalmozódott energia feszültséget indukál, ami többszöröse is lehet a működési feszültségnek. A magas feszültség könnyen meghaladhatja az optocsatolók maximális feszültségét, ami károsíthatja azokat. A dióda levezeti ezeket a magas feszültségcsúcsokat és így megvédi az áramkört.
- 26 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
4.5. A panel csatlakozói
22. ábra GPIO csatlakozó bekötése A 22. ábra a GPIO lábkiosztását mutatja, amivel a NYÁK a Raspberry PI-hez csatlakozik. A PI működéséhez szükséges 5V-os feszültséget a 2-es és 4-es lábon kapja meg valamint a 0 V-os földet a 6-os lábon. A Raspberry PI-n található egy lineáris feszültség szabályzó, ami a CPU működéséhez szükséges 3,3 V-ot állítja elő és ez az 1-es lábon elérhető. A 3-as és 5-ös I2C busz SDA és SCL lábai, ide van rákötve az ADS1115 analóg-digitál konverter. A 7-es láb a GPIO4, amire a három DS18B20 hőmérséklet szenzor van rákötve. A 4,7 kOhm-os ellenállás 3,3 V-ra húzza fel a vonalat. A 13-as, 15-ös és 17-es lábra vannak rákötve sorban a három szolenoid meghajtó áramkörök. Ezeken keresztül tudja a PI ki- és bekapcsolni azokat. A többi lábat feladatom során nem használtam.
23. ábra DS18B20 hőmérő szenzorok csatlakozója 23. ábrán látható a DS18B20 hőmérők csatlakozója. A szenzorok 3,3 V-os tápfeszültségét a Raspberry PI állítja elő. A mindhárom szenzornak külön kivezetése van tápfeszültségből, földből, GPIO4 lábból és védőföldből. Az árnyékolt kábelek árnyékolás
- 27 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
vezetékét a védőföldre kell kötni, ami megakadályozza, hogy a levegőben terjedő elektromágneses hullámok zavarják a jelvezetékeket.
24. ábra Nyomásszenzorok csatlakozója A 24. ábra a nyomásszenzorok csatlakozóját mutatja. A két szenzor a 24 V-os tápfeszültségüket az 1-es és 5-ös lábakon kapják, föld csatlakozásuk a 3-as és 7-es lábakon, védőföld csatlakozásuk a 4-es és 8-as lábakon vannak. Az egyes nyomásszenzor analóg kimenetét a 2-es lábra kell kötni, a 2-es szenzorét pedig a 6-os lábra.
25. ábra Szolenoidok csatlakozója A 25. ábrán látható a szolenoidok csatlakozója. A három különálló meghajtó áramkör a 1-es, 4-es és 7-es lábra van rákötve. Föld csatlakozásuk a 2-es, 5-ös és 8-as lábakra van kivezetve. Védőföld csatlakozás, ha a kábel árnyékolt, a 3-as, 6-os és 9-es lábon található.
- 28 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
26. ábra LCD kijelző csatlakozója A 26. ábrán látható a LCD kijelző csatlakozója. A kijelző 5 V-os tápfeszültségét az 1-es lábon kapja, a földet pedig a 2-esen. 4.6. Raspberry PI Shield NYÁK rajza A 27. ábrán látható a Raspberry PI Shield NYÁK rajza. Az Shield kétoldalú NYÁKra lett tervezve. Zöld színnel az alkatrészek azonosító és a NYÁK feliratok vannak jelölve. Az alkatrészeket vezetékek kötik össze. Piros színnel a felső, feketével az alsó oldalon levők láthatóak. P1-es a sorkapocsba kell bekötni a 24 V-ot, a 0 V-ot és a védőföldet. P2-es a hőmérséklet szenzorok, P3-as a nyomás távadók, P4-es a szolenoidok, a P5-ös pedig az LCD kijelző sorkapcsa. A sorkapcsok minden pólusa feliratozva van, így a panel beszerelésénél és karbantartásnál könnyen megállapítható a vezetékek bekötésének a helye. A D1, D2 és D3 LED-ek jelzik, ha a szolenoidok működnek és ez így a panelról is leolvasható. A panel a J1-es hüvelysoron keresztül kapcsolódik a Raspberry PI-hez.
27. ábra Raspberry PI Shield NYÁK rajza - 29 -
Mérőrendszer fejlesztése Raspberry PI hardverre Raspberry PI Shield NYÁK tervezése
4.7. Raspberry PI Shield NYÁK mechanikai rajza A 28. ábrán látható fekete körvonallal a Shield és narancssárga körvonallal a Raspberry PI paneljai. A Shield felfogatása a NYÁK-on elhelyezett négy darab 3 mm átmérőjű furat segítségével lehetséges, ahol a jobb felső a PI és a Shield közös felfogatási pontja. A NYÁK mérete 93x83,6 mm, amit a PI világoskék területe korlátoz. Erre a területre a Shield paneljának tilos beérnie, mivel itt a Raspberry PI-n található csatlakozókba ütközne, és így nem férne el azoktól.
28. ábra A Shield és a Raspberry PI elhelyezkedése
- 30 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
5. A Raspberry PI-n futó szoftver és programkódja 5.1. Qt fejlesztőprogram A Raspberry PI-n futó hőmérsékletmérő program Qt alatt lett fejlesztve. Ez egy C++on alapuló, több platformos alkalmazásfejlesztési keretrendszer, amit széles körben használnak szoftverek fejlesztésére. A Qt grafikus programozói felülettel van ellátva, melynek segítségével a programok felhasználói felületét könnyen létre tudjuk hozni és programkódhoz hozzácsatolni. Emellett használják olyan szerver és parancssoros szoftverek létrehozására, melyeknek nincs grafikus felülete. A C++-os alapnyelv ki van egészítve speciális parancsokkal és makrókkal, amivel a programozás során a kódot egyszerűbben meg lehet oldani. A Qt ezen kívül még támogatja a nyelvi lokalizációt, SQL adatbázis kezelést, több szálon futó programokat, hálózati felhasználást és több platformon futó, de egységes fájlkezelést. A megírt kód bármely támogatott rendszerre lefordítható és futtatható és csak a platformfüggő elemeket kell megfelelően módosítani. A Qt által támogatott főbb platformok:
Android – Qt for Android, ismertebb nevén Necessitas.
Embedded Linux – Qt beágyazott platformokra, mint például: okostelefonok, PDA-k
iOS – Qt iOS rendszerekre, például: iPhone és iPad
OS X – Qt Apple OS X rendszerekre
Windows – Qt Microsoft Windows XP, Vista, 7 és 8 operációs rendszerekre
Windows CE – Qt Windows CE 6 és Windows Embedded Compact 7 rendszerekre
X11 – Qt X Window System rendszerekre, mint például: GNU/Linux, FreeBSD, HP-UX, Solaris, AIX
5.2. Raspberry PI-n futó szoftver A PI-n Raspbian Wheezy operációs rendszer fut. A rendszer elindulásakor a hőmérsékletmérő program automatikusan elindul. A program főképernyője a 29. ábrán látható.
- 31 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
29. ábra A program főablaka Sensor1, Sensor2 és Sensor3 kijelzi a három DS18B20 szenzor által mért hőmérsékletet a tartályban. A szenzorok hőmérsékletétől jobbra találhatóak SetPoint értékek, ahová be lehet állítani a hőmérsékletet, amire a tartály falában lévő hűtés szabályozni fog. A SetPoint ablak a zöld értékkel kijelzett számokra kattintva hozható elő. A Settings gombbal megnyitható a beállítások ablak, ahol tartályparaméterek adhatóak meg. Jobb oldalt az Extract kijelzőben a SET gombra kattintva megadható a Balling fok. Fent a Volume mezőben leolvasható a sörlé űrtérfogata literben. A tartály ábráján található kijelző a két nyomásszenzor közti nyomáseltérést adja meg bar-ban. A tartálytól balra lévő csöveken keresztül áramlik a hűtő folyadék, amit a szolenoidok vezérelnek. Ha valamelyik szelep kinyit, azt zöld lámpával jelöli, ha zárva van, akkor pirossal. A 30. ábra az SetPoint ablakot mutatja. Ezen az ablakon keresztül tudjuk beállítani a különböző paramétereket. Az ablak megnyitásakor a módosítandó értéket betölti a beviteli mezőbe. A nagy gombok az érintőképernyős használatot könnyítik meg. Az OK gombbal elfogadjuk a beírt értéket, a DEL gombbal visszatörölünk egy számjegyet. A beírt értékek maszkolva vannak, ami azt jelenti, hogy csak egy bizonyos hőmérséklet tartományt lehet beírni, ami a programkódban állítható, a feladatnak megfelelően, valamint csak matematikailag korrekt értékeket fogad el. Ha üres mezőt hagyunk és rákattintunk az OK gombra, akkor a program nem írja felül az üres értékkel a módosítandó paramétert, hanem
- 32 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
meghagyja a régi értéket. Ezekkel kiszűrhető az esetlegesen elírt értékekből adódó hiba lehetősége. A Close gombbal bezárhatjuk az ablakot, ha nem akarunk módosítani semmit.
30. ábra SetPoint ablak A 31. ábra a beállítások ablakot mutatja, ahol a tartály paramétereket lehet beállítani. Az α szög a tartály alján lévő csonka kúp szöge, x a csonka kúp paramétere, d a tartály átmérője és l a csonka kúp magassága. A négy paraméterből csak hármat kell megadni. Az l-t az alfa és d megadott értékekből kiszámolja a program.
31. ábra Settings ablak
- 33 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
A hiszterézisnél meg tudjuk adni, hogy mikor kapcsoljanak ki a szolenoidok a hőmérsékletek és a setpointok függvényében. A Set Zero Point gombbal kinullázhatjuk a nyomás távadók értékét. A nyomás távadók null értéke hőmérséklettől minimálisan függ, és ezért elkúszhat. Ezt akkor kell megnyomni, amikor a tartály még üres és feltöltésre vár. A Back gombbal visszamehetünk a főképernyőre. 5.3. Programkód struktúrája és magyarázata
32. ábra Forráskód fájljai A 32. ábra mutatja a program forrás fájljai. A ZipBier_Raspberry_v5_qmake5.pro fájl a projekt fájl. Itt találhatóak, hogy a program fordításakor milyen fájlokat használjon, valamint utasítások a fordítónak. A „header” fájlokban osztály, funkció és makró deklarációk találhatóak, a „source” fájlokban pedig a funkció definíciók.” Form” fájlokban tudjuk összeállítani a programban látható ablakokat és a „resource” fájlban tároljuk az ablakokhoz felhasznált kép fájlokat. A qtsingleapplication mappában találhatóak a fájlok, melyek lehetővé teszik, hogy a program csak egy példányban indulhasson el. 5.3.1. main.cpp A 33. ábrán látható a program main függvény, ami a minden C nyelvben íródott program kezdő pontja. A 9. sorban létrehozzuk a programot, ami csak egy példányban futhat. Erről a 11. sorban lévő feltétel gondoskodik, miszerint ha a programunk fut és el
- 34 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
akarjuk indítani még egyszer, akkor nem engedi, hogy második alkalommal elinduljon. 15. sorban létrehozza a hőmérsékletmérő program fő ablakát, a 16. sorban beállítunk egy ablak ikont annak és a 18. sorban láthatóvá teszi ezt az ablakot, valamint a 19. sorban az ablakot legfelülre hozza. 20. sorban beállítjuk az először megnyitott ablakot az aktív ablaknak, és hogyha megnyitnánk a programot még egyszer, akkor a 21. sorban lévő kód miatt az aktív ablak felugrik.
33. ábra A program main függvénye 5.3.2. dialog.cpp A dialog.cpp fájl felelős a Dialog ablak, azaz a főképernyő működéséért. Ezen kívül a program különböző ablakai innen nyílnak meg, és az egyes függvények itt vannak összekötve. Itt hozunk létre szálakat a programnak, állítjuk a GPIO kimeneteket és kiszámoljuk a sör űrtérfogatát. A 34. ábrán látható a dialog.cpp konstruktora. A 9. sorban lévő setupUI() utasítással a program létrehozza a főképernyőt. A 12.-től a 16. sorig lévő utasítások a hőmérsékletmérés megfelelő futását szolgálják. A DSsensor a ds18b20 osztály objektuma. A hőmérsékletmérés során a ReadTempSensors() függvény a CPU-t lefoglalja,aminek az a következménye, hogy a program nem reagál semmilyen felhasználó általi beavatkozásra. A hőmérsékletmérés folyamatosan megy, de nem tudnánk gombokat használni. Hogy ezt kikerüljük, létrehozunk egy külön szálat, a DSThread-et. A 15. sorban lévő moveToThread() utasítással a DSsensor objektumot bemozgatjuk a DSThread szálba. A 16. sorban lévő utasítással elindítjuk a szálat. Ha elindult a szál, a 12. sorban lévő connect() utasítás miatt, a ReadTempSensors() függvény meghívódik. Ez most már külön szálon fut, így a program főképernyőjének a működését nem blokkolja. A 13. sorban, ha a program
ReadTempSensorsfinished()
jelet
észlel,
ami
akkor
érkezik,
ha
a
ReadTempSensors() függvény lefutott, akkor újra meghívja a függvényt, így végtelenítve - 35 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
annak a futását. A 14. sorban az UpdateTemp() jelre, ami egy szenzor hőmérsékletének beolvasása után jelentkezik, a program végrehajtja a WriteTemp() függvényt. A 19.-től a 24.-ig sorig lévő utasítások az analóg jel lekérdezéséért felelősek. Az ADS1115 osztály objektuma az ADS. A 20. sorban a Begin() utasítással beállítjuk az ADS1115 IC I2C slave címét. Az ADStimer időzítőnek a 21. sorban megadunk egy 2000 ms-os időintervallumot. Ha ez az idő letelik, akkor kiad egy timeout() jelet, amit a 19. sorban lévő utasítás miatt a ReadADSsensors() meghívódik. Az ADS-t és ADStimert-t a 22. és 23. sorban ezek számára létrehozott ADSThread szálba mozgatjuk. A 24. sorban elindítjuk a szálat, amivel elkezdődik az analóg jel mérése.
34. ábra dialog.cpp konstruktora A 27. sorban, ha a DSsensor Wire1Error() jelet ad ki, akkor végrehajtja a OneWire1Error() függvényt. A 30. sorban SetPoint ablakot, a 31. sorban a Settings ablakot hozzuk létre. A 34 és 35. sorban az ablakoknak beállítjuk, hogy modal-ok legyenek, ami azt jelenti, hogy mindig felül legyenek, ha megnyitjuk őket. A 35. ábrán lévő 40. sorban, megadjuk, hogy a program bezáródása előtt a DisableBeforeClose() függvényt futtassa le. A 45. 46. és 47. sorban beállítjuk a GPIO17, 27 és 22 lábat hogy kimenetként funkcionáljanak. Az 50.-től az 56. sorig kinullázzuk a változókat, amiben a tartályparaméterek és a szenzornullázás értékeit tároljuk a Dialog ablakban. Az 58 és 59 sorban a Dialog ablakhoz tartozó SetPoint ablak, és a Settings - 36 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
ablakhoz tartozó SetPoint ablak SaveSettings() jelét összekötjük a SaveSettings() függvénnyel. Az 60. sorban a Settings ablak CopyParameters() jelét összekötjük a CopyParameters() függvénnyel. A 61. sorban a Settings ablak SetZeroPointButton gombját összekötjük a SetZeroPoint() függvénnyel. A 64. sorban létrehozunk egy maszkot, amit a 67. sorban beállítunk a SetPoint ablak számbeviteli mezőjére. Ez a maszk csak olyan szám beírását engedi, ami matematikailag helyes és az értéke 0-tól 99,9-ig terjedhet. A 73. sorban lévő LoadSettings() paranccsal a program futtatásakor az előzőleg automatikusan elmentett paramétereket a program betölti.
35. ábra dialog.cpp konstruktora A 36. ábrán a dialog.cpp destruktora látható, ami program főképernyőjének bezáródása előtt fut le. Itt a felhasznált GPIO lábakat visszaállítja bementre és 0 értéket ad nekik.
36. ábra dialog.cpp destruktora A 37. ábrán látható a WriteTemp() függvény. A 89. 90 és 91. sorban a program kiolvassa a ReadTemp() függvénnyel a DSsensor-ból a mért hőmérséklet értékeket és - 37 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
beírja a főképernyőre azokat. A 94. sorban a SetOutput() függvénynek megadjuk a három SetPoint és egy hiszterézis értéket, és a mért hőmérsékleti értékek függvényében meghatározza, hogy melyik szolenoidot kell működtetni. A 95. sorban a GetOutput() függvénnyel kiolvassuk a DSsensorból, hogy működnie kell-e az első szolenoidnak. Ha az if függvény teljesül, akkor 98. sorban bekapcsoljuk a szolenoidot vezérlő GPIO17 lábat és a 97. sorban program főképernyőjén zöld színűre állítjuk a szolenoid működését jelző LED-et. Ha nem teljesül, akkor a 103. sorban kikapcsoljuk a GPIO lábat és a 102. sorban piros színűre állítjuk a LED-et. A 105. és 115. sorban a másik két szolenoid működését is hasonló módon állítjuk.
37. ábra WriteTemp() függvény A SetPoint1 érték beírását a 38. ábrán látható függvény végzi. A 130. sorban a SetPoint ablak értékbeíró mezőjének beállítjuk a főképernyőn látható SetPoint1 értékét. Ezzel megkönnyítjük a felhasználó dolgát, mivel látni fogja, hogy mi a jelenlegi érték az ablak megnyitása után. A 131. sorban a régi jel észlelését töröljük és a 132. sorban megadjuk, ha a SetPointSignal() jel érkezik a benne lévő QString értékkel, akkor azt a főképernyőn lévő SetPoint1 kijelzőnek beállítjuk. A 133. sorban a program megnyitja a SetPoint ablakot, a 134. sorban, ha az ablak nem lenne felül, akkor a raise() paranccsal legfelülre teszi azt. A 135. sorban a selectAll() paranccsal a SetPoint ablak értékbeíró mezőjét kijelöli, így új érték megadásánál nem kell kitörölni először a régi értéket. A
- 38 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
SetPoint2, SetPoint3 és Extract értékek beállítását végző függvények is a fentiekben leírtakkal azonosan működnek.
38. ábra SetPoint értékbeállító gomb A 39. ábrán látható on_SettingsButton_clicked() függvény a beállítások gomb megnyomásakor fut le. A 170. sorban előhozza a Settings ablakot és az 171. sorban a raise() paranccsal legfelülre emeli. A 174. sorban a CopyParameters() függvény a Settings ablakból bemásolja az öt tartály paraméter értéket a Dialog ablak változóiba. A 183. sorban lévő OnWire1Error() akkor fut le, ha a 1-Wire modul nem töltődött be és így nem lehet használni a DS18B20 szenzorokat. Ilyenkor egy hibaablak felugrik és a Close gombra rákattintva bezárja az egész programot.
39. ábra dialog.cpp függvények A 40. ábrán látható ReadADSensors() függvény az analóg-digitál szenzor által mért értékeket átszámolja nyomássá és űrtérfogattá, majd kiírja a főképernyőre. A 191. sorban változók vannak definiálva. Az R a tartály sugara, az r pedig a csonka kúp fedőkör sugara méterben kiszámolva. Volume a térfogat és a level a tartályban lévő sör magassága. A 192. sorban „ro” konstans a víz sűrűsége a g pedig a gravitációs gyorsulás. A 193. sorban kiszámoljuk a csonka kúp magasságát. A 194. és 195. sorban megmérjük a felső és alsó nyomás távadók értékeit és kivonjuk belőlük a null értékeket. A 199. sorban kiszámoljuk a GetBar() függvénnyel a zárt tartályban lévő nyomáskülönbséget. A BarMax a nyomásmérők névleges maximális nyomása, ami 4 bar. A mVmin és mVmax a nyomás
- 39 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
távadók kimeneti minimális és maximális feszültsége millivoltban. A 200. sorban vizsgáljuk a bar változó értékét, ha kisebb, mint nulla, akkor kinullázzuk és 201. sorban program főképernyőjére kiírjuk. A 202. sorban a program kiszámolja a tartályban lévő sör magasságát. Ha ez az érték negatív, akkor a 203. sorban kinullázzuk. A sör űrtartamának kiszámításakor két lehetőség van. Az egyik, ha a tartályban lévő sör szintje magasabb, mint a tartály alján lévő csonka kúp magassága. Ebben az esetben az űrtartalom a csonka kúp térfogatának és a hengeres tartályrészben lévő sör térfogatának az összegéből adódik. Ez a 207., 208. és 209. sorban van kiszámolva. A másik lehetőség, amikor a sör szintje kisebb, mint a csonka kúp magassága. Ilyenkor a sör űrtartama a 213. sorban leírt képlettel számolható ki. A 216. sorban, ha a volume térfogat negatív szám, akkor kinullázzuk. A 218. és 229. sor között debuggolásnál a parancssorba írja ki a program a kódban megadott értékeket. A 231. sorban a tartályban lévő sör űrtartamát a program kiírja liter mértékegységben.
40. ábra ReadADsensors() függvény A 41. ábrán látható SaveSettings() függvény a programnak megadott paraméterek elmentését végzi. Ezek a SetPoint értékek, a Balling fok, a tartályparaméterek a Dialog ablakban és a tartályparaméterek a Settings ablakban. A LoadSettings() függvény az elmentett paramétereket visszatölti.
- 40 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
41. ábra SaveSettings() és LoadSettings() függvények A 42. ábrán látható GetBar() függvény az in bemenő paraméterből, a nyomás távadó Pmax maximális üzemi nyomásából a minimális Umin és maximális Umax kimeneti feszültségéből kiszámolja a nyomás értéket bar-ban. A 291. sorban a GetPascal() függvény a GetBar() függvény segítségével a pascalban mért nyomást adja vissza. A 296. sorban a SetZeroPoint() függvény a „Set Zero Point” gomb megnyomásakor fut le. A program megméri az adott pillanatban az alsó és felső nyomás távadó értékét, majd azokat referencia értékként tárolja.
42. ábra dialog.cpp függvények
- 41 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
5.3.3. ds18b20.cpp Ebben a fájlban található a hőmérsékletmérő programrész. A program a szenzoroknak létrehozott fájljából kiolvassa a hőmérsékleteket és emellett hibakezeléssel is foglalkozik. A 6. sorban kinullázzuk az m_devicecount változót, amivel megszámoljuk, hogy hány DS18B20 szenzort észlel a 1-Wire buszon. 7. sorban az m_dir változónak beállítjuk a szenzorok elérhetési útvonalát. A 8. sorban lévő függvénnyel minden egyes mappát kiválasztunk, ami az m_dir változóban megadott helyen van. A mappákat beolvassuk a NameOfFile string változóba a 10. sorban. A 11. sorban lévő feltétellel kiválasztjuk azokat a mappákat, melyek neve „28-„ karakterekkel kezdődik, ami a DS18B20 hőmérséklet szenzorok azonosítója. A feltételt teljesítő mappaneveket egy tömbbe beolvassuk, aminek a tömbszámát a m_devicecount határozza meg. A 14. sorban növeljük eggyel a m_devicecount változót, ami majd a következő szenzor tömbszáma lesz.
43. ábra ds18b20 konstruktora A 44. ábrán látható ReadTempSensors() függvény segítségével tudjuk kiolvasni a szenzor fájljaiból a hőmérsékleteket. A 20. sorban található feltétellel ellenőrizzük, hogy az m_dir változóban lévő útvonal létezik-e. Ha nem létezik, akkor a 1-Wire modul nem lett betöltve a Raspberry PI-n és a program hibaüzenettel leáll. Ha létezik, akkor a 30. sorban lévő for függvénnyel az összes program által észlelt szenzoron végrehajtja a következő feladatot.
- 42 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
44. ábra ReadTempSensors() függvény 32. sorban létrehozunk egy m_file változót és megadjuk neki az i-edik m_devices mappában található w1_slave fájlt. A 33. sorban lévő if feltételben lévő függvénnyel megnyitjuk a m_file fájlt. Ha valamiért ez nem olvasható, akkor bezárjuk a fájlt és hibaüzenet iratunk ki a parancssorba. Ha a fájl megnyitható, akkor a 45. ábrában látható programkód fut le. A 40. sorban létrehozunk egy in nevű QTextStream változót és megadjuk neki az m_file-t. Ezután az in változó segítségével az összes karaktert beolvassuk a hőmérsékletmérő fájljából a text változóba. A fájlokban a hőmérséklet a t= jel után van megadva, amit a 43. sorban lévő paranccsal megkeresünk és az utána lévő 6 karaktert beírjuk a temp QString változóba. Ezután a változó elején lévő „t=” azonosítót levágjuk a remove paranccsal, majd a trim segítségével a temp-et megtisztítjuk az összes szemmel nem látható, de felesleges karaktertől. A 47. sorban a QString-ben tárolt hőmérséklet értéket valós számmá alakítjuk, egy tizedes jegy pontossággal, és az m_temperature tömb i-edik elemében tároljuk. A 49., 50. és 52. sorban hibakezelésért felelős feltételek vannak. Ha a fájlban a „NO” karakterek találhatóak, akkor az adat CRC hibás. Ez azt jelenti, hogy adatküldés során a fogadott adat különbözik az elküldött adattól. Ebben az esetben a hőmérséklet helyett az „ECRC” hibaüzenet lesz látható. Az „E02” és „E03”-as hibaüzenet akkor jelenik meg, ha a Raspberry PI és szenzor között megszakad a kapcsolat.
- 43 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
45. ábra ReadTempSensors() függvény Az 54. és 63. sor között lévő kód csak debug módban működik. Ha ez engedélyezve van, akkor parancssorba kiírja a megadott változók értékét megkönnyítve ezzel a hibaellenőrzést. A 64. sorban bezárja az m_file-t. A 66. sorban kiad egy UpdateTemp() jelet, ami a Dialog.cpp fájlban a WriteTemp() függvényt meghívja, ahol a mért hőmérséklet értékeket kiírja főablakba és a szolenoidokat kapcsolja. Ha a for függvény végrehajtódott az összes m_devicecount változón, akkor a program a 68. sorban lévő ReadTempSensorsFinished() jelet kibocsátja, ami össze van kötve a dialog.cpp-ben a ReadTempSensors() függvénnyel és így újra lefuttatja azt. A 46. ábrán látható ReadTemp() függvény az m_temperature tömb t-edik elemének kiolvasását szolgálja. A 77. sorban lévő SetOutput() függvény állítja a szolenoidok működését. Négy paraméter szükséges a függvényhez az SP1, SP2, SP3, amik a hőmérséklet setpointok, és a hiszterézis. A setpointokat összehasonlítja a hozzájuk tartozó m_temperature hőmérsékletekkel. Ha a hőmérséklet érték nagyobb a setpointnál, akkor a hozzá tartozó m_output változót 1-re írja. Ha a hőmérséklet kisebb, mint a setpointból kivont hiszterézis, akkor az m_outputot 0-ra írja át.
- 44 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
46. ábra ReadTemp() és SetOutput() függvény A 47. ábrán látható GetOutput() segítségével ki tudjuk olvasni a függvénynek megadott az m_output értékét.
47. ábra GetOutput() függvény 5.3.4. ads1115.cpp Az ADS1115 analóg-digitál konverterrel a Raspberry PI I2C protokollon keresztül kommunikál. Ehhez szükséges függvényeket az előre megírt Gnublin library [8] tartalmazza a gnublin.cpp-ben. Ezek a függvények a send(), ami adat küldésre, és a receive(), ami adat fogadásra való. Az kommunikáció egyszerű kezeléséhez létrehoztam a saját library-at, aminek alapul az Arduinora megírt ADS1115-t kezelő libraryt vettem [9]. A 49. ábrán lévő programkódban látható az ADS1115 konstruktora, ahol létrehozott objektum két változójának alap értéket adunk meg. Az m_conversionDelay egy késleltetés, aminek az értéke 20 ms, az m_gain pedig az analóg-digitál konverternek beállított 2/3-os PGA érték.
- 45 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
48. ábra ADS1115 konstruktora A Begin() függvényt az ADS1115 konverter I2C slave címének megadására használjuk. Ezt a címet a program elmenti és beállítja kommunikációs célpontként.
49. ábra Begin() függvény Az adatok küldése és fogadása I2C protokollon keresztül történik. Az 50. ábrán látható függvények a kommunikáció megkönnyítését szolgálják. A 142. sorban látható Write() függvénynek egy bájt méretű adatot kell megadni, amit az I2C porton elküld. A 147. sorban lévő WriteReg8() függvény szintén egy bájt adatot küld el, de itt már meg lehet adni, hogy melyik regisztert címezzük. A regiszter címe a reg változóba, az adat a data változóba kerül.
50. ábra I2C adatcserét segítő függvények
- 46 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
A változókat beírjuk a TxBuffer tömb elemeibe, amit a 151. sorban lévő i2c.send() utasítás kiküld a porton. A 154. sorban található WriteReg16() függvénynél a WriteReg8()hoz hasonlóan meghatározhatjuk, hogy melyik regisztert címezzük, de itt egy két bájt hosszúságú adatot küldhetünk. A TxBuffer tömb elemei egy bájt nagyságúak, így a 157. és 158. sorban a „data” adatot maszkoljuk és eltoljuk úgy, hogy feltöltsék a tömböt. A 159. sorban lévő i2c.send() függvénnyel kiküldjük a TxBuffer tömböt az I2C porton. A Read() függvény egy bájt adat beolvasására képes az I2C buszról. A ReadReg8() és ReadReg16() függvények egy, valamint két bájt adat beolvasására képesek a reg változóba beírt regiszterről. Az 51. ábrán látható readADC_Differential_0_1() függvény végrehajtásakor tudjuk megmérni az analóg értéket 0-1-es csatornán. A 70. sorban létrehozunk egy config változót, aminek megadjuk a kívánt mérési paramétereket. A 75. sorban beállítjuk a „single-shot” mérési módot. A 78. sorban a config változónak beállítjuk az m_gain-t, ami alap esetben 2/3-os, a 81. sorban megadjuk, hogy „differential” módban mérünk és 84. sorban pedig utasítjuk az analóg-digitál konvertert, hogy hajtson végre egy mérést. A 87. sorban lévő WriteReg16() függvénnyel elküldjük a config változót az I2C buszon, majd a 90. sorban lévő msleep() függvénnyel késleltetünk, amíg a mérés végrehajtódik. A 93. sorban a ReadReg16() függvénnyel kiolvassuk a megmért 16 bites feszültség értéket ADS1115 regiszteréből. Az 2-3-as csatornán történő mérést a readADC_Differential_2_3() végzi el. Ez a függvény mindenben megegyezik a fentebb leírt függvénnyel, azzal az egy különbséggel, hogy a config változónak a 2-3-as csatorna mérését állítjuk be.
51. ábra Analóg érték kiolvasása a 0-1 es csatornán
- 47 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
5.3.5. setpoint.cpp A SetPoint értékbeállító ablak programkódja a setpoint.cpp fájlban található. Itt található a gombok kezelése valamint az „OK” gomb megnyomásakor végbemenő folyamatok. 52. ábrán látható a függvények kezelik a gombok lenyomásakor végrehajtott feladatot. A Setpoint ablakon 10 számjegy van 0-tól 9-ig és egy pont gomb. A gombok lenyomásakor a program gombhoz tartozó karaktert beírja az ablakon található lineEdit számbevitel mezőbe az insert() függvény segítségével.
52. ábra Számjegy beviteli gombok Az „OK” gomb lenyomásakor a 80. sorban lévő függvény fut le. A 82. sorban vizsgáljuk, hogy az lineEdit számbeviteli mező utolsó karaktere pont-e, ha igen akkor azt a program kitörli. A 83. sorban az if feltétellel megnézzük, hogy a számbeviteli mező üres-e. Ha üres, akkor nem történik semmi, ha nem üres, akkor a 85. sorban a program kibocsát egy jelet, amiben a számbeviteli mezőben megadott érték lesz. A 86. sorban egy 1 ms-os késleltetéssel végrehajtjuk az EmitSaveSettings() függvényt. Ez késleltetés azért szükségszerű, hogy a beírt értékek mentésekor az újat mentse el a program a régi helyett. A 87. sorban a close() utasítással bezárja az ablakot. A 92. sorban lévő függvény a „CLOSE” gomb lenyomásakor fut le, ami bezárja az ablakot bármi egyéb feladat végrehajtása nélkül
53. ábra „OK” gomb és „CLOSE” gomb - 48 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
5.3.6. settings.cpp A settings.cpp fájlban található a Settings ablak működéséhez a programkód. Az 54. ábrán látható a settings.cpp konstruktora. A 9. sorban létrehozunk egy új SetPoint ablakot. A 10. sorban megadjuk, hogy a SetPoint ablak OK gombjának lenyomásakor a program végrehajtsa a CalculateLength() függvényt. A 18. sorban létrehozunk egy maszkot, amit a 21. sorban beállítunk a SetPoint ablak számjegy beviteli mezőjének. Itt csak 0-tól 9999.9ig adható meg érték matematikailag helyes számformátumban.
54. ábra settings.cpp konstruktora Az 55. ábrán látható az alfa érték beállításáért felelős függvény. A működése megegyezik a 38. ábrához tartozó magyarázatban leírtaknak. Ez a settings.cpp fájlban lévő d, x és hiszterézis értékek megadásáért felelős függvényekre is vonatkozik.
55. ábra alfa érték beállítás Az 56. ábrán látható on_BackButton_clicked() függvény a Settings ablakon a vissza gomb megnyomásakor fut le. A 71. sorban lévő utasításra a program CopyParameters() jelet kibocsátja, ami utána a 72. sorban a close() parancsra az ablakot bezárja. A 85. sorban lévő Tg() tangens függvény, ami radián helyett szögben számol. A 75. sorban a CalculateLength() függvény az OK gomb megnyomásakor fut le. A 77. sorban a program kiszámolja az csonka kúp magasságát a tartály d átmérőjéből és az α szögéből. Ha ez az érték „.0” karakterekre végződik, akkor a végéről eltávolítja azokat a 78. sorban. A 80. - 49 -
Mérőrendszer fejlesztése Raspberry PI hardverre A Raspberry PI-n futó szoftver és programkódja
sorban a kiszámolt m_length értéket kiiratja a Settings képrenyőre. A 81. sorban lévő if függvénnyel ellenőrzi, hogy ha az x hossza nagyobb, mint az l, akkor az x-et l értékével teszi egyenlővé.
56. ábra settings.cpp függvények
- 50 -
Mérőrendszer fejlesztése Raspberry PI hardverre Összefoglalás
6. Összefoglalás Diplomamunkámmal sikerült egy olyan rendszert tervezni, amivel sörerjesztést lehet szabályozni és ellenőrizni. A rendszer három helyen mér hőmérsékletet és két helyen nyomást. Az érintőképernyős kijelzőn keresztül és az erre kialakított szoftverablakok segítségével a programnak könnyen megadhatóak a kívánt paraméterek. A bevitt és a megmért paraméterekből a rendszer ki tudja számolni a tartályban lévő sör űrtérfogatát. A mért hőmérsékletek, a megadott setpointok és a hiszterézis alapján a program vezérli a sör hűtéséért felelős szolenoidokat. A Raspberry PI beágyazott rendszerként viselkedik, mivel indulás után azonnal betölti a programot és futtatja. Az Altium Designer programmal megterveztem a rendszer áramköri rajzát. A felhasznált TSR 1-2450 IC-k a Raspberry PI, az LCD kijelző és a rendszer tápfeszültség ellátását fedezi. Olyan analóg-digitál konvertert választottam, ami a nyomás távadók analóg jelét méri és I2C protokollon továbbküldi a Rasberry PI-nek. A szolenoidok meghajtására áramkört csináltam, ami a Raspberry PI kimeneteit kismértékben terheli meg. Az áramkör alkatrészeinek egy olyan NYÁK-ot terveztem, ami a Rasberry PI-hez könnyen csatlakoztatható. A NYÁK-ok feliratokkal van ellátva és LED-ekkel, amik jelzik a szolenoidok működését. A PI-n futó programot Qt alatt fejlesztettem. A program I2C protokollon keresztül kommunikál az ADS1115 analóg-digitál konverterrel és 1-Wire buszon a DS18B20 hőmérsékletmérő szenzorokkal. A forráskód fájljait és a program működéséhez szükséges lényeges részeket megmagyaráztam. Ezúttal szeretnék köszönetet mondani a Zip Technologies cégnek és Hajdú Istvánnak a feladatért, a rendszer megvalósításához szükséges alkatrészek beszerzéséért és feladat közben nyújtott segítségéért.
- 51 -
Mérőrendszer fejlesztése Raspberry PI hardverre Summary
7. Summary With my thesis work I managed to design a system capable of regulating and controlling brewing. The system measures temperature at three locations and pressure at two. The input of the desired parameters can be easily done through the touch screen and software windows. From the measured and entered parameters the system can calculate the volume of the beer in the tank. The program controls the solenoids responsible for cooling based on the measured temperatures, given setpoints and the hysteresis. The Raspberry PI acts as an embedded system, as after the initialization it loads and executes the program. I have designed the system’s circuit diagram with the help of Altium Designer. The TSR 1-2450 ICs I have used provide the power for the Raspberry PI, the LCD screen and the system itself. I have chosen an analogue-digital converter that measures the analogue signals of the pressure gauge, and forwards them through an I2C protocol to the Raspberry PI. For driving the solenoids, I have designed a circuit that places a small load on the outputs of the Raspberry PI. For the circuit components I have designed a PCB that is easily connectable to the Raspberry PI. This PCB has labels and LEDs, signaling the operation of the solenoids. I have developed the program running on the PI with Qt. The program communicates with the ADS1115 analogue-digital converter through I2C protocol, and through 1-Wire bus with the DS18B20 thermometer sensors. I have explained the files of the source code and the vital parts required for the functioning of the program. I would like to thank Zip Technologies and István Hajdú for the task, for the procurement of the components required to create this system, and for the help I received during the making of this project.
- 52 -
Mérőrendszer fejlesztése Raspberry PI hardverre Summary
Irodalomjegyzék [1.] Dallas Semiconductor DS18B20 Datasheet [2.] http://www.raspberrypi.org/ [3.] http://en.wikipedia.org/wiki/Raspberry_Pi [4.] http://elinux.org/RPi_Low-level_peripherals [5.] http://www.conrad-electronic.co.uk/ce/en/product/582302/M-M-InternationalB205DBZ-Solenoid-Valve-Series-2000 [6.] http://en.wikipedia.org/wiki/Qt_%28software%29 [7.] http://www.chalkelec.com/?page_id=1280#!/~/product/category=3094861&id=21750201 [8.] https://github.com/adafruit/Adafruit_ADS1X15 [9.] http://en.gnublin.org/index.php/API [10.] http://ziptechnologies.eu/ [11.] http://upload.wikimedia.org/wikipedia/commons/3/3d/RaspberryPi.jpg [12.] http://elinux.org/images/2/2a/GPIOs.png [13.] ADS1115 Datasheet [14.] http://images-cdn.ecwid.com/images/313017/220435718.jpg [15.] http://www.conradelectronic.co.uk/medias/global/ce/5000_5999/5800/5820/5828/582860_BB_00_FB.E PS_1000.jpg [16.] http://www.conradelectronic.co.uk/medias/global/ce/5000_5999/5800/5830/5834/583434_BB_00_FB.E PS_1000.jpg [17.] http://www.jumo.de/productgroupimage.widget?imageType=IMAGE_LARGE&pro ductgroupNo=404366 [18.] Traco Power DSR 1-2450 Datasheet [19.] http://pewa.panasonic.com/assets/pcsd/catalog/aqy-dip-form-a-reinforced-isolationcatalog.pdf
- 53 -