závěrečné práci.

Transkript

závěrečné práci.
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&reg=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

Podobné dokumenty

Programování jBotBrainu II v Javě a práce s moduly

Programování jBotBrainu II v Javě a práce s moduly Takovouto Java Virtual Machine s celou řadou funkcí pro práci s hardwarem má v sobě i jBotBrain II, a je tedy vhodný jak pro pokročilé programátory, tak i pro začátečníky v robotice a mikroprocesor...

Více

Návod k použití a instalaci

Návod k použití a instalaci Testovací (kontrolní) volání Pokud jsou na SIM kartě uložena čísla pod jmény TEST1 až TEST7, je na tato čísla automaticky jednou za nastavený počet dnů (přednastaveno 3 dny) zavoláno. Zařízení se c...

Více

111_TXT - Poznámkový blok

111_TXT - Poznámkový blok zátka výpustná ol.vany zátka kliky 10

Více

Arduino - řízení krokového motoru

Arduino - řízení krokového motoru Proto jsem se rozhodl občas zde zveřejnit nějaké mé zapojení a programy tak, abych s odstupem času měl kam sáhnout, super, ne? :)

Více

Stáhnout PDF

Stáhnout PDF nemohla Hladnovské laťky zúčastnit, protože je momentálně na pracovní stáži v Madridu, je Sabina Freundová, kterou jsem pro vás alespoň krátce vyzpovídala:

Více

Návod na obsluhu (30. května 2016 / 6,71 MB)

Návod na obsluhu (30. května 2016 / 6,71 MB) Opacimeter AT 605 LCS 2400 od verze software – 2.00 CZ (instalace z USB DISKU)

Více

acta cdl.qxd

acta cdl.qxd Josefské mapování bylo prvním soustavným vojenským mapováním habsburských zemí. Charakter celého mapového díla odpovídá jeho vojenskému využití. Prioritní byl pøedevším záznam objektù a jevù význam...

Více

Ako naprogramovať Arduino - mirobozik.sk

Ako naprogramovať Arduino - mirobozik.sk fungovať samostatne alebo môže byť ovládaný nejakou aplikáciou z vášho počítača, smartfónu alebo tabletu. Pri jednoduchých projektoch, nie je nutné dokonca ani spájkovanie.

Více

Diplomová práce - Jiří Hobza 200 - Katedra optiky

Diplomová práce - Jiří Hobza 200 - Katedra optiky dosáhli značné variability výsledné konstrukce. Pouhou změnou programu MCU lze čítači impulsů přidat další funkce nebo z něj výměnou vstupních obvodů učinit zcela jiné zařízení! Proto je také větši...

Více