Fórum témák
» Több friss téma |
Cikkek » Tényleg nincs királyi út? I. rész Tényleg nincs királyi út? I. rész
Szerző: icserny, idő: Jún 22, 2013, Olvasva: 26939, Oldal olvasási idő: kb. 9 perc
SzenzorokEbben a fejezetben különféle szenzorok használatával ismerkedünk meg. A szenzorok feladata az, hogy valamilyen fizikai mennyiséget (hőmérséklet, relatív páratartalom, távolság) a mikrovezérlő által érzékelhető elektromos jellé alakítsák. Az így kapott jel lehet analóg, amelyet az ADC-vel kel digitális jellé alakítani, vagy lehet eleve digitális, amelyet a digitális perifériák segítségével olvashatunk be. Határeset az ultrahangos távolságmérő szenzor, amely digitális jelet produkál, de a jel időtartama változó, s ez hordozza a számunkra érdekes analóg jelet. Mintapélda: hőmérés a beépített szenzorralKezdjük a szenzorok használatát a beépített hőmérővel! Ennek legfőbb előnye az, hogy az MSP430 mikrovezérlőnkben eleve benne van, nem kell hozzá beszerezni semmit. A beépített hőmérő a mikrovezérlő szilíciumlapkájának hőmérsékletét méri, ami nem feltétlenül egyezik meg a környezet hőmérsékletével. Emellett a hőmérő offszethibája is nagy, tehát ha ha a hőmérséklet valódi értékét akarjuk meghatározni, akkor a hőmérőt kalibrálni kell. A belső hőmérő használatához az ADC 10. csatornáját kell kiválasztani. Az MSP430x2xx Family User's Guide szerint a hőmérő a Celsius fokokban mért TEMPC hőmérséklet hatására az alábbi képlettel számítható VTEMP névleges feszültséget adja (Voltban kifejezve): VTEMP=0.00355*TEMPC+0.986 Ehhez a feszültséghez tartozó analóg-digitális konverzió eredmény: ADCMEM = VTEMP*1023/VREF A fenti két egyenletből behelyettesítéssel és átrendezéssel a hőmérséklet kifejezhető: TEMPC = (ADCMEM * VREF/1023 - 0.986)/0.00355 Mivel a mérendő jel viszonylag kicsi, a konverziót célszerű a belső 1,5 V-os referenciához viszonyítva végezni (VREF = 1.5 V). Hardver feltételek: - Launchpad kártya MSP430G2553, MSP430G2452 vagy MSP430G2231 mikrovezérlővel - MSP430G2553 mikrovezérlő esetén az RX/TX átkötéseket hardveres, a többi mikrovezérlő esetén pedig szoftveres UART állásba hell helyezni Az előkészítő részben így adhatjuk meg, hogy az ADC az 1,5 V-os belső referenciát használja:
Az eredmény átszámításhoz kényelmi okokból lebegőpontos (float) típusú változót használunk. Ez erőforrás pazarló megoldás, de gyakorlati jelentőség itt most nincs. A számolások egyszerűsítése céljából a konstans kifejezéseket előre kiszámoltuk: VREF/1023/0.00355 = 0.413 és 0.986/0.00355 = 277.8 Az eredményt a szokásos módon, a soros porton keresztül íratjuk ki. A Celsius fokokban mért hőmérséklet mellett az ADC-ből kiolvasott nyers értéket is kiíratjuk.
5_1. ábra: A TemperatureSensor program listája A program futási eredménye az alábbi ábrán látható. Az egyik dolog, ami feltűnő, hogy a mutatott hőmérséklet legalább 3-4 fokkal fölé lő a környezet hőmérsékletének (a mérés kb. 26°C-os helyiségben történt). A másik sajnálatos dolog az, hogy az értékek nagy szórást mutatnak, s ez az Energia hibás ADC kezelésének tulajdonítható (saját C prgrammal nem ugráltak így az eredmények).
5_2. ábra: A TemperatureSensor program futásának eredménye
Mintapélda: Hőmérséklet és relatív páratartalom mérés DHT22 (AM2302) szenzorralA következő mintaprogramban a DHT22 szenzort használjuk (a Ghuangzou Aosong Electronic Co. Ltd. ezt AM2302 néven forgalmazza). A négy kivezetéses tokban helyezkedik el a hőmérő, a relatív páratartalom mérő és egy 8 bites mikrovezérlő, amely a gyári kalibrációs adatokat tartalmazza és az egyvezetékes digitális kommunikációt lebonyolítja. A szenzorból a hőmérséklet Celsius fokokban, 0,1 °C felbontással, a relatív páratartalom pedig százalékben, 0,1 %-os felbontással digitálisan olvasható ki.
Bekötés: 1-es láb (a képen a bal szélső): VCC, azaz 3,3 - 5 V közötti tápfeszültség 2. láb: SDA, azaz digitális I/O 3. láb: NC, azaz nincs bekötve 4. láb: GND, a közös pont
Megjegyzések:
Hardver követelmények:
5_4. ábra: A DHT22 szenzor bekötési vázlata A szenzor kezeléséhez Rob Tillart DHTLib programkönyvtárát és mintaprogramját fogjuk használni, amely DHT22 és DHT11 szenzorok használatára egyaránt használható. Mivel ez nem része a "gyári" Energia kiadásnak, külön be kellett szerezni és be kellett illeszteni az Energia programkönyvtárai közé. A felhasználó által telepített könyvtári modulokat a saját vázlatfüzet (Sketch book) libraries nevű mappájában kell elhelyezni. Ez nálam a Dokumentumok\Energia\libraries mappában található, ebben kell létrehozni egy DHTLib nevű almappát, s ide kell bemásolni a dht.h és dht.cpp állományokat. Opcionálisan a DHTLib-en belül egy examples almappát is létrehozhatunk az eredeti mintaprogram számára. Megjegyzés: ez a példa is jól mutatja az Arduino kompatibilis platform előnyét, hiszen a DHTLib programkönyvtár és mintapélda Arduino környezethez készült (ATMEGA168 vagy ATMEGA328 mikrovezérlőhöz), mi pedig akár változtatás nélkül használhatjuk az MSP430 Launchpad kártyához! Az eredeti mintaprogram egy DHT11 és egy DHT22 szenzort használt, melyek közül a DHTLIB_test.ino programban csak a DHT22 kezelését hagytam meg. (A DHT11 egyébként hasonló működésű, de butább, kisebb felbontású szenzor).
A szenzor kezelését a dht objektumosztály példányosításával kell kezdeni. A DHT22 szenzor a read22() metódussal olvasható ki. Paraméterként meg kell adni azt a kivezetést, amelyhez hozzárendeljük a szenzor SDA lábát (esetünkben a P1_6 kivezetést használtuk, de bármelyik szabad digitális I/O láb választható). Egy DHT11 típusú szenzor hasonló módon a read11() metódussal lenne kiolvasható. Megjegyzés: A DHT22 szenzor viszonylag lassú, a kiolvasások között legalább 2 másodperc szünetet kell tartani! Kiolvasáskor a visszatérési érték jelzi, hogy sikeres volt-e a kiolvasás. A kiolvasott értékek a dht objektum lebegőpontos típusú humidity és temperature nevű publikus változóiból vehetők elő. A kiolvasott eredményket a szokásos módon a soros porton keresztül íratjuk ki, a kiíratást 1 tizedesjegyre végezzük. Egy tipikus futás eredménye az alábbi ábrán látható. 5_5. ábra: A DHTLib_test program futási eredménye
Relatív páratartalom és hőmérséklet mérése grafikus kijelzésselEnnek a mintapéldának az alapötlete és eredeti programjai Rajendra Bhatt honlapjáról (www.embedded-lab.com) származnak. Az eredeti projekt DHT11 szenzort használt, ezért a programokat módosítani kellett, hogy a DHT22 szenzor nagyobb felbontását kihasználhassuk. Az eredeti projektben PIC32 alapú CHIPKit UNO32 kártyát használtak, ami az MPIDE nevű, szintén Arduino alapú fejlesztői környezetben programozható. Az Arduino kompatibilitásnak köszönhetően a programot elvileg módosítás nélkül is használhattuk volna, ha DHT11 szenzort használunk. A DHT22 szenzorra való tekintettel azonban egyszerűbbnek bizonyult az előző mintaprogram "lebutított" (kevesebb kiírást tartalmazó ) változatát használni. Hardver követelmények:
A projekt két programot igényel: az MSP430 Launchpad kártyán futó firmware és a PC-n futó, Processing környezetben fejlesztett alkalmazás kell hozzá. A mikrovezérlőn futó alkalmazásAz MSP430 Launchpad kártyán futó program az előző példához hasonlóan rendszeres időközönként kiolvassa a DHT22 szenzor adatait, majd a soros porton keresztük kiküldi azokat a PC felé. Az egyszerűsített kiíratás szerint egy sor csak két számot tartalmaz, amelyeket egy szóközzel választunk el. 5_3. lista: A TRHlogger program listája
A PC-n futó alkalmazásA PC-n futó alkalmazás módosításához vagy újrafordításához telepíteni kell a Processing fejlesztői környezetet. A cikk szoftver-mellékletében azonban lefordított bináris programot is mellékeltünk, tehát az egyszerű futtatáshoz nincs szükség a Processing fejlesztői környezet telepítésére, csupán a Java Futtatói Környezet (JRE) kell hozzá. A Processing programok ugyanis Java nyelvre fordulnak, s a futtatható programot végeredményben a Java fordító állítja elő (az alapértelmezett Processing telepítési csomag tartalmazza a Java fordítót is). 5_4. lista: a Processing nyelven megírt, DHT22 szenzorhoz módosított alkalmazás listája
A PC-n futó alkalmazás - azon kívül, hogy beolvassa és a képernyőn kijelzi a virtuális soros porton érkező adatokat, kezel egy egérrel kattintható gombot, amely elindítja, illetve leállítja a naplózást. A naplófájlban soronként időbélyeggel ellátva tárolódnak el a beolvasott páratartalom és hőmérséklet adatok. 5_6. ábra: A TRHlogger és dht22_logger programok futási eredménye
Mintapélda: Ultrahangos távolságmérésA következő példában egy HC-SR04 ultrahangos távolságmérő szenzort használunk, amellyel kb. 2 - 200 cm tartományban mérhetünk. A szenzor modul egy ultrahang adóból, egy ultrahang vevőből és a jelfeldolgozó elektronikából áll. A szenzor modul +5 V-os tápfeszültséget igényel. Ezért az Echo kimenet jele is 5 V körüli, amit nem vezethetünk közvetlenül a mikrovezérlőnk bemenetére, hanem egy feszültségosztót, vagy legalább egy áramkorlátozó ellenállást be kell iktatni. Utóbbi esetben a mikrovezélő bemenetéhez tartozó belső védődióda végzi a feszültség korlátozását. A négy kivezetés bekötése az alábbi: 1. VCC (+5 V-ot igényel) 2. Trigger (min. 10 μs széles impulzust vár) 3. Echo (a jelterjedési időnek megfelelő szélességű impulzus) 4. GND (a közös pont)
5_7. ábra: A HC-SR04 ultrahangos távolságmérő szenzor
5_8. ábra: A HC-SR04 szenzor jeleinek idődiagramja
5_9. ábra: Az ultrahangos távolságmérő kapcsolási vázlata Amint a fenti ábrán láthatjuk, az ultrahangos szenzor +5 V-os tápfeszültségét az USB csatlakozó melletti TP1 pontról kell vennünk, mert a mikrovezérlő által használt 3,5 V nem elegendő a működéséhez. Az Echo kimenet jelének korlátozását itt a védődiódára bíztuk, de ez esetben szükségünk van egy áramkorlátozó ellenállásra. A mintaprogramban az Echo impulzus szélességét a pulseIn(láb,HIGH) függvény segítségével mérjük meg. Az első paraméter a bemenetet jelöli ki, a második pedig azt mondja meg, hogy az aktív szint magas, vagy alacsony. Mivel az időmérés az átmenetek észlelése között végrehajtott utasításciklusok számával történik, ezért a mérés kissé pontatlan, az eredmény megbízhatatlan. Pontosabb méréshez hardveres időmérést kell megvalósítani egy Timer valamelyik Input Capture moduljának segítségével. Ezt azonban az Energia gyári függvényei jelenleg még nem támogatják, magunknak kellene megírni. Az itt bemutatott mintaprogramot Arduino kártyához írták, az eredeti program az arduinobasics.blogspot.hu honlapról tölthető le. Az MSP430 Launchpad kártyához történő adaptálás során a programot gyakorlatilag csak a fenti kapcsoláshoz tartozó lábkiosztáshoz kellett hozzáigazítani. A program listája és eredménye az alábbi ábrákon látható. 5_10. ábra: A Sonar program listája 5_11. ábra: A Sonar program futási eredménye Megjegyzés: Az ultragangos távolságmérő előtt egy tárgyat fokozatosan távolítottunk. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |