Ústav fyzikální elektroniky PĜírodovČdecké fakulty Masarykovy univerzity v BrnČ
VYUŽITÍ MIKROKONTROLERU V EXPERIMENTU – MċěENÍ ÚýINKģ FOTOKATALYTICKÝCH DċJģ USE OF MICROCONTROLLER IN THE EXPERIMENT – MEASUREMENT OF PHOTOCATALYSIS PROCESSES EFFECTS
BAKALÁěSKÁ PRÁCE BACHELOR’S THESIS
AUTOR PRÁCE
Bc. Robert Kratochvíl
AUTHOR
VEDOUCÍ PRÁCE SUPERVISOR
BRNO 2010
Mgr. Pavel SĢahel, Ph.D.
-2-
Abstrakt Práce se zabývá možností využití bČžnČ dostupných mikrokontrolerĤ ve fyzikálních experimentech. Z celého spektra použití je v práci demonstrována jedna konkrétní aplikace ukazující výhody použití mikrokontroleru. Pomocí mikrokontrolerem Ĝízeného mČĜicího pĜístroje je v práci zpracováno vyhodnocení výsledkĤ fotokatalytických dČjĤ, které nastávají u speciálních nátČrĤ urþených pro venkovní samoþisticí fasády budov, vzduchových filtrĤ apod. Tyto nátČry þi filtry obsahují oxid titaniþitý a jsou schopny po osvícení ultrafialovým záĜením napĜ. ze sluneþního spektra rozložit usazené neþistoty na svém povrchu na neškodné látky.
Abstract The labor is handling of the possibilities of using commonly obtainable microcontrollers in physical experiments. From the entire spectrum of possible applications one concrete application demonstrating advantages of microcontrollers was selected. Through the microcontroller operated measuring device is in the labor processed evaluation of results of photocatalysis processes, which occures when special outdoor facade paints or air filters are used. These paints or filters contains titanic oxide and are able to dissociate settled dirt to harmless substances when lighten by ultra-violet rays from light spectrum.
Klíþová slova Fotokatalýza, ultrafialové záĜení, speciální nátČr, oxid titaniþitý, TiO2, metylenová modĜ, mikrokontroler, laser, laserová dioda, fototranzistor, zpracování signálĤ, digitalizace, komunikace po USB.
Keywords Photocatalysis, ultra-violet radiation, special paint, titanic oxide, TiO2, methylene blue, microcontroller, laser, laser diode, phototransistor, processing of signals, digitizing, communication via USB.
-3-
Bibliografická citace díla KRATOCHVÍL, R. Využití mikrokontroleru v experimentu. Brno: Masarykova univerzita, PĜírodovČdecká fakulta, 2010. 107 stran. Vedoucí bakaláĜské práce Mgr. Pavel SĢahel, Ph.D.
PodČkování Za metodické a cílené vedení dČkuji vedoucímu mé bakaláĜské práce Mgr. Pavlovi SĢahelovi, Ph.D. Dále dČkuji Mgr. ZdeĖkovi Navrátilovi, Ph.D. za cenné konzultace. Mé podČkování náleží také jednatelce firmy AJ Technology, s r.o. Ing. AnnČ Jurdové za vĜelou pomoc pĜi výrobČ desek plošných spojĤ. Za nepostradatelné rady pĜi vytváĜení programu COM Receiver dČkuji Martinovi Skalskému. Velký dík zaslouží i tým odborníkĤ z kurzu ȕ893 za provedené korektury.
Prohlášení autora o pĤvodnosti díla Prohlašuji, že svoji bakaláĜskou práci na téma Využití mikrokontroleru v experimentu mČĜení úþinkĤ fotokatalytických dČjĤ jsem vypracoval samostatnČ pod vedením vedoucího bakaláĜské práce a s použitím odborné literatury a dalších informaþních zdrojĤ, které jsou všechny citovány v práci a uvedeny v seznamu literatury na konci práce. Jako autor uvedené bakaláĜské práce dále prohlašuji, že v souvislosti s vytvoĜením této bakaláĜské práce jsem neporušil autorská práva tĜetích osob, zejména jsem nezasáhl nedovoleným zpĤsobem do cizích autorských práv osobnostních a jsem si plnČ vČdom následkĤ porušení ustanovení § 11 a následujících autorského zákona þ. 121/2000 Sb., vþetnČ možných trestnČprávních dĤsledkĤ vyplývajících z ustanovení § 152 trestního zákona þ. 140/1961 Sb.
_______________________________ Bc. Robert Kratochvíl
-4-
OBSAH 1
ÚVOD ....................................................................................................................9
2
FYZIKÁLNÍ A CHEMICKÁ PODSTATA FOTOKATALÝZY ...............................11 2.1 2.2
3
VYUŽITÍ TIO2 FOTOKATALÝZY ........................................................................15 3.1 3.2
4
VLASTNOSTI TIO2 NÁTċRģ ................................................................................15 DALŠÍ APLIKACE ...............................................................................................17
ZKOUMÁNÍ ÚýINKģ FOTOKATALÝZY V LABORATOěI ................................19 4.1 4.2
5
TIO2 FOTOKATALÝZA ........................................................................................11 CHEMICKÉ REAKCE ..........................................................................................13
ROZDÍLY MċěENÍ OPROTI REÁLNÝM PODMÍNKÁM .................................................19 PRINCIP MċěENÍ...............................................................................................21
ELEKTRONIKA MċěICÍHO PěÍSTROJE ..........................................................24 5.1 NAPÁJENÍ ........................................................................................................26 5.2 LASEROVÁ DIODA .............................................................................................29 5.2.1 Vybraná dioda .........................................................................................32 5.3 FOTOTRANZISTOR ............................................................................................33 5.3.1 Vybraný fototranzistor..............................................................................34 5.4 MIKROKONTROLER ...........................................................................................38 5.5 DISPLEJ ..........................................................................................................41 5.6 USB PěEVODNÍK..............................................................................................43 5.7 MċěICÍ PěÍSTROJ .............................................................................................48
6
PROGRAMOVÉ VYBAVENÍ ěÍDICÍHO MIKROKONTROLERU........................51 6.1 6.2 6.3 6.4 6.5 6.6
7
DEFINICE PROMċNNÝCH ...................................................................................58 HLAVNÍ FUNKCE ...............................................................................................59 ANALOGOVċ-DIGITÁLNÍ PěEVOD ........................................................................61 ZPRACOVÁNÍ NAýTENÝCH HODNOT ....................................................................62 ZOBRAZENÍ HODNOTY NA DISPLEJI .....................................................................63 ODESLÁNÍ HODNOTY PO SÉRIOVÉ LINCE .............................................................66
VYUŽITÍ POýÍTAýE ...........................................................................................68 7.1 PODOBA PROGRAMOVÉHO OKNA .......................................................................70 7.2 FUNKCE TLAýÍTEK ............................................................................................70 7.2.1 Tlaþítko New file ......................................................................................70 7.2.2 Tlaþítko Open port ...................................................................................72 7.2.3 Tlaþítka Run a STOP...............................................................................72 7.2.4 Tlaþítko Exit.............................................................................................73 7.3 PěÍJEM, ZOBRAZENÍ A ZÁPIS DAT .......................................................................73 7.4 ZPRACOVÁNÍ VÝSLEDKģ....................................................................................77
-5-
8
MċěENÍ REFERENýNÍCH VZORKģ .................................................................78 8.1 8.2
9
POSTUP MċěENÍ ..............................................................................................79 VÝSLEDKY .......................................................................................................80
ZÁVċR ................................................................................................................86
POUŽITÁ LITERATURA...........................................................................................88 PěÍLOHY ..................................................................................................................90 VÝPIS PROGRAMU MIKROKONTROLERU .......................................................................90 VÝPIS PROGRAMU PRO PěÍJEM, ZOBRAZENÍ A ZÁPIS DAT ...............................................97
-6-
SEZNAM OBRÁZKģ OBR. 2.1: INTENZITA SLUNEýNÍHO ZÁěENÍ V ýÁSTI SPEKTRA; [8] ......................................12 OBR. 3.1: SAMOýISTICÍ SKLO, [1] ..................................................................................17 OBR. 4.1: KÁDINKA S METYLENOVOU MODěÍ SLOUŽÍCÍ PRO MċěENÍ ..................................20 OBR. 4.2: ABSORPýNÍ SPEKTRUM METYLENOVÉ MODěI; [7] .............................................22 OBR. 5.1: SCHÉMA ZAPOJENÍ ........................................................................................25 OBR. 5.2: OSAZENÁ DESKA, POHLED SHORA ..................................................................27 OBR. 5.3: OSAZENÁ DESKA, POHLED ZESPODU ...............................................................28 OBR. 5.4: PRINCIP TěÍHLADINOVÉHO LASERU; [6] ...........................................................30 OBR. 5.5: PRINCIP ýTYěHLADINOVÉHO LASERU; [6].........................................................31 OBR. 5.6: VYBRANÁ LASEROVÁ DIODA ...........................................................................32 OBR. 5.7: NÁKRES LASEROVÉ DIODY; [13] .....................................................................33 OBR. 5.8: ZÁVISLOST FOTOPROUDU NA NA PLOŠNÉM VÝKONU DOPADAJÍCÍHO ZÁěENÍ; [14] 34 OBR. 5.9: NÁKRES FOTOTRANZISTORU; [14] ..................................................................35 OBR. 5.10: CITLIVOST V ZÁVISLOSTI NA VLNOVÉ DÉLCE; [14] ...........................................36 OBR. 5.11: OZAěOVACÍ CHARAKTERISTIKA FOTOTRANZISTORU; [14] ................................37 OBR. 5.12: ROZMÍSTċNÍ PINģ ATMEGA16; [11] ..............................................................39 OBR. 5.13: PROGRAMÁTOR AVR DRAGON ....................................................................41 OBR. 5.14: ROZMÍSTċNÍ SEGMENTģ ýÍSLICE; [15]...........................................................42 OBR. 5.15: ZAPOJENÍ SEGMENTģ DISPLEJE; [15] ............................................................42 OBR. 5.16: NÁKRES DISPLEJE; [15] ...............................................................................43 OBR. 5.17: SCHÉMA REDUKCE PRO FT232R .................................................................45 OBR. 5.18: DESKA REDUKCE PRO FT232R....................................................................46 OBR. 5.19: REDUKCE PRO FT232R ..............................................................................47 OBR. 5.20: MċěICÍ PěÍSTROJ, POHLED SHORA ...............................................................48 OBR. 5.21: MċěICÍ PěÍSTROJ, POHLED ZESPODU ............................................................49 OBR. 5.22: MċěICÍ PěÍSTROJ, POHLED Z BOKU ...............................................................50 OBR. 5.23: MċěICÍ PěÍSTROJ, POHLED ZEPěEDU ............................................................50 OBR. 6.1: NASTAVENÍ MIKROKONTROLERU A FREKVENCE ................................................52 OBR. 6.2: NASTAVENÍ PORTģ A A B...............................................................................53 OBR. 6.3: NASTAVENÍ PORTģ C A D ..............................................................................54 OBR. 6.4: NASTAVENÍ ýASOVAýE ..................................................................................55 OBR. 6.5: NASTAVENÍ SÉRIOVÉ KOMUNIKACE .................................................................56 OBR. 6.6: NASTAVENÍ ANALOGOVċ-DIGITÁLNÍHO PěEVODU ..............................................57 OBR. 7.1: NASTAVENÍ COM PORTU ...............................................................................69 OBR. 7.2: VZHLED PROGRAMOVÉHO OKNA .....................................................................70 OBR. 7.3: PěÍKLAD GRAFU ZÁVISLOSTI PROPUSTNOSTI MċěENÉ KAPALINY NA ýASE ...........77 OBR. 8.1: ZJEDNODUŠENÉ SCHÉMA MċěICÍHO PěÍSTROJE ...............................................79 OBR. 8.2: VZOREK ý. 1 ................................................................................................81 OBR. 8.3: GRAF MċěENÍ VZORKU ý. 1............................................................................81 OBR. 8.4: VZOREK ý. 2 ................................................................................................82 OBR. 8.5: GRAF MċěENÍ VZORKU ý. 2............................................................................83 OBR. 8.6: VZOREK ý. 3 ................................................................................................84 OBR. 8.7: GRAF MċěENÍ VZORKU ý. 3............................................................................85 -7-
-8-
1 Úvod Usazování neþistot pĜevážnČ z automobilové dopravy je dĤležitým faktorem vzhledu budov, zejména ve mČstech. Možnost oplachu venkovní fasády je nereálná a použití hladkých povrchĤ omezí usazování jen þásteþnČ. Proto se dnes objevují nová Ĝešení, tĜeba ve formČ speciálních nátČrĤ, které nejsou vĤþi neþistotám odolné, nýbrž je jsou schopny následnČ fyzikálnČ-chemickými procesy odstranit. Jedním z Ĝešení jsou i nátČry založené na fotokatalytickém dČji oxidu titaniþitého. Neþistota se na povrchu takového nátČru sice usadí, avšak pĜi osvitu sluneþním svČtlem, které obsahuje i ultrafialové záĜení, dojde ke katalýze chemického dČje, jehož výsledkem je rozložení neþistot na látky, které nejsou škodlivé pro životní prostĜedí jako je voda þi oxid uhliþitý. Pro urþení úspČšnosti tČchto dČjĤ je nutné podrobit jednotlivé nátČry laboratorním zkouškám. Neþistoty jsou nahrazeny metylenovou modĜí rozpuštČnou ve vodČ a ultrafialové záĜení Slunce výbojkou. Po ozáĜení nátČru by se mČla snižovat koncentrace metylenové modĜi v roztoku a kapalina by mČla ztrácet svoji modrou barvu. Tento simulovaný proces je tĜeba následnČ vyhodnotit. Existuje celá Ĝada možností jak se výsledku dobrat. NapĜíklad prostým porovnáním zabarvení kapaliny s cejchovaným vzorem, což je pouze orientaþní mČĜení, pĜinášené výsledky mají malé rozlišení a jsou znaþnČ subjektivní. Také je možné nechat udČlat profesionální laboratorní zkoušky, jejichž vyhodnocení ovšem zabere nemalý þas. Laboratorní zkoušky jsou i velmi drahé. Vítaným Ĝešením by byla možnost získat výsledek okamžitČ, pomocí zaĜízení nenároþného na obsluhu, a pokud možno automatizovanČ. PrávČ výrobou takového zaĜízení se zabývá pĜedkládaná bakaláĜská práce. Na základČ požadavkĤ experimentu pro urþení absorpce roztoku metylenové modĜi je navrhnut pĜístroj jednoduchý na obsluhu, umožĖující okamžité odeþítání procentuální absorpce z displeje i pĜenos dat do poþítaþe, který umožní pozdČjší zpracování výsledkĤ. Pro výrobu byly použity bČžnČ dostupné elektronické souþástky i software. Program Ĝídicího mikrokontroleru i program pro pĜíjem, zobrazení a zápis dat jsou psány v jazyce C, komunikace s poþítaþem je zajištČna speciálním integrovaným obvodem a probíhá po sbČrnici USB. Výstupem práce je kompletní pĜístroj sloužící pro mČĜení zmČn koncentrace roztoku metylenové modĜi v laboratorních podmínkách, které se projeví zmČnou intenzity laserového -9-
paprsku procházejícího touto kapalinou. Souþástí práce jsou i výsledky praktického mČĜení na nČkolika vzorcích. Veškeré použité prameny jsou uvedeny v seznamu na konci práce, vytvoĜené programové kódy jsou k náhledu v pĜílohách, softwarové vybavení je pĜiloženo na CD.
- 10 -
2 Fyzikální a chemická podstata fotokatalýzy Zadaný úkol v sobČ obsahuje kombinaci nČkolika dílþích disciplín. Na jedné stranČ stojí fyzikální a chemické pozadí dČjĤ, které probíhají bČhem zkoumaných fotokatalytických reakcí. Na stranČ druhé elektronika, samotná konstrukce zaĜízení, jeho programové vybavení a zpracování dat poþítaþem, þož jsou prvky potĜebné k vyhodnocení výsledkĤ mČĜení. Pro porozumnČní dČjĤm a správnou interpretaci výsledkĤ je nutné seznámit se s obČma celky. První dvČ následující kapitoly (2.1 a 2.2) se zabývají rozborem teorie potĜebné pro správné pochopení zkoumaných jevĤ, zbylé kapitoly poté pĜedkládají podrobný postup od principu mČĜení, pĜes výbČr souþástek, popis jejich funkcí, programování mikrokontroleru až po dobrání se výsledkĤ zpracovaných poþítaþem. PĜedposlední kapitola pĜináší výsledky realizovaných mČĜení na vybraných vzorcích a poslední kapitola pohled na mČĜicí pĜístroj. VČtšina informací obsažených v kapitolách 2.1 a 2.2 vychází z [1].
2.1
TiO2 fotokatalýza
Fotokatalýza podobnČ jako jiné druhy katalýzy je dČj, pĜi nČmž katalyzující složky umožĖují nebo urychlují urþitý proces, aniž by se tímto procesem sami zmČnily. Fotokatalytická þinnost je navíc oproti jiným podmínČna pĤsobením svČtla. Následující text obsažený v této kapitole byl nastudován z [1]. U látek zkoumaných v této práci je fotokatalyzujícím prvkem nátČr obsahující oxid titaniþitý (TiO2). Tato slouþenina je v elektrotechnice chápána jako polovodiþ. Jako každý polovodiþ, má i oxid titaniþitý svĤj zakázaný, valenþní a vodivostní pás. Podle prostorového uspoĜádání molekuly TiO2 se rozlišují dva typy, rutil, jehož zakázaný pás nabývá hodnoty 3.0 eV a anatas, u kterého je tato hodnota mírnČ vyšší, 3.2 eV. Hodnota zakázaného pásu vypovídá o limitním množství energie, které je potĜebné udČlit elektronu pro pĜekonání potenciálového rozdílu mezi valenþním a vodivostním pásem. Tento dČj mĤžeme chápat jako okamžitý pĜeskok elektronu z jednoho pásu do druhého pĜi dodání energie. Energie tomuto procesu je dodávána pomocí fotonĤ. Ze znalosti zákonitosti mezi energií a vlnovou délkou fotonu E = h⋅
- 11 -
c
λ
je možné urþit limitní vlnovou délku fotonu svČtla nutnou pro pĜeskok elektronu z pásu valenþního do vodivostního. Pro rutil je to 413 nm a pro anatas 388 nm. Reálné prĤmyslovČ vyrábČné pĜípravky pro fotokatalýzu obsahující TiO2 jsou smČsí obou, lze tedy zaokrouhlenČ uvažovat vlnovou délku fotonĤ potĜebnou pro pĜeskok jako menší než 400 nm. Tato vlnová délka ovšem odpovídá ultrafialové þásti svČtelného spektra, která není ve sluneþním svČtle zastoupena v maximální míĜe, ale dosahuje jen asi 1 % celkového svČtelného výkonu. PĜi pohledu na následující obrázek 2.1, který zobrazuje sluneþní spektrum, lze urþit vlnovou délku, pro kterou by fotokatalytický dČj mČl maximální úþinnost.
Obr. 2.1: Intenzita sluneþního záĜení v þásti spektra; [8]
Maximální intenzita záĜení sluneþního spektra je na vlnové délce 550 nm, která odpovídá svČtlu zelené barvy. PrávČ na této vlnové délce je možné ze sluneþního záĜení získat nejvíce energie pro fotokatalýzu. Jelikož ale šíĜka zakázaného pásu charakterizuje vlnovou délku - 12 -
použitelného záĜení pro daný polovodiþ, nebylo by možné použít TiO2, ale zcela rozdílný materiál. Z dosavadního zkoumání se ovšem právČ oxid titaniþitý jeví jako nejlepší varianta. Je odolný ve vodném roztoku, nerozpouští se ani jinak nerozkládá, má vysokou kvantovou úþinnost a udržuje si své fotokatalytické vlastnosti po dlouhou dobu. PĜípadný alternativní materiál, který by pracoval se svČtlem o vlnové délce kolem 550 nm, není vhodný ještČ z dalšího dĤvodu. Pro fotokatalýzu je dĤležitá energie každé reakce a tento materiál by mČl energii o hodnotČ nedostaþující k rozložení všech nežádoucích organických slouþenin. Nedostatek ultrafialového svČtla ze Slunce se Ĝeší pomocí UV lamp, pĜípadnČ se vybírají aplikace, kde není zapotĜebí masivní odstraĖování neþistot, ale prĤbČžná kontinuální likvidace postupnČ se usazujících vrstev, což je právČ pĜíklad venkovních fasádních nátČrĤ. Navíc pĜi absorpci UV záĜení není zmČnČna barva podkladového povrchu na rozdíl od použití záĜení z viditelné þásti spektra.
2.2
Chemické reakce
Obsah této kapitoly vychází z [1]. Po ozáĜení povrchu TiO2 dojde k absorpci fotonu svČtla a ve vodivostním pásu se objeví volný elektron. Naopak ve valenþním pásu po nČm zbyde hypotetická þástice, tzv. díra. Elektron nese náboj záporný a díra kladný. Jelikož má oxid titaniþitý velkou kvantovou úþinnost, doba do rekombinace, tedy opČtovného pĜeskoku elektronu zpČt do valenþního pásu a zániku páru volný elektron-díra, je pomČrnČ dlouhá a umožĖuje využití tČchto þástic v dalších dČjích. TiO2 je nejþastČji aplikován ve formČ tenkého filmu, na jehož hydrofilním povrchu ulpívá tenká vrstviþka vody. Vzniklé díry oxidují molekuly ulpČlé vody za vzniku hydroxilových radikálĤ OH-. Tyto radikály mají vysoký oxidaþní potenciál a reagují s organickými slouþeninami pĜítomnými na povrchu fotokatalytického filmu. Produktem tČchto reakcí jsou z prvu volné radikály, tedy nestabilní molekuly s nadbyteþným nespárovaným elektronem. V reakci s nimi se nachází molekulární kyslík, který obsahuje též jeden nespárovaný elektron a vznikají peroxidové radikály, molekuly obsahující dva atomy kyslíku a nespárovaný elektron. Tento proces se mĤže opakovat až je celá struktura organických látek rozbita pomocí radikálĤ, koneþným produktem je pouze voda a oxid uhliþitý. - 13 -
Volné elektrony se úþastní jiné reakce. Je jimi redukován rozpuštČný vzdušný kyslík a vzniká tzv. superoxidový radikál O2-. Tento aniont mĤže reagovat s peroxidovými radikály (vzniklými pĜi reakcích s dírami) a výsledným produktem je opČt oxid uhliþitý. Možné zvýšení úþinnosti reakcí nastává v pĜípadČ, kdy je koncentrace organických slouþenin na povrchu fotokatalyzátoru vysoká. ObecnČ platí, že díry snadnČji oxidují organické slouþeniny než-li vodu, v pĜípadČ vysoké koncentrace je tedy pĜenos oxidaþních vlastností pĜes vodné radikály vynechán a úþinnost rozkladného procesu se zvyšuje. Je ovšem nutné také urychlit pĜenos elektronĤ na molekulární kyslík, þehož se dosahuje nanesením mikroskopických þástic paladia na þástice TiO2.
- 14 -
3 Využití TiO2 fotokatalýzy Podrobnosti o následujících informacích a obsahu kapitol 3.1 a 3.2 je možno nalézt v [1]. Oxid titaniþitý je prozatím nejhojnČji využívaným fotokatalyzátorem vĤbec. PĜi zapoþtení dalších aplikací, jako je prĤmysl barev, kosmetika þi potravináĜství, jeho roþní spotĜeba pĜesahuje 3 miliony tun. Jeho nevýhoda v nutnosti osvitu ultrafialovým svČtlem je pĜekonána Ĝadou výhod jako je stálost pĜi dlouhodobém používání, nerozpustnost ve vodČ þi vysoká úþinnost. Dalším obrovským kladem TiO2 je jeho všestranost. Nabízí celé spektrum použití a forem aplikace napĜíþ prĤmyslem i bČžným lidským životem. Zpoþátku byl TiO2 používán jako aditivum do barev pro svĤj bílý odstín. Jeho fotokatalytické vlastnosti ovšem byly na obtíž a zpĤsobovaly kĜídovatČní barev a jejich degradaci. DĤvodem bylo, že oxid titaniþitý rozkládal organické složky barev. Až v 80. letech 20. století se zaþalo uvažovat o pozitivním využití tohoto jevu. Dnes je oxid titaniþitý nejþastČji aplikován jako tenká prĤhledná vrstviþka na povrchu pĜedmČtĤ, u nichž se pĜedpokládá, že budou vystaveny dopadajícím paprskĤ svČtla a bude na nich moci probíhat fotokatalýza. MĤže jít o keramiku, sklo, plast, o hrubé pĜedmČty i jemné folie. Je také možné setkat se s TiO2 naneseným na drobné keramické kuliþky. Této aplikace se využívá pĜi fotokatalytickém þištČní vody. ObecnČ ovšem platí, že fotokatalytickým dČjem lze odstranit pouze menší množství þi koncentrace látek, a to v jakékoli aplikaci. Také je možné jeho vlastnosti využít jen pro organické materiály. Na druhou stranu je možné odstranit až 100 % jejich pĤvodního zastoupení.
3.1
Vlastnosti TiO2 nátČrĤ
Pasáže této kapitoly byly nastudovány z [1]. Jedineþnou vlastností povrchĤ opatĜených vrstviþkou TiO2 fotokatalyzátoru je jejich permanentní þistota. PĜípadné usazeniny se totiž díky fotokatalýze rozpadnou a jsou buć smyty deštČm nebo snadno odstranČny oplachem, jedná-li se o vnitĜní prostory. Krom neþistot mĤže být rozkládána prakticky jakákoli látka organického pĤvodu. Zdárnou aplikaci našly tyto povrchy pĜi likvidaci bakterií a virĤ. V pĜípadČ, že poþet mikrobĤ nepĜesáhne urþitou hranici, je možné je fotokatalýzou bezezbytku odstranit. Toho je možné využít napĜ. na operaþních sálech, v ordinacích, toaletách, koupelnách þi kuchyních, - 15 -
kde je kladen dĤraz na sterilitu. Úþinnost sterilizaþního efektu byla zkoumána na bakteriích E. coli O 157 a rezistentní Staphylococcus aureus a bylo zjištČno, že oxid titaniþitý má zdaleka nejlepší sterilizaþní vlastnosti ze všech používaných sterilizaþních þinidel. Výsledným produktem byly dlaždice s nČkolik mikrometrĤ silnou fotokatalytickou vrstvou. Pro navýšení efektu v místech, kde dlaždice nejsou vystaveny svČtlu, se do svrchní þásti TiO2 filmu pĜidávají kladnČ nabité ionty stĜíbra þi mČdi, které sami mají sterilizující úþinky. Dlaždice zároveĖ likvidují mikroby ve vzduchu a jsou též schopny odbourávat zápach vzniklý napĜ. pĜítomností amoniaku. PĤsobí i proti plísním a Ĝasám a rozkládají rozliþné toxiny. SklenČné tabule opatĜené fotokatalytickou vrstvou jsou schopny odbourávat olej, kryty osvČtlení prozmČnu splodiny z automobilové dopravy. KromČ skla a keramiky je možné fotokatalytické vrstvy nanášet na plasty i jiné stavební materiály ve formČ pryskyĜice s obsahem oxidu titaniþitého, což pĜináší myšlenku samoþistících domĤ.
- 16 -
PĜíklad samoþisticího skla ukazuje obrázek 3.1.
Obr. 3.1: Samoþisticí sklo, [1]
3.2
Další aplikace
Kompletní výþet možných aplikací je možné nalézt v [1]. Mimo výše zmínČné Ĝady aplikací je další možnost využití napĜ. v papírových nebo látkových vzduchových filtrech pro odbourávání dehtu z cigaretového dýmu. Tyto filtry jsou napuštČny roztokem TiO2 a je proto nutné je jednou za þas osvítit ultrafialovou lampou. PĜi kontinuálním osvitu mĤže tento typ filtru zajistit kromČ filtrace i dezodoraci cirkulovaného vzduchu. Vlastností, která se bezprostĜednČ nedotýká þistících úþinkĤ je superhydrofilnost tenkých TiO2 vrstev. Je-li nČjaký povrch superhydrofilní, znamená to, že k nČmu dokonale pĜilne voda - 17 -
a utvoĜí na nČm tenký film a povrch se nemlží. Toho lze využít tĜeba u skel automobilĤ, zrcadel nebo prĤhledítek. ZároveĖ, je-li nátČr použit na venkovní fasádČ domu, zabraĖuje usazování kapiþek vody a podporuje jejich odteþení. Superhydrofilnost není automatickou vlastností TiO2 povrchĤ, je ji nutno nabudit ultrafialovým svČtlem. Po odstranČní zdroje svČtla tato vlastnost po þase vymizí, avšak jsou vyvíjeny materiály, které tuto svoji vlastnost udržují i dlouhou dobu po ukonþení osvitu. Teoretickou, avšak nevyzkoušenou, zĤstává aplikace pro odstranČní surové ropy po jejím úniku do vody. Dle souþasných studií by byla tato možnost zdlouhavá a nákladná, avšak pro doþistČní po použití konvenþních metod teoreticky použitelná je. CelkovČ vzato þištČní vody od rĤznorodých látek není vhodnou aplikací této technologie, nelze totiž pĜi rozumných cenách a rozmČrech zpracovávat velké objemy. Velmi slibnými se ovšem jeví aplikace v medicínČ. PĜi rakovinných onemocnČních se ukázalo, že fotokatalytický povrch TiO2 má stejnČ dobré sterilizující úþinky jako pĜi niþení bakterií a staþí i krátkodobé osvity v Ĝádu minut. Již bylo vyvinuto zaĜízení podobné endoskopu, které je možné zavést až k samotnému nádoru a ten osvítit ultrafialovým svČtlem. Existují barviva, která se selektivnČ usazují v rakovinných nádorech, v pĜípadČ, že by bylo možné na tato barviva uchytit TiO2, který je pro lidský organismus neškodný. V kombinaci s možností osvČtlení by byly selektivnČ likvidovány pouze rakovinné buĖky. Je tedy pravdČpodobné, že se v budoucnu setkáme s tímto postupem léþby rakoviny u orgánĤ dostupných osvČtlení.
- 18 -
4 Zkoumání úþinkĤ fotokatalýzy v laboratoĜi Zadání této práce pĜedpokládá použití výsledného pĜístroje nikoli ve venkovním prostĜedí, ale v podmínkách laboratoĜe. K tomu bylo pĜizpĤsobeno funkþnČ i konstrukþnČ. Výsledné zkoumání tedy podává informace pĜevážnČ demonstrativního charakteru.
4.1
Rozdíly mČĜení oproti reálným podmínkám
Na rozdíl od budoucího možného použití sofistikovanČjších výrobkĤ, nejedná se nyní o urþování úþinkĤ fotokatalýzy na reálných stavebních materiálech, ale dochází k ĜadČ zjednodušení. Podkladový materiál je v mČĜení zcela vynechán, aby byla vylouþena možnost, že do svého objemu nasaje þást zkoumané kapaliny. Taktéž místo zneþistČných nánosĤ organických i jiných je použita metylenová modĜ ve vodném roztoku. V pĜípadČ použití metylenové modĜi coby aproximace zneþištČní bylo nutné pĜipravit zĜedČný roztok a vzniklou kapalinu umístit do kádinky z chemického skla. Dle již existujících norem je nutné zkoumat alespoĖ 3cm vrstvu roztoku o poþáteþní koncentraci metylenové modĜi 10 mikromolĤ na litr. Vzhledem k reálné možnosti, že fotokatalytický dČj nebude probíhat stejnČ ve všech místech kapaliny, je nutné zvážit, zda bude mČĜení probíhat vertikálnČ pĜes všechny pĜípadné vrstvy kapaliny, þi horizontálnČ za soustavného míchání. Pro zde popisovaný pĜístroj byla zvolena první možnost.
- 19 -
Kádinku z chemického skla naplnČnou metylenovou modĜí ukazuje fotka na obrázku 4.1.
Obr. 4.1: Kádinka s metylenovou modĜí sloužící pro mČĜení
Vertikální mČĜení by v reálném pĜípadČ pĜinášelo težko Ĝešitelný problém s nutností provrtání stavebního materiálu a fotokatalytické vrstvy pro umožnČní prostupu laserovému paprsku, zkoumané vzorky jsou však menších rozmČrĤ (cca 20 x 20 mm) a je možné je umístit do standardní kádinky o prĤmČru 45 mm aniž by laserovému paprsku bránily. Také by bylo nutné vyĜešit problém s nasákavostí materiálu, v pĜípadČ, že by do sebe nasál þást - 20 -
objemu roztoku metylenové modĜi, poklesla by výška zkoumané hladiny a ve výsledcích by se objevily falešné informace o navýšení propustnosti. Pro zabránČní možnému odparu pĜi delších mČĜeních bylo vybráno pracovištČ s vysokou hodnotou vzdušné vlhkosti. Namísto záĜení ze Slunce je použita lampa s UV trubicí, která poslouží coby zdroj ultrafialového svČtla. Navíc má násobnČ vČtší intenzitu, což umožĖuje sledovat dČje, které by v reálu trvaly nČkolik dní bČhem pĜijatelného þasového intervalu. NedČjí se však žádné skokové zmČny a stále jde o dosti pomalý dČj, aby udával hodnotné informace. Dle orientaþního mČĜení bylo zjištČno, že pĜi zaþátku mČĜení trvá zmČna o deset procent zhruba 8 hodin, není tedy vhodné dČj sledovat kontinuálnČ a upĜednostĖuje se záznam dat poþítaþem. Po zapnutí pĜístroje nastává asi minutová sekvence naþítání srovnávácích hodnot a bezprostĜednČ následuje mČĜení a prĤbČžné zobrazování výsledkĤ. Je nutné po celou dobu probíhajícího mČĜení udržovat cílení paprsku na téže místo. Uchycení laserové diody je tudíž nutno provést preciznČ. V pĜípadČ vychýlení by mohlo dojít k oslabení signálu, což by se na výsledcích projevilo poklesem snímané propustnosti a mohla by nastat mylná interpretace, že se kapalina stala pro laserový paprsek ménČ prostupnou a fotokatalýza neprobíhá. Samotnou fotokatalytickou vrstvou jsou vzorky þástí nátČrĤ obsahujících TiO2 rĤzných typĤ o velikosti cca 20 x 20 mm o rĤzných tloušĢkách. Tyto se umístí do kádinky s rozpuštČnou metylenovou modĜí a ta se usadí na plochu mČĜicího pĜístroje v místech, kde je zespodu vyvedeno þidlo. ýidlo tvoĜí aktivní oblast fototranzistoru. Je nutné ponechat þidlo nikterak nezakryté vzorkem, jinak by bylo mČĜení negativnČ ovlivnČno. Po usazení kádinky je nutno zkontrolovat, zda paprsek laseru stále dopadá do stĜedu þidla. ZároveĖ musí být laserový paprsek kolmý na hladinu roztoku v kádince.
4.2
Princip mČĜení
Za aproximaci neþistot byla zvolena metylenová modĜ o koncentraci 10 ȝmol na litr. Tato kapalina absorbuje prĤchozí záĜení o vlnových délkách 600 nm až 700 nm, dle þehož byl vybrán použitý laser. Pro komplexní mČĜení by bylo nutné snímat celé spektrum záĜení, pro zde uvádČné rutinní mČĜení byla vybrána jedna vlnová délka z oblasti maxima absorpce zkoumané kapaliny, což je dostateþnČ názorné pro urþení fotokatalytické aktivity.
- 21 -
Metylenová modĜ je procesem fotokatalýzy postupnČ odbourávána a absorpce roztoku úmČrnČ tomu klesá. PĜiložený obrázek 4.2 znázorĖuje mČnící se absorpci roztoku metylenové modĜi v závislosti na vlnové délce pronikajícího záĜení a délce pĤsobení fotokatalytického dČje pro konkrétní vzorek.
Obr. 4.2: Absorpþní spektrum metylenové modĜi; [7]
Samotné mČĜení vyrobeným pĜístrojem zaþíná 5V napájením, které je pĜivedeno do zaĜízení buć z USB konektoru poþítaþe, akumulátorĤ nebo z externího zdroje. Pomocí pĜíkazu v mikrokontroleru se napČtí pĜivede na laserovou diodu, která zaþne vysílat koherentní laserový paprsek o vlnové délce 650 nm, což je vlnová délka blížící se maximu absorpce použité kapaliny. Použití laserové diody o této vlnové délce zajišĢuje maximální úþinnost mČĜení. BČhem probíhajícího fotokatalytického dČje postupnČ klesá koncentrace metylenové modĜi a laserový paprsek je absorbován ménČ. ZmČna jeho intenzity umožĖuje kvantifikovat rychlost a úþinnost fotokatalytického dČje.
- 22 -
Vzniklý paprsek je veden pĜes zkoumanou metylenovou modĜ umístČnou v kádince. V ní se úmČrnČ absorpci þást paprsku pohltí a þást projde. NáslednČ paprsek dopadá na fototranzistor, jehož vodivost je závislá na intenzitČ dopadajícího paprsku. Fototranzistor v mČĜicím obvodu pracuje jako promČnný závislý rezistor, ke kterému je do série zapojen rezistor, na kterém dochází k úbytku napČtí. V tomto obvodu je snímáno napČtí, þímž se pĜevádí zpČt na elektrický signál intenzita dopadajícího paprsku, potažmo hodnota absorpce kapaliny, která je urþena odbouráním metylenové modĜi. Vzniklý signál závislý na hodnotČ aktuální koncentrace metylenové modĜi je následnČ pĜiveden na analogovČ-digitální pĜevodník mikrokontroleru. Použitý pĜevodník má rozlišení 10 bitĤ, lze tedy ze signálu získat celkem 1024 diskrétních hodnot. Aktuální hodnota je porovnána s urþující hodnotou naþtenou na zaþátku pĜed mČĜením, pĜevedena na procenta a zobrazena na displeji a souþasnČ odeslána do poþítaþe.
- 23 -
5 Elektronika mČĜicího pĜístroje Následující kapitola se blíže vČnuje vlatnostem a specifikacím jednotlivých elektronických souþástek použitých pro výrobu desky mČĜicího pĜístroje. Celá sestava je umístČna na pájivém poli spojĤ velikosti 100 x 160 mm, je pájena ruþnČ a osazena vývodovými souþástkami. Jedinou výjimku tvoĜí USB pĜevodník FT232R, který existuje pouze v SMD verzi a bylo nutno na nČj nechat vyrobit redukci.
- 24 -
Podrobné schéma zapojení je ukázáno na obrázku 5.1. Schéma bylo vytvoĜeno v softwaru Eagle 5.4.
Obr. 5.1: Schéma zapojení
- 25 -
5.1
Napájení
Projekt mČĜicího pĜístroje je koncipován se širokým spektrem použití, proto se nabízí i nČkolik alternativ napájecího zdroje. ZaĜízení je možné napájet pomocí þtyĜ akumulátorĤ standardu AA, pĜípadnČ externím zdrojem 5V napČtí a také pomocí pĜipojení k USB rozboþovaþi poþítaþe. Možnost napájení pĜes USB bude nejþastČji zvolena v pĜípadČ laboratorního mČĜení a zpracovávání dat poþítaþem, protože právČ pĜes USB port se posílají namČĜená data. 100mA proudové omezení pĜi pĜipojení a 500mA celkové proudové omezení jednoho USB portu po rozpoznání zaĜízení je dostaþující pro napájení celého mČĜicího pĜístroje. Možnost externího napájení lze využít pĜi mČĜení bez dispozice poþítaþe, pĜípadnČ, pokud je žádoucí použít vysoce stabilního zdroje napČtí. Napájení z akumulátorĤ se uplatní pĜi mČĜeních mimo laboratoĜ, pĜípadnČ v terénu.
- 26 -
UmístČní akumulátorových pouzder, napájecích konektorĤ a dalších použitých souþástek ukazuje obrázek 5.2.
Obr. 5.2: Osazená deska, pohled shora
- 27 -
Spodní þást desky mČĜicího pĜístroje s propoji ukazuje obrázek 5.3.
Obr. 5.3: Osazená deska, pohled zespodu
- 28 -
Volba mezi jednotlivými typy napájení je realizována vyjímatelným jumperem, který je možné umístit do tĜí rĤzných poloh, které odpovídají tĜem zdrojĤm napájení. Je dovoleno použít vždy jen jeden zdroj, v pĜípadČ použití více zdrojĤ hrozí poškození mČĜicího pĜístroje i zdrojĤ napájení. Po vstupu napájení do mČĜicího pĜístroje je nejprve kladný pól zaveden na hlavní vypínaþ, jehož zapnutí potvrzuje rozsvícení zelené LED diody. Vzhledem k oþekávání delších mČĜení bez nutné pĜítomnosti obsluhy je vypínaþ poziþnČ chránČn proti nechtČnému vypnutí. Dále je napájení rozvedeno do elektrických souþástek, pĜevážnČ pomocí dvou uzlĤ. Jeden uzel zajišĢuje kladný pól (VCC, napájecí napČtí), druhý uzel pól záporný (GND, zem). PĜi provozu z akumulátorĤ je tĜeba provádČt pouze krátkodobá orientaþní mČĜení a mezi jednotlivými mČĜeními provést kontrolní promČĜení napájecího napČtí napĜ. pomocí multimetru. Vhodným pĜístupným místem jsou napájecí uzly pĜístupné ze spodní strany mČĜicího pĜístroje. Dlouhodobá mČĜení jsou nevhodná z dĤvodu postupného poklesu napČtí dodávaného akumulátory, což ovlivĖuje vlnovou délku laserového paprsku a není žádoucí, aby se na zaþátku a na konci mČĜení pĜíliš odlišovala. Maximální možný pokles napČtí, aby bylo mČĜení stále hodnotné je kolem 5 %. V pĜípadČ poklesu napČtí pod 4.2 V je tĜeba mČĜení ukonþit a vymČnit akumulátory, pĜípadnČ použít jiný zdroj napájení. DĤvodem je nedostateþné napájení pro Ĝídicí mikrokontroler pĜi použité frekvenci. PĜi napájení z USB mĤže být reálné napČtí odlišné od hodnoty 5 V o cca 1 % až 2 %. Tato hodnota by mČla zĤstat stále stejná, na zaþátku i na konci mČĜení, jedná se totiž o stabilizované, tedy nemČnné napČtí, které je dané stabilizaþními obvody poþítaþe. Proto by tato permanentní odchylka nemČla mít na mČĜení žádný vliv. I pĜes stabilizaci je možné namČĜit na USB portech þasovČ promČnnou hodnotu napČtí, výchylka však nepĜesahuje 2 % a její vliv je minimání. Možným zdĤvodnČním zmČn hladiny napČtí mohou být výkyvy v proudovém odbČru periferií bČhem chodu poþítaþe, z toho dĤvodu je žádoucí ponechat poþítaþ ve stejném stavu bČhČm celého mČĜení. PĜi použití externího napájení je nutné zajistit jeho stabilizaci, není-li implementována.
5.2
Laserová dioda
Obsah této kapitoly vychází z [9]. Laserová dioda je elektronická polovodiþová souþástka. PodobnČ jako bČžné diody obsahuje jediný pĜechod PN, který je navržen tak, aby v jeho blízkosti docházelo k pĜemČnČ elektrické energie na záĜení ve viditelné, pĜípadnČ blízké infraþervené oblasti - 29 -
elektromagnetického spektra. Vzniklý paprsek je co se týþe svých vlastností obdobný bČžným laserĤm, má velmi úzké spektrum a je koherentní. ýastČji než u bČžných diod se u tČch laserových používat tzv. heteropĜechod namísto bČžného PN pĜechodu. HeteropĜechod se skládá ze dvou rĤzných polovodiþĤ, díky þemuž je u nČj výraznČ vČtší pravdČpodobnost pĜeskoku elektronu z excitovaného stavu do stavu s nižším potenciálem, což vyvolá vznik fotonu. RĤzné barvy paprsku, tedy rozdílné vlnové délky, je dosaženo použitím rozdílných materiálĤ. ýervený cca 650nm paprsek vzniká pĜi použití materiálu GaAs þi AlGaInP, zelený cca 550nm pĜi použití InGaN a paprsek modrý s cca 405 nm lze získat použitím materiálĤ ZnSe, ZnMgSSe nebo GaN. Vznik koherentního úzkého paprsku však není zaruþen. Vzniká pouze pĜi stimulované emisi fotonu z elektronového obalu atomu pĜi pĜechodu elektronu z orbitalu na jiný, s nižším energetickým potenciálem. Pro úspČšné nabuzení stimulované emise je nutné, aby v polovodiþi existovala tzv. inverzní populace elektronĤ, kdy je jejich poþet vyšší na excitované hadinČ než na hladinČ základní. Následující obrázky zachycují principielní schéma vzniku laserového paprsku pro tĜíhladinový a þtyĜhladinový laser. Obrázek 5.4 naznaþuje princip tĜíhladinového laseru.
Obr. 5.4: Princip tĜíhladinového laseru; [6]
- 30 -
Na obrázku 5.5 je nastínČn princip laseru þtyĜhladinového.
Obr. 5.5: princip þtyĜhladinového laseru; [6]
Pouze poté mĤže prvotní foton vyvolat deexcitaci elektronu a vzniklý foton již bude kopírovat vlastnosti fotonu prvnotního, který stimulovanou emisi vyvolal. Bude mít stejný smČr, polarizaci i fázi a vzniká laserový paprsek. U laserových diod je také nutné pro získání laserového svazku pĜekonat tzv. prahový proud a prahové napČtí. Dle použitých materiálĤ se prahový proud mĤže pohybovat v rozmezí cca 20 mA až 200 mA a prahové napČtí leží mezi 1.7 V a 1.9 V. Vzniklý laserový paprsek je následnČ zesílen v rezonátoru. U laserových diod se k tomuto úþelu využívá vlastní krystal polovodiþe, odraznou plochou jsou samotné krystalografické roviny, podél kterých je krystal zarovnán. V rezonátoru se paprsky nČkolikrát odrazí a pĜi každém odrazu prochází emisnČ aktivní oblastí pĜechodu PN, kde dochází k další emisi a tedy k zesílení paprsku. Aby výsledný paprsek odpovídal laseru, je tĜeba jej zkolimovat za pomocí vhodné výstupní þoþky. Pro docílení kruhové stopy laseru je nutno využít þoþky cylindrické. - 31 -
5.2.1
Vybraná dioda
Pro tuto práci byla vybrána dioda od výrobce Shawo HwaIndustrial CO., LTD., typ 650NM LASER MODULE (obchodní název F-LASER 1MW 6MM) o vlnové délce 650 nm, což odpovídá þervenému svČtlu. Dioda byla vybrána hned ze dvou dĤvodĤ, umožĖuje napájení z 5V rozvodu na desce s obvody a není tedy tĜeba napČtí snižovat a také pro svou vlnovou délku, která velmi dobĜe koresponduje s maximem pohltivosti v metylenové modĜi použité pĜi mČĜení. Pohled na laserovou diodu použitou pĜi mČĜení pĜináší fotka na obrázku 5.6.
Obr. 5.6: Vybraná laserová dioda
Laserová dioda má prĤmČr 6.1 mm, napČtí 5 V je pĜivádČno pomocí dvou napájecích drátĤ bílé (GND) a þervené (VCC) barvy. Optický výkon leží v rozmezí 3 mW až 4 mW, typicky 3.5 mW. Maximální proudový odbČr udávaný výrobcem je 35 mA. Typická životnost laserové diody je uvádČna jako 5000 pracovních hodin.
- 32 -
Základní rozmČrové parametry použité laserové diody je možné odeþíst z obrázku 5.7.
Obr. 5.7: Nákres laserové diody; [13]
Pro svou nízkou spotĜebu je laserová dioda napájena pĜímo z mikrokontroleru, bez použití spínací elektroniky þi tranzistoru. Paprsek je veden kolmo na hladinu metylenové modĜi v kádince, kde je þásteþnČ absorbován. Výstupní paprsek dopadá na aktivní plochu fototranzistoru.
5.3
Fototranzistor
Fototranzistor je polovodiþová elektronická souþástka, jejíž funkce odpovídá funkci klasického tranzistoru, rozdíl je pouze v jeho Ĝízení. Zatímco u klasického tranzistoru je proud protékající mezi emitorem a kolektorem Ĝízen bázovým proudem, v pĜípadČ fototranzistoru se k Ĝízení využívá osvit oblasti báze pĜechodu NPN. ÚmČrnČ se záĜením dopadajícím do oblasti báze je otevírán pĜechod NP mezi emitorem a bází. MĤže tedy protékat elektrický proud, jehož velikost lze Ĝídit pomocí zmČny intenzity osvČtlení báze. Toto Ĝízení však není samo o sobČ zcela lineární. Vzhledem k formČ vstupního signálu je nutné, aby fototranzistor zesiloval maximálním dosažitelným zpĤsobem, proto se takĜka bez výjimek využívá zapojení se spoleþným emitorem. Bázový vývod þasto zcela absentuje. Ke snímání intenzity dopadajícího záĜení je možné též zvolit fotodiodu. Ta slouží poté slouží jako samotný zdroj elektrické energie. Signál z ní je ovšem velmi slabý a je nutné jej zesílit pomocí operaþního zesilovaþe, který vnese do mČĜení znaþný šum. Oproti tomu jsou fotodiody výraznČ lineárnČjší.
- 33 -
5.3.1
Vybraný fototranzistor
Po zhodnocení celkového konceptu byl pro mČĜení intenzity dopadajícího záĜení vybrán fototranzistor od výrobce Siemens, Ĝady SFH, nesoucí oznaþení "high linear". Tento fototranzistor se s fotodiodou již mĤže srovnávat co se linearity týþe a má oproti ní výhodu ve vČtší citlivosti na osvČtlení. Závislost fotoproudu na osvČtlení aktivní oblasti fototranzistoru je znázornČna na obrázku 5.8.
Obr. 5.8: Závislost fotoproudu na na plošném výkonu dopadajícího záĜení; [14]
Obrázek ukazuje jasnČ lineární charakteristiku, což ovšem nemusí platit pro plošný výkon mimo zobrazenou oblast. Použitá laserová dioda dosahuje hodnot plošného výkonu cca 5 mW/cm2, proto nelze s urþitostí soudit na tvar charakteristiky.
- 34 -
Základní rozmČrové parametry použitého fototranzistoru lze vyþíst z obrázku 5.9.
Obr. 5.9: Nákres fototranzistoru; [14]
KonkrétnČ byl vybrán fototranzistor SFH 309. Jde o typ s pĜechodem NPN, který je uložen ve 3mm LED pouzdĜe. MČĜicí rozsah zaþíná na 380 nm a konþí na 1180 nm s maximem v rozmezí 860 nm až 880 nm. PĜi mČĜení použitého paprsku o 650 nm je citlivost cca 65 %, což plnČ dostaþuje.
- 35 -
Závislos citlivosti fototranzistoru na vlnové délce použitého laseru zobrazuje obrázek 5.10.
Obr. 5.10: Citlivost v závislosti na vlnové délce; [14]
Aktivní plocha fototranzistoru þiní 0.2 mm2, maximální dovolené napČtí mezi kolektorem a emitorem je 35 V, maximální proud kolektorem má hodnotu 15 mA s povoleným zvýšením na 75 mA po dobu ne delší než 10 ȝs.
- 36 -
DĤležitým faktorem pro mČĜení je úhel dopadu paprsku. Jak je patrné z obrázku 5.11, je bezpodmíneþnČ nutné, aby paprsek dopadal kolmo na aktivní oblast fototranzistoru. V pĜípadČ i minimálního odchýlení dochází ke rapidnímu poklesu úþinnosti.
Obr. 5.11: OzaĜovací charakteristika fototranzistoru; [14]
PĜípadný problém vzniklý temným proudem, který fototranzistorem protéká i bez osvitu je vyĜešen naþtením rozsahu, tedy maximální hodnoty s osvitem a minimální hodnoty bez osvitu, vždy pĜed mČĜením. Udávaný temný proud fototranzistorem þiní maximálnČ 200 nA, úbytek napČtí v mČĜicím podobvodu je ovšem vČtší, cca 120 mV, což by odpovídalo cca 0.3 mA. PravdČpodobnČ se na úbytku napČtí podílí více vlivĤ, jejich dopad na mČĜení je ale odstranČn výše zmínČným naþtením poþáteþních hodnot. PĜevodník, který je následnČ v obvodu použit pro pĜevod analogového signálu z fototranzistoru na þíslo, nemĤže kvĤli temnému proudu pracovat v celém svém rozsahu 1024 hodnot. Po odeþtení permanentního úbytku napČtí zbývá z rozsahu necelých tisíc hodnot, což je plnČ dostaþující.
- 37 -
5.4
Mikrokontroler
Mikrokontrolery od výrobce Atmel Ĝady AVR ATmega jsou jednoþipové, osmibitové Ĝidicí prvky postavené na upravené Harvardské architektuĜe. Na rozdíl od jiných typĤ využívají pro ukládání uživatelských programĤ integrované pamČti typu flash, která uchovává data i po odstranČní napájení. Díky typu použité pamČti tyto mikrokontrolery již nepotĜebují pĜídavnou externí pamČt, jako je tomu u nČkterých jiných výrobcĤ. Pro mČĜicí pĜístroj byl vybrán konkrétní model ATmega16. Krom 16 kB pamČti typu flash pro ukládání uživatelských programĤ obsahuje ATmega16 další typy pamČtí, konkrétnČ 512 B EEPROM, 1 kB SRAM a kapacitnČ velmi málá vnitĜní datová pamČt. Ve vnitĜní pamČti je uloženo 32 registrĤ instrukþní sady a 64 vstupnČvýstupních registrĤ. PamČt SRAM slouží pouze jako operaþní pamČt bČhem chodu mikrokontroleru a po vypnutí napájení je její obsah ztracen. PamČt EEPROM je využívána pĜevážnČ externími zaĜízeními pĜipojenými do sestavy s mikrokontrolerem a udržuje si po ztrátČ napájení svĤj obsah.
- 38 -
Napájecí napČtí musí ležet mezi 2.7 V a 5.5 V, což je v pĜípadČ použitého napájení z USB splnČno (napČtí USB rozboþovaþe leží mezi 4.95 V a 5.05 V). RozšiĜující þásti obvodu lze pĜipojit pomocí þtyĜ portĤ po osmi vývodech. VČtšina vývodĤ má více funkcí a nČkteré jsou díky tomu zabrány pro aplikace programování þi analogovČ-digitálního pĜevodu. RozmístČní a popis vývodĤ ukazuje obrázek 5.12.
Obr. 5.12: RozmístČní pinĤ ATmega16; [11]
ATmega16 je schopen pracovat za speciálních podmínek na nejvyšší frekvenci 16 MHz, bČžnČ je ovšem maximální dosažitelnou frekvencí 8 MHz. O urþování frekvence se stará vnitĜní RC oscilátor. Pro vyšší pĜesnost, která je napĜ. vyžadována pĜi synchronních sériových datových pĜenosech mezi mikrokontrolery, lze pĜipojit externí krystal. V pĜípadČ zde
- 39 -
prezentovaného zaĜízení pro mČĜení fotokatalytických jevĤ je použit 8MHz krystal a dosahuje se tedy maximální dostupné rychlosti. Pro operace vyžadující mČĜení þasových úsekĤ jsou k dispozici dva 8bitové a jeden 16bitový þítaþ. Pro pĜevod analogového signálu na þíslo je možno využít osm kanálĤ 10bitového analogovČ-digitálního pĜevodníku, pro prosté porovnání slouží analogový komparátor. Ke komunikaci je možno použít Ĝadu sériových sbČrnic, ATmega16 disponuje sbČrnicemi I2C, synchronní a asynchronní sériovou sbČrnicí USART a sériovou sbČrnicí SPI. Všechny mohou sloužit pro komunikaci s jinými zaĜízeními vþetnČ dalších mikrokontrolerĤ v daném obvodu nebo pro komunikaci s poþítaþem. Mikrokontrolery Ĝady AVR jsou navrženy a optimalizovány pro použití programovacího jazyka C, což výrazným zpĤsobem usnadĖuje práci s nimi. O samotné pĜevedení uživatelem vytvoĜeného kódu do jazyka assembler se již stará software ovládající programátor. Díky optimalizaci pro jazyk C je možno nalézt softwary, které jsou schopny využít témČĜ kompletní sadu pĜíkazĤ tohoto jazyka, napĜíklad freeware CodeVision, ve kterém byl program napsán. Pro nahrání programu do mikrokontroleru lze použít rozhraní ISP nebo modernČjší JTAG umožĖující napĜ. krokování nebo posuny programem. ZaĜízením, pomocí kterého byl uživatelský program pĜenesen do mikrokontroleru, je programátor AVR Dragon. Jedná se o dostupný, avšak funkþnČ nadmíru vybavený programátor umožĖující více zpĤsobĤ naprogramování. Cílové zaĜízení se k programátoru mĤže pĜipojit pomocí šestipinového rozhraní ISP, které je nejjednodušší variantou naprogramování. Druhou a využitou možností je pĜipojení pomocí desetipinového rozhraní JTAG, které v kombinaci se softwarem AVR Studio umožĖuje pohodlné ladČní programu. Samotný programátor se k poþítaþí pĜipojuje pĜes USB port, ze kterého je i napájen.
- 40 -
Programátor AVR Dragon je vyfocen na obrázku 5.13.
Obr. 5.13: Programátor AVR Dragon
Zkoumaný signál z fototranzistoru je pĜiveden na pin PA0, kde je pomocí analogovČdigitálního pĜevodníku pĜeveden na þíslo, které se následnČ zobrazí na displeji a odešle do poþítaþe.
5.5
Displej
Pro okamžité zobrazení aktuální zmČĜené procentuální hodnoty je pĜímo na mČĜicím pĜistroji umístČn þtyĜþíslicový displej. Jde o typ HD-M512RD, který má 13.2 mm vysoké þíslice, každou tvoĜenou sedmi þervenými svíticími segmenty. Navíc je pĜítomen osmý segment pro zobrazení desetinné teþky. Displej neobsahuje Ĝadiþ, každá þíslice je tedy zobrazena pomocí - 41 -
rozsvícení jednotlivých segmentĤ. Podsvícení segmentĤ je zajištČno integrovanými LED diodami. Systém písmenného oznaþení segmentĤ je na obrázku þ 5.14.
Obr. 5.14: RozmístČní segmentĤ þíslice; [15]
Displej je koncipován na 3V napájení, je tedy nutno 5V napájení desky srážet odpory. Pro rozsvČcení segmentĤ je použit pĜímo signál z mikrokontroleru bez vloženého spínání þi tranzistorĤ. Elektrické zapojení LED diod prosvČtlujících jednotlivé segmenty ukazuje obrázek 5.15.
Obr. 5.15: Zapojení segmentĤ displeje; [15]
- 42 -
Displej zobrazuje hodnotu s pĜesností na jedno desetinné místo, hodnota je nezaokrouhlená, pouze nekompletnČ zobrazená. Tato možnost je zvolena proto, aby si hodnota s pĜesností na jedno desetinné místo zobrazená na displeji a hodnota s pĜesností na dvČ desetinná místa na poþítaþi odpovídaly. Pro úsporu energie, napĜ. pĜi napájení z akumulátorĤ, je zobrazování navrženo tak, aby byly segmenty zobrazující nejvyšší þíslici þísla v provozu pouze tehdy, nabývají-li nenulové hodnoty. Výjimkou je zobrazení hodnoty 0.0 až 0.9, poslední dvČ þíslice jsou zobrazeny vždy. Z obrázku 5.16 lze odeþíst rozmČry použitého displeje.
Obr. 5.16: Nákres displeje; [15]
KromČ þísel umí displej zobrazit dvČ základní chybová hlášení, a to když je zmČĜená hodnota mimo rozsah. Je-li vČtší než 100 %, objeví se na displeji "1---", je-li menší než 0 %, objeví se "---0". K tČmto situacím mĤže dojít pĜi nesprávném naþtení maximálních a minimálních hodnot pĜed zaþátkem mČĜení, pĜípadnČ zmČní-li se razantnČ podmínky bČhem mČĜení, napĜ. pĜidá se jiný silný zdroj záĜení, dojde k velkému výkyvu napájecího napČtí apod.
5.6
USB pĜevodník
Komunikaci mezi Ĝídicím mikrokontrolerem a poþítaþem zajišĢuje integrovaný obvod FT232RL. Jedná se o pĜedprogramovaný univerzální pĜevadČþ sériových sbČrnic. V pĜípadČ tohoto mČĜicího pĜístroje zajišĢuje propojení mezi sbČrnicí USART na stranČ mikrokontroleru a USB na stranČ poþítaþe. - 43 -
Komunikace z mikrokontroleru odchází ve formátu 8 bitĤ poslaná data a 1 stop bit. Není využito žádné parity ani handshakeingu. Rychlost je nastavena na 9600 Bps. V prostĜedí operaþního systému je nutné mít nainstalován virtuální sériový port COM, který je tĜeba nastavit na shodný formát komunikace. Integrovaný obvod zpracuje pĜijatá data z mikrokontroleru a v reálném þase je pĜedává po USB sbČrnici poþítaþi. Vlastní pĜevodník není potĜeba nijak programovat, je pĜednastaven z výroby. V pĜípadČ potĜeby zmČny jeho programu je nutné použít jednoduchý programátor a zapsat nový program do jeho pamČti EEPROM. Toto se v pĜípadČ pĜedstavovaného mČĜicího pĜístroje neprovádČlo. Nastavení byla provedena pouze na stranČ mikrokontroleru a poþítaþe, kde bylo tĜeba dbát na shodný formát komunikace a pĜenosovou rychlost. PĜevodník FT232RL je vyrábČn pouze jako povrchovČ montovaná souþástka, jeho vývodová alternativa neexistuje, proto bylo nutné nechat vyrobit redukci, která by umožĖila jeho pohodlné a spolehlivé pĜipojení ke zbytku sestavy. Deska malých rozmČrĤ s redukcí byla pĜevzata z projektu pro VUT, kde byla navržena v programu EAGLE 5.4 pro studijní a výukové úþely. Jedná se jednoduchou, jednostrannou desku plošných spojĤ, na jejíž horní þást byl minivlnou pĜipájen integrovaný obvod s pĜevodníkem a ze spodní strany vyþnívají konektory pro pĜipojení do pájivého pole spojĤ, na kterém je realizována veškerá elektronika pro mČĜicí pĜístroj.
- 44 -
Návrh desky zobrazují obrázky 5.17 a 5.18. Na prvním obrázku jsou schématicky znázornČny vodivé propoje integrovaného obvodu s konektory umístČnými v levé þásti obrázku.
Obr. 5.17: Schéma redukce pro FT232R
- 45 -
Obrázek 5.18 pĜedstavuje podobu desky redukce již v odpovídajících si rozmČrech.
Obr. 5.18: Deska redukce pro FT232R
- 46 -
Výsledná podoba desky je na obrázku 5.19. Integrovaný obvod FT232R je umístČn z horní strany, kde vedou i vodivé cesty. Piny konektoru jsou pĜipájeny taktéž na horní stranČ a vyvedeny na stranČ spodní. Deska byla vyrobena firmou AJ Technology, s r.o.
Obr. 5.19: Redukce pro FT232R
Podrobný popis možných aplikací integrovaného obvodu FT232R lze nalézt v [12].
- 47 -
5.7
MČĜicí pĜístroj
Pájivé pole spojĤ, na kterém je realizován obvod mČĜicího pĜístroje, je umístČno v þerné plastové krabiþce o rozmČrech 190 x 140 x 55 mm. V horní þásti krabiþky je vyĜezán kruhový otvor pro umístČní kádinky s metylenovou modĜí a mČĜeným vzorkem. Další otvor obdélníkového tvaru je opatĜen þerveným filtrem a slouží jako prĤzor na displej. Laserová dioda je umístČna nad pĜístrojem na odjímatelné konstrukci. Pohled na horní þást mČĜicího pĜístroje ukazuje obrázek 5.20.
Obr. 5.20: MČĜicí pĜístroj, pohled shora
- 48 -
Obrázek 5.21 zobrazuje spodní þást pĜístroje s otvory, pod kterými jsou vyvedeny uzly GND a VCC. Tyto otvory slouží k zavedení mČĜicích sond multimetru pro zmČĜení napČtí pĜi napájení z akumulátorĤ.
Obr. 5.21: MČĜicí pĜístroj, pohled zespodu
- 49 -
Na boþní stranČ pĜístroje jsou vyvedeny konektory. Pro naprogramování mikrokontroleru slouží konektor JTAG, pro komunikaci s poþítaþem konektor USB. Externí napájení se zavádí do pozice E konektoru zajišĢujicího rozvod napájení. Ve vedlejších pozicích je možno vodivou spojkou mČnit typ použitého napájení. Na výbČr je napájení externí (EXT), napájení z USB a z akumulátorĤ (BAT). UmístČní konektorĤ je ukázáno na obrázku 5.22.
Obr. 5.22: MČĜicí pĜístroj, pohled z boku
Zapínání mČĜicího pĜístroje se prování dvoupolohovým vypínaþem POWER, který je umístČn v jeho pĜední þásti. Zapnutý stav indikuje rozsvícení zelené LED diody. Pro zabránČní nechtČnému þi nežádoucímu vypnutí je vypínaþ poziþnČ chránČn a není možno jej ovládat shora. UmístČní vypínaþe je zobrazeno na obrázku 5.23.
Obr. 5.23: MČĜicí pĜístroj, pohled zepĜedu
- 50 -
6 Programové vybavení Ĝídicího mikrokontroleru Programování mikrokontroleru probíhalo v softwaru CodeVision Evaluation. Jedná se o software, který umožĖuje psaní kódu pomocí syntaxe jazyka C. Oproti jiným má nejkompletnČjší sadu pĜíkazĤ a pĜi programování nedošlo k situaci, kdy by nebylo možné použít zamýšlený sled pĜíkazĤ a bylo by nutné je nahradit jinými se stejnou výslednou funkcí. Tento software je navíc pro nekomerþní a studijní úþely zdarma. Podrobné informace o použitém softwaru lze nalézt v [10]. K usnadnČní programování disponuje CodeVision prĤvodcem, který je neocenitelný hlavnČ pro nastavení samotného mikrokontroleru, kdy nemusíme nastavovat jednotlivé registry, nýbrž staþí požadované nastavení vybrat v odpovídajících záložkách a tuto þást kodu nechat vygenerovat automaticky. Úvodní nastavení mikrokontroleru je znázornČno na následující sérii obrázkĤ.
- 51 -
V úvodní záložce Chip byl vybrán použitý typ mikrokontroleru ATmega16 a byla zvolena frekvence odpovídající použitému krystalu 8 MHz. Pole Check Reset Source je ponecháno nezašktnuté, typem psaného programu je aplikace. Toto nastavení je ukázáno na obrázku 6.1.
Obr. 6.1: Nastavení mikrokontroleru a frekvence
Následuje popis nastavení pro jednotlivé porty. Pro port A byly všechny piny nastaveny jako vstupní. Na tomto portu se nachází analogovČ-digitální pĜevodník a pĜevádČné signály jsou pĜivádČny na jednotlivé piny. Lze tedy pĜevádČt až osm analogových signálĤ souþasnČ. Pro potĜeby mČĜicího pĜístroje bylo potĜeba pĜevádČt jediný signál a byl použit pin 0 portu A.
- 52 -
Port B slouží k ovládání osmi segmentĤ pro zobrazování þísel na displeji, všechny jeho piny jsou proto nastaveny jako výstupní. Segment A je pĜipojen na pin 0, segment B na pin 1 atd. až poslední segment pro desetinnou teþku je pĜipojen na pin 7 portu B. Nastavení portĤ A a B zobrazuje obrázek 6.2.
Obr. 6.2: Nastavení portĤ A a B
- 53 -
Port C slouží pro pĜipojení programovacího konektoru a další systémové funkce, proto je ponechán v základním nastavení jako vstupní. Na pinech 3, 4, 5 a 6 portu D jsou postupnČ pĜipojeny výstupy pro první, druhou, tĜetí a þtvrtou þíslici displeje. Na pin 7 je pĜipojena laserová dioda. Zbytek portu je ponechán v implicitním stavu, jak ukazuje obrázek 6.3.
Obr. 6.3: Nastavení portĤ C a D
- 54 -
Následující obrázek 6.4 zobrazuje nastavení použitého þasovaþe Timer 1. Pro svou funkci nevyužívá zvláštní zdroj frekvence a je pĜipojen na frekvenci mikrokontroleru. Pomocí dČliþky je jeho pracovní frekvence nastavena na 125 kHz. Následuje nastavení místa v pamČti mikrokontroleru, ve kterém je umístČno referenþní þíslo pomocí výbČrové lišty Mode. Je zvolen formát funkce þasovaþe, kdy pĜi rovnosti aktuálního poþtu a hodnoty A je vyvoláno pĜerušení a hodnota A je nastavena na 04E2 hexadexcimálnČ, což je rovno 1250 dekadicky.
Obr. 6.4: Nastavení þasovaþe
- 55 -
Jiné pĜednastavení se týká sériové sbČrnice USART. Použita je pouze funkce Transmitter zajišĢující jednostranné posílání dat z mikrokontroleru do poþítaþe. Nastavení formátu komunikace musí být shodné pro mikrokontroler i pro poþítaþ. Rychlost pĜenosu je nastavena na 9600 Bps, prvních osm bitĤ jsou pĜenášená data, následuje jeden stop bit, který oddČluje jednotlivé pakety dat od sebe. Pro pokroþilou kontrolu správnosti pĜenosu je možné použít funkci paketové parity, která mezi datové bity a stop bit vloží navíc jeden bit, jehož hodnota je rovna exkluzivnímu souþtu všech datových bitĤ. Po pĜíjmu se exkluzivní souþet zopakuje a souhlasí-li hodnota s paritním bitem, jsou pĜenesená data považovaná za správná. Ve zde prezentovaném programu dosahuje vypoþítaná pravdČpodobnost chyby pĜenosu 0.2 %, ztráta dat bČhem pĜenosu tedy není pravdČpodobná a proto funkce parity využita není. PĜednastavení sériové sbČrnice je ukázáno na obrázku 6.5.
Obr. 6.5: Nastavení sériové komunikace
- 56 -
Posledním funkþním blokem nastaveným pomocí prĤvodce je analogovČ-digitální pĜevodník. Využita je plná kapacita pĜevodu 10 bitĤ. Data pĜivádČná na jednotlivé vstupní piny jsou porovnávána s pinem AVCC, na který je pĜivedeno napájecí napČtí 5 V. Je využita maximální dostupná rychlost pĜevodu pĜi zvolené frekvenci mikrokontroleru, 1 MHz. Pohled na okno nastavení analogovČ-digitálního pĜevodníku je na obrázku 6.6.
Obr. 6.6: Nastavení analogovČ-digitálního pĜevodu
VytvoĜený program odpovídá pĜedem navržené struktuĜe softwaru CodeVision. Použité funkce jsou podrobnČ popsány v [2].
- 57 -
6.1
Definice promČnných
Pro potĜeby programu bylo nutné definovat celou Ĝadu promČnných. Pro úsporu pamČĢového prostoru a pro rychlejší operace se volí co možná nejúspornČjší typ promČnných, který plnČ dostaþuje velikosti neseného þísla. V první ĜadČ bylo nutné definovat promČnné, které po pĜivedení na port B mikrokontroleru, na který je napojený displej, zobrazí pomocí rozsvícení segmentĤ odpovídající þíslice. Nadefinovány jsou þíslice 0 až 9 a dva další znaky, teþka pro oddČlení celé a desetinné þásti zobrazovaného þísla a pomlþka, která se využívá pro zobrazení speciálních znakĤ, je-li procentuální hodnota mimo rozsah 0 % až 100 %. Pro tyto promČnné plnČ dostaþoval typ char. Další promČnné typu char jsou použity pro poþítání v cyklech for (promČnné i, k a l) a pro rozsvČcování þíslic displeje na místČ stovek a desítek, je-li hodnota dostateþnČ velká (promČnné a a b). Dále jsou definována dvČ pole o þtyĜech znacích typu char pro uložení þíslic na místech stovek, desítek, jednotek a desetin hodnoty. Tato pole slouží pĜi zobrazování celkového þísla na displeji. Poslední promČnnou typu char je promČnná des, pomocí které se odesílá desetinná þást hodnoty po sériové lince ke zpracování poþítaþem. Následují promČnné typu int pro naþtení maximální a minimální hodnoty a pro urþení rozsahu (promČnné max, min a rozsah). Pro urþování prĤmČrné hodnoty je definována promČnná pocitadlo a pro krátkodobé uložení hodnot promČnná pom. Posledním použitým typem promČnných je typ float, který jako jediný umožĖuje uložení neceloþíselných hodnot. CelkovČ tĜi promČnné jsou tohoto typu, promČnné soucet a prumer slouzi k prĤmČrování sta namČĜených hodnot, promČnná hodnota pak již obsahuje zobrazované þíslo. V pĜípadČ, že je potĜeba mít jistotu, že v promČnných nebude nežádoucí hodnota, jsou pĜi definování vynulovány nebo je jim pĜímo hodnota pĜiĜazena.
- 58 -
PĜiložený úsek kódu zobrazuje definici promČnných.
//promenne rozsvecujici segmenty na displeji do tvaru cisel char nula=192, jedna=249, dva=164, tri=176, ctyri=153, pet=146, sest=130, sedm=248, osm=128, devet=144, pomlcka=191, tecka=-128; //dalsi promenne char i, k, l, a, b, cifra[3], cislo[3], des=0; int max, min=1025, rozsah, pocitadlo=0, pom; float soucet=0, prumer, hodnota=-10;
6.2
Hlavní funkce
Program je koncipován tak, že ve své hlavní þásti se stará o cyklické zobrazování hodnot na displeji a samotné mČĜení probíhá periodicky, vždy, když pĜeteþe registr þasovaþe. K tomu dochází stokrát za sekundu. Displej funguje tak, že v jednom okamžiku svítí vždy pouze jedna þíslice, pro bezproblémové zobrazování þísla je proto nutné všechny þíslice vystĜídat minimálnČ každých 20 ms, což je splnČno s rezervou. Na zaþátku hlavní funkce main je zavolána funkce settings shrnující nastavení mikrokontroleru. Následuje 5s pauza a naþítání maximální hodnoty, které se v daném elektronickém zapojení dosahuje pĜi vypnuté laserové diodČ. Maximální hodnota je vybírána ze sta jednotlivých mČĜení. Po jejím nalezení se nachází v promČnné max. Dalším krokem je zapnutí laserové diody, která je pĜímo pĜipojena k sedmému pinu portu D mikrokontorleru. Pro ustálení je zaĜazena 10s pauza a hledána minimální hodnota opČt ze sta mČĜení. Hodnota se uloží do promČnné min a urþí se rozsah možných mČĜených hodnot.
- 59 -
Výše uvedený postup je možné vyþíst z pĜiložené þásti kódu.
//hlavni cast programu void main(void) { //zavolani nastaveni settings(); //cekani 5 s delay_ms(5000); //hledani maximalni hodnoty for(k=0;k<100;k++) { pom=read_adc(0); if(pom>max) { max=pom; } } //zapnuti laserove diody PORTD.7=1; //cekani 10 s pro ustaleni fototranzistoru delay_ms(10000); //hledani minimalni hodnoty for(l=0;l<100;l++) { pom=read_adc(0); if(pom<min) { min=pom; } } //urceni rozsahu rozsah=(max-min); ... };
Funkce main dále obsahuje pĜíkaz obecnČ povolující pĜerušení. V pĜípadČ tohoto kódu se využívá pouze pĜerušení vyvolané þasovaþem. Pro bezproblémový chod zobrazení na displeji je vložena 2s pauza, bČhem které program odskoþí do þasovaþem vyvolaného pĜerušení a provede první naþtení dále využívané promČnné hodnota. Následuje již jen nekoneþná smyþka while obsahující zobrazování hodnot na displeji. Zde popsanou þást kódu je možné vidČt níže. - 60 -
//obecne povoleni preruseni #asm("sei") //cekani 2 s pro cyklus casovace delay_ms(2000); //nekonecna smycka while (1) { ... }
6.3
AnalogovČ-digitální pĜevod
Funkce pro pĜevod analogového vstupního signálu na þíslo je generována automaticky pomocí pomocníka softwaru CodeVision. Má jedinou vstupní hodnotu, která udává poĜadí pinu portu A, ze kterého se má pĜevádČná hodnota snímat. Návratovou hodnotou je þíslo vyjadĜující hodnotu vstupního signálu vĤþi signálu referenþnímu, kterým je v pĜípadČ mČĜicího pĜístroje zem (GND). Z tohoto dĤvodu a díky elektronickému zapojení desky je také snímaná hodnota maximální pĜed rozsvícením laserové diody a minimální po rozsvícení. Automaticky vygenerovaná funkce poþítá pouze s osmibitovou hodnotou analogovČdigitálního pĜevodu, která je uložena v registru ADCH. Pro mČĜicí pĜístroj bylo žádoucí využít v plné míĜe možností pĜevodníku a byl použit pĜevod desetibitový. Jelikož jsou registry mikrokontroleru ATmega16 pouze osmibitové, jsou dva nejménČ významné bity pĜevodu uloženy v dalším registru ADCL. Pro jejich binární souþet je nutné hodnotu v registru ADCL posunout o 6 míst vpravo a obsah registru ADCH o dvČ místa vlevo. V dekadickém zápisu je možno toto realizovat pomocí vydČlení þíslem 64, respektive vynásobení þíslem 4.
- 61 -
Upravený obsah registrĤ se seþte a pĜedá na výstup funkce, jak je možno vidČt v následujicí pĜiložené þásti kódu.
//funkce pro AD prevod unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); //pauza potrebna pro stabilizaci vstupniho napeti delay_us(10); //zacatek AD prevodu ADCSRA|=0x40; //cekani na dokonceni AD prevodu while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; //navrat 10bitove hodnoty return (ADCL/64)+(ADCH*4); }
6.4
Zpracování naþtených hodnot
Naþítání mČĜených hodnot se Ĝídí þasovaþem. Ten je nastaven tak, že stokrát za sekundu vyvolá pĜerušení aktuálního bČhu programu a skoþí se do jiné þásti kódu. Po vykonání tohoto pĜerušení se program vrátí do místa, ze kterého vyskoþil, a pokraþuje v bČhu. Pro vyšší pĜesnost mČĜených hodnot se vždy sto jednotlivých mČĜení prĤmČruje. K tomu slouží sumaþní promČnná soucet a promČnná pocitadlo, která se pouze inkrementuje. V momentČ, kdy se promČnná pocitadlo inkrementuje po sté, v promČnné soucet je právČ uloženo sto namČĜených hodnot. Ta se podČlí stem a uloží do promČnné prumer a pocitadlo i soucet se vynulují. Od prĤmČru se odeþte minimální hodnota naþtená na zaþátku pĜed mČĜením a podČlí se rozsahem. Pokud by se hodnota již dále neupravovala, vypovídala by o zakalení mČĜené kapaliny. Je ovšem žádoucí, aby mČĜení vypovídalo o þistotČ této kapaliny, proto je pĜed pĜevedením na procenta a uložením do promČnné hodnota vše odeþteno od þísla 1. Celý tento proces se neustále opakuje a pĜináší každou sekundu novou prĤmČrovanou hodnotu v procentuálním zobrazení.
- 62 -
Výše popsaný proces zobrazuje níže pĜiložená þást kódu.
//preruseni pri preteceni casovace interrupt [TIM1_COMPA] void timer1_compa_isr(void) { //scitani 100 hodnot soucet=soucet+read_adc(0); pocitadlo++; //prumerovani hodnoty if(pocitadlo==100) { pocitadlo=0; prumer=soucet/100; soucet=0; //odecteni minima od hodnoty a prevedeni na procenta hodnota=(1-(((float)(prumer-min))/((float)(rozsah))))*100; ... } }
6.5
Zobrazení hodnoty na displeji
Pro kvalitní zobrazení hodnoty na þtyĜmístném displeji se udává, že jednotlivé þíslice musejí být vystĜídány bČhem maximálnČ 20 ms. Po otestování a zvážení možností byla zvolena hodnota menší, cca 5 ms. MČĜicí pĜístroj má možnost napájení z akumulátorĤ, je tedy žádoucí šetĜit energií. Z toho dĤvodu je zobrazování udČláno tak, že na prvních dvou þíslicích, které odpovídají stovkám a desítkám, se zobrazuje þíslo pouze v pĜípadČ, je-li nenulové. PĜed zapoþetím zobrazování, v dobČ, kdy zobrazovaná hodnota ještČ není známa, je nutné tyto dvČ þíslice vypnout. K tomu slouží promČnné a pro stovky a b pro desítky. Ty pĜenesenČ fungují tak, že obsahují-li 1 je daná þíslice zapnutá, obsahují-li 0, pak je ve vypnutém stavu. Dále je nutné vzhledem k charakteru displeje zobrazovanou hodnotu rozdČlit na jednotlivá þísla odpovídající stovkám, desítkám, jednotkám a desetinnám. PromČnná hodnota se nejprve upraví dČlením þi násobením tak, aby požadovaná þíslice byla na místČ jednotek, poté se pĜevede na typ integer, na který již lze použít operátor, jehož výstupem je zbytek po celoþíselném dČlení, v tomto pĜípadČ se dČlí þíslem deset. Následuje pĜiĜazení promČnných reprezentujících rozsvícení segmentĤ ve tvaru þíslic do pole cifra, které se posléze pĜivádí na port B mikrokontroleru, kam je napojen displej. - 63 -
Vše je též možno vyþíst v pĜiloženém výseku kódu.
//vypnuti 1. a 2. cislice displeje a=0; b=0; //nalezeni cisel na miste stovek, desitek, jednotek a desetin hodnoty cislo[0]=((int)((hodnota)/100))%10; cislo[1]=((int)((hodnota)/10))%10; cislo[2]=((int)(hodnota))%10; cislo[3]=((int)((hodnota)*10))%10; //prirazeni cisel signalum rozsvecujicim segmenty na displeji for(i=0;i<4;i++) { switch (cislo[i]) { case 0: cifra[i]=nula; break; case 1: cifra[i]=jedna; break; case 2: cifra[i]=dva; break; case 3: cifra[i]=tri; break; case 4: cifra[i]=ctyri; break; case 5: cifra[i]=pet; break; case 6: cifra[i]=sest; break; case 7: cifra[i]=sedm; break; case 8: cifra[i]=osm; break; case 9: cifra[i]=devet; break; default: cifra[i]=pomlcka; break; } }
Nyní je na ĜadČ rozhodování, které þíslice displeje budou aktivní. Podmínka je velmi jednoduchá, je-li promČnná hodnota vČtší nebo rovna 10, do promČnné b, která se stará a rozsvícení þíslice displeje na místČ desítek se uloží jedniþka. Je-li promČnná hodnota vČtší než 100, uloží se jedniþka i do promČnné a, která se stará o rozsvícení þíslice displeje na místČ stovek. KromČ þíslených hodnot umí displej zobrazit dvČ chybová hlášení, a to v pĜípadČ, že se zmČĜená hodnota nachází mimo rozsah 0 % až 100 %. Je-li menší než 0 % na displeji se zobrazí "---0" a je-li vČtší než 100 % zobrazí se "1---". U znaku pomlþky na místČ jednotek je nutno odeþíst promČnnou reprezentující desetinnou teþku, která se k této pozici v cyklickém zobrazování automaticky pĜidává.
- 64 -
Popsané funkce jsou k nahlédnutí v níže pĜiložené þásti kódu.
//je-li hodnota vetsi nez 10, rozsviti se i 2. cislice displeje if((hodnota)>=10) { b=1; } //je-li hodnota vetsi nez 100, rozsviti se i 1. a 2. cislice displeje if((hodnota)>=100) { a=1; b=1; } //je-li hodnota vetsi nez 100, zobrazi se chybova hlaska "1---" if((hodnota)>100) { cifra[0]=jedna; cifra[1]=pomlcka; cifra[2]=pomlcka-tecka; cifra[3]=pomlcka; } //je-li hodnota mensi nez 0, zobrazi se chybova hlaska "---0" if((hodnota)<0) { cifra[0]=pomlcka; cifra[1]=pomlcka; cifra[2]=pomlcka-tecka; cifra[3]=nula; a=1; b=1; }
Poslední þástí hlavní þásti programu je vlastní zobrazení hodnoty. Systém funguje tak, že na port B mikrokontroleru se pĜivádí promČnné reprezentující danou þíslici jako seskupení segmentĤ a pomocí pinĤ 3 až 6 portu D se jednotlivé þíslice rozsvČcují. Jak bylo popsáno výše, na port B je pĜivedena odpovídající buĖka pole cifra, poté se pĜivede jedniþka na ten pin portu D, který rozsvČcuje žádanou þíslici, vyþká se 1 ms a na použitý pin portu D se zpČt pĜivede nula, což vypne þíslici. Toto probČhne pro všechny þtyĜi þíslice. U þíslice na místČ stovek a desítek není na odpovídající pin portu D pĜivedena jedniþka pĜímo, ale jsou sem pĜivedeny promČnné a a b, které obsahují jedniþku pouze v pĜípadČ, že zobrazované þíslo je natolik velké, že pro své zobrazení vyžaduje i danou þíslici displeje. Další rozdíl je u zobrazování jednotek, kdy se k odpovídajicí buĖce pole cifra pĜiþte promČnná reprezentující rozsvícení desetinné teþky. - 65 -
Programový kód ukazující sekvenci zobrazování procentuální hodnoty na displeji je pĜiložen níže.
//zobrazeni hodnoty //nachystani zobrazeni cisla na miste stovek PORTB=cifra[0]; //rozsviti se prvni cislice, je-li hodnota vetsi nez 100 PORTD.6=a; //cislice sviti 1 ms delay_ms(1); PORTD.6=0; //nachystani zobrazeni cisla na miste desitek PORTB=cifra[1]; //rozsviti se druha cislice, je-li hodnota vetsi nez 10 PORTD.5=b; //cislice sviti 1 ms delay_ms(1); PORTD.5=0; //nachystani zobrazeni cisla na miste jednotek a pridani desetinne tecky PORTB=(cifra[2]+tecka); //rozsviti se treti cislice PORTD.4=1; //cislice sviti 1 ms delay_ms(1); PORTD.4=0; //nachystani zobrazeni cisla na miste desetin PORTB=cifra[3]; //rozsviti se ctvrta cislice PORTD.3=1; //cislice sviti 1 ms delay_ms(1); PORTD.3=0;
6.6
Odeslání hodnoty po sériové lince
Co se mČĜení týþe, hyerarchicky poslední þást kódu se stará o poslání zpracované hodnoty po sériové USART sbČrnici pĜes USB pĜevodník do poþítaþe. Mohou nastat celkem tĜi pĜípady. ZmČĜená hodnota mĤže být menší než 0 %, v tom pĜípadČ se odešle þíslo 103, které poþítaþový program nezobrazí, nýbrž jej vyhodnotí jako chybový signál a zobrazí hlášku "---0". Také mĤže být zmČĜená hodnota mimo rozsah z druhé strany, mĤže pĜekraþovat 100 %. Poté mikrokontroler odešle chybový signál 104 a na poþítaþi se zobrazí "1---". Problematika komunikace mikrokontroleru s poþítaþem po sériové lince je podrobnČ popsána v [3], [4] a [5]. - 66 -
V pĜípadČ hodnota leží v rozsahu 0 % až 100 %, odešle se þíslo 102, které pro poþítaþový program znamená, že nejbližší dvČ pĜíchozí þísla jsou celou a desetinnou þástí hodnoty, která se má zobrazit v programovém oknČ. Jelikož je promČnná hodnota typu float, je ještČ pĜed posláním konvertována na char, což je typ, který již lze odeslat. PochopitelnČ je tím ztracena desetinná þást této promČnné, kterou je nutno odeslat zvlášĢ. Po pĜijetí je celé þíslo znovu složeno programem v poþítaþi. ýást kódu starající se o odesílání hodnoty je pĜiložena níže.
//chovani pri ruznych hodnotach //je-li hodnota mensi nez 0, posle se chybovy signal 103 if(hodnota<0) { usart_transmit(103); } //je-li hodnota vetsi nez 100, posle se chybovy signal 104 else if(hodnota>100) { usart_transmit(104); } //je-li hodnota 0 – 100, odesle se potvrzujici signal 102 a cela a desetinna cast hodnoty else { des=((int)(hodnota*100))%100; usart_transmit(102); usart_transmit((char)(hodnota)); usart_transmit(des); }
Souþástí je i automaticky vygenerovaná funkce usart_transmit, jejíž kód je taktéž pĜiložen. Funkce požaduje jedinou vstupní hodnotu, která se odešle pomocí sbČrnice USART.
void usart_transmit(unsigned char data) { //cekani na vyprazdneni registru while(UCSRA.5!=1); UDR=data; }
- 67 -
7 Využití poþítaþe PĜenos dat do poþítaþe probíhá pomocí univerzálního sériového pĜevodníku FT232R, který je uzpĤsobený pro posílání dat po sbČrnici USB. Pro potĜeby pĜedstavovaného pĜístroje je však vhodnČjší využít starší formát sériové sbČrnice COM. Toho je docíleno aplikací ovladaþĤ, které v prostĜedí operaþního systému poþítaþe tento port nasimulují. Po propojení pĜístroje s poþítaþem a po jeho zapnutí se USB pĜevodník v prostĜedí operaþního systému pĜihlásí jako nové zaĜízení a je tĜeba navést instalaþního prĤvodce na konkrétní ovladaþ CDM 2.04.16, který v operaþním systému vytvoĜí fiktivní COM port. Ovladaþ je bČžnČ dostupný, volnČ šiĜitelný software a je dodán i na CD k této práci. Funkþnost ovladaþe byla ovČĜena na operaþních systémech Windows XP a Windows 7. PĜed samotným pĜenosem dat je tĜeba COM port nastavit. Zákadním nastavením je jeho poĜadové þíslo v operaþním systému, které musí ležet v rozmezí 1 až 8. Pouze s tČmito porty umí program pro pĜíjem, zobrazení a zápis dat pracovat. Dále je nutné nastavit formát pĜenášených dat shodný s mikrokontrolerem, tedy rychlost 9600 Bps, 8 bitĤ dat a jeden stop bit, bez použití parity. O pĜíjem, zobrazení a zápis dat se poté již stará vytvoĜený program COM Receiver, jehož popis následuje v dalších kapitolách.
- 68 -
Nastavení COM portu pro pĜenos dat ukazuje obrázek 7.1.
Obr. 7.1: Nastavení COM portu
- 69 -
7.1
Podoba programového okna
Podoba programového okna byla vytvoĜena pomocí softwaru pro objektové programování Windows Form Designer, který je volnČ k dispozici ke stažení pro uživatele operaþního systému Windows. Vzhled tohoto okna zobrazuje obrázek 7.2.
Obr. 7.2: Vzhled programového okna
7.2
Funkce tlaþítek
Základním rozhraním pro ovládání programu jsou tlaþítka. ZajišĢují vytvoĜení nového souboru pro zápis dat, zapoþetí komunikace s pĜístrojem, zápis dat a ukonþení programu.
7.2.1
Tlaþítko New file
Pro vytvoĜení souboru pro zapisování pĜijatých dat slouží tlaþítko New file. VytváĜený soubor se vždy uloží do složky, ze které byl program COM Receiver spuštČn. Vedle tlaþítka se nachází textové pole, do kterého se vepisuje název souboru, možno s pĜíponou i bez ní. Po stisknutí tlaþítka se nejprve zkontroluje, zda daný soubor již existuje a v pĜípadČ, že ano, požaduje se opČtovné potvrzení, místo nápisu "New file" se objeví nápis "Overwrite?" a tlaþítko zþervená .
- 70 -
Daná þást kódu obsluhující tlaþítko New file je zobrazena dále.
//chovani tlacitka "new file" private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { //prevod systemoveho stringu na standartni ceckovsky string fileName = (const char*)System::Runtime::InteropServices::Marshal:: StringToHGlobalAnsi(this->textBox1->Text).ToPointer(); std::ifstream *testStream =new std::ifstream (fileName.c_str()); //test zda jiz existuje zadany soubor if(!(*testStream)) { //pokud neexistuje, tak se vytvori outStream=new std::ofstream (fileName.c_str()); this->textBox1->ForeColor=System::Drawing::Color::Lime; wasOpened=true; } else { //pokud existuje, pozaduje se potvrzeni prepsani this->textBox1->ForeColor=System::Drawing::Color::Red; this->button1->Text="Overwrite?"; this->button1->BackColor=System::Drawing::Color::Red; if(really==true) { outStream=new std::ofstream(fileName.c_str()); this->button1->Text="New file"; this->button1->UseVisualStyleBackColor = true; this->textBox1->ForeColor=System::Drawing::Color::Lime; really=false; wasOpened=true; } else { really=true; } } }
V pĜípadČ úspČšného vytvoĜení souboru se jeho název zmČní z barvy þerné na zelenou. V pĜípadČ, že soubor o tomtéž názvu již existuje a je vyžadováno potvrzení pĜepsání, jméno souboru zþervená. - 71 -
Následuje úsek kódu, který obstarává textové pole.
//chovani pole nazvu souboru private: System::Void textBox1_TextChanged(System::Object^ System::EventArgs^ e) { this->textBox1->ForeColor=System::Drawing::Color::Black; this->button1->UseVisualStyleBackColor = true; really=false; this->button1->Text="New file"; }
7.2.2
sender,
Tlaþítko Open port
Pro nastavení, ze kterého portu mají být pĜijímána data, slouží tlaþítko Open port s pĜidruženým rozbalovacím výbČrem. Lze vybrat COM port þíslo 1 až 8, poté je nutné výbČr potvrdit stiskem tlaþítka. V pĜípadČ, že po vybraném portu teþou data v pĜedpokládaném formátu, tedy sekvence osmibitových þísel každou sekundu, zmČní se nápis zobrazující status z þerveného "Offline" na zelený "Online" a na þíselníku se zaþne zobrazovat pĜijímaná hodnota. Funkci tlaþítka zajišĢuje následující kód.
//tlacitko pro otevreni com portu private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) { this->serialPort1->Close(); this->comboBox1->ForeColor=System::Drawing::Color::Red; this->serialPort1->PortName=this->comboBox1->Text; this->serialPort1->Open(); this->comboBox1->ForeColor=System::Drawing::Color::Lime; }
7.2.3
Tlaþítka Run a STOP
Pro zapoþetí zápisu hodnot do vytvoĜeného souboru je nutno stisknout tlaþítko Run, které nastaví hodnotu promČnné run jako "true". PodobnČ tlaþítko STOP tuto promČnnou pĜenastaví zpČt do implicitní hodnoty "false". V pĜidruženém rozbalovacím výbČru lze upĜesnit þetnost zápisu. Omezení poþtu zapisovaných hodnot je relevantní hlavnČ v pĜípadČ delších mČĜení, - 72 -
kdy by jejich nadmČrné množství zpĤsobovalo pouze zpomalení pĜí zpracování bez pĜínosu další informace. Zobrazené þásti kódu ukazují fuknce tlaþítek Run a STOP.
//tlacitko pro zapisovani do souboru private: System::Void button3_Click(System::Object^ System::EventArgs^ e) { run=true; this->button3->Text="Running..."; }
//tlacitko pro konec zapisovani do souboru private: System::Void button4_Click(System::Object^ System::EventArgs^ e) { run=false; this->button3->Text="Run"; }
7.2.4
sender,
sender,
Tlaþítko Exit
Pro ukonþení þinnosti programu z jakéhokoliv stavu slouží tlaþítko Exit. Po jeho stisknutí se program vypne aniž by hrozila ztráta ukládaných dat. PĜed ukonþením programu je zajištČno ukonþení komunikace pĜes používaný COM port, který je tím zpĜístupnČn dalším programĤm. Následuje úsek kódu zajišĢující vypnutí programu.
//chovani tlacitka "exit" private: System::Void button2_Click(System::Object^ System::EventArgs^ e) { this->serialPort1->Close(); exit(0); }
7.3
sender,
PĜíjem, zobrazení a zápis dat
Pro kontrolu, zda pĜicházejí data slouží inkrementující se promČnné time a tick. PromČnná time je inkrementována neustále, promČnná tick je smazána vždy když jsou data pĜijata. - 73 -
MČĜicí pĜístroj je navržen tak, aby posílal data nepĜetržitČ každou sekundu po dobu svého provozu. Pokud data nedojdou, je zĜejmé, že byl pĜístroj vypnut, pĜípadnČ byla pĜerušena komunikace a zobrazí se þervený nápis "Offline". K vyhodnocení tohoto stavu dojde jednoduše tak, že promČnná tick není vynulována a její hodnota pĜesáhne 20.
//casovac pro kontrolu zda dochazeji znaky private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { time++; tick++; //pokud nedochazeji, zobraz offline stav if (tick>20) { this->label3->ForeColor=System::Drawing::Color::Red; this->label3->Text="Offline"; } }
V pĜípadČ, že jsou data pĜijímána správnČ, mohou nastat tĜi rozdílné pĜípady. Je-li namČĜená hodnota vČtší než 100 %, pošle mČĜicí pĜístroj po sériové lince þíslo 104, což je vyhodnoceno jako chybový stav, zobrazí se nápis "1---" a hodnota se nezapisuje. ObdobnČ je tomu v pĜípadČ namČĜení hodnoty menší než 0 %, kdy pĜístroj pošle þíslo 103, které vyvolá zobrazení chybové hlášky "---0" a hodnota taktéž není zapsána. Pouze pokud namČĜená hodnota leží v rozsahu 0 % až 100 %, pĜístroj odešle þíslo 102, které pĜedurþuje, že následující dvČ pĜijatá þísla budou pĜedstavovat celou a desetinnou þást zmČĜené hodnoty. Hodnota musela být rozdČlena z dĤvodu nemožnosti odeslání více než osmibitového þísla po komunikaþní sbČrnici. Výsledná hodnota je z tČchto dvou þástí složena, zobrazena a pĜípadnČ zapsána do souboru.
- 74 -
OšetĜení obsluhy pĜíchozích dat ukazuje následující výsek kódu.
//obsluha dosleho znaku private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) { tick=0; //vizualni zmena rozhrani, zobrazeni online stavu this->label3->Text="online"; this->label3->ForeColor=System::Drawing::Color::Lime; unsigned char inChar=this->serialPort1->ReadByte(); //kontrola zda dosel znak uvozujici zpravu if (inChar==102) { // cekani na zpravu fInt=this->serialPort1->ReadChar(); lInt=this->serialPort1->ReadChar(); //kontrola spravneho rozsahu if( ((fInt==100) && (lInt==0)) || ((fInt<100) && (lInt<100) && (fInt>=0) && (lInt>=0)) ) { //kontrola zda bezi zapis a je otevren vystupni soubor if ( (wasOpened==true) && (run==true) ) { readPair++; //kotrola zda se ma dana hdnota preskocit nebo zapsat if(readPair>=everyX) { //zapis if (lInt>9) { (*outStream)<<(int)fInt<<"."<<(int)lInt<<std::endl; } else { (*outStream)<<(int)fInt<<".0"<<(int)lInt<<std::endl; } readPair=0; } } this->label4->ForeColor=System::Drawing::Color::Black; } else { this->label4->ForeColor=System::Drawing::Color::Red; } //zobrazeni dosle hodnoty na uzivatelske rozhrani
- 75 -
if (lInt>9) { this->label4->Text=fInt.ToString()+"."+lInt.ToString(); } else { this->label4->Text=fInt.ToString()+".0"+lInt.ToString(); } //smazani pripadnych prebyvajicich hodnot v buferu this->serialPort1->DiscardInBuffer(); } //dalsi mozne specialni znaky else if (inChar==103) { this->label4->Text="---0."; this->label4->ForeColor=System::Drawing::Color::Red; } else if (inChar==104) { this->label4->Text="1---."; this->label4->ForeColor=System::Drawing::Color::Red; } }
Poslední nastínČná þást programového kódu zobrazuje možnosti výbČru þetnosti zápisu do souboru. Rozbalovací výbČr vedle tlaþítka Run umožĖuje zapisovat krom všech došlých relevantních hodnot i každou 5., 10., 20., 50., 100., 200., 500. a 1000. hodnotu.
//combo box urcuji cetnost zapisu do souboru private: System::Void comboBox2_SelectedIndexChanged (System::Object^ sender, System::EventArgs^ e) { switch(this->comboBox2->SelectedIndex) { case 0: everyX=1; break; case 1: everyX=5; break; case 2: everyX=10; break; case 3: everyX=20; break; case 4: everyX=50; break; case 5: everyX=100; break; case 6: everyX=200; break; case 7: everyX=500; break; case 8: everyX=1000; break; } }
- 76 -
7.4
Zpracování výsledkĤ
Formát dat zapsaných do souboru je zvolen tak, aby bylo možno s nimi dále bezproblémĤ pracovat. Jedná se o jednotlivé namČĜené hodnoty, každá na jednom Ĝádku, oddČlené desetinnou teþkou a s pĜesností na dvČ desetinná místa. Není proto žádný problém tato data pĜevést napĜ. do tabulkového procesoru Excel ze softwarové sady Microsoft Office. PĜi znalosti þetnosti zápisu lze do dalšího sloupce doplnit þasové údaje ke každé namČĜené hodnotČ a následnČ vykreslit graf. PĜíkladem výstupu zpracovaného mČĜení mĤže být napĜ. graf na obrázku 7.3.
priklad zpracovani 100.00 90.00 80.00 70.00
[%]
60.00 50.00 40.00 30.00 20.00 10.00 0.00 0
50000
100000
150000
200000
250000
[s]
Obr. 7.3: PĜíklad grafu závislosti propustnosti mČĜené kapaliny na þase
- 77 -
300000
8 MČĜení referenþních vzorkĤ Pro demonstraci možností vytvoĜeného mČĜicího zaĜízení bylo provedeno promČĜení tĜí vzorkĤ fotokatalytických nátČrĤ. Na výsledky mČly kromČ vlastní fotokatalýzy vliv další faktory, což bylo pro vyhodnocení fotokatalytických vlastností vzorkĤ nežádoucí a jejich vliv byl omezen na minimum. K nepĜíznivým faktorĤm ovlivĖujícím mČĜení patĜí možný odpar kapaliny bČhem mČĜení, možnost nasáknutí þásti kapaliny do vzorku, nerovnomČrná intenzita osvitu vzorku pĜi slábnoucí koncentraci metylenové modĜi a nelineární charakteristikou fototranzistoru. Pro minimalizaci odparu bylo pro mČĜení vybráno pracovištČ s relativní vlhkostí pĜesahující 90 %, nad kádinku s kapalinou byla šikmo umístČna tabulka skla pro zabránČní pĜípadné nechtČné kondenzaci. MČĜení ukázalo, že po padesáti hodinách byl úbytek sloupce kapaliny menší než 1 mm. Zamezení nasáknutí kapaliny do vzorkĤ bylo dosaženo ponoĜením vzorkĤ pĜedem minimálnČ 24 h do metylenové modĜi o stejné koncentraci, s jakou pozdČjší mČĜení zaþínalo, tedy 10 ȝmol na litr. V pĜípadČ, že by tato procedĤra neprobČhla, mČĜení by mohlo být ovlivnČno ztrátou þásti objemu kapaliny ve vzorku. Pokud by se tak stalo, hladina by poklesla a mČĜení by pĜineslo falešné údaje o zmČnČ koncentrace metylenové modĜi. OvlivnČní mČĜení promČnnou intenzitou dopadajícího UV záĜení není možné odstranit, je nutno s ním poþítat. Dle dĜíve ukázané závislosti absorpce na vlnové délce procházejícího záĜení by ovšem tento vliv nemČl být markantní, metylenová modĜ na vlnové délce ultrafialového záĜení absorbuje minimálnČ nehledČ na koncentraci. Posledním uvažovaným vlivem je nelineárnost fototranzistoru. Aþkoli nese oznaþení "high linear" a výše zobrazený výsek jeho charakteristiky závisloti fotoproudu na plošném výkonu dopadajícího záĜení ukazoval lineární prĤbČh, nelze s tím poþítat obecnČ pĜi výkonu použité laserové diody.
- 78 -
Schéma mČĜicího pĜístroje je zobrazeno na obrázku 8.1.
Obr. 8.1: Zjednodušené schéma mČĜicího pĜístroje
8.1
Postup mČĜení
Základem je umístČní mČĜicího pĜístroje na pevnou rovnou podložku pro zamezení otĜesĤm, které by se nepĜíznivČ projevily jako odchylky v mČĜených hodnotách. PĜednostním napájením je uvažováno napájení z USB portu poþítaþe þi notebooku, pĜes který probíhá i komunikace. Po pĜipojení se provede zapnutí pĜístroje na prázdno a nechá se v provozu po dobu nejménČ deseti minut. Do vyþistČné kádinky se naleje destilovaná voda o objemu rovném pozdČji mČĜené kapalinČ, v pĜípadČ referenþních vzorkĤ 100 ml. Destilovaná voda odpovídá plnému odbourání metylenové modĜi, tedy minimální absorpci. Kádinka se umístí do mČĜicího prostoru a pĜístroj se restartuje. BČhem první pĤl minuty jsou naþteny dvČ krajní hodnoty mČĜení. Bez zapnutého laseru je naþtena hodnota odpovídající 0 % a se zapnutým laserem, který prochází destilovanou vodou hodnota odpovídající 100 %. Kádinka se poté vyjme, vysuší a nalije se do ní požadované množství metylenové modĜi o žádané koncentraci, pĜi mČĜení referenþních vzorkĤ se jednalo o 100 ml metylenové modĜi o koncentraci 10 ȝmol na litr. ZnovunaplnČná kádinka se umístí zpČt do mČĜicího prostoru. - 79 -
MČĜený vzorek, který byl po dobu minimálnČ 24 h umístČn v metylenové modĜi o shodné koncentraci jako pĜi poþátku mČĜení, je pinzetou opatrnČ umístČn do kádinky tak, aby nikterak nezakrýval þidlo. Po uklidnČní hladiny v kádince je možné na poþítaþi spustit program pro pĜíjem, zobrazení a zápis dat COM Receiver. VytvoĜí se nový soubor, nastaví se komunikaþní port, na který je pĜipojený mČĜicí pĜístroj, a urþí se þetnost zápisu. Po kontrole, zda nedošlo k vychýlení laserového paprsku, je možné zapnout tlaþítko Run a zapoþít zapisování hodnot. PĜi referenþním mČĜení byl zvolen zápis každé 100. hodnoty. BČhem mČĜení je vhodné, aby poþítaþ þi notebook zĤstal ve stejném stavu a nepĜecházel napĜ. do úsporného režimu, nebyla k nČmu pĜipojována další zaĜízení þi nevypnul obrazovku. ZmČna zátČže mĤže zpĤsobit výkyv napČtí na USB portu a ovlivnit tak mČĜení. PĜi ukonþení mČĜení je nejdĜíve nutné tlaþítkem STOP ukonþit zápis hodnot do souboru, poté lze vypnout mČĜicí pĜístroj. U mČĜených vzorkĤ probíhalo mČĜení od 21 do 50 hodin. Data byla pĜenesena do softwaru Excel, kde k nim byl doplnČn þasový index (hodnota byla zapsána každých 100 s). Pro zobrazení výsledku byl vykreslen graf.
8.2
Výsledky
Pro demonstraci funkce mČĜicího pĜístroje byly obstarány tĜi vzorky rĤzných fotokatalytických nátČrĤ. Všechny vzorky mají rozmČr cca 20 x 20 mm, rĤznou barvu a tloušĢku. UV lampa byla umístČna ve vzdálenosti, která odpovídá plošnému výkonu cca 0.4 mW/cm2.
- 80 -
První vzorek ukázaný na obrázku 8.2 byl mČĜen po dobu 21 h.
Obr. 8.2: Vzorek þ. 1
Výsledky mČĜení závislosti propustnosti kapaliny na þase ukazuje obrázek 8.3
vzorek01 2.90
2.70
[%]
2.50
2.30
2.10
1.90
1.70 0
10000
20000
30000
40000
50000
[s]
Obr. 8.3: Graf mČĜení vzorku þ. 1
- 81 -
60000
70000
80000
Jak je patrné z grafu, pĜi mČĜení vzorku þ. 1 se projevil pouze minimální nárĤst propustnosti díky velmi slabé fotokatalytické aktivitČ vzorku. Toto mČĜení nicménČ slouží jako ovČĜení stability mČĜení. Odeþtený rozkmit hodnot þiní zhruba pouhých 0.6 %, což je vynikajicí výsledek. Vzorek þ. 2 mČl výraznČ lepší fotokatalytické vlastnosti a jeho mČĜení probíhalo 49 hodin. Fotografie vzorku je k náhledu na obrázku 8.4.
Obr. 8.4: Vzorek þ. 2
- 82 -
Charakteristika þasové závislosti propustnosti metylenové modĜi bČhem mČĜení vzorku þ. 2 je zobrazena na obrázku 8.5.
vzorek02 80.00 70.00 60.00
[%]
50.00 40.00 30.00 20.00 10.00 0.00 0
20000
40000
60000
80000
100000
120000
140000
160000
180000
[s]
Obr. 8.5: Graf mČĜení vzorku þ. 2
Z tvaru charakteristiky vzorku þ. 2 vyplývá jeho výrazná fotokatalytická aktivita a znamenité fotokatalytické vlastnosti. BČhem necelých 50 h mČĜení vzrostla propustnost z 2 % na 75 %. Odbourání metylenové modĜi bylo jasnČ patrné ze zmČny barvy roztoku.
- 83 -
TĜetí vzorek prokázal taktéž slabé fotokatalytické vlastnosti, avšak lepší v porovnání se vzorkem þ. 1. MČĜení trvalo 22.5 hodiny. Vzorek ukazuje obrázek 8.6.
Obr. 8.6: Vzorek þ. 3
- 84 -
Graf z mČĜení tĜetího vzorku je vynesen na obrázku 8.7.
vzorek03 3.8 3.6 3.4
[%]
3.2 3 2.8 2.6 2.4 2.2 2 0
10000
20000
30000
40000
50000
60000
70000
80000
[s]
Obr. 8.7: Graf mČĜení vzorku þ. 3
Po poþáteþních chybných hodnotách mČĜení ukazuje postupný nárĤst, fotokatalýza tedy probíhala, ovšem velmi pomalu pĜi porovnání se vzorkem þ. 2. Nejlépe vypovídajícím mČĜením je mČĜení vzorku þ. 2, které jasnČ prokázalo fotokatalytické vlastnosti daného materiálu. Pro urþení rozkmitu mČĜení dobĜe posloužil vzorek þ. 1. Tato mČĜení ovČĜila funkci pĜístroje a potvrdila jeho schopnost analyzovat vlastnosti fotokatalyticky aktivních materiálĤ. Úkol této práce vytvoĜit mČĜicí pĜístroj pro mČĜení optické propustnosti kapaliny na vlnové délce 650 nm, která je vhodná pro urþování fotokatalytických vlastností samoþisticích vrstev TiO2, je tímto splnČn.
- 85 -
9 ZávČr Práce pĜedkládá kompletní pĜístroj urþený pro mČĜení propustnosti metylenové modĜi. Bez dalších úprav je pĜipraven pro mČĜení v laboratoĜích pro urþení úþinnosti fotokatalytických jevĤ. Princip mČĜení spoþívá v absorpci þásti laserového paprsku vytvoĜeného laserovou diodou v roztoku metylenové modĜi. Koncentrace této kapaliny pĜímo odpovídá absorpci paprsku. Výsledný paprsek je pomocí fototranzistoru pĜeveden na napČĢový signál, ten je posléze digitalizován a zpracován Ĝídicím mikrokontrolerem. Pro mČĜení byla vybrána laserová dioda s vlnovou délkou 650 nm, což pĜibližnČ odpovídá maximu absorpce metylenové modĜi. Laserová dioda dosahuje maximálního výkonu 3 až 4 mW, což zajišĢuje spolehlivé namČĜení dat a zároveĖ tento výkon minimálnČ ovlivní zkoumanou kapalinu. PĜevod analogového signálu na digitální, tj. na þíslo, probíhá pomocí desetibitového analogovČ-digitálního pĜevodníku, jenž je integrován do mikrokontroleru ATmega16. Výsledná teoretická hodnota leží v rozmezí 0 až 1024, což pĜedþí možnosti zobrazení na displeji umístČném na zaĜízení samotném, ale je s ní možno pracovat pomocí poþítaþe. Hodnota je pĜed zobrazením ještČ prĤmČrována, þímž je zajištČna vČtší pĜesnost a minimalizován vliv náhodného chybného mČĜení. Vlastní spotĜeba celého zaĜízení je napájena z USB konektoru poþítaþe, který poskytuje ideální napČtí 5 V a dostateþný možný proudový odbČr. V pĜípadČ použití výkonČjší laserové diody je možné pĜipojit externí 5V zdroj þi napájení z akumulátorĤ. Celé zaĜízení je prioritnČ zhotoveno z vývodových souþástek, pouze pĜevodní integrovaný obvod pro komunikaci s poþítaþem je v povrchovČ montovaném provedení. PĜístroj jako takový pĜedstavuje cenovČ dostupnou alternativu pro mČĜení úþinnosti fotokatalytických jevĤ a dosahuje rozkmitu snímaných hodnot pouze 0.6 %. Je nenároþný na obsluhu a bezprostĜednČ poskytuje okamžité výsledky. Verze s jednou laserovou diodou a jedním fototranzistorem použitým jako senzor je urþena pro demonstrativní mČĜení napĜ. ve školních laboratoĜích. Tomu odpovídá i relativní procentuální zobrazení hodnoty absorpce roztoku metylenové modĜi, které vypovídá o aktuálním stavu propustnosti kapaliny vĤþi vztažnému etalonu, který byl promČĜen na poþátku mČĜení.
- 86 -
Funkce mČĜicího pĜístroje byla otestována na tĜech referenþních vzorcích a celkový koncept se velmi osvČdþil. Do budoucna bude možné jej rozšíĜit a vytvoĜit komplikovanČjší zaĜízení, které již bude splĖovat požadavky norem a bude jej možno snadno použít v praxi.
- 87 -
Použitá literatura [1]
FUJISHIMA, A., HASHIMOTO, K., WATANABE, T. TiO2 fotokatalýza, základy a aplikace. 1. vydání Praha: Silikátový svaz, 2002. 111 stran. ISBN 80-903113-3-4.
[2]
BURKHARD, M. C pro mikrokontroléry. 1. vydání Praha: BEN - technická literatura, 2003. 280 stran. ISBN 80-7300-077-6.
[3]
BURKHARD, K., BERNDT, H.-J. Využití rozhraní PC pod Windows. 1. vydání Ostrava: HEL, 2000. 145 stran. ISBN 80-86167-13-5.
[4]
HRBÁýEK, J. Komunikace mikrokontroléru s okolím. 2. vydání Praha: BEN, 2002. 152 stran. ISBN 80-86056-36-8.
[5]
MATOUŠEK, D. Práce s mikrokontroléry Atmel AT89C2051. 2. vydání Praha: BEN, 2006. 248 stran. ISBN 80-7300-096-6.
[6]
PAVELKA, J, GRMELA, L. Fyzika pevné fáze. VUT v BrnČ. 99 stran.
[7]
TSCHIRCH, J. et al. Journal of Photochemistry and Photobiology A: Chemistry xxx. 2007.
[8]
KORISTA, K. T. An Introduction to Astrophysics. Physics 3250: Western Michigan University, spring 2010. Dostupné z WWW: http://homepages.wmich.edu/~korista/phys325.html
[9]
WIKIPEDIA The Free Encyclopedia. Laser diode. 2010. Dostupné z WWW: http://en.wikipedia.org/wiki/Laser_diode
[10] manuál programu CodeVisionAVR. CodeVisionAVR, 235 stran. Dostupné z WWW: http://www.hpinfotech.ro/html/cvavr_doc.htm [11] datasheet mikrokontroleru ATMEGA16. Atmel, 344 stran. Dostupné z WWW: http://www.datasheetcatalog.org/datasheets/restul/219541_DS.pdf [12] datasheet pĜevodníku FT232RL. FTDI Chip, 40 stran. Dostupné z WWW: http://www.datasheetcatalog.org/datasheets2/83/832459_1.pdf [13] datasheet laserové diody F-LASER 1MW 6MM. Shawo HWA Industrial Co., LTD, 2 strany. Dostupné z WWW: http://www.gme.cz/_dokumentace/dokumenty/758/758-009/dsh.758-009.1.pdf [14] datasheet fototranzistoru SFH 309. Siemens, 6 stran. Dostupné z WWW: http://www.gme.cz/_dokumentace/dokumenty/520/520-053/dsh.520-053.1.pdf - 88 -
[15] datasheet displeje HD-M514RD. Yellow stone corp., 2 strany. Dostupné z WWW: http://www.datasheetcatalog.org/datasheets2/13/135323_1.pdf
- 89 -
PĜílohy Výpis programu mikrokontroleru /***************************************************** This program was produced by the CodeWizardAVR V2.03.8a Evaluation Automatic Program Generator © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 16.10.2009 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega16 Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ //pridani knihovny s vlastnostmi mikrokontroleru ATmega16 #include <mega16.h> //pridani knihovny funkci pro pozdrzeni behu programu #include <delay.h> //pridani knihovny funkci komunikace #include <stdio.h> //preddefinovani obsahu registru #define ADC_VREF_TYPE 0x60 //prototypy funkci void settings(void); unsigned int read_adc(unsigned char adc_input); void usart_transmit(unsigned char data); //promenne rozsvecujici segmenty na displeji do tvaru cisel char nula=192, jedna=249, dva=164, tri=176, ctyri=153, pet=146, sest=130, sedm=248, osm=128, devet=144, pomlcka=191, tecka=-128; //dalsi promenne char i, k, l, a, b, cifra[3], cislo[3], des=0; int max, min=1025, rozsah, pocitadlo=0, pom;
- 90 -
float soucet=0, prumer, hodnota=-10; //shrnuti nastaveni void settings(void) { // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00; // Port B initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0xFF; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=0 State2=T State1=T State0=T PORTD=0x00; DDRD=0xF8; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 125,000 kHz // Mode: CTC top=OCR1A // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off TCCR1A=0x00;
- 91 -
TCCR1B=0x0B; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x04; OCR1AL=0xE2; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x10; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 1000,000 kHz // ADC Voltage Reference: AVCC pin // ADC Auto Trigger Source: None ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; }
- 92 -
//funkce pro poslani dat po USART sbernici void usart_transmit(unsigned char data) { //cekani na vyprazdneni registru while(UCSRA.5!=1); UDR=data; } //preruseni pri preteceni casovace interrupt [TIM1_COMPA] void timer1_compa_isr(void) { //scitani 100 hodnot soucet=soucet+read_adc(0); pocitadlo++; //prumerovani hodnoty if(pocitadlo==100) { pocitadlo=0; prumer=soucet/100; soucet=0; //odecteni minima od hodnoty a prevedeni na procenta hodnota=(1-(((float)(prumer-min))/((float)(rozsah))))*100; //chovani pri ruznych hodnotach //je-li hodnota mensi nez 0, posle se chybovy signal 103 if(hodnota<0) { usart_transmit(103); } //je-li hodnota vetsi nez 100, posle se chybovy signal 104 else if(hodnota>100) { usart_transmit(104); } //je-li hodnota 0 – 100, odesle se potvrzujici signal 102 a cela a desetinna cast hodnoty else { des=((int)(hodnota*100))%100; usart_transmit(102); usart_transmit((char)(hodnota)); usart_transmit(des); } } } //funkce pro AD prevod unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
- 93 -
//pauza potrebna pro stabilizaci vstupniho napeti delay_us(10); //zacatek AD prevodu ADCSRA|=0x40; //cekani na dokonceni AD prevodu while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; //navrat 10bitove hodnoty return (ADCL/64)+(ADCH*4); } //hlavni cast programu void main(void) { //zavolani nastaveni settings(); //cekani 5 s delay_ms(5000); //hledani maximalni hodnoty for(k=0;k<100;k++) { pom=read_adc(0); if(pom>max) { max=pom; } } //zapnuti laserove diody PORTD.7=1; //cekani 10 s pro ustaleni fototranzistoru delay_ms(10000); //hledani minimalni hodnoty for(l=0;l<100;l++) { pom=read_adc(0); if(pom<min) { min=pom; } } //urceni rozsahu rozsah=(max-min); //obecne povoleni preruseni #asm("sei") //cekani 2 s pro cyklus casovace delay_ms(2000); //nekonecna smycka while (1)
- 94 -
{ //vypnuti 1. a 2. cislice displeje a=0; b=0; //nalezeni cisel na miste stovek, desitek, jednotek a desetin hodnoty cislo[0]=((int)((hodnota)/100))%10; cislo[1]=((int)((hodnota)/10))%10; cislo[2]=((int)(hodnota))%10; cislo[3]=((int)((hodnota)*10))%10; //prirazeni cisel signalum rozsvecujicim segmenty na displeji for(i=0;i<4;i++) { switch (cislo[i]) { case 0: cifra[i]=nula; break; case 1: cifra[i]=jedna; break; case 2: cifra[i]=dva; break; case 3: cifra[i]=tri; break; case 4: cifra[i]=ctyri; break; case 5: cifra[i]=pet; break; case 6: cifra[i]=sest; break; case 7: cifra[i]=sedm; break; case 8: cifra[i]=osm; break; case 9: cifra[i]=devet; break; default: cifra[i]=pomlcka; break; } } //je-li hodnota vetsi nez 10, rozsviti se i 2. cislice displeje if((hodnota)>=10) { b=1; } //je-li hodnota vetsi nez 100, rozsviti se i 1. a 2. cislice displeje if((hodnota)>=100) { a=1; b=1; } //je-li hodnota vetsi nez 100, zobrazi se chybova hlaska "1---" if((hodnota)>100) { cifra[0]=jedna; cifra[1]=pomlcka; cifra[2]=pomlcka-tecka; cifra[3]=pomlcka; } //je-li hodnota mensi nez 0, zobrazi se chybova hlaska "---0" if((hodnota)<0) { cifra[0]=pomlcka;
- 95 -
cifra[1]=pomlcka; cifra[2]=pomlcka-tecka; cifra[3]=nula; a=1; b=1; } //zobrazeni hodnoty //nachystani zobrazeni cisla na miste stovek PORTB=cifra[0]; //rozsviti se prvni cislice, je-li hodnota vetsi nez 100 PORTD.6=a; //cislice sviti 1 ms delay_ms(1); PORTD.6=0; //nachystani zobrazeni cisla na miste desitek PORTB=cifra[1]; //rozsviti se druha cislice, je-li hodnota vetsi nez 10 PORTD.5=b; //cislice sviti 1 ms delay_ms(1); PORTD.5=0; //nachystani zobrazeni cisla na miste jednotek a pridani desetinne tecky PORTB=(cifra[2]+tecka); //rozsviti se treti cislice PORTD.4=1; //cislice sviti 1 ms delay_ms(1); PORTD.4=0; //nachystani zobrazeni cisla na miste desetin PORTB=cifra[3]; //rozsviti se ctvrta cislice PORTD.3=1; //cislice sviti 1 ms delay_ms(1); PORTD.3=0; } };
- 96 -
Výpis programu pro pĜíjem, zobrazení a zápis dat #pragma once #include
#include #include<string> std::string fileName; std::ofstream *outStream; int listenOn=0; bool run=false; bool wasOpened=false; bool really=false; unsigned char fInt; unsigned char lInt; int tick=0; int everyX=1; int readPair=0; bool acceptF=false; bool acceptL=false; float time=0;
namespace COMWriter { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); } protected: ~Form1() { if (components) { delete components; } }
- 97 -
protected: private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::Button^ button2; private: System::Windows::Forms::TextBox^ textBox1; private: System::Windows::Forms::Label^ label3; private: System::IO::Ports::SerialPort^ serialPort1; private: System::Windows::Forms::Button^ button3; private: System::Windows::Forms::Button^ button4; private: System::Windows::Forms::Timer^ timer1; private: System::Windows::Forms::Button^ button5; private: System::Windows::Forms::ComboBox^ comboBox1; private: System::Windows::Forms::ComboBox^ comboBox2; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Label^ label4; private: System::ComponentModel::IContainer^
components;
private: /// <summary> /// Required designer variable. ///
#pragma region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); this->label2 = (gcnew System::Windows::Forms::Label()); this->button1 = (gcnew System::Windows::Forms::Button()); this->button2 = (gcnew System::Windows::Forms::Button()); this->textBox1 = (gcnew System::Windows::Forms::TextBox()); this->label3 = (gcnew System::Windows::Forms::Label()); this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components)); this->button3 = (gcnew System::Windows::Forms::Button()); this->button4 = (gcnew System::Windows::Forms::Button()); this->timer1 = (gcnew System::Windows::Forms::Timer(this->components)); this->button5 = (gcnew System::Windows::Forms::Button()); this->comboBox1 = (gcnew System::Windows::Forms::ComboBox()); this->comboBox2 = (gcnew System::Windows::Forms::ComboBox()); this->label1 = (gcnew System::Windows::Forms::Label()); this->label4 = (gcnew System::Windows::Forms::Label()); this->SuspendLayout();
- 98 -
// // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(203, 44); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(38, 13); this->label2->TabIndex = 9; this->label2->Text = L"status:"; // // button1 // this->button1->Location = System::Drawing::Point(12, 10); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 10; this->button1->Text = L"New file"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // // button2 // this->button2->Location = System::Drawing::Point(236, 132); this->button2->Name = L"button2"; this->button2->Size = System::Drawing::Size(75, 23); this->button2->TabIndex = 11; this->button2->Text = L"Exit"; this->button2->UseVisualStyleBackColor = true; this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click); // // textBox1 // this->textBox1->ForeColor = System::Drawing::SystemColors::ControlText; this->textBox1->Location = System::Drawing::Point(93, 12); this->textBox1->Name = L"textBox1"; this->textBox1->Size = System::Drawing::Size(218, 20); this->textBox1->TabIndex = 12; this->textBox1->TextChanged += gcnew System::EventHandler(this, &Form1::textBox1_TextChanged); // // label3 // this->label3->AutoSize = true; this->label3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238)));
- 99 -
this->label3->Location = System::Drawing::Point(251, 41); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(55, 20); this->label3->TabIndex = 13; this->label3->Text = L"Offline"; // // serialPort1 // this->serialPort1->DataReceived += gcnew System::IO::Ports::SerialDataReceivedEventHandler (this, &Form1::serialPort1_DataReceived); // // button3 // this->button3->BackColor = System::Drawing::Color::LimeGreen; this->button3->Location = System::Drawing::Point(93, 68); this->button3->Name = L"button3"; this->button3->Size = System::Drawing::Size(75, 23); this->button3->TabIndex = 14; this->button3->Text = L"Run"; this->button3->UseVisualStyleBackColor = false; this->button3->Click += gcnew System::EventHandler(this, &Form1::button3_Click); // // button4 // this->button4->BackColor = System::Drawing::Color::Red; this->button4->Location = System::Drawing::Point(12, 68); this->button4->Name = L"button4"; this->button4->Size = System::Drawing::Size(75, 23); this->button4->TabIndex = 15; this->button4->Text = L"STOP"; this->button4->UseVisualStyleBackColor = false; this->button4->Click += gcnew System::EventHandler(this, &Form1::button4_Click); // // timer1 // this->timer1->Enabled = true; this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick); // // button5 // this->button5->Location = System::Drawing::Point(12, 39); this->button5->Name = L"button5"; this->button5->Size = System::Drawing::Size(75, 23); this->button5->TabIndex = 16; this->button5->Text = L"Open port";
- 100 -
this->button5->UseVisualStyleBackColor = true; this->button5->Click += gcnew System::EventHandler(this, &Form1::button5_Click); // // comboBox1 // this->comboBox1->FormattingEnabled = true; this->comboBox1->Items->AddRange(gcnew cli::array< System::Object^ >(8) {L"COM1", L"COM2", L"COM3", L"COM4", L"COM5 ", L"COM6", L"COM7", L"COM8"}); this->comboBox1->Location = System::Drawing::Point(93, 41); this->comboBox1->Name = L"comboBox1"; this->comboBox1->Size = System::Drawing::Size(89, 21); this->comboBox1->TabIndex = 17; // // comboBox2 // this->comboBox2->FormattingEnabled = true; this->comboBox2->Items->AddRange(gcnew cli::array< System::Object^ >(9) {L"1", L"5", L"10", L"20", L"50", L"100", L"200", L"500", L"1000"}); this->comboBox2->Location = System::Drawing::Point(244, 70); this->comboBox2->Name = L"comboBox2"; this->comboBox2->Size = System::Drawing::Size(67, 21); this->comboBox2->TabIndex = 18; this->comboBox2->Text = L"1"; this->comboBox2->SelectedIndexChanged += gcnew System::EventHandler (this, &Form1::comboBox2_SelectedIndexChanged); // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(177, 73); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(64, 13); this->label1->TabIndex = 19; this->label1->Text = L"Write every:"; // // label4 // this->label4->AutoSize = true; this->label4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 35, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(238))); this->label4->Location = System::Drawing::Point(42, 104); this->label4->Name = L"label4"; this->label4->Size = System::Drawing::Size(140, 54); this->label4->TabIndex = 20;
- 101 -
this->label4->Text = L"00.00"; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(323, 167); this->Controls->Add(this->label4); this->Controls->Add(this->label1); this->Controls->Add(this->comboBox2); this->Controls->Add(this->comboBox1); this->Controls->Add(this->button5); this->Controls->Add(this->button4); this->Controls->Add(this->button3); this->Controls->Add(this->label3); this->Controls->Add(this->textBox1); this->Controls->Add(this->button2); this->Controls->Add(this->button1); this->Controls->Add(this->label2); this->Name = L"Form1"; this->Text = L"COM Receiver"; this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion //chovani tlacitka "exit" private: System::Void button2_Click(System::Object^ System::EventArgs^ e) { this->serialPort1->Close(); exit(0); }
sender,
//chovani tlacitka "new file" private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { //prevod systemoveho stringu na standartni ceckovsky string fileName = (const char*)System::Runtime::InteropServices::Marshal:: StringToHGlobalAnsi(this->textBox1->Text).ToPointer(); std::ifstream *testStream =new std::ifstream (fileName.c_str()); //test zda jiz existuje zadany soubor if(!(*testStream)) { //pokud neexistuje, tak se vytvori outStream=new std::ofstream (fileName.c_str()); this->textBox1->ForeColor=System::Drawing::Color::Lime;
- 102 -
wasOpened=true; } else { //pokud existuje, pozaduje se potvrzeni prepsani this->textBox1->ForeColor=System::Drawing::Color::Red; this->button1->Text="Overwrite?"; this->button1->BackColor=System::Drawing::Color::Red; if(really==true) { outStream=new std::ofstream(fileName.c_str()); this->button1->Text="New file"; this->button1->UseVisualStyleBackColor = true; this->textBox1->ForeColor=System::Drawing::Color::Lime; really=false; wasOpened=true; } else { really=true; } } } //obsluha dosleho znaku private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) { tick=0; //vizualni zmena rozhrani, zobrazeni online stavu this->label3->Text="online"; this->label3->ForeColor=System::Drawing::Color::Lime; unsigned char inChar=this->serialPort1->ReadByte(); //kontrola zda dosel znak uvozujici zpravu if (inChar==102) { // cekani na zpravu fInt=this->serialPort1->ReadChar(); lInt=this->serialPort1->ReadChar(); //kontrola spravneho rozsahu if( ((fInt==100) && (lInt==0)) || ((fInt<100) && (lInt<100) && (fInt>=0) && (lInt>=0)) ) { //kontrola zda bezi zapis a je otevren vystupni soubor if ( (wasOpened==true) && (run==true) ) { readPair++; //kotrola zda se ma dana hdnota preskocit nebo zapsat
- 103 -
if(readPair>=everyX) { //zapis if (lInt>9) { (*outStream)<<(int)fInt<<"."<<(int)lInt<<std::endl; } else { (*outStream)<<(int)fInt<<".0"<<(int)lInt<<std::endl; } readPair=0; } } this->label4->ForeColor=System::Drawing::Color::Black; } else { this->label4->ForeColor=System::Drawing::Color::Red; } //zobrazeni dosle hodnoty na uzivatelske rozhrani if (lInt>9) { this->label4->Text=fInt.ToString()+"."+lInt.ToString(); } else { this->label4->Text=fInt.ToString()+".0"+lInt.ToString(); } //smazani pripadnych prebyvajicich hodnot v buferu this->serialPort1->DiscardInBuffer(); } //dalsi mozne specialni znaky else if (inChar==103) { this->label4->Text="---0."; this->label4->ForeColor=System::Drawing::Color::Red; } else if (inChar==104) { this->label4->Text="1---."; this->label4->ForeColor=System::Drawing::Color::Red; } } //chovani pole nazvu souboru private: System::Void textBox1_TextChanged(System::Object^ System::EventArgs^ e) {
- 104 -
sender,
this->textBox1->ForeColor=System::Drawing::Color::Black; this->button1->UseVisualStyleBackColor = true; really=false; this->button1->Text="New file"; } //casovac pro kontrolu zda dochazeji znaky private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { time++; tick++; //pokud nedochazeji, zobraz offline stav if (tick>20) { this->label3->ForeColor=System::Drawing::Color::Red; this->label3->Text="Offline"; } } //tlacitko pro otevreni com portu private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) { this->serialPort1->Close(); this->comboBox1->ForeColor=System::Drawing::Color::Red; this->serialPort1->PortName=this->comboBox1->Text; this->serialPort1->Open(); this->comboBox1->ForeColor=System::Drawing::Color::Lime; } //tlacitko pro zapisovani do souboru private: System::Void button3_Click(System::Object^ System::EventArgs^ e) { run=true; this->button3->Text="Running..."; } //tlacitko pro konec zapisovani do souboru private: System::Void button4_Click(System::Object^ System::EventArgs^ e) { run=false; this->button3->Text="Run"; } //combo box urcuji cetnost zapisu do souboru private: System::Void comboBox2_SelectedIndexChanged
- 105 -
sender,
sender,
(System::Object^
sender, System::EventArgs^
{ switch(this->comboBox2->SelectedIndex) { case 0: everyX=1; break; case 1: everyX=5; break; case 2: everyX=10; break; case 3: everyX=20; break; case 4: everyX=50; break; case 5: everyX=100; break; case 6: everyX=200; break; case 7: everyX=500; break; case 8: everyX=1000; break; } } }; }
- 106 -
e)