30
Automatizacija kućice za teleskop (i internetsko upravljanje teleskopom) Tomislav Šklebar 1. razred Prirodoslovna Škola Vladimira Preloga, Zagreb Mentorica: Suzana Galović, prof. [email protected] Zagreb, 2011

Automatizacija kućice za teleskopgim.gimpoz.hr/repos/files/1351249283automatizacija... · 2017. 1. 17. · Slika 8. Podnožje konstrukcije i teleskop Nacrt kućice prikazan je na

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • Automatizacija kućice za teleskop

    (i internetsko upravljanje teleskopom)

    Tomislav Šklebar 1. razred

    Prirodoslovna Škola Vladimira Preloga, Zagreb

    Mentorica: Suzana Galović, prof.

    [email protected]

    Zagreb, 2011

  • 1

    Sadržaj

    Uvod 2

    Materijali i metode 7

    Mikrokontroler 9

    Software 10

    Programiranje glavnog sučelja 11

    Pokretanje kućice 11

    Sklop za pokretanje elektromotora 12

    Releji 13

    Senzor kiše 14

    Web kamera 16

    Spajanje s računala na računalo 17

    Teleskop 18

    Zaključak 19

    Popis literature 20

    Životopis 20

    Dodatak 21

  • 2

    Uvod

    Cijeli projekt započeo je na ljetnoj školi astronomije u Višnjanu 2010. godine. Glavni ciljevi

    bili su izraditi kućicu za teleskop te automatizirati teleskop i kućicu kako bi se mogli upravljati preko

    interneta. Na ljetnoj školi završena je samo kućica za teleskop. Kućica je izrađena s namjerom

    zaštite teleskopa od vanjskih utjecaja i mogućnosti njegovog korištenja u svakom pogodnom

    trenutku iako nismo fizički pokraj teleskopa. U obzir su dolazila 4 tipa izvedbe kućice za teleskop,

    to su: kontejner (1), pomični krov (2), pomična kućica (3) i oblik kupole (4). Prva ideja je bila

    upotrijebiti kontejner za smeće kao vrtni observatorij za teleskop. Izmjeren je i promotren jedan

    takav kontejner, te se došlo do zaključka da mehanizam otvaranja / zatvaranja nije dovoljno

    jednostavan za pokretanje (slika 2).

    Slika 1. Kontejner

    Slika 2. Konstrukcija vrtnog observatorija

  • 3

    Sljedeća zamisao zasnivala se na klasičnom obliku vrtnih observatorija s pomičnim krovom,

    metalna konstrukcija bila bi obložena panelima (slika 3.), a elektromotor bi pokretao krov. Nakon

    premjeravanja zaključilo se da bi vidno polje teleskopa bilo 45° (premalo), rješenje bi bilo da s

    nakon spuštanja krova teleskop podiže pomoću dizalice, što nije dovoljno jednostavno.

    Slika 3. Kućica za teleskop sa pomičnim krovom

    Pomična kućica je konstrukcija s fiksnim zidom i pomičnom metalnom konstrukcijom. Taj oblik bi

    omogućio vidljivost cijelog merdijana te se zato na njemu nastavilo raditi (slika 4).

    Slika 4. Pomična kućica za teleskop

    Postoji mogućnost izrade kupole (slika 5) od staklo plastike, no ova mogućnost će se razmatrati

    možda nekom drugom prilikom.

    Slika 5. Kupola

  • 4

    Nacrt kućice sa mjerama dan je na slici 6.

    Slika 6. Nacrt kućice za teleskop

    Kostur kućice izrađen je od metalnih profila koji su spajani varenjem, a stranica su obložene

    dvostrukim metalnim panelima unutar kojih se nalazi stirodur. U fiksnom zidu predviđen je prostor

    za kompjuter i ostale elektroničke uređaje. Cijela konstrukcija (osim prostora predviđenog za

    kompjuter) pokretna je i postavljena je na kotače koji klize po metalnim trakama L profila. Ovi profili

    su zavareni na masivnije željezne četvrtaste profile (slika 7).

    Slika 7. Skica postavljanja kotača na konstrukciju kućice

    Na slici 8 prikazano je planiranje i dimenzioniranje kućice u odnosu na teleskop.

  • 5

    Slika 8. Podnožje konstrukcije i teleskop

    Nacrt kućice prikazan je na slici 9. Na prvoj slićici vidi se tlocrt kućice kada je zatvorena, prikazan

    je fiksni zid u kojemu je predviđeno mjesto za kompjuter. Na trečoj slićici prikazan je sustav

    pokretanja kućice bez motora, tračnice po kojima se konstrukcija pokreče.

    Slika 9. Nacrt kućice za teleskop

  • 6

    Njeno prvobitno otvaranje i zatvaranje izvedeno je kao na automatskim kliznim vratima od

    dvorišta, pomoću zupčaste letve i elektromotora. Kada je kućica zatvorena dijelom nalježe na

    fiksni zid i gotovo se potpuno zatvara. Cijela kućica i teleskop trebaju biti potpuno automatizirani

    kako bi se s njima moglo upravljati iz bilo kojeg dijela svijeta preko interneta. Pod automatizacijom

    podrazumjeva se mogućnost upravljanja kućicom (otvaranje i zatvaranje), izrada senzora kiše i

    naoblake, interface-a (sučelja na koje se spajaju svi senzori, a ono se upravlja preko kompjutera),

    usklađivanje teleskopa i kompjutera te povazivanje kompjutera na internet (slika 10).

    Slika 10. Automatizacija teleskopa i internetsko upravljanje

  • 7

    Materijali i metode

    Automatizaciju sam započeo izradom glavnog sučelja (interface-a) za upravljanje svim

    operacijama.

    Nacrt tiskane pločice glavnog sučelja napravljen je u programu PCB i prikazan je na slici 11.

    Slika 11. Nacrt tiskane pločice glavnog sučelja

    Na slici 12 prikazan je tijek izrade tiskane pločice. Tijek izrade opisan je u koracima prema slikama

    (1-4).

  • 8

    (1.) (2.) (3.) (4.)

    Slika 12. Izrada tiskane pločice

    1. nakon završenog projektiranja sučelja izgled pločice ispisuje se laserskim pisačem na toplinski

    neosjetljivu foliju i pomoću drugog izvora topline (npr. električno kuhalo/glačalo) tinta se prenese na

    bakrenu pločicu koju sam prethodno očistio.

    2. bakrenu pločicu s prenesenom tintom uroni se u vodenu otopinu klorovodične kiseline (HCl) i

    vodikova peroksida (H2O2), pričeka se nekoliko minuta sve dok kiselina ne otopi sav bakar koji nije

    zaštićen tintom (jetkanje).

    3. kada je jetkanje gotovo pločica se izvadi iz kiseline te se ispere pod mlazom vode. Sa suhe

    pločice spužvicom natopljenom nitro razređivačem se ukloni tintu i probuše se predviđene rupice

    odgovarajućim svrdlom (npr. 1mm).

    4. u izbušene rupice s gornje strane (gdje nema bakrenih vodova) umetnu se elektroničke

    komponente i zaleme se. Podnožja za mikrokontroler PIC 16F877A i za MAX232N leme se prazna.

    Lemljenje je postupak spajanja dvaju metala (nožica elektroničkih elemenata i bakrenih

    vodova na tiskanoj pločici) legurom olova i kositra (u obliku tanke žice) koja se zagrijavanjem

    prevodi iz krutog u tekuće stanje te ponovnim hlađenjem zadržava metale spojene. Vrh lemilice

    nasloni se na lemno mjesto tako da dodiruje i vod oko rupe na tiskanoj pločici i metalni vrh

    (nožicu) komponente koji se lemi. Odmah potom se tinol žica prisloni na tromeđu vrha lemilice,

    metalnog sloja pločice i lemnog vrha komponente. Grije se vrh komponente koja se lemi te se žica

    na njoj rastopi. Ako je lemilica dobro zagrijana i ako su lemne površine čiste, vrh tinola će se

    trenutno otopiti i, zahvaljujući adheziji, početi obuhvćati sve metalne površine (slika 13).

  • 9

    Slika 13. Postupak lemljenja

    Pošto pločica u tjekom lemljenja leži naopako, korisno je podeliti komponente u grupe po

    visini, pa prvo lemiti najniže i ići postupno prema najvišoj, jer jedino tako će sve komponente prije

    lemljenja moći osloniti na površinu stola, bez opasnosti da neka od njih ispadne.

    Mikrokontroler Mikrokontroleri su elektronički uređaji koji rade na načelu vrlo bliskom računalu. Mikrokontroler je

    uistinu malo računalo, a složenost mu ovisi o složenosti zadataka koje mora nadzirati. Kako bi

    mogli pomoću računala upravljali otvaranjem i zatvaranjem kućice za teleskop te senzorima koristit

    će se mikrokontroler i napisat će se potrebni softver. Mikrokontroler posjeduje više vrasta

    memorije. Programska ili FLASH memorija koristi se za pohranjivanje napisanog programa. Ova

    se memorija može više puta brisati i reprogramirati. EEPROM memorija se koristi za pohranjivanje

    podataka koji trebaju biti sačuvani i kad nema napajanja. RAM memoriju koristi program tijekom

    svog izvođenja. Ovdje se pohranjuju međurezultati ili privremeni podaci. PORT A, PORT B, PORT

    C, PORT D i PORT E su fizičke veze sa vanjskim svijetom. Port A ima 6, port B 8, port C 8, port D

    8 i port E 3 pinova (izvoda). Centralni procesor povezuje ostale dijelove mikrokontrolera i kordinira

    njihov rad te izvršava korisnički program. Brojač je 8-bitni registar unutar mikrokontrolera koji radi

    neovisno o programu. Na svaki četvrti takt iz oscilatora brojač uveća svoju vrijednost dok ne

    postigne maksimalnu (255) i brojanje počinje ispočetka. Vrijeme između dva povećanja sadržaja

    brojača je poznato, što se može iskoristiti za mjerenje vremena. Takt je osnovni pokretač

    mikrokontrolera i dobiva se izvana putem oscilatora.

  • 10

    PIC 16F877A je mikrokontroler u jednom čipu i ima ukupno četrdeset pinova. Najčešće je izveden

    u DIP 40 kučištu, shema je prikazana na slici 14.

    Slika 14. Shema PIC 16F877A

    Da bi mikrokontroler mogao raditi potrebno je nekoliko vanjskih komponenata. Prvo je potreban

    regulator napajanja, npr. IC 78L05 (koji regulira napon na 5V). Kao oscilator korišten je kristal od

    20 MHz. Osim toga potrebno je još nekoliko pasivnih elemenata, na primjer otpornik od 10 kilooma

    i nekoliko kondenzatora. Ulazi mikrokontrolera mogu biti analogne i digitalne prirode (npr. naponi i

    frekvencije) a podatke će prosljeđivati neki mjerni pretvornik (senzor). Dakako i izlazi mogu biti i

    analogne i digitalne prirode. Senzori se spajaju na mikrokontroler kojemu se putem računala prvo

    daje set instrukcija (programiramo) kako bi mikrokontroler uz određeno napajanje mogao postati

    zasebna cjelina koja izvršava upisane naredbe.

    Software

    Software se sastoji od dva osnovna programa. Prvi program se nalazi u mikrokontroleru i

    zadužen je za očitavanje signala koji dolaze sa senzora. Drugi dio programa nalazi se na računalu,

    a pokreće se nakon priključivanja na sučelje. Preko njega se upravlja sučeljem

  • 11

    Programiranje glavnog sučelja

    Programiranje glavnog sučelja vrši se pomoću programa „Microsoft Visual Basic“. Kod

    napisanog programa nalazi se u prilogu. Program je osmišljen kako bi se mogao pokretati sa

    svakog računala s operativnim sustavom "Windows" i USB ili COM priključkom te instaliranim

    programima upogoniteljima od web kamere.

    Pokretanje kućice

    Prva idea bila je da se kućica pokreče elektromotorom od automobilskih brisača (Slika 15.)

    tako da se na osovinu motora spoji navojna šipku (promjera 8 mm), a na pokretni dio kućice

    zavarimo maticu te se kućica otvara i zatvara po sistemu odvijanja i zavijanja navojne šipke kroz

    maticu. No tu se se pojavili i prvi problemi. Motor se okretao samo u jednom smjeru te je trebalo

    izraditi sklop kojim bi se omogučilo upavljanje motora u oba smijera. Taj sam sklop izradio pomoću

    dva releja (slika 18.) Nakon postavljanja motora prema zamislili pojavio se drugi problem, presporo

    otvaranje kućice te će na kraju vjerojatno ovaj način otvaranja/zatvaranja kućice biti rezervni za

    slučaj nestanka električne energije i da nikog nema u blizini. Osnovna zamisao otvaranja kućice

    zamjeniti će se načinom otvaranja automatskih dvorišnih vrata, pomoću elektromotora, zupčanika i

    zupčaste letve (nacrt motora i općenita primjena su na slici 16). Motor će se postaviti s vanjske

    strane jer na sebi ima mogućnost otpuštanja kočnice te ručnog pomicanja kućice što nije

    zanemrivo u slučaju nestanka struje.

    Slika 15. DC motor (automobilski brisač)

  • 12

    Slika 16. Motor za otvaranje automaskih dvorišnih vrata

    Sklop za pokretanje elektromotora

    Sklop za pokretanje elektromotora od automobilskih brisača napravio sam pomoću dva

    releja, dva tranzistora i dva otpornika. Glavno upravljačko sučelja može isporučiti samo 5VDC

    napona vrlo mala struje što je bilo nedovoljno da bi se pobudili releji koji su bili na 12VDC ali pošto

    je za pobuđenje relaja potrebno ili napon ili struja izradio sam pojačala struje za svaki od releja.

    Ovaj sklop omogućuje promjenu smjera vrtnje kada se zamjene polovi na ulazu sklopa (slika 17)

    Zamjena polova na ulazu izvršava se kompjuterski, preko programa.

    Slika 17. Nacrt tiskane pločice sklopa za pokretanje elektromotora

  • 13

    Slika 18. Sklop za pokretanje elektromotora

    Releji

    Releji su sklopni aparati koji se aktiviraju od jedne ili više električnih veličina kao što su

    (napon, struja, snaga…). Svi releji se uključuju preko više vrsta kontakata i osnovni im je zadatak

    da preko svojih kontakata i pomoćnih strujnih krugova djeluju na druge uređaje radi upravljanja,

    mjerenja, signalizacije, zaštite nekih postrojenja i nekih dijelova postrojenja. Relejske kontakte

    pomiče namot elektromagnetnom silom. Dijelovi releja su: namot releja, jaram koji na sebi drži

    elektromagnet, a koji privlači željeznu kotvu. Kotva uspostavlja ili prekida set električnih kontakata,

    a vraća se u polazni položaj uz pomoć opruge, kad kroz elektromagnet više ne teče struja. Namot

    releja spojen je u upravljačkom strujnom krugu. Strujni krug s relejom čine dva neovisna strujna

    kruga : upravljački krug s upravljačkom strjom i uklopni krug sa radnom strujom. Kad prekidač

    uključi, poteče struja kroz namot releja i kotva releja privuče. Kontakti releja se zatvore i u strujnom

    krugu potrošača poteče radna struja.

    Elektromagnet se obično sastoji od mnogobrojnih namotaja bakrene žice željeznu jezgru. Kada

    struja poteče kroz žicu ( primarni strujni krug ), oko elektromagneta se stvara magnetsko polje koje

    privlači željeznu kotvu. Kotva nosi na sebi električne kontakte koji onda otvaraju ili zatvaraju

    sekundarni strujni krug. Kada se prekine struja kroz elektromagnet, on više ne privlači željeznu

    kotvu, i ona se vraća u polazni položaj, obično uz pomoć opruge. Time električni kontakti prekidaju

    ili uspostavljaju strujni krug. U gornjem dijelu slike 19, relej je isključen. Kontakti dalje od

    elektromagneta su otvoreni. U donjem dijelu slike relej je uključen, kotva pomjera srednji kontakt

  • 14

    koji sad uspostavlja vezu sa desnim. Desni par kontakata je normalno otvoren. Dijelovi : 1)

    elektromagnet 2) kotva 3) kontakti.

    Slika 19. Relej

    U svakom releju se nalaze kontakti, koji se otvaraju ili zatvaraju pri djelovanju releja,

    a izvedeni su od srebra ili srebrenih legura. Većina releja ima više parova kontakata.

    Radni napon i jakost struje

    Na relejima koje sam koristio dati su podaci: 12V, 240V, 10A. To znači da je radni napon

    elektromagneta 12V istosmjernog napona, a kontakti su predviđeni za prekopčavanje

    na 240V izmjeničnog napona.

    Senzor kiše

    Senzor kiše izradio sam pomoću promjenjivog otpornika, običng otpornika te tranzistora

    (nacrt i izvedba su na slikama slika 22 i 23.) Na senzor kiše spaja se proba (nacrt na slici 21) koja

    se postavlja na vanjskoj strani kućice (krovu) kako bi bila u doticaju s kišom kada počne padati.

    Ona je izrađena od golih vodova na tiskanoj pločici koji su naizmjenično postavljeni tako da se ne

    dodiruju, a razmak između njih je približno 1mm (slika 22). Kroz vodič teče istosmjerna struja te je

    njen protok kroz vodič prekinut u slučaju da kiša ne pada, a kada padne prva kap kiše te zatvori

    strujni krug srtuja slobodno prolazi kroz vodič te odlazi do promjenjivog otpornika na kojemu se

  • 15

    podešava osjetljivost senzora. Kada struja poteče kroz otpornik te dođe do tranzistora on šalje

    signal na glavno upravljačko sučelje. Kada sučelje primi taj signal prosljeđuje informaciju do

    računala „Kiša pada!“ te automatski počinje zatvarati kućicu.

    Slika 20. Nacrt probe Shema 22. Nacrt senzora kiše

    Slika 21. Proba Slika 23. Senzor kiše

  • 16

    Web kamera

    U planu je bila izrada senzora naoblake ali pošto za sada to nisam realizirao, privremeno

    kao senzor naoblake koristiti će se web kamera za vanjski nadzor. Prvobitna kamera bila je VGA

    rezolucuje (loše) i kao takva nije bila pogodna za pračenje neba. Prvobitnu kameru zamjenjena je

    boljom rezolucuje od 2 megapiksela. Što je zahtjevalo male preinake u programskom kodu.

    Kako bi bilo moguće promatranje preko kamere, računalo koje pokreče program na sebi mora

    imati instalirane programe upogonitelje svojstvene svakom modelu kamere. Ova kamera spaja se

    na računalo preko USB priključka.

    Slika 24. prikazuje senzor kiše, glavno sučelje i sklop za pokretanje motora unutar

    plastičnog kučišta (dimenzija: 228x178x68mm). Glavne priključke za struju izvode za elektromotor

    te priključak za računalo (RS232) izveo sam na površinu kučišta.

    Slika 24. Senzor kiše, glavno sučelje i sklop za pokretanje motora

  • 17

    Spajanje s računala na računalo

    Glavno sučelje ne može raditi bez računala što znači da jedno računalo mora biti blizu

    sučelja i svih senzora. Predviđeno je da se računalo nalazi u fiksnom zidu kućice te da je nekim

    putem (žicom ili bežično) spojeno s internetom kako bi mu se moglo pristupati, pošto je zamišljeno

    da se teleskopom može upravljati iz bilo kojeg dijela svijeta u bilo koje vrijeme. Računalo koje će

    se nalaziti u kućici mora na sebi imati instaliran i podešen program preko kojega mu se može

    pristupati a koristiti će se program „Windows Remote Desktop“. Tijekom instalacije programa

    potrebno je izraditi korisnički račun na koji ćemo se kasnije spajati. Kada se računalu pristupi njime

    se upravlja kao da smo fizički na njemu.

    Slika 25. Windows Remote Desktop

    Slika 26. Korisnički račun

    Slika 25. Prikazuje prozor programa „Remote Desktop“ te je označeo računalo na koje su spojeni

    svi senzori. Za spajanje na računalo s kojim sve upravljamo potrebna nam je lozinka. Slika 26.

    prikazuje prozor za unos lozinke računala na koje se spajamo. Nakon potvrde lozinke prikazuje

  • 18

    nam se radna površina drugoga računala na kojemu zatim pokrenemo program za upravljanje

    kućicom.

    Na slici 27 prikazan je prototip internetskog upravljanja jednog računala drugim te

    cjelokupne aparature koja je priključena na njega.

    Slika 27. Internetsko upravljanje jednog računala drugim

    Teleskop

    Teleskop koji se koristiti u projektu je Meade LX200 GPS 8 (slika 28.) koji dolazi u kompletu s

    software-om ( „Meade Autostar II” ) za upravljanje. Teleskop će se upravljati s istim računalom s kojim se

    upravljaju senzori i pokreće kućica, a spaja se pomoću COM (RS232) priključka. Navođenje teleskopa

    olakšano je pomoću GPS-a koji je potrebno podesiti. Za praćenje preko interneta potrebna CCD kamera koja

    se postavlja na teleskop. Pošto još nije nabavljena odgovarajuću kamera za obavljanje ove zadaće nisam ju

    mogo unjeti u program.

  • 19

    Slika 28. Meade LX200 GPS 8

    Zaključak

    Ovo je samo početak. U planu je izrada još nakoliko senzora (naoblake, otvorenosti kućice)

    te realizacija pokretanja kućice pomoću elektromotora i zupčaste letve. Postavljane kućice na

    terasu stare Višnjanske zvjezdarnice u gradu Višnjanu, ugrađivanje računala u fiksni zid kućice i

    njegovo spajenje na internet kako bi nam bio dostupan u svakom trenutku. Još smo uvijek u

    procesu traženja dovoljno kvalitetne kamere koju bi postavili na teleskop kako bi mogli vršiti

    promatranja. Ovaj projekt otvara jednu novu dimenziju promatranja i bilježenja neba, iz bilo kojeg

    dijela svijeta s bilo kojeg računala s instaliranim „Windows Remote Desktop“ programom.

  • 20

    Popis literature

    -„Small Astronomical Observatories“, Patrick Moore, Springer, 1996

    - „Meade manual“, Meade Instruments Corporation

    Životopis

    Rođen sam u Zagrebu 1995. g, a živio sam u Bjelovaru gdje sam završio osnovnu školu. U

    Zagreb se opet vračam 2010. godine te upisujem Prirodoslovnu školu Vladimira Preloga.

    Astronomijom sam se počeo baviti prije šest mjeseci. Osim astronomije zanima me i elektronika te

    umjetnička fotografija.

  • 21

    Dodatak

    Kod programa kodiran u „Microsoft Visual Basic-u“

    Module MataSoftInterface

    Private WithEvents SerPort As System.IO.Ports.SerialPort

    Public Const PORTAnalog As Integer = 8

    Public Const PORTB As Integer = 16

    Public Const PORTC As Integer = 32

    Public Const PORTD As Integer = 64

    Private Started As Boolean = False

    Private TRISB As String = ""

    Private TRISC As String = ""

    Private TRISD As String = ""

    Private TRISE As String = ""

    Public Function InterfaceInit(ByVal comport As String) As Boolean

    SerPort = New System.IO.Ports.SerialPort(comport, 19200, IO.Ports.Parity.None, 8,

    IO.Ports.StopBits.One)

    SerPort.ReadTimeout = 1000

    SerPort.RtsEnable = True

    Try

    SerPort.Open()

    Catch ex As Exception

    Started = False

    SerPort.Close()

    InterfaceInit = False

    Exit Function

    End Try

    System.Threading.Thread.Sleep(1000)

    SerPort.Write("STARTOK")

  • 22

    Try

    If SerPort.ReadLine = "Interface Connected!" Then

    PopulateTRIS()

    Started = True

    InterfaceInit = True

    Else

    Started = False

    SerPort.Close()

    InterfaceInit = False

    End If

    Catch ex As Exception

    Started = False

    SerPort.Close()

    InterfaceInit = False

    End Try

    End Function

    Public Sub InterfaceStop()

    If Started Then

    Started = False

    SerPort.Write("STARTOK")

    SerPort.ReadLine()

    SerPort.Close()

    End If

    End Sub

    Public Function GetIOStatus(ByVal port As Integer) As String

    If Started Then

    Select Case port

    Case PORTB

    PopulateTRIS()

    GetIOStatus = TRISB

    Case PORTC

    PopulateTRIS()

    GetIOStatus = Mid(TRISE, 6, 2) & Mid(TRISC, 3, 6)

    Case PORTD

    PopulateTRIS()

    GetIOStatus = TRISD

    Case Else

  • 23

    GetIOStatus = ""

    End Select

    Else

    GetIOStatus = ""

    End If

    End Function

    Public Function SetIOStatus(ByVal port As Integer, ByVal tris As String) As Boolean

    Dim txt As String = ""

    Dim med As String = ""

    If Started Then

    Select Case port

    Case PORTB

    If Len(tris) = 8 And CheckTRIS(tris) Then

    txt = "TB" & BinaryToDecimal(tris) & "OK"

    SerPort.Write(txt)

    PopulateTRIS()

    SetIOStatus = True

    Else

    SetIOStatus = False

    End If

    Case PORTC

    If Len(tris) = 8 And CheckTRIS(tris) Then

    med = "10" & Mid(tris, 3, 6)

    txt = "TC" & BinaryToDecimal(med) & "OK"

    SerPort.Write(txt)

    med = "00000" & Mid(tris, 1, 2) & "1"

    txt = "TE" & BinaryToDecimal(med) & "OK"

    SerPort.Write(txt)

    PopulateTRIS()

    SetIOStatus = True

    Else

    SetIOStatus = False

    End If

    Case PORTD

    If Len(tris) = 8 And CheckTRIS(tris) Then

    txt = "TD" & BinaryToDecimal(tris) & "OK"

    SerPort.Write(txt)

    PopulateTRIS()

  • 24

    SetIOStatus = True

    Else

    SetIOStatus = False

    End If

    Case Else

    SetIOStatus = False

    End Select

    Else

    SetIOStatus = False

    End If

    End Function

    Public Function SetBitStatus(ByVal port As Integer, ByVal bit As Integer, ByVal state

    As Integer) As Boolean

    Dim txt As String = ""

    If Started Then

    Select Case port

    Case PORTB

    If bit > -1 And bit < 8 And state > -1 And state < 2 Then

    txt = "OB" & bit.ToString & state.ToString & "OK"

    SerPort.Write(txt)

    SetBitStatus = True

    Else

    SetBitStatus = False

    End If

    Case PORTC

    If bit > -1 And bit < 8 And state > -1 And state < 2 Then

    If bit < 6 Then

    txt = "OC" & bit.ToString & state.ToString & "OK"

    SerPort.Write(txt)

    SetBitStatus = True

    Else

    txt = "OE" & LTrim(Str(bit - 5)) & state.ToString & "OK"

    SerPort.Write(txt)

    SetBitStatus = True

    End If

    Else

    SetBitStatus = False

    End If

  • 25

    Case PORTD

    If bit > -1 And bit < 8 And state > -1 And state < 2 Then

    txt = "OD" & bit.ToString & state.ToString & "OK"

    SerPort.Write(txt)

    SetBitStatus = True

    Else

    SetBitStatus = False

    End If

    Case Else

    SetBitStatus = False

    End Select

    Else

    SetBitStatus = False

    End If

    End Function

    Public Function GetBitStatus(ByVal port As Integer, ByVal bit As Integer) As Integer

    Try

    Dim txt As String = ""

    Dim ret As String = ""

    If Started Then

    Select Case port

    Case PORTAnalog

    If bit > -1 And bit < 6 Then

    txt = "A" & bit.ToString & "OK"

    SerPort.Write(txt)

    ret = SerPort.ReadLine

    If Mid(ret, 1, 2) = Mid(txt, 1, 2) Then

    GetBitStatus = Val(Mid(ret, 4, 4))

    Else

    GetBitStatus = -1

    End If

    Else

    GetBitStatus = -1

    End If

    Case PORTB

    If bit > -1 And bit < 8 Then

    txt = "IB" & bit.ToString & "OK"

    SerPort.Write(txt)

  • 26

    ret = SerPort.ReadLine

    If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then

    GetBitStatus = Val(Mid(ret, 4, 1))

    Else

    GetBitStatus = -1

    End If

    Else

    GetBitStatus = -1

    End If

    Case PORTC

    If bit > -1 And bit < 8 Then

    If bit < 6 Then

    txt = "IC" & bit.ToString & "OK"

    SerPort.Write(txt)

    ret = SerPort.ReadLine

    If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then

    GetBitStatus = Val(Mid(ret, 4, 1))

    Else

    GetBitStatus = -1

    End If

    Else

    txt = "IE" & LTrim(Str(bit - 5)) & "OK"

    SerPort.Write(txt)

    ret = SerPort.ReadLine

    If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then

    GetBitStatus = Val(Mid(ret, 4, 1))

    Else

    GetBitStatus = -1

    End If

    End If

    Else

    GetBitStatus = -1

    End If

    Case PORTD

    If bit > -1 And bit < 8 Then

    txt = "ID" & bit.ToString & "OK"

    SerPort.Write(txt)

    ret = SerPort.ReadLine

    If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then

  • 27

    GetBitStatus = Val(Mid(ret, 4, 1))

    Else

    GetBitStatus = -1

    End If

    Else

    GetBitStatus = -1

    End If

    Case Else

    GetBitStatus = -1

    End Select

    Else

    GetBitStatus = -1

    End If

    Catch ex As Exception

    GetBitStatus = 0

    End Try

    End Function

    Private Sub PopulateTRIS()

    Dim txt As String = ""

    'TRISB

    SerPort.Write("GBOK")

    txt = SerPort.ReadLine

    If Mid(txt, 1, 2) = "GB" Then

    TRISB = DecimalToBinary(Val(Mid(txt, 3, 3)))

    End If

    'TRISC

    SerPort.Write("GCOK")

    txt = SerPort.ReadLine

    If Mid(txt, 1, 2) = "GC" Then

    TRISC = DecimalToBinary(Val(Mid(txt, 3, 3)))

    End If

    'TRISD

    SerPort.Write("GDOK")

    txt = SerPort.ReadLine

    If Mid(txt, 1, 2) = "GD" Then

    TRISD = DecimalToBinary(Val(Mid(txt, 3, 3)))

    End If

    'TRISE

  • 28

    SerPort.Write("GEOK")

    txt = SerPort.ReadLine

    If Mid(txt, 1, 2) = "GE" Then

    TRISE = DecimalToBinary(Val(Mid(txt, 3, 3)))

    End If

    End Sub

    Private Function CheckTRIS(ByVal tris As String) As Boolean

    Dim nula As Integer = 0

    Dim jedan As Integer = 0

    For i = 1 To 8

    If Mid(tris, i, 1) = "1" Then

    jedan += 1

    ElseIf Mid(tris, i, 1) = "0" Then

    nula += 1

    End If

    Next

    If nula + jedan = 8 Then

    CheckTRIS = True

    Else

    CheckTRIS = False

    End If

    End Function

    Private Function DecimalToBinary(ByVal dec As Integer) As String

    Dim res As String = ""

    Dim val As Integer = 128

    While val > 0

    If dec - val > -1 Then

    dec -= val

    res &= "1"

    Else

    res &= "0"

    End If

    val /= 2

    End While

    DecimalToBinary = res

    End Function

  • 29

    Private Function BinaryToDecimal(ByVal bin As String) As String

    Dim res As Integer = 0

    Dim val As Integer = 128

    Dim final As String = ""

    For i = 1 To 8

    If Mid(bin, i, 1) = "1" Then

    res += val

    End If

    val /= 2

    Next

    final = res.ToString

    For i = 2 To final.Length Step -1

    final = "0" & final

    Next

    BinaryToDecimal = final

    End Function

    End Module