Vyšší odborná škola a Střední průmyslová škola elektrotechnická F. Křižíka Praha 1, Na Příkopě 16
Absolventská práce Manipulátor
Školní rok:
2011/12
Vypracoval: Michael Skřepský Třída:
V3A
1
2
Prohlašuji, že jsem tuto práci vypracoval samostatně a použil literárních pramenů a informací, které cituji a uvádím v seznamu použité literatury a zdrojů informací.
V Praze dne:
Podpis:
3
Anotace Je zde navržen a zrealizován demonstrační model manipulátoru, řídící software a ovladač pro jeho snadnější řízení "Názorné ovládací zařízení“. Manipulátor je vybaven proudovou zpětnou vazbou a vnitřní pamětí pro samostatný chod. Je zde popsán návrh a výběr součástí, jejich montáž, programování software pro jednotlivé celky, postup zprovoznění mechaniky, elektroniky i programového vybavení a následné měření nosnosti, proudového odběru a dalších vlastností.
4
Obsah 1. Úvod.................................................................................................................................6 2. Výběr komponent............................................................................................................7 2.1. Výběr konstrukčního materiálu..................................................................................7 2.2. Volba počtu stupňů volnosti.......................................................................................8 2.3. Volba pohonu stupňů volnosti....................................................................................9 2.4. Řídící elektronika ....................................................................................................12 2.5. Řídící software pro použité mikrokontroléry............................................................13 2.6. Řídící software na PC..............................................................................................15 3. Návrh, výroba a popis funkčních celků......................................................................16 3.1. Mechanika................................................................................................................16 3.1.1. Uchopovací mechanismus - kleština...............................................................16 3.1.2. Klouby s vodorovnou osou otáčení.................................................................18 3.1.3. Otočná základna.............................................................................................20 3.1.4. Názorné ovládací zařízení...............................................................................21 3.2. Elektronika...............................................................................................................22 3.2.1. Názorné ovládací zařízení ..............................................................................22 3.2.2. Manipulátor......................................................................................................23 3.3. Software...................................................................................................................25 3.3.1. Software názorného ovládacího zařízení........................................................25 3.3.2. Manipulátor......................................................................................................25 3.3.3. PC....................................................................................................................26 4. Měření.............................................................................................................................28 5. Využití manipulátoru.....................................................................................................29 6. Závěr...............................................................................................................................30 7. Použitá literatura...........................................................................................................31 8. Přílohy – úplné výpisy programů................................................................................32 8.1. Software názorného ovládacího zařízení................................................................32 8.2. Software manipulátoru.............................................................................................33 8.3. Software PC.............................................................................................................35
5
1. Úvod Jako téma mé závěrečné práce jsem si zvolil konstrukci demonstračního modelu manipulačního ramene, abych lépe porozuměl funkci jeho jednotlivých celků, zlepšil své konstrukční schopnosti a také protože škola zakoupila jeho stavebnici od firmy MERKUR. Tento manipulátor, jak se ukázalo po jeho sestavení, měl zásadní konstrukční nedostatky, tak jsem nabídl škole, že jej modifikuji, ale nakonec jsem se rozhodl sestavit vlastní úplně od začátku. Zvolil jsem podobné konstrukční řešení, protože to se mi jevilo pro demonstrační model jako nejvhodnější, a navíc je možné u obou manipulátorů porovnat jejich vlastnosti, výhody i nedostatky. Dále jsem se musel rozhodnout, jaké zvolím konstrukční materiály, pohony, řídící elektroniku a napájecí zdroj. Také bylo nutné vybrat programovací jazyk pro naprogramování řídícího software v PC, mikrokontrolérech a způsob komunikace. Nakonec zbyla otázka financí. Politika školy je, že když financuje byť jen jediný šroubek, tak jí celý výrobek propadne a na veškeré zakoupené součástky se musí dodat daňový doklad. Používám součástky z vlastních zásob a ty, které nemám, vyměňuji za jiné s jinými lidmi nebo je nakupuji levně v bazarech a na burzách, kde mi daňový doklad obvykle nevydají, navíc si své výrobky nechávám a jejich součásti používám zase na jiné projekty. Proto jsem se rozhodl vývoj a výrobu financovat sám, i díky tomu, že jsem v době rozhodnutí měl dostatek financí.
6
2. Výběr komponent 2.1. Výběr konstrukčního materiálu Při výběru materiálu na stavbu manipulátoru jsem musel zohlednit mnnoho věcí, protože každý materiál má své přednosti a nedostatky. Vycházel jsem z následujících vlastností: •
Cena: Materiál musí být cenově dostupný, lepší by bylo, kdyby byl již přítomný v mých zásobách. Úplně nejlepší je získat materiál jako odpad, tím pomůžeme životnímu prostředí jeho novým využitím, místo toho, aby se spálil nebo nákladně recykloval.
•
Odolnost: Je potřebná dostatečná pevnost a malá pružnost, aby se při práci manipulátor neohýbal nebo dokonce nezlomil.
•
Zpracovatelnost: Materiál musí být zpracovatelný v domácích podmínkách, tj. pilkou na kov, akumulátorovou a stojanovou ruční vrtačkou, pilníkem a v případě plastu tepelným tvarováním pomocí pájky a žhavého odporového drátu.
•
Opravitelnost: V případě dodatečných úprav nebo selhání materiálu musí být možnost jej jednoduše a pevně opravit, tj. svařit, slepit, pájet.
•
Vzhled: Musí být vzhledově přijatelný, případně dobře povrchově opracovatelný, abych se vyhnul např. různým neopravitelným ohybům, poškrábání povrchu a povrchové korozi. Jako první jsem vyzkoušel sádrokartonářský pozinkovaný ocelový profil, protože
jsem ho měl veliké množství, ale později jsem zjistil, že je špatně opracovatelný. Na pilce velice rychle zničil zuby, nedal se vrtat a ohyb nebyl možný kvůli jeho nepředvídatelnosti. Proto jsem ocelový plech zavrhl a zvolil dřevěné profily, které jsou sice finančně nákladnější, ale výborně se s nimi pracuje a díky tomu, že jsou hoblované, již nevyžadují další povrchovou úpravu. Jejich další výhoda je, že v Baumaxu jich mají široký výběr a tato prodejna je 200 metrů od mého domova, takže není v případě nedostatku materiálu potřeba cestovat daleko nebo objednávat, což by znamenalo další náklady na jízdné, benzín, nebo poštovné a časové zdržení.
7
2.2. Volba počtu stupňů volnosti Stupeň volnosti, někdy také kloub (v případě otáčivého pohybu), je rozhraní mezi dvěma součástmi manipulátoru, kde se jedna část oproti druhé posouvá, otáčí, ohýbá nebo jedna do druhé zasouvá. Také zahrnuje uchopovací mechanismus na konci, pokud vykonává otočný nebo posuvný pohyp, např. různé kleštiny a také bodové svářečky. Nezahrnuje přísavky, čidla dotyku pro měření rozměrů, kamery atd.
Obr. 1: manipulátor s pěti stupni volnosti – 2 otočné svislé, 2 vodorovné, 1 na kleštině Obr. 2: manipulátor s třemi stupni volnosti – 2 otočné svislé, 1 lineární svislý, přísavka na součástky
Obr. 3: manipulátor s třemi stupni volnosti – otočný se svislouv osou a 2 lineární, přísavka na součástky Obr. 4: manipulátor typu "had" s mnoha stupni volnosti, 1 otočný svislý, 1 had, na konci kamera a přisvícení
Já jsem zvolil typ z Obr. 1, ale se šesti stupni volnosti, protože manipulátor, zakoupený pro výuku ve škole, má také 6 stupňů volnosti. Díky tomu je možné jednoduše porovnávat jejich vlastnosti.
8
2.3. Volba pohonu stupňů volnosti Pro pohon se používají různé akční členy, každý má své výhody a nevýhody, proto je postupně vyjmenuji: •
Pneumatické písty: jsou výhodné tam, kde máme pouze 2 možné polohy. Dělí se na jednočinné s jedním vstupem na tlakový vzduch, kde není potřeba velká síla na vrácení do výchozí polohy a dvojčinné, kde na
jedné straně tlačí píst tlakový
vzduch nebo pára a druhá strana je odtlakována do atmosféry a naopak. Používají se v automatizaci na umisťování součástek a jiné jednoduché úkony na montážních linkách. •
Hydraulické písty: Díky nestlačitelnosti kapalin mohou být přesně nastaveny do jakékoliv polohy. Mají velkou sílu a jsou velice odolné. Používají se na pracovních strojích ve stavebnictví a většinou neobsahují zpětnovazební systémy, zpětnou vazbu zajišťuje operátor svým zrakem. Pro stavbu demonstračního modelu manipulátor jsou jednoduše sestavitelné z velkých injekčních stříkaček (k dostání v lékárnách) a elektromotorků se zubovým čerpadlem, používaných u ostřikovačů automobilů. Jako zpětná vazba jde použít lineární potenciometr. Nevýhoda je, že každý píst musí mít svoje čerpadlo, protože malé elektrické ventily jsou neekonomické a nedostupné.
•
Hydromotory: Použití tam, kde již máme hydrauliku (stavební stroje), ale potřebujeme otáčivý pohyb. Uvniř je většinou 8 pístků připojených na nakloněnou rovinu, která přes ložisko otáčí ohnutou hřídelí. Elektronická zpětná vazba se také nepoužívá.
•
Zpřevodované
elektromotory:
Mají
šnekovou,
přímou
nebo
planetovou
převodovku. Planetová převodovka je výhodná pro její malé rozměry, přímá díky snadné výrobě a ceně a šneková pro její zajímavou vlastnost, že není možné jí otočit vnějším točivým momentem, otočí se pouze při chodu motoru. Samotný motor může být stejnosměrný, krokový nebo elektronicky komutovaný. Zpětná vazba se řeší dodatečnou montáží inkrementálního čidla (soustava optických závor) na hřídel elektromotoru nebo potenciometru na výstupní hřídel. Pro potřeby demonstračního modelu lze použít motor ze stěračů automobilu, Ten má vhodný převod, úhlovou rychlost
i vestavěné koncové spínače a zpětnovazební
potenciometr.
9
•
Servomotory: Jsou to elektromotory s převodovkou, obsahující i zpětnou vazbu a obvod, který porovnává žádanou polohu se skutečnou polohou a podle toho řídí motor. Průmyslové verze mají obousměrnou komunikaci, kde se zpětná vazba posílá nadřazenému systému po datové sběrnici. Modelářské servomotory mají pouze vstup na řízení pomocí šířky napěťových pulsů. Při volbě pohonu jsem se dlouho rozhodoval mezi hydraulickým systémem a
servomotory, ale nakonec jsem vybral servomotory. Důvodů bylo několik, menší rozměry a absence kapaliny, která může unikat a vyvolávat korozi, ale hlavním důvodem bylo to, že jsem objevil modelářské servomotory za necelé 3 dolary kus na čínském internetovém obchodě hobbyking.com [1]. 3 USD bylo v té době přibližně 60 Kč, což je bezkonkurenční cena, když obvykle se podobná serva v českých obchodech pohybují kolem 500 Kč.
Obr. 5: HK15138 – jeden z nejlevnějších standartních analogových modelářských servomotorů
Obr. 6: Blokové schéma modelářského servomotoru
10
Parametry čínského servomotoru: •
Točivý moment: 3.8 kg @ 4.8 V, 4.3 kg @ 6 V na páce 1 cm (380 mNm, 430 mNm)
•
Hmotnost: 38 g
•
Úhlová rychlost: 0.21 s / 60° při 4.8 V až 0.17 s / 60° při 6 V
•
Rozsah napájecího napětí: 4.8 V až 6 V
•
plastové převody, jediný integrovaný obvod, žlutá krabička, klon Futaba s3003
Objednávka servomotorů z Číny má jen 2 nevýhody – platbu a dopravu. Platba se provádí tak, že se založí účet na paypal.com [2] a jsou dvě možnosti, buď si na něj poslat peníze přes příkaz z bankovního účtu nebo jej propojit s mezinárodní platební kartou. Zvolil jsem první možnost, protože meznárodní kartu nemám. Počkal jsem 2 pracovní dny, než peníze došly na sběrný účet Paypalu v UnicreditBank a pak už byla transakce velmi rychlá. Vstoupil jsem na web Hobbyking, stránku s vybraným servomotorem [3], chvíli jsem počkal, protože jsem zjistil, že mi tak automaticky nabídnou malou slevu, a poté jsem se zaregistroval a provedl objednávku 12 kusů servomotorů a snižovacího měniče, který jsem nakonec nevyužil. Proč jsem zvolil 12 kusů, když potřebuji jen 6? Protože čínské elektronice nevěřím a plastové převody znamenají velké riziko ulomení zubu, tak abych měl rezervu. Také se rozloží poštovné a navíc přebytky využiji na další projekty. Jak takový servomotor funguje? Funkce je popsána na Obr. 6. Nejdříve potenciometr na výstupní hřídeli převede skutečnou polohu na napětí, to se pomocí monostabilního klopného obvodu převede na impuls, který se porovná s impulsem z ovládacího vstupu a rozdíl jejich délky (kladný nebo záporný) se zesílí a pošle na jednu, nebo druhou stranu výkonového můstku z bipolárních tranzistorů a ten pak napájí pohonný elektromotor v odpovídající polaritě. Elektromotor pohne hřídelí do žádané polohy a až do změny šířky vstupních pulsů tuto polohu udržuje. Extrémní případy: Při absenci vstupních impulsů je možné hřídelí volně otáčet. Pokud vnější síla překročí sílu servomotoru, tak se buď otočí nezávisle na požadované poloze nebo se strhnou převody. Síla servomotoru je závislá na napájecím napětí, proto jsem toto napětí zvolil nejnižší z povoleného rozsahu (5 V), abych omezil možnost stržení plastových převodů i za cenu nižšího točivého momentu. Také jsem měl s tímto napětím zdroj. Dále jsem zjistil, že jednoduchým měřením proudového odběru získáme informaci o
11
aktuálním točivem momentu a tudíž i síly, kterou vyvolává kleština na držený objekt. Proto není potřeba žádné nákladné čidlo tlaku (tenzometr), ale stačí snímat proud v napájecím vodiči pomocí odporového bočníku. 2.4. Řídící elektronika Řídící signál lze posílat servomotorům přímo paralelním portem PC nebo použít jednočipový mikropočítač značky PIC, Atmel, nebo jiný. Já jsem zvolil Arduino [4], což je hotová deska plošných spojů obsahující Atmel Atmega 328 s bootloaderem na programování po sériové lince [5], konektory vstupně výstupních portů, převodník USB na sériovou linku a napájecí stabilizátor. Dále je k dispozici grafické uživatelské rozhraní s kompilátorem, které využívá silně zjednodušený jazyk C a obsahuje i mnoho příkladů programů. Obsahuje i knihovnu pro jednoduchou obsluhu servomotorů.
Obr. 7: Schéma zapojení desky Arduino
12
Obr. 8: deska Arduino – vlevo USB sériová linka, nahoře a dole konektory pro vstupy a výstupy
2.5. Řídící software pro použité mikrokontroléry Pro mikrokontroléry se používají různé programovací jazyky. Dělí se na nižší a vyšší, ale výsledek kompilace je vždy binární kód, sestávající z instrukcí daného mikrokontroléru. Nižší programovací jazyky představuje assembler, který je vlastně člověku srozumitelná náhrada binárních instrukcí a řeší i umístění dat v paměti a jejich zpracování. Každý procesor (resp. Jeho jádro) používá jiný soubor instrukcí a i procesory stejné řady se mezi sebou liší přidáním nebo absení určitých instrukcí např. pro práci s AD a DA převodníky, nebo pamětí. Příklad instrukce: "out
PORTB,r16"
zapíše
data
z
8-
bitového registru r16 na port B, což je 8 výstupních pinů. Programování v assembleru je velmi zdlouhavé, proto byly vytvořeny vyšší programovací jazyky, které pro často používané soubory instrukcí definují určitý příkaz, a pro často používané soubory příkazů je možné vytvořit funkce, a ty uložit do knihoven, které se poté dají do programu vložit - "include". Nejznámější, používané na mikrokontrolérech, jsou C a C++. Já jsem využil jazyk C, protože pro Arduino je nejpoužívanější. Zajímavý je v mikrokontroléru připravený bootlader. Ten při každém připojení napájení nebo resetu čeká na příkaz pro spuštění programování po sériové lince a když tento příkaz nedostane, tak předá řízení programu, který je již ve vnitřní paměti mikrokontroléru přítomen. Po zakoupení je v paměti jednoduchý program, který bliká vestavěnou LED diodou. Sériová linka je přímo na desce převedena na USB pomocí obvodu FT232RL [6], 13
nebo druhým mikrokontrolérem s USB portem a programem emulujícím převodník. Díky tomu je možné použít Arduino i na počítačích, které už nemají klasické sériové porty. Jediné, co je potřeba udělat po připojení k PC, je instalace driveru, který je součástí vývojového prostředí Arduino. Obrovská výhoda Arduina, a také důvod, proč jsem jej použil, je velice jednoduché vývojové prostředí (IDE – integrated development environment). Je ke stažení přímo na webových stránkách výrobce [4]. Používá programovací jazyk C, ale silně zjednodušený pomocí velké knihovny funkcí a upraveného tvaru programu. Nepoužívá se funkce main() jako u klasického C, ale dvojice funkcí setup() a loop(). Setup() po resetu nebo připojení napájení proběhne jen jednou a poté běží loop() v nekonečné smyčce. Při kompilaci se pak obě funkce sloučí do main() klasického C, přidají se knihovny, provede se kompilace do binárního kódu a ten se pošle po sériové lince do mikrokontroléru, kde bootloader provede jeho zápis do programové paměti.
Obr. 9: Vývojové prostředí Arduino
14
2.6. Řídící software na PC Zde je výběr programovacích jazyků mnohem větší. Používají se vyšší programovací jazyky, protože v assembleru se ručně programují již pouze části operačních systémů a ovladače pro hardware. Nejpoužívanější jsou opět C, C++, dále Visual Basic, Pascal, Java a Delphi. Zde jsem se rozhodoval mezi moderním jazykem Processing [7], a Visual Basicem. Processing je vlastně zjednodušená Java a jeho IDE má velice podobné ovládání, jako u Arduina, protože Arduino převzalo některé jeho prvky. Visual Basic je unikátní v tom, že narozdíl od jiných prog. jazyků je k dispozici plocha budoucího "okna", kam se přesunou grafické prvky a pak se jen napíší jejich obslužné funkce. Vybral jsem Visual Basic, protože jeho jednoduchý způsob tvorby grafických prvků je ideální pro tvorbu rozhraní na řízení manipulátoru. Jen se přetáhnou posuvníky, napíše obslužná funkce, posílající data na sériový port, která také využívá grafický prvek sériového portu. Přidávání dalších funkcí už pak ale není tak jednoduché a Visual Basic má mnoho omezení, např. je možné použít pouze prvních 128 znaků unicode, reprezentovaných 7bity. Pokud je potřeba využít čísel v rozsahu <0-255>, tak není možné je odeslat na sériový port jako jeden (binární) znak. Tento problém jsem ale vyřešil jiným způsobem odesílání informací (protokolem).
Obr. 10: Vývojové prostředí VisualBasic 6
15
3. Návrh, výroba a popis funkčních celků 3.1. Mechanika 3.1.1. Uchopovací mechanismus - kleština Výrobu mechaniky manipulátoru jsem začal úchopným mechanismem, protože ten je možné testovat jako celek s použitím jednoduchého servotesteru se
známým
integrovaným obvodem 555. tento servotester jsem použil pro testovaní všech servomotorů, protože jsem ještě neměl řídící systém s Arduinem. Věděl jsem, že stejnou uchopovací kleštinu, jako je na manipulátoru MERKUR [8], má v nabídce internetový obchod Snail Instruments [13]. Když jsem se ale podíval na cenu a skutečnost, že servomotory nejsou její součástí a navíc vyžaduje jiné, než jsem objednal, tak jsem se rozhodl, že si uchopovací mechanismus navrhnu a sestavím sám.
Obr. 11: Servotester – přímé řízení servomotoru
Obr. 12 kleština, použitá na manipulátoru MERKUR
Zvolil jsem stejný princip posuvných kleštin, ale protože jsem neměl vhodný kus plastu nebo kovu, po kterém by se kleštiny posouvaly, tak jsem sestrojil "rám" i kleštiny ze dřeva a vyzkoušel jsem jejich posun po čtvercovém ocelovém profilu 5x5 mm. To se ukázalo jako slepá ulička, protože i perfektně vyhlazené dřevo a kov se silně zadrhávaly a posun byl nemožný. Tak jsem popřemýšlel, že použiji kovová pouzdra nalisovaná do dřeva. Protože otvory pro hranaté vodící tyče je třeba pracně pilovat, tak jsem zvolil osy s kruhovým průřezem a vhodnou délkou z velké stavebnice MERKUR. Kruhový průřez má tu výhodu, že otvory pro něj není potřeba pracně pilovat, ale stačí je vyvrtat na stojanové vrtačce. Zbývalo najít vhodný materiál pro pouzdra, protože i na kruhových tyčkách by se dřevěné kleštiny neposouvaly volně. 16
Vzpoměl jsem si na to, že teleskopické antény rozhlasových přijímačů jsou tvořeny zvenku pochromovanými trubičkami z mosazi různých průměrů, a proto jsou po nařezání na žádanou délku velice vhodné jako lineární i otočné kluzné ložisko. Zjistil jsem, že jedna část antény má vnitřní průměr 4 mm přesně pasující na použité tyčky a umožňuje volný posuv. Proto jsem zvětšil otvory na kleštinách na průměr 4,5 mm a nalisoval do nich pouzdra mírně přesahující použitý materiál (15 mm, 20 mm). Dále jsem na kleštiny nalepil 6 mm silné pryžové plochy, aby uchopený předmět nevyklouzával. Poté jsem nainstaloval servomotor s nejdelší přibalenou páčkou. Její konce jsem mechanicky propojil s kleštinami pomocí ocelové struny d = 1 mm, tvořící oblouky o průměru 3 cm. Později jsem zjistil, že pružnost těchto oblouků způsobuje vyklouznutí težších předmětů i fixy při "malování pomocí manipulátoru", tak jsem je nahradil přímým propojením (Obr. 14).
Obr. 13, 14, 15: Kleština před úpravou a po úpravě délky struny
Tento mechanismus se velmi osvědčil na dvou dnech otevřených dveří a jeho jediná chyba byla výše zmíněná pružnost propojovacích strun (Obr. 13). Také svými parametry překonává výše zmíněnou stavebnicovou kleštinu. Tyto parametry jsou: •
Nosnost – 500 gramů zaručená (maximální s rizikem stržení převodů servomotoru vodorovné osy, který je bez vnějších přídavných převodů, až 1000 gramů!) oproti prodávané,u které jsem nosnost odhadl na 200 gramů.
•
Přítlačná síla z důvodu použití silnějšího servomotoru. Bohužel jsem jí nemohl změřit, protože nemám siloměr a manipulátor MERKUR není funkční. V důsledku vyšší přítlačné síly je i vyšší nosnost, protože držený předmět nevyklouzne.
•
Maximální otevření čelistí – 57 mm oproti 33 mm, což umožňuje uchopit mnohem větší objekty.
17
Součástí uchopovací sestavy je i servomotor pro otáčení kleštinou podle podélné osy. Tento je přímo slepený se servomotorem kleštiny. Zvyšuje možnosti uchopení předmětu tím, že umožňuje natočit kleštinu do svislé polohy a tím uchopit i např. vodorovně ležící trubku, otáčet šrouby, knoflíky potenciometrů, šroubovat uzávěry lahví a mnoho dalších možností. Tento servomotor je při souosém uchopení předmětu nezatížen, co se týče jeho pohonu a převodů, ale je zatížena pouze jeho osa na ohyb. Pevnost této osy je první omezení pro nosnost tohoto manipulátoru. Dále při uchycení težšího předmětu (nad 300 gramů) mimo jeho těžiště hrozí stržení převodů.
Obr. 16: Otáčení podle podélné osy a první servomotor otáčení podle vodorovné příčné osy (bez převodů)
3.1.2. Klouby s vodorovnou osou otáčení Servomotor kloubu, který je umístěn nejblíže uchopovacímu mechanismu a nemá přídavné převody, je nejzatíženější na celém manipulátoru, protože musí vydržet moment, tvořený vzdáleností kleštiny od jeho osy, a její hmotností sečtenou s hmotností uchopeného předmětu. Při hmotnosti předmětu 400 gramů a vzdálenosti jeho těžiště od vodorovné osy kloubu 60 mm je již servomotor na hranici přetížení a není bezpečné s ním otáčet nahoru. Pro uchopení težších předmětu je proto nutné otočit kleštinu svisle dolů, aby težiště předmětu a kleštiny bylo pod osou kloubu a nebyly zatížené převody servomotoru. Zároveň se změní zatížení podélné osy z ohybu na tah, při němž vydrží větší sílu (hmotnost). Jedině tak je možné přesunout předměty těžší, než 500 gramů bez poškození manipulátoru. Tyto poznatky byly prakticky vyzkoušeny, ale paradoxně jediný poškozený servomotor byl ten, který ovládá kleštinu, a to při kalibraci proudové zpětné vazby (popsána níže). Byly vyměněny převody z jiného servomotoru. 18
Další dva klouby už mají externí převody, protože díky vzdálenosti od kleštiny již vzniká příliš velký moment, a ten by plastové převody nevydržely. Při následujících výpočtech pro jednoduchost použiji [kg/1 cm], což je jednotka, kterou používají výrobci modelářských servomotorů. Přepočet je 10 kg/1 cm = 1 Nm. Moment je výsledek násobení působící síly a její vzdálenosti od osy otáčení: M = r * F, takže na prostředním kloubu vzniká při hmotnosti předmětu 500 gramů a vzdálenosti od osy 21 cm moment 21 * 0,5 = 10,5 kg/1 cm, a na 3. kloubu od kleštiny dokonce 36 * 0,5 = 18 kg/1 cm, což silně překračuje možnosti použitých servomotorů. Proto jsem musel vymyslet způsob, jak při daných parametrech zvládnout tak silné momenty. Použití více servomotorů na jednu osu je neproveditelné, protože by to vyžadovalo použít 3 na prostřední kloub a na 3. kloub dokonce 6 kusů, a to je velmi neekonomické a nepraktické. Proto jsem se rozhodl použít přídavné externí převody. S tím také souvisí problém zpětnovazebního potenciometru – servomotor by se otočil o maximálních 180°, ale výstupní hřídel o mnohem menší úhel, závisející na převodu. Proto je nutné zpětnovazební potenciometr buď vyřadit a nebo jej umístit na poslední osu přídavného převodu, která je pevně vyvedená na součást manipulátoru. Využil jsem druhou možnost, protože bez zpětné vazby není možné řídit přesnou polohu. Vznikl tak servomotor s externím potenciometrem. Realizace je jednoduchá: 1. Rozebereme servomotor a vytáhneme elektroniku a potenciometr. 2. Potenciometr umístíme na delší tří-žilový kabel a sestavíme servomotor. 3. Osu potenciometru propojíme s poslední hřídelí nebo souose s otočnou částí (vzhledem k servomotoru), a jeho skříň s částí, na které je umístěn servomotor. 4. Pokud servomotor reaguje obráceně s následným opřením o doraz, zaměníme krajní vývody potenciometru.
Obr. 17, 18: Druhý převod od kleštiny (1:7) a 3. převod (1:10)
19
Převody (velká ozubená kola) jsem použil kovové z velké stavebnice MERKUR. Mají 85 a 119 zubů. Koupil jsem sice plastové, ale ty by dané zatížení nevydržely a strhly by se. Malá ozubená kola jsou recyklována z převodů starého měřícího zapisovače, a připevněná k výstupním hřídelím servomotorů pomocí dodávaných tácků a šroubů. Mají obě 12 zubů (podobných parametrů, jako zuby MERKUR) na části, použité pro převod. Zde byla také znovu použita technologie ložisek z teleskopických antén, která se osvědčila a budu jí používat i v dalších projektech, kde má být osa uchycena ve dřevě. Zde se ukázalo, že externí převody mají kromě zvýšení nosnosti ještě jeden podstatný efekt – zpomalily úhlovou rychlost otáčení ramene manipulátoru, která by při přímém náhonu byla příliš vysoká, způsobila by neovladatelnost manipulátoru, a jen setrvačnost ramene by sama o sobě při zastavení okamžitě strhla převody servomotorů. Také jsem použil předpínací pružinu, která částečně vyrovnává moment, působící na 3. kloub s vodorovnou osou, když manipulátor zvedá těžký předmět, což výrazně odlehčilo jeho převody a motor, snížilo proudový odběr a mírně zvýšilo úhlovou rychlost. 3.1.3. Otočná základna Zde již působí tak velké ohybové momenty, že jsem musel použít jiný materiál, než dřevo. Zde opět přišel vhod MERKUR, z něhož jsem použil 3 plochy, 2 trojúhelníky a pár dalších dílů. Velký problém pro mě bylo přijít na způsob, jak pevně uchytit spodní část manipulátoru a zároveň získat takový převod, aby se manipulátor netočil moc rychle, což by opět mohlo způsobit neovladatelnost a v krajním případě stržení převodů v servomotoru. Použít klasickou hřídel jsem nemohl, protože by se ohnula, a tak jsem využil vrak vojenského přijímače R4, ve kterém je velký ozubený talíř, který má ve středu kuličkové ložisko. Toto jsem vyčistil od zaschlé vazelíny, posbíral poztrácené kuličky, znovu namazal a s výhodou využil pro konstrukci otočné základny manipulátoru. Po ozubeném talíři se odvaluje ozubené kolo, které je opět umístěno na plastovém disku z příslušenství servomotoru. Má 40 zubů. Talíř má 280 zubů, což tvoří převod 1:7, který je vyhovující jak v případě úhlové rychlosti, tak i odolnosti proti rázům. Použitý servomotor je opět s úpravou na externí potenciometr, který je připojen na pevnou osu uprostřed ozubeného talíře. Talíř je umístěn na hliníkové desce, která byla původně zamýšlena na umístění na pásový podvozek, ale nakonec byla pomocí 3 distančních podložek namontována na dřevěnou desku, na které je připevněn i zdroj a řídící elektronika.
20
Obr. 19, 20, 21: detail otočné základny a celkové pohledy na manipulátor
•
Použité hoblované dřevěné profily (mm): 60x10, 15x15, 10x30, 15x30
•
Použité šrouby: M3x20, M3x10, M4x5 (zkrácené)
•
Dřevěná deska (280x250x20 mm) má gumové podložky proti klouzání. 3.1.4. Názorné ovládací zařízení Proč „Názorné ovládací zařízení, NOZ“? Protože pro anglický výraz „Haptic control“
[11] jsem nenašel v češtině žádný použitelný překlad. Názorný příklad reakce ukazuje, co se stane s manipulátorem, když pohneme určitou částí ovládacího zařízení. To je vlastně zmenšeným modelem manipulátoru, kde každý jeho servomotor představuje jeden potenciometr ovládacího zařízení, který jej pomocí sériových linek a počítače řídí. Pokud například otočíme základnu ovládacího zařízení do krajní polohy, přesune se do krajní polohy i manipulátor. Ovládací zařízení je umístěno na dřevěné krabičce, obsahující řídící elektroniku a transformátor, který slouží pouze jako zátěž. Krabička je vybavena gumovými podložkami, aby neklouzala.
Obr. 22, 23: Názorné ovládací zařízení a praktická ukázka ovládání s jeho pomocí
21
3.2. Elektronika 3.2.1. Názorné ovládací zařízení NOZ využívá analogových vstupů Arduina, ale protože těchto vstupů je jen 5, a my potřebujeme 6, tak jsem musel použít integrované obvody, které dokáží přepínat 2 analogové signály na jeden vstup. K tomu se výborně hodí CMOS spínače nebo přepínače, které jsou na rozdíl od relé mnohem rychlejší a nemají kontakty, které se mohou časem poškodit. I jejich velikost je oproti relé zanedbatelná.
Obr. 24: Schéma přídavné desky plošných spojů pro NOZ
Zvolil jsem dva CD4066BE [9], které přepínám pomocí digitálních výstupů Arduina číslo 2 a 3. V činnosti je vždy jen jeden CMOS spínač, který propojuje své 4 vstupy na analogové vstupní piny Arduina. Arduino obsahuje 5-kanálový AD převodník, který postupně načte napětí, odpovídající hodnotě natočení každého z šesti potenciometrů – nejdříve první 4, pak zbylé 2. Tyto analogové CMOS spínače jsou umístěny na univerzálním plošném spoji, který je s Arduinem propojen pomocí pinové lišty. Celá sestava se napájí z USB portu.
22
3.2.2. Manipulátor Elektronika manipulátoru je také velice jednoduchá, kromě připojení do druhého Arduina obsahuje pouze operační zesilovače pro měření proudu na bočnících v záporné větvi napájení servomotorů, dále ochranné rezistory na řídících výstupech, filtrační kondenzátory, a ochrannou diodu proti přepólování zdroje. Je osazena na broušeném plošném spoji, který sice nevyniká co se týče vzhledu, ale je velice jednoduše modifikovatelný, což je výhodná vlastnost pro postupný vývoj a úpravy jednotlivých funkčních celků. Napájecí zdroj pro servomotory má výstupy na 5 V, 3 A, a 12V, 0,5 A ze vstupního napětí 100 až 240 V střídavých. Deska obsahuje relé pro sepnutí napájení do servomotorů, ovládané z Arduina přes posilovací tranzistor. Zpětná dioda není zakreslena.
Obr. 25: Schéma přídavné desky plošných spojů pro manipulátor
23
Bočník pro měření proudového odběru servomotorů kloubů tvoří 1,5 cm dlouhý trojitý odporový drát původem z fénu, zapojený v záporné větvi napájení s odporem o hodnotě 200 mΩ a pro měření odběru servomotoru kleštiny je bočník tvořen samotným přívodním vodičem, který je u servomotoru rozdělen na – pól do zdroje a snímací vodič do operačního zesilovače (OZ). Zesílení napětí na bočnících zajišťují dva OZ LM324 s regulací zesílení pomocí potenciometrických trimrů. Tyto trimry se nastaví tak, aby ani při maximálním odběru nebyly OZ přebuzené, poté se odebíraný proud změří multimetrem v + větvi napájení servomotorů, a nastaví se násobící konstanta uvnitř řídícího software na PC, aby se zobrazoval stejný proud, jako na multimetru. Tím je nastavení hotové. OZ se přebudí, když jejich výstupní napětí je větší, než napájecí po odečtení 2 V, tj 3V v případě napájení 5 V. Bližší informace jsou v katalogovém listu LM324 [10]. Obvod měření proudového odběru byl navržen a vyzkoušen v simulátoru Falstad Circuit simulator [12], který pro toto použití plně dostačuje a je možné tak provést mnohem rychlejší návrh, než při zdlouhavém matematickém výpočtu hodnot součástek, a navíc je možné hodnoty v reálném čase upravovat s okamžitým zobrazením následků této změny. V tomto postupu vidím budoucnost elektrotechniky a jak jsem zjistil na jedné krátkodobé brigádě v oboru slaboproudé elektrotechniky, v praxi se již dávno neprovádí ruční výpočet, ale celý obvod se nasimuluje.
Obr. 26: Simulátor Falstad – obvod pro měření proudového odběru.
24
3.3. Software 3.3.1. Software názorného ovládacího zařízení Program po spuštění přepne vývody 2 a 3 Arduina jako výstupní, spustí sériovou linku na 115200 kbit/s a periodicky přepíná CMOS spínače, načítá data AD převodníkem, převede je z rozsahu <0-1024> na <0-180> a ukládá je do pole hodnot, které následně odešle na sériový port. Tvar dat je v podobě osmi znaků, kde každý znak představuje binární číslo ( rozsah <0-255>), které mapuje daný potenciometr.
Obr. 27: vývojový diagram programu Arduina pro názorné ovládací zařízení
3.3.2. Manipulátor Arduino, obsluhující manipulátor, obsahuje software, který zajišťuje průměrování dat z analogově-digitálních převodníků snímajících proudové odběry, jejich posílání do nadřazeného software na PC, dále provádí příjem příkazů, jejich rozřazení „přepínací“ funkcí (switch) a jejich provedení. Funkce pro samostatný režim (bez PC podle vnitřní EEPROM Arduina) v době psaní není hotová, ale do obhajoby závěrečné práce bude dokončena. Tvar příkazů je „-123a“. Pomlčka je spouštěcí znak, následuje jí 3-ciferná hodnota a dále znak volby, podle kterého se určí žádaná činnost nebo číslo servomotoru.
25
Obr. 28: vývojový diagram programu Arduina pro manipulátor
3.3.3. PC Program v PC Je již poněkud složitější. Musí zjistit, jestli je požadováno externí řízení pomocí NOZ nebo řízení pomocí posuvníků a proto buď načíst data ze sériového portu nebo z posuvníků grafického uživatelského rozhraní (GUI). Pokud je spuštěno externí řízení, nastaví posuvníky podle přijatých dat, pokud ne, nastaví data podle posuvníků. Dále zajišťuje buď přímé ovládání kleštiny nebo regulaci svírací síly podle proudového odběru jejího servomotoru. Ten je načten na začátku periodicky prováděných funkcí pro zpracování přijatých hodnot.
26
Obr. 29: vývojový diagram programu v PC na řízení manipulátoru
Program dále obsahuje krátké funkce pro obsluhu tlačítek jako vypnout/zapnout relé napájení servomotorů, zastavení odesílání dat a hlavně volbu použitých virtuálních sériových portů, protože jejich index (číslo) je na každém počítači jiný. Příkazy pro manipulátor jsou: -000x vypne relé, -001x zapne relé, -???a až f nastaví servomotor 1-6 do polohy ??? (přijatá 3-znaková hodnota) v rozsahu<0-180>. Tyto příkazy je možné posílat ručně programem hyperterminál, který je součástí Windows po nastavení sériové linky na rychlost 115200 kbit/s, bez parity, s jedním stop bitem, což jsem využil, když jsem ještě neměl hotový software pro PC. 27
4. Měření Měření probíhalo pomocí digitálního multimetru DT9205A (rozsah 20 A) na + přívodu k servomotoru kleštiny a následně i zbytku manipulátoru, a zároveň i pomocí vestavěného měřícího systému s kalibrační konstantou nastavenou na 1. Po změření maximálního proudu byly nastaveny potenciometrické trimry řízení zesílení operačních zesilovačů, aby tyto nebyly přebuzeny. Dále byl porovnán proud zobrazený multimetrem se zobrazením v řídícím software na PC a kalibrační konstanta nastavena pomocí vývojového prostředí Visual Basic tak, aby byly zobrazené hodnoty stejné v obou případech – na multimetru i v řídícím software. •
Proud, odebíraný servomotorem kleštiny naprázdno je 3 mA +- 0,5 mA a při maximálním momentu je 760 mA +- 20 mA (odběr byl nestabilní).
•
Proud ostatními servomotory při maximálním zatížení manipulátoru (vodorovná poloha ramene, tj. největší vzdálenost první vodorovné osy manipulátoru od uchopeného předmětu) při předmětu o hmotnosti 500 gramů (PET lahev 0,5 l vody) je 1500 mA +- 100 mA (odběr byl také velmi nestabilní) a naprázdno (svislá poloha se všemi částmi v ose, se servomotory téměř bez zatížení) byl 210 mA +- 20 mA.
Obr. 30, 31: měření proudového odběru při maximálním zatížení
28
Obr. 32: měření při minimálním zatížení
5. Využití manipulátoru Skutečné manipulátory tohoto druhu se používají v automobilovém průmyslu na přemisťování těžkých součástek a hlavně na bodové svařování karosérií a jiných výrobků, sestávajících z plechů a různých lisovaných profilů. Také se používají pro vyměňování polovodičových waferů (disk s budoucími čipy integrovaných obvodů) na měřící pozice tam, kde není možné provést daný úkon člověkem ať už z důvodů nedostatečné přesnosti a rychlosti lidí nebo požadavku na absolutní bezprašnost. Zde prezentovaný model manipulátoru je možné využít jako učební pomůcku při výuce automatizace a robotiky nebo programování PC a mikrokontrolérů. Protože jsem konstruoval manipulátor za své náklady a tudíž si ho nechávám, tak jej mohu využít na pásovém podvozku jako průzkumný dálkově nebo automaticky řízený systém, prodat jej, vyměnit za jinou technickou zajímavost nebo v nejhorším případě využít jeho jednotlivé díly na konstrukci dalších projektů. 29
6. Závěr Navrhl, zhotovil a oživil jsem manipulátor o šesti stupních volnosti, a následně jej důkladně otestoval na dvou školních dnech otevřených dveří. K manipulátoru jsem zhotovil řídící software, jehož zobrazení uživatelského rozhraní i výpis programu PC i manipulátoru jsou obsaženy v příloze. Dále jsem zhotovil názorné ovládací zařízení pro jednodušší, přesnější a rychlejší řízení manipulátoru, jehož výpis programu je také součástí přílohy. Manipulátor mé konstrukce překonává stavebnici MERKUR ve všech zmíněných technických parametrech. Má vyšší nosnost, větší vzdálenost otevřených kleštin, proudovou zpětnou vazbu, nižší spotřebu elektrické energie - 1,5 A při 5 V oproti 8 A při stejném napětí, a hlavně menší náklady za materiál – ty nepřesahují 2500 Kč s DPH oproti 7128 Kč s DPH za stavebnici MERKUR. Jediný kritický problém, který se vyskytl při provozu manipulátoru, byly stržené převody servomotoru kleštiny, když jsem kalibroval proudovou zpětnou vazbu. Rozevíral jsem totiž kleštinu prsty a použil jsem moc velkou sílu a na posledním ozubeném kole servomotoru, na kterém je výstupní hřídel, jsem strhl jeden zub, o který následně převod při pohybu přeskakoval. Problém byl vyřešen výměnou ozubeného kola z náhradního servomotoru. Tato práce pro mě byla velmi přínosná, protože jsem si prakticky ověřil činnost manipulátoru a navíc zlepšil své dovednosti při zpracování materiálu a konstrukci mechanických celků, elektronických obvodů a znalosti programovacích jazyků C a Visual Basic. Tyto znalosti využiji při hledání zaměstnání, dalším studiu i ve svém volném čase.
30
7. Použitá literatura [1] HobbyKing (Čínský internetový obchod s modelářskými potřebami) Dostupný na World Wide Web: http://www.hobbyking.com [2] PayPal (bezhotovostní platby přes internet) Dostupný na World Wide Web: http://paypal.com [3] HobbyKing HK15138 Standard Analog Servo Dostupný na World Wide Web: http://www.hobbyking.com/hobbyking/store/uh_viewI tem.asp?idProduct=16269 [4] Arduino (vývojová deska a programovací prostředí) Dostupný na World Wide Web: http://www.arduino.cc [5] Atmel (mikrokontrolér atmega328 na desce Arduino) Dostupný na World Wide Web: http://www.atmel.com/Images/doc8161.pdf [6] FTDI (FT232RL, převodník sériové linky na USB) Dostupný na World Wide Web: http://www.ftdichip.com/Support/Documents/DataSh eets/ICs/DS_FT232R.pdf [7] Processing (moderní programovací jazyk a vývojové prostředí) Dostupný na World Wide Web: http://processing.org/ [8] MERKUR (robotická ruka - manipulátor) Dostupný na World Wide Web: http://www.merkurtoys.cz/vyrobky/roboticka-rukabeta[1] [9] TI 4066 (použitý analogový CMOS spínač) Dostupný na World Wide Web: http://www.ti.com/lit/ds/symlink/cd4066b.pdf [10] TI LM324 (použitý čtyřnásobný operační zesilovač) Dostupný na World Wide Web: http://www.ti.com/general/docs/lit/getliterature.tsp? genericPartNumber=lm124-n®=en&fileType=pdf [11] Societyofrobots (popis manipulátorů a návod na stavbu) Dostupný na World Wide Web: http://www.societyofrobots.com/robot_arm_tutorial.s html [12] Falstad Circuit Simulator (jednoduchý simulátor elektronických obvodů) Dostupný na World Wide Web: http://www.falstad.com/circuit/ [13] SnailInstruments (Český internetový obchod se specializací na robotiku) Dostupný na World Wide Web: http://www.snailinstruments.com/
31
8. Přílohy – úplné výpisy programů 8.1. Software názorného ovládacího zařízení /* Modelove ovladani manipulatoru 8x prepinany analogovy vstup, 1x neprepinany */ byte blok[8]; // blok hodnot na poslani do PC void setup() { // Pin 2 a 3 se nastavi na vystup pro prepinani CMOS spinacu pinMode(2, OUTPUT); pinMode(3, OUTPUT); // spusti seriovy port. Serial.begin(115200); } void loop() { // nastavi promenne a zabere pamet pro pole memset(blok, '\0', 8); byte inByte = '\0'; int i; // nacte pole blok[8] = map(analogRead(A4), 0, 1023, 0, 255); // nemultiplexovaný vstup digitalWrite(2, LOW); // přepnutí 4 vstupů digitalWrite(3, HIGH); analogRead(A0); // necha sednout pomaly multiplexer blok[0] = map(analogRead(A0), 0, 1023, 255, 0); // převod hodnoty z AD na bajt analogRead(A1); // necha sednout pomaly multiplexer blok[2] = map(analogRead(A1), 0, 1023, 0, 255); analogRead(A2); // necha sednout pomaly multiplexer blok[4] = map(analogRead(A2), 0, 1023, 0, 255); analogRead(A3); // necha sednout pomaly multiplexer blok[6] = map(analogRead(A3), 0, 1023, 0, 255); digitalWrite(3, LOW); digitalWrite(2, HIGH); analogRead(A0); // necha sednout pomaly multiplexer blok[1] = map(analogRead(A0), 0, 1023, 0, 255); analogRead(A1); // necha sednout pomaly multiplexer blok[3] = map(analogRead(A1), 0, 1023, 0, 255); analogRead(A2); // necha sednout pomaly multiplexer blok[5] = map(analogRead(A2), 0, 1023, 0, 255); analogRead(A3); // necha sednout pomaly multiplexer blok[7] = map(analogRead(A3), 0, 1023, 0, 255); for (i = 0; i < 8; i = i + 1) { // kalibrace rozsahu potenciometrů na rozsah serv if (blok[i] > 217) blok[i] = 217; if (blok[i] < 37) blok[i] = 37; blok[i] = blok[i] - 36; }
if (Serial.available() > 0) { inByte = Serial.read(); if(inByte == '-') { // ceka na spousteci znak // pošle obsah pole na seriovy port for (i = 0; i < 8; i = i + 1) { Serial.write(blok[i]); // diagnostika - člověkem čitelný formát //Serial.print(blok[i]); //Serial.println(' '); } } } }
32
8.2. Software manipulátoru /* Roboticka ruka, neboli manipulator 6x servo, mereni proudu do chnapadla + celkove a 1x rele na vypnuti napajeni serv */ #include <Servo.h> #include <EEPROM.h> const int numReadings = 10; int readings0[numReadings]; int readings1[numReadings]; int index = 0; int total0 = 0; int total1 = 0; int average0 = 0; int average1 = 0; const byte bufSize = 4; char input[bufSize]; char inByte = 0; int servoIn = 90; int servoindex = 0; int nastavproud = 0; Servo servomot[6]; byte writebuffer[7]; void setup() { // Pin 12 a 13 se nastavi na vystup pinMode(13, OUTPUT); pinMode(12, OUTPUT); // spusti seriovy prijem. Serial.begin(115200); for (int i=0; i < 6; i++) { // připojí serva na piny 2-7 servomot[i].attach(i+2); } // vynuluje pole hodnot for (int thisReading = 0; thisReading < numReadings; thisReading++) readings0[thisReading] = 0; for (int thisReading = 0; thisReading < numReadings; thisReading++) readings1[thisReading] = 0; } void loop() { // prumeruje data z analogovych vstupu total0= total0 - readings0[index]; analogRead(A0); // prazdne cteni, aby si pomaly ADC multiplexer sednul readings0[index] = analogRead(A0); total0= total0 + readings0[index]; total1= total1 - readings1[index]; analogRead(A1); readings1[index] = analogRead(A1); total1= total1 + readings1[index]; index = index + 1; if (index >= numReadings) index = 0; average0 = total0 / numReadings; average1 = total1 / numReadings; // prijme pole znaku o velikosti bufSize if (Serial.available() > 0) { inByte = Serial.read(); if(inByte == '-') { // ceka na spousteci znak while(Serial.available() < bufSize) { // prijem ze seriaku ; } for (int i=0; i < bufSize; i++) { input[i] = Serial.read(); // vytazeni znaku z bufferu do pole } servoIn = atoi(input); // vytazeni hodnoty otoceni serva if (input[3] >='a' && input[3] <='f') { // pokud je 4. znak a-f
33
if (servoIn < 1) servoIn = 90; // pokud prijme nejakou blbost, nastavi stredni polohu if (servoIn > 181) servoIn = 90; servoIn = servoIn - 1; servoindex = int(input[3])-97; // odečte ascii hodnotu znaku, aby a bylo 0 servomot[servoindex].write(servoIn); // nastavi servo writebuffer[servoindex]=byte(servoIn); } switch (input[3]) { // pokud prijme za cislem znak, provede odpovidajici akci case 't': // zapíše zpoždění před provedením dalšího příkazu writebuffer[6]=byte(servoIn); break; case 'r': // práce s pamětí read servoIn=servoIn*8; for (int i=0; i < 7; i++) { Serial.print(EEPROM.read(servoIn + i)); Serial.print(", "); } Serial.println(); break; case 'w': // práce s pamětí write servoIn=servoIn*8; for (int i=0; i < 8; i++) { EEPROM.write(servoIn+i, writebuffer[i]); } break; case 'm': // práce s pamětí test servoIn=servoIn*8; for (int i=0; i < 6; i++) { servomot[i].write(int(EEPROM.read(servoIn + i))); } break; case 'x': switch (input[2]) { // zapnuti a vypnuti napajeni case '1': digitalWrite(12, HIGH); digitalWrite(13, HIGH); break; case '0': digitalWrite(12, LOW); digitalWrite(13, HIGH); break; default: digitalWrite(12, LOW); digitalWrite(13, LOW); break; } case 'y': Serial.println(average0+1); // posle aktualni proud break; case 'z': Serial.println(average1+1); break; default: break; } } } }
34
8.3. Software PC Dim i As Integer Dim inpole() As Byte Dim pole(5) As Integer Dim outnum As String Dim inproud As Integer Dim inproud2 As Integer Dim obsaheeprom As String Private Sub Command2_Click() ' nastaveni portu On Error Resume Next MSComm1.PortOpen = False MSComm1.CommPort = Text5.Text MSComm1.PortOpen = True End Sub Private Sub Command1_Click() ' nastaveni portu On Error Resume Next MSComm2.PortOpen = False MSComm2.CommPort = Text1.Text MSComm2.PortOpen = True End Sub Private Sub Command3_Click() MSComm1.Output = "-000x" MSComm1.Output = "-000x" ' pro jistotu Check1.Value = 0 Timer1.Enabled = False End Sub Private Sub dolu_Click() If memindex.Text > 0 Then memindex.Text = memindex.Text - 1 nacti_Click End Sub Private Sub form_load() ' po načtení programu On Error Resume Next MSComm1.CommPort = CInt(Text5.Text) ' nastaví číslo portu MSComm1.Settings = "115200,N,8,1" ' nastaví parametry přenosu MSComm1.PortOpen = True ' spustí obsluhu portu MSComm1.Output = "-nic" ' pošle data Text3.Text = MSComm1.Input & vbCrLf ' načte data Text3.Text = 0 MSComm2.CommPort = CInt(Text1.Text) MSComm2.Settings = "115200,N,8,1" MSComm2.PortOpen = True MSComm2.Output = "-nic" Text3.Text = MSComm1.Input & vbCrLf Text3.Text = 0 For i = 0 To 5 ' reset posuvníků po startu VScroll1(i).Value = 90 Next i nacti_Click End Sub Private Sub Check1_Click() ' vypnuti, zapnuti On Error Resume Next If Check1.Value = 1 Then MSComm1.Output = "-001x" MSComm1.Output = "-001x" ' pro jistotu Else MSComm1.Output = "-000x" MSComm1.Output = "-000x" ' pro jistotu End If End Sub Private Sub Form_Unload(Cancel As Integer) ' vypnuti programu odpoji serva od napajeni On Error Resume Next MSComm1.Output = "-000x" MSComm1.Output = "-000x" ' pro jistotu End End Sub
35
Private Sub Check4_Click() On Error Resume Next If Check4.Value = 1 Then Timer1.Enabled = True Else Timer1.Enabled = False End If End Sub Private Sub nacti_Click() Timer1.Enabled = False Check1.Value = 0 Check4.Value = 0 MSComm1.InBufferCount = 0 outnum = "" If memindex.Text < 100 Then outnum = "0" & memindex.Text ' přidá nuly (znaky) před jednotky a desítky If memindex.Text < 10 Then outnum = "00" & memindex.Text ' aby byly na pevných pozicích If memindex.Text >= 100 Then outnum = memindex.Text MSComm1.Output = "-" & outnum & "r" ' požadavek k načtení For i = 0 To 20 ' udržení spojení a zpomalení běhu, jinak načte hlouposti MSComm1.Output = "-0000" Next i memobs.Text = MSComm1.Input ' načte hodnotu z EEPROM do text pole End Sub Private Sub nahoru_Click() If memindex.Text < 127 Then memindex.Text = memindex.Text + 1 nacti_Click End Sub Private Sub testm_Click() Timer1.Enabled = False Check1.Value = 0 Check4.Value = 0 MSComm1.Output = "-001x" If memindex.Text < 100 Then outnum = "0" & memindex.Text ' přidá nuly (znaky) před jednotky a desítky If memindex.Text < 10 Then outnum = "00" & memindex.Text ' aby byly na pevných pozicích If memindex.Text >= 100 Then outnum = memindex.Text MSComm1.Output = "-" & outnum & "m" ' test nastavení EEPROM End Sub Private Sub Timer1_Timer() On Error Resume Next ' zpoždění zpozdtext = zpozdScroll.Value outnum = "" If zpozdScroll.Value < 100 Then outnum = "0" & zpozdScroll.Value ' přidá nuly (znaky) před jednotky a desítky If zpozdScroll.Value < 10 Then outnum = "00" & zpozdScroll.Value ' aby byly na pevných pozicích If zpozdScroll.Value >= 100 Then outnum = zpozdScroll.Value outnum = "-" & outnum & "t" ' zpoždění mezi příkazy pro automatiku MSComm1.Output = outnum ' odešle data ' proud chapadla MSComm1.InBufferCount = 0 ' reset bufferu inproud2 = Math.Round(Val(MSComm1.Input) * 1.25, 0) ' načte zbytky z bufferu MSComm1.Output = "-000y" ' požadavek k načtení For i = 0 To 10 ' udržení spojení a zpomalení běhu, jinak načte hlouposti MSComm1.Output = "-0000" Next i inproud2 = Math.Round(Val(MSComm1.Input) * 1.25, 0) ' proud 1A = 80mV = 2,5V za operakem = 512 dilku ADC pri aktualnim nastaveni potaku If inproud2 > 0 And inproud2 < 800 Then Text3.Text = inproud2 - 1 & " mA" ' ořízne hlouposti a přidá jednotky ' proud cele ruky bez chapadla inproud = Math.Round(Val(MSComm1.Input) * 3.1, 0) ' načte zbytky z bufferu MSComm1.Output = "-000z" ' požadavek k načtení For i = 0 To 10 ' udržení spojení a zpomalení běhu, jinak načte hlouposti MSComm1.Output = "-0000" Next i inproud = Math.Round(Val(MSComm1.Input) * 3.1, 0) ' proud chapadla - 230mV na dratu je 750mA proud servem a 600 dilku ADC pri aktualnim nastaveni potaku If inproud > 0 And inproud < 3000 Then Text4.Text = inproud - 1 & " mA" ' ořízne hlouposti a přidá jednotky ' externi rizeni pomoci modelu s potenciometry, to uz pouziva novy protokol (binarni)
36
If Check3.Value = 1 Then ' když je zapnuté ext. ovládání MSComm2.Output = "-" ' prikaz k poslani dat inpole = StrConv(MSComm2.Input, vbFromUnicode) 'přijme data z ext. ovládání For i = 0 To 5 VScroll1(i).Value = inpole(i) ' nastaví posuvníky podle přijatých dat pole(i) = inpole(i) Next i Else For i = 1 To 5 pole(i) = VScroll1(i).Value ' nastaví data podle posuvníků Next i End If ' zavola regulaci proudu na pole(0) Text6.Text = HScroll1.Value If Check2.Value = 1 Then Call pritlak Else pole(0) = VScroll1(0).Value End If For i = 0 To 5 ' pošle data pro 5 serv outnum = "" If pole(i) < 100 Then outnum = "0" & pole(i) ' přidá nuly (znaky) před jednotky a desítky If pole(i) < 10 Then outnum = "00" & pole(i) ' aby byly na pevných pozicích If pole(i) >= 100 Then outnum = pole(i) outnum = "-" & outnum & Chr(i + 97) ' přidá řídící znak a písmeno serva MSComm1.Output = outnum ' odešle data Next i End Sub ' automaticka regulace polohy chapadla podle proudu servem Private Sub pritlak() If CInt(inproud2) < CInt(Text6.Text) - 5 Then pole(0) = pole(0) - 2 ' jemnoprisuv If CInt(inproud2) < CInt(Text6.Text) - 150 Then pole(0) = pole(0) - 10 ' pri velkém rozdílu rychloprísuv If CInt(inproud2) > CInt(Text6.Text) + 10 Then pole(0) = pole(0) + 2 ' jemnoodsuv If CInt(inproud2) > CInt(Text6.Text) + 100 Then pole(0) = pole(0) + 10 ' rychloodsuv If CInt(inproud2) < 5 Then pole(0) = pole(0) + 30 ' rychloodsuv pri nule nastaveneho proudu 'meze If pole(0) < 1 Then pole(0) = 1 If pole(0) > 181 Then pole(0) = 181 VScroll1(0).Value = pole(0) End Sub Private Sub zapsat_Click() If memindex.Text < 100 Then outnum = "0" & memindex.Text ' přidá nuly (znaky) před jednotky a desítky If memindex.Text < 10 Then outnum = "00" & memindex.Text ' aby byly na pevných pozicích If memindex.Text >= 100 Then outnum = memindex.Text MSComm1.Output = "-" & outnum & "w" ' požadavek k zapsání nacti_Click ' aktualizace End Sub
37