• Rezultati Niso Bili Najdeni

Prikaz specifikacij koračnega motorja Nema 23

3.2.2 Pogoni koračnih motorjev

V sistemu sta implementirana dva pogona koračnih motorjev, in sicer modela DM542T proizvajalca Stepperonline, prikazan na sliki 3.9. Ti pogoni so digitalni, in sicer delujejo kot vmesni člen, ki gladi krmilne signale z Arduina in jih poviša na višjo napetost, in sicer na 24 V. Prednosti uporabe pogonov je nižja obratovalna glasnost, manj segrevanja motorjev,

Metodologija raziskave

zveznejše gibanje. Pogona DM542T omogočata več resolucij mikrokorakov, in sicer 400, 800, 1600, 3200, 6400, 12800, 25600, 1000, 2000, 4000, 5000, 8000, 10000, 20000, 25000 pulzov na obrat. Poleg tega omogoča izbiro 8 različnih vrednosti električnega toka, in sicer 1.00 A, 1.46 A, 1.91 A, 2.37 A, 2.84 A, 3.31 A, 3.76 A, 4.20 A.

Slika 3.9: Pogon koračnih motorjev StepperOnline DM542T

Na sliki 3.10 je prikazana nastavitev pogonov koračnih motorjev. V trenutni konfiguraciji je torej nastavitev motorjev enaka 400 pulzov na obrat in obratovanje pri 3,31 A.

Slika 3.10: Prikaz nastavitev pogonov koračnih motorjev.

Metodologija raziskave

3.2.3 Napajalnik

Na sliki 3.11 je prikazan uporabljeni napajalnik, ki dovaja 24 V napetosti na pogone koračnih motorjev in nato preko pogonov na koračne motorje.

Slika 3.11: Prikaz napajalnika za dovod 24 V napetosti.

3.2.4 Krmilnik Arduino

Sistem vsebuje mikrokrmilnik Arduino Mega, prikazan na sliki 3.12, skrbi za krmiljenje koračnih motorjev, preko krmilnikov Stepperline, predstavljenih v poglavju 3.2.2.

Mikrokrmilnik Arduino je bil izbran zaradi možnosti uporabe namenske programske knjižice za poganjanje koračnih motorjev AccelStepper in Multistepper.

Slika 3.12: Prikaz mikrokrmilnika Arduino Uno.

Knjižica AccelStepper vsebuje množico različnih funkcij, ki pripomorejo k ustreznemu krmiljenju koračnih motorjev. Knjižica Multistepper pa omogoča lažje naslavljanje različnih koračnih motorjev, saj ta sistem vsebuje dva. Tako je uporaba koračnih motorjev razmeroma poenostavljena, saj s pomočjo teh knjižic lahko uporabnik funkcijam posreduje le željen pomik, nato pa omenjene knjižice poskrbijo, da se to pretvori v ustrezne električne signale, ki se nato ojačajo na pogonih, na napetost 24 V, ki jo koračni motorji izkoristijo za delovanje.

Metodologija raziskave

Vloga mikrokrmilnika Arduino v sistemu je torej upravljanje in krmiljenje s koračnimi motorji, ukaze pa sprejema preko serijske povezave z mikroračunalnikom Raspberry Pi. Za ta namen je bil razvit komunikacijski protokol, ki je predstavljen v poglavju 3.3.2. S tako delitvijo, lahko v sistemu omogočimo delitev na krmilni in izvršilni del. Ker platforma Arduino ne more izpolniti zahtevka za zaprto-zančen sistem, saj ne podpira nikakršne povezave s kamero, je bilo potrebno sistem ustrezno razširiti. Platforma Arduino je le mikrokrmilnik in kot tak deluje na relativno nizkem nivoju, kjer procesor procesira kodo, bere vhodno-izhodne vhode ipd., ne podpira pa operacijskega sistema, ki bi deloval kot temelj, za razne procese. V splošnem lahko Arduino izvaja le en program hkrati, saj kot rečeno, nima operacijskega sistema, ki bi lahko dopuščal izvajanje več programov hkrati in deljenje procesorskega časa. Platforma Arduino je namenjena predvsem v izobraževalne namene in je kot taka precej dostopna do uporabnikov, z vidika zahtevnosti.

3.2.5 Kamera Basler aca1920-155um

V sistemu je uprabljena tudi Baslerjeva kamera aca1920-155um, prikazana na sliki 3.13. S pomočjo knjižice PylonSDK, v jeziku Python, je bila ta integrirana tudi z delovanjem Raspberryja. Za to uporablja tudi Pylon gonilnike, saj kamera ne deluje preko standardnih USB gonilnikov, temveč potrebuje posebne, saj je kamera namenjena za industrijsko rabo.

Kamera potrebuje standard USB 3.0 za delovanje, zato je bil potreben tudi Raspberry Pi 4, saj ta podpira omenjeni standard.

Slika 3.13: Kamera Basler aca1920-155um.

3.2.6 Raspberry Pi

Jedro krmilnega in uporabniškega dela v sistemu prevzame mikroračunalnik Raspberry Pi 4, prikazan na sliki 3.14. Na Raspberry Pi napravi je naložen operacijski sistem Linux, izvedba Raspbian, v katerem je tudi narejen program za grafični vmesnik, ki je namenjen boljši uporabnikovi izkušnji.

Metodologija raziskave

Slika 3.14: Prikaz mikroračunalnika Raspberry Pi 4.

Raspberry Pi v osnovi komunicira z napravo Arduino preko serijske povezave, preko USB povezave. Za te namene je bil ustvarjen komunikacijski protokol, podrobneje opisan v poglavju 4.2.

Pomembna vloga mikroračunalnika v tem sistemu je tudi podpora za kamero, ki je v osrednji vlogi za sistem računalniškega vida. Zaradi tega cilja je bil tudi uporabljen mikroračunalnik Raspberry Pi, saj samo mikrokrmilnik Arduino kamere ne podpira oziroma ne podpira algoritmov za procesiranje slike iz odprtokodne knjižice OpenCV. Na ta način je omogočeno delovanje v zaprto-zančnem načinu, ki je podrobjene obrazloženo v poglavju 3.3.

Arduinove knjižive za pogon koračnih motorjev, na platformi Raspberry Pi niso podprte, poleg tega nam ta delitev omogoča, da se krmiljenje servo motorjev oziroma delovanje naprave izključno poganja na enem procesorju in se tako ne poteguje z drugimi programi za procesorski čas, kar pa bi zagotovo bilo prisotno, če bi servomotorje poganjali neposredno iz platforme Raspberry Pi. Tako imamo torej ključne elemente delovanja – krmiljenje servomotorjev, ločene od raznih prekinitev, kar bi se lahko zgodile, če bi se program izvajal na Raspberry Pi, saj bi se moral potegovati za procesorski čas vsaj s programom grafičnega vmesnika, poleg tega pa še z morebitnimi otroki ali pa nitmi tega istega procesa. To bi lahko rešilo realno-časovno jedro operacijskega sistema, ki zasede eno procesorsko jedro, ki si zaradi tega ne more deliti procesorskega časa z drugimi opravili, vendar v tem primeru, zaradi razmeroma enostavne zasnove projekta, to ni bilo izvedeno.

Kljub temu se na Raspberry Pi procesira slika, iz katere je moč izračunati kot pri krivljenju pločevine, zaradi tega je vseeno pomembno, da lahko program kolikor hitro deluje, saj dodatne zakasnitve lahko vplivajo na točnost pri izračunu trenutnega kota in dodatno zakasnitev pri zaustavitvi ob doseženem končnem kotu upogiba, kar lahko pomeni prekoračitev kota in torej geometrijsko neustrezen izdelek.

Raspberry Pi omogoča tudi daljinsko upravljanje, saj je konfiguriran tudi kot VNC server, na katerega se lahko povežemo z drugega računalnika preko mrežne povezave in se nato slika operacijskega sistema pretaka v živo na izbrani računalnik. To omogoča še dodatno

Metodologija raziskave

fleksibilnost celotnega sistema, ki je lahko precej pomembna v trenutnih svetovnih razmerah, posebej pri izvedbi vaj na daljavo.

Grafični vmesnik je prikazan na sliki 3.15. Vsebuje možnost upravljanja na različne načine:

- Prosti način (za poravnavo pred/po uporabi), - Odprto-zančni način,

- Odprto-zančni način z vračanjem, - Zaprto-zančni način

Omogoča vnos različnih končnih leg pestiča, horizontalnih podpor, in končnega kota, ki se različno odzivajo, glede na izbrani način delovanja. Poleg tega omogoča tudi nastavitev hitrosti pomikanja podpor in pestiča, ponuja možnost uporabe kamere ipd. Grafični vmesnik je podrobneje predstavljen v poglavju 3.3.3.

Slika 3.15: Prikaz GUI aplikacije.

3.3 Delovanje sistema

To poglavje se osredotoča na delovanje sistema z vidika uporabe, programske logike in načinov delovanja, ki jih sistem omogoča. Kakor je bilo predstavljeno v prejšnjem poglavju, je sistem sestavljen iz naprave za upogibanje pločevine, programska logika pa je porazdeljena na dve napravi, in sicer Raspberry Pi 4 in Arduino Mega. V sklopu tega poglavja bo predstavljen tudi serijski komunikacijski protokol, ki je bil posebej zasnovan za to nalogo. Večji poudarek bo na delovanju grafičnega vmesnika, ki je tudi najbolj kompleksen del tega dela naloge.

Metodologija raziskave

3.3.1 Programska shema

Sistem je s krmilnega vidika porazdeljen na dve napravi, in sicer Arduino Mega in Raspberry Pi 4. To je bilo že opisano v poglavju 3. Program, ki teče na Arduino platformi, je napisan v jeziku Arduino, ta je pa shematsko prikazan na sliki 3.16.

Prvotno stanje INIT je samo namenjeno inicializaciji sistema, postavitvi spremenljivk in priprave na delovanje. Nato program čaka na sporočila preko serijskega vmesnika. V kolikor je sporočilo ustrezne dolžine, in sicer dolžine 18 znakov, program preveri prvi znak, in na podlagi tega gre se sistem premakne v ustrezno stanje. Ta stanja so podrobneje razložena v poglavju 3.3.2.

Slika 3.16: Shematski prikaz

Na strani Raspberry Pi-ja je program nekoliko bolj razčlenjen. Poleg front-end dela, ki vsebuje grafični vmesnik, imamo v ozadju tudi zajemanje in obdelavo slike, pri zaprto-zančnem načinu, ki je izjemnega pomena za pravilno in pravočasno delovanje. Zaradi tega je del za zajem in obdelavo slike nekoliko razčlenjen od »glavnega« dela programa, ki sicer upravlja z grafičnim vmesnikom. Ta razčlenitev je narejena s pomočjo niti (ang. thread). To je način izvajanja programa oziroma dodelitve procesorskega časa, ki zagotavlja delovanje sočasno delovanje v okviru istega procesa. Vsaki niti je dodeljena svoja procesorska enota in tako lahko dobimo sočasno delovanje v okviru istega procesa. Za upravljanje niti skrbi sistemsko jedro (ang. kernel), ki dodeljuje procesorski čas posameznemu procesu ali niti [11]. Dodatna prednost, ki jo omogočajo niti je, da procesi ne potrebujejo mehanizmov za komunikacijo med njimi, saj jim je dodeljen isti pomnilniški prostor, kar pomeni, da ne potrebujejo mehanizmov za sinhronizacijo in posredovanje informacij, ampak lahko prosto dostopajo do skupnih naslovnih prostor v pomnilniku.

Metodologija raziskave

V primeru tega sistema je to zaželeno, saj lahko nit, ki skrbi za zajemanje in obdelavo slik, nato obdelano sliko, ali pa vsaj podatek o izračunanem kotu shrani neposredno v sklad (ang.

heap), do katerega lahko prosto dostopa glavni del programa, brez dodatnih mehanizmov, kot so cevi, skupni pomnilnik ipd.

Shematski prikaz progama, ki deluje na napravi Raspberry Pi, je prikazan na sliki 3.17.

Glavni program skrbi za delovanje in uporabniško izkušnjo, komuniciranje preko serijskega vmesnika z Arduinom ipd. V zaprto-zančnem načinu pa večino dela opravi prav nit, ki poskrbi za zajem in nadaljnjo obdelavo slike. To je podrobneje prestavljeno v poglavju 5.

Povezava med glavnim programom in nitjo, ki skrbi za obdelavo slik, je narejena s pomočjo podatkovne strukture imenovane vrsta (ang. queue). Značilnost te podatkovne strukture je, da deluje po principu FIFO (first in, first out), kar pomeni, da se slike oziroma podatki, ki so naloženi v vrsto, nato berejo iz vrste v takem zaporedju, kot so bile tudi v vrsto vstavljene.

Vrsta deluje le v eni smeri, in sicer od niti proti glavnemu programu. Vrsta se nahaja v naslovnem prostoru glavnega programa, saj je tudi nit del naslovnega prostora (specifično kopice), tako da lahko glavni program dostopa do vrste in iz njih bere slike, ki jih nato uporabi za prikazovanje v grafičnem vmesniku.

Slika 3.17: Shematski prikaz delovanja programa na Raspberry Pi.

3.3.2 Komunikacijski protokol

Za potrebe porazdeljenega delovanja sistema na dveh različnih napravah, torej Arduinu Mega in Raspberry Pi, je bil osnovan komunikacijski protokol za komunikacijo delovanja med omenjenima napravama. To poglavje je predstavljeno pred ostalim delovanjem sistema,

Metodologija raziskave

saj bo tako omogočeno lažje razumevanje dogajanja, ki sledi iz uporabe grafičnega vmesnika in razumevanje načinov delovanja, ki jih sistem omogoča.

Kakor je bilo že predstavljeno v poglavju 3.2.4, je kot mehanizem komunikacije bil izbran serijski protokol, saj je Arduino Mega preko USB vmesnika povezan na Rasbperry Pi zaradi napajanja. To pomeni, da morata vedno biti vedno na dotični razdalji. Kot alternative bi lahko uporabili komunikacijo preko GPIO pinov ali pa preko katere izmed brezžičnih komunikacijskih protokolov (Bluetooth, WiFi). Na koncu je pri izbiri prevladala predvsem enostavnost serijske komunikacije, saj je povezava preko USB vmesnika že vzpostavljena, ni potrebno dokupiti drugih modulov (recimo za brezžično komunikacijo) in dobra programska podpora za serijsko komunikacijo v jeziku Python s pomočjo programske knjižice pyserial, ki je primarno uporabljen na strani Raspberry Pi naprave. Zaradi omenjenih razlogov je nato bila izbrana komunikacija na podpori serijske komunikacije.

Komunikacijski protokol je v osnovi zelo enostaven, saj potrebe po višji kompleksnosti na tej stopnji razvoja ni. Potrebe za konkretno aplikacijo so predvsem v podajanju pravilnih ukazov o hitrosti, premiku, končnem kotu krivljenja ipd., zaradi tega ni bilo večje potrebe po dodatni kompleksnosti. V kolikor bi bili izbrani drugačni načini komuniciranja, predvsem pri brezžični mrežni komunikaciji, bi bilo smiselno ustvariti tak protokol, ki bi bil sposoben premostiti razne težave, ki bi so prisotne pri brezžični komunikaciji.

Komunikacijski protokol obsega enosmerno komunikacijo iz Raspberry Pi na Arduino Mega. Sama komunikacija obsega niz numeričnih znakov, ki so poslani kot string tip podatkov, torej je vsak niz zaključen z znakom za novo vrstico - /n. Na sliki 3.18 je prikazana splošna struktura sporočila v komunikacijskem protokolu.

Slika 3.18: Prikaz splošne strukture komunikacijskega protokola.

Zgornje sporočilo je torej sestavljeno le iz numeričnih znakov. M označuje izbiro načina delovanje (ang. mode) in je del glave sporočila, nato pa sledi še 16 znakov, ki sestavljajo podatkovni del sporočila, s skupno dolžino sporočila 18 znakov (na koncu vsakega sporočila pa še znak za novo vrstico – '/n'). V splošnem se sporočilo vedno razstavi na štiri dele, torej štiri znake, kakor je prikazano na sliki 3.18, vsak nato vsebuje informacije, ki so potrebne za delovanje v različnih načinih, vendar pa tudi tukaj obstajajo izjeme. Zaradi tega je v

Metodologija raziskave

nadaljevanju predstavljeno vsako sporočilo posebej. V preglednici 3.2 so na kratko predstavljeni še različni načini delovanja, glede na številko načina delovanja M.