Automobilový priemysel na Slovensku zaznamenal v posledných rokoch prudký vzostup. Automobilky priniesli pracovné príležitosti pre Slovákov po celom Slovensku. V týchto firmách sú nasadené moderné stroje a linky. V nich sa nezaobídeme bez automatizácie prostriedkov dopravy, súčiastok, nástrojov a rôznych komponentov. Práve vedľajšie časy, súvisiace s plynulou dopravou, majú značný vplyv, a to nielen na konečnú cenu výrobku, ale aj na prestoje strojov a zariadení.
Som študentom 3. ročníka odboru mechanik počítačových sietí a svojou prácou chcem prispieť k možnosti riešenia automatizácie dopravy súčiastok v strojárskom priemysle.
Cieľom našej práce bolo:
Navrhnúť a zostrojiť vozidlo, ktoré:
Krokový motorček je synchrónny točivý stroj napájaný impulzmi jednosmerného prúdu. Základný princíp je úplne jednoduchý. Prúd prechádzajúci cievkou statora vytvorí magnetické pole, ktoré pritiahne opačný pól magnetu rotora. Vhodným zapojovaním cievok dosiahneme vytvorenie rotujúceho magnetického poľa, ktoré začne otáčať rotor. Podľa požadovaného krútiaceho momentu, presnosti nastavenej polohy a prípustného odberu volíme niektorú z variant riadenia. Kvôli prechodovým magnetickým javom je obmedzená rýchlosť otáčania motora a to na niekoľko stoviek krokov za sekundu (závislé na type motora a zaťažení). Pri prekročení tejto maximálnej rýchlosti (alebo príliš vysokej záťaži) krokové motory začínajú strácať kroky. Pohyb krokového motora je pri nízkych frekvenciách impulzov nespojitý – hovoríme o pohybe v krokoch. Počet krokov (stabilných kľudových polôh) je daný počtom pólových dvojíc, rovnako môže byť ovyplyvnený spôsobom ovládania. K pohybu tohto motoru je vždy potrebná riadiaca elektronika – ovládač.
Používajú sa tieto jednosmerné motory:
Cudzobudené a derivačné motory majú prakticky rovnaké prevádzkové vlastnosti. Budiaci prúd pri cudzobudenom (derivačnom) stroji je výrazne menší ako je prú d kotvy. Na riadenie otáčok jednosmerného derivačného(aj cudzobudeného) m otora sa využívajú všetky možnosti; tj. Zmenou odporu, pripojeného napätia, zmenou budiaceho prúdu v budiacom obvode. Jednosmerné motorčeky sériové majú budiaci a kotvový obvod zapojený v sérii.
Pri malých zaťaženiach sa jednosmerný sériový motor roztáča na neprípustné otáčky. Preto by mala byť minimálna záťaž aspoň 20 % z maximálnej záťaže. Jedine pri motorčekoch do výkonu 10 W sa niekedy pripúšťa chod bez záťaže, kedy mechanické straty obmedzia otáčky. Sériové motorčeky sa používajú tam, kde sa požaduje veľký záberový moment.
Motorčeky s permanentným magnetom nemajú budiace vynutie. Zdrojom magnetomotorického napätia je stály magnet, ktorý tvorí pólové nadstavce na statore. Pólové nadstavce sa vyrábajú z magneticky tvrdých zliatin. Novšie využívajú spekané materiály.
Motory s trvalými magnetmi sa rýchle uchytili v mnohých oblastiach, majú dobrú účinnosť, nízku cenu, malé prevádzkové náklady, dobrý pomer hmotnosti k výkonu, sú priestorovo náročné.
Ovládače a regulátory otáčok boli rovnako vylepšené a prispôsobené motorčekom s trvalými magnetmi. Mechanická charakteristika motorčeka s trvalými magnetmi vykazuje priamkovú závislosť.
Jednosmerné motory majú nesporne veľa výhod, ale pre použitie v oblasti robotiky a riadenia sa s výhodou používajú v kombinácii s prevodovkou s vhodným prevodovým pomerom podľa požadovanej aplikácie.
Štandardne je určený pre natáčanie v rozsahu 90 ° resp. 180 °.
Poloha výstupného hriadeľa servomotora odpovedá proporciálne šírke riadiaceho impulzu. Riadiaci impulz je kladný s amplitúdou 5V a aktívnou šírkou premenlivou od 1 ms do 2 ms, čo odpovedá rozsahu polohy výstupného hriadeľa servomotora v rozsahu 90 °. Väčšina serv dovoľuje mechanický rozsah pohybu 180 ° zväčšením šírky riadiacich impulzov od 0,5 ms do 2,5 ms. Riadiace impulzy, ktorých šírka je mimo uvedené rozsahy môžu spôsobiť nájazd serva na mechanický doraz a tým môže dôjsť k jeho poškodeniu. Riadiaci impulz sa má opakovať 50x za sekundu (perióda 20 ms). Strednú polohu osi servomotora je možné nastaviť vysielaním impulzov o šírke 1,5 ms.
Skladá sa z jednosmermého motorčeka, viacstupňovej prevodovky, spätnoväzobného snímača (potenciometer a riadiaca elektronika).
Servo je napájané a riadené pomocou troch vodičov, pričom na riadenie sa využíva jeden vodič s riadiacimi impulzmi, čo je veľkou výhodou oproti ostatným riešeniam.
Pri tomto type snímača je čiara tvorená kovovým drôtom. Snímač predstavuje elektromagnetická cievka, ktorej indukčnosť sa mení v závislosti na polohe drôtu.
Tento princíp využiva jav, že tmavšie predmety väčšiu časť žiarenia pohlcujú a svetlejšie naopak odrážajú. Sledovaná čiara je výrazne tmavšia, alebo svetlejšia ako podklad. Môže byť z akéhokoľvek materiálu alebo nakreslená ma podklad. Snímač je zložený z dvoch častí vysielač a prijímač. Vysielač ožiari plochu pod sebou a prijímač zachytí odrazenú časť. Podľa intenzity zosnímanej čiary sa dá rozlíšiť, či sa snímač nachádza nad tmavším alebo svetlejším povrchom.
Čiara môže byť z akéhokoľvek dostatočne tvrdého materiálu a musí mať určitú hrúbku. Snímač je tvorený dvoma kolieskami pritlačenými pružinami k podkladu. Ak jedno z koliesok zíde z čiary, zmení sa vzdialenosť kolieska od podvozku.
Na riadenie smeru pohybu vozidla som použil krokový motorček zo starej disketovej mechaniky. Dôležitým faktorom pri rozhodovaní bolo presné nastavenie natočenia kolies vozidla, čo mi umožnil práve krokový motorček.
Pohon vozidla v mojom prípade nevyžaduje žiadne špeciálne vlastnosti. Použil som jednosmerný motor zo starého VHS prehrávača, nakoľko som potreboval motorček, ktorý bude dostatočne silný aj pri menších otáčkach.
Ako najlepší v mojom prípade sa mi javí optický senzor. Použil som senzor od firmy HiTechnic. Ten je pôvodne určený pre robotickú sadu LEGO Mindstorms NXT, ale je použiteľný aj pre môj účel. Senzor pozostáva z bielej LED, a RGB snímača. Je schopný rozlíšiť nielen intenzitu svetla, ale aj jeho farbu. To umožňuje môjmu vozidlu snímať nielen čierne alebo biele trasy, ale aj trasy iných farieb – napríklad červenú, zelenú, alebo modrú.
Senzory pre sadu Mindstorms NXT komunikujú s riadiacou jednotkou tejto sady cez protokol I2C. Ja som na riadenie nepoužil riadiacu jednotku z tejto sady. Použil som vývojovú dosku Netduino 2 od firmy Secret Labs. Netduino 2 taktiež disponuje protokolom I2C, čo mi umožnilo s daným senzorom komunikovať.
Protokol I2C rozlišuje zariadenie Master a zariadenie Slave. Komunikáciu riadi Master. Ten najprv odošle na zbernicu I2C adresu Slavea, s ktorým chce komunikovať, a následne posiela údaje. Konkrétne mnou použitý senzor má adresu 0x01 v hexadecimálnej(šestnáskovej) číselnej sústave.
So senzorom sa komunikuje tak, že najprv pošlem adresu do jeho pamäte, z ktorej chcem prečítať údaje, a ten mi potom odošle údaj na danej adrese. Ja používam údaj na adrese 0x42, kde je uložený kód farby, ktorú senzor detekoval. Avšak je možné prečítať aj intenzitu červenej, zelenej a modrej zložky farby, tie sú na iných adresách v pamäti senzora.
Na riadenie vozidla som použil už spomenutú dosku Netduino 2. Tá disponuje mikrokontrolérom, ktorého firmware je schopný poňať do seba program, napísaný v jazyku C#, zapamätať si ho, a po pripojení na zdroj napätia ho začať vykonávať.
Netduino obsahuje vývody, ktoré sa môžu použiť, okrem iného, aj ako štandardný digitálny vstup, resp, výstup. U týchto vývodov je možné priamym spôsobom v programe získať logickú úroveň na vstupe( log. 0 alebo log. 1), prípadne túto logickú úroveň zapísať na výstup programu.
Ďalej je možné tieto vývody použiť ako externé prerušenie. Pri zmene logickej úrovne vstupu, konfigurovaného ako externé prerušenie program preruší vykonávanie aktuálnej operácie, je možné reagovať na vzniknuté prerušenie, a potom sa vykonávanie predchádzajúcej operácie obnoví a dokončí. Je to v podstate rovnaké prerušenie, aké používajú dnešné počítače.
Niektoré z vývodov je možné konfigurovať ako analógový vstup a následne získať v programe okamžítú hodnotu napätia na analógovom vstupe. Povolený rozsah je 0 V až 3,3 V.
Netduino taktiež obsahuje na niektorých svojich vývodov obdobu analógového výstupu – PWM. Je to niečo podobné, ako hodinový signál – má svoju frekvenciu, avšak je možné meniť aj striedu tohto výstupu – preto som to nazval obdobou analógového výstupu. PWM výstup má dostatočnú frekvenciu, aby mohol riadiť napríklad aj intentzitu LED, bez toho, aby bolo viditeľné zapínanie a vypínanie LEDky.
Poslednou možnosťou využitia vývodov Netduina sú rôzne komunikačné protokoly, ktoré majú vyhradené svoje vývody – nie je možné použiť iné. Disponuje protokolmi UART, I2C a SPI. Použitie je rôzne.
Napríklad, pomocou SPI je možné ovládať zariadenia, disponujúce týmto protokolom. Avšak SPI je možné použiť aj na komunikáciu s mnohými ďalšími obvodmi, ktorých komunikačný protokol je podobný protokolu SPI. Je možné ho použiť aj na riadenie shift registrov, ako napríklad 74HC595. Register 74CH595 je tzv. Serial-In-Parallel-Out. Sériovo do neho zapíšeme údaje, a on ich vypíše paralelne. Takýmto spôsobom je možné rozšíriť počet digitálnych výstupov Netduina. Jeden takýto register má veľkosť jeden bajt – čo zodpovedá ôsmim výstupom. Tieto registre je možné zreťaziť, čím rozšírime ich kapacitu. Podobné vlastnosti majú shift registre Parallel-I-Serial-Out, ktoré umožňujú pomocou protokolu SPI rozšíriť počet digitálnych vstupov Netduina.
Protokol SPI používa ako svoju zbernicu vodiče SCLK(riadiaci hodinový signál), MOSI(master-out-slave-in), používaný ako výstup z Netduina, MISO(master-in-slave-out), používaný ako vstup do Netduina, a vodiče CS(chip select), ktorými sa vyberá zariadenie, s ktorým chce Netduino komunikovať.
Protokol I2C je iný. Používa vodiče SCL(opäť hodinový signál), a SDA(dátová linka- obojsmerná). Prenos v tomto protokole, podobne, ako u SPI, riadi zariadenie Master(ako napríklad Netduino). Výber cieľového zariadenia Slave je pomocou adresy, ktorú odošle Master po vodiči SDA. Master taktiež určí smer následujúceho prenosu dát.
Posledný protokol je UART. Používa vodiče RX a TX, pre jednotlivý smer prenosu dát. Nepoužíva riadiaci hodinový signál, a neobsahuje ani spôsob výberu cieľového zariadenia.
Jazyk C# je tzv. riadený. Nevykonáva ho priamo mikrokontrolér, ale je interpretovaný behovým prostredím CLR(common language runtime). Na počítači vo vývojovom prostredí programátor vytvorí program v jazyku C#. Kompilátor(prekladač) tento program skompiluje(preloží) do jazyka CIL(common intermediate language). Kód v tomto jazyku je možné odoslať do pamäte Netduina. Potom po spustení Netduina je načítané behové prostredie CLR, ktoré program vykonáva inštrukciu po inštrukcii – interpretuje ho, a zároveň sa stará o jeho beh.
Jazyk C# je naďalej objektovo orientovaný, je veľmi robustný. Podporuje dedičnosť, polymorfizmus, vlákna, výnimky, delegáty, udalosti. Kód je rozdelený do tried. Trieda sa používa ako akási šablona na vytvorenie objektu.
Dedičnosť znamená, že jedna trieda môže zdediť obsah inej triedy. Napríklad vytvoríme triedu človek, z ktorej podedíme triedy zamestnanec, zamestnávateľ, podnikateľ, atď. Dalej budem opisovať jazyk C# pomocou tejto hierarchie tried.Do triedy človek dáme prvky, ktorými disponuje akýkoľvek človek. Do ďalších tried potom zdedíme schopnosti všeobecného človeka, a pridáme ďalšie.
Polymorfizmus veľmi súvisí s dedičnosťou. Umožňuje nám na miesto, kde program očakáva človeka, uložiť či už zamestnanca, zamestnávateľa, alebo podnikateľa, alebo iného človeka.
Praktický význam to má, ak do triedy človek dáme funkciu(laicky podprogram) VykonávajSvojuČinnosť(). V potomkoch triedy môžeme pozmeniť kód tejto funkcie, čím bližšie špecifikujeme, čo má vykonať. Následne v inej triede si vytvoríme zoznam jednoducho ľudí, do ktorého vďaka polymorfizmu môžeme uložiť nielen človeka, ale aj zamestnanca, zamestnávateľa, alebo podnikateľa, alebo....Následne v tzv. cykle prejdem všetkých jednoducho ľudí v zozname, a každému prikážem vykonávať svoju prácu. Zoznam je typu jednoducho človek. Preto by si niektoí mohli myslieť, že to nebude fungovať, alebo že človek urobí činnosť vo verzii funkcii v triede Človek. Avšak, vďaka polymorfizmu, si vždy behové prostredie CLR pozrie, nie aký dátový typ má náš zoznam, ale aký dátový typ majú jednotlivé objekty v ňom, a zavolá funkciu VykonávajSvojuČinnosť(), prislúchajúcu danému typu človeka.
Vlákna umožňujú vykonávať viac vecí akoby naraz. V princípe, CLR rýchlo prechádza medzi jednotlivými vláknami, a z každého vykoná zopár inštrukcií, a prejde na iné vlákno. Vyzerá to podobne, ako by boli jednotlivé vlákna vykonávané naraz.
Výnimka je spôsob, akým nám CLR oznamuje, že došlo k určitej chybe za behu. My túto výnimku môžeme zachytiť, a reagovať na vzniknutú situáciu. Taktiež je možné vyvolať vlastnú výnimku. Ak výnimka nie je zachytená v určitej funkcii, tak prejde do funkcie, ktorú zavolala tá predchádzajúca.
Delegát nám umožňuje do premennej uložiť odkaz na nejakú funkciu. Nie akúkoľvek. Delegát predurčuje návratový typ funkcie, ktorú do neho chceme uložiť, ako aj počet a dátové typy jednotlivých parametrov funkcie.
Udalosťou oznamujeme iným časťam kódu, že niečo nastalo. Mimo iné, ak máme určitý vstup Netduina konfigurovaný ako externé prerušenie, tak pri zmene jeho logickej úrovne nastane určitá udalosť. K udalosti môžeme vopred pripojiť vhodného delegáta, alebo delegátov, čo spôsobí, že až nastane daná udalosť, CLR zavolá všetkých delegátov pripojených na udalosť. Podobne ako u výnimky, môžeme sami vyvolať udalosť. Dokonca, pri vytváraní vlastnej triedy si môžeme vytvoriť našu vlastnú udalosť.
Veľmi užitočná je možnosť ladiť program. K tomu musí byť Netduino pripojené k počítaču a na počítači otvorené vývojové prostredie. Takto, až nastane výnimka, tak namiesto hore uvedeného procesu je program pozastavený, a vývojové prostredie nám ukáže, kde nastala aká výnimka. Následne môžeme sledovať hodnoty premenných, meniť ich, a aj program krokovať – vykonávať riadok po riadku. Taktiež môžeme vo vývojovom prostredí nastaviť na určité riadky tzv. breakpoint, čo spôsobí, že ak program dôjde k danému riadku, opäť je pozastavený, a opäť môžeme sledovať a meníť hodnoty premenných, aj program krokovať. Posledne, môžeme z Netduina napísať do vývojového prostredia určité správy, do ktorých môžeme pridať hodnoty premenných, ktorých dátový typ sa dá prepísať na text. Tie sa nám vo vývojovom prostredí objavia, avšak nijako neovplyvňujú beh programu. Takto má programátor prehľad o tom, čo jeho program robí, a ľahšie v ňom nájde prípadné chyby.
Prínos našej práce vidíme v jej:
a) Dopravu komponentov k strojom
b) Plynulý priebeh montáže
Schéma plošného spoja vozidla
Návrh plošného spoja vozidla
Obrázok Netduina s popisom vývodov
Obrázok vozidla
{s5_media_player media=[video] video_mp4=[http://www.strojar-inovator.sk/images/video-2015/vozidlo-ciara.mp4] }