Hlavní navigace

Automat na výměnu kazet ve streameru

28. 6. 2011 11:59 (aktualizováno) | Josef Pavlík

Jsou dva druhy lidí: Jedni backupují a ti druzí zatím ještě nepřišli o data. Naše firma se řadí do té první kategorie. Do té druhé už bohužel pár let nepatříme. O data jsme již přišli. Naštěstí ne o moc.

S backupováním je ovšem jeden velký problém. Kapacita harddisků roste nade všechny rozumné meze a s ní i spousta mnohdy zbytečných dat na nich. Jenomže není v lidských silách rozhodnout co už smazat, co sice nechat, ale nebackupovat a co je ještě důležité. Takže je potřeba backupovat stále více a více dat. Naštěstí existují kazety, na které se vejde neuvěřitelných 72GB dat. Alespoň je to na nich napsáno. Ovšem pravda je taková, že se na takovou kazetu vejde jenom polovina = 36GB. Těch 72 by bylo, kdyby se data podařila zkompresovat na polovinu. Hmm, kdo z vás to viděl? Já tento způsob značení považuji za podvod, ale to je vedlejší. Ovšem v každém případě je to stále málo, v našem případě potřebujeme 16 kazet na regulární backupy a pár dalších pro extra backupy. Takže víceméně každý den začíná tím, že je potřeba vyměnit pásku ve streameru. Někdy i několikrát za den. Prostě backupovací program pošle mail a člověk aby se přetrhl. Už tady přestává být jasné kdo je tady pán a kdo je krám.

Nedávno jsem zprovoznil Reprap (kdo neví co to je, tak viz článek tady na rootu) a nastala otázka co zajímavého by se s jeho pomocí dalo vyrobit. Na vhodný nápad nebylo třeba dlouho čekat – automat na výměnu kazet ve streameru. Od nápadu k prvním náčrtkům vozíku, který dokáže vytáhout kazetu ze streameru a vložit ji do poličky, nebyla dlouhá cesta. Asi 10 minut :-). Člověk musí čas od času dělat něco jiného, aby přišel na jiné myšlenky. Takové nadšení do práce jsem už dlouho neměl. Doma sice tak nadšení nebyli, když jsem chodil z práce v devět večer a s nadšením jsem jim ukazoval nové ozubené kolečko do automatu. Ale pochopili mě :-). V sobotu večer, přesně 4 týdny od tohoto nápadu, byla premiéra http://www.youtu­be.com/watch?v=berFUos0MCM .

[caption id=„attachment42“ align=„aligncenter“ width=„300“ caption=„DATchanger, zatím ještě nezakrytovaný“]datchanger - boční pohled[/caption]

Jak to celé funguje:

Základem celého zařízení je vozík, který se pohybuje vertikálně. Tento vozík dokáže vzít kazetu ze streameru a vložit ji do poličky a samozřejmě naopak. Vlastní streamer je umístěn ve spodní části. V horní části je otočná skříňka na kazety. Vejde se do ní 4×12 kazet. Vozík je zvedán závitovou tyčí připojenou přímo na osu jednoho z motorů. Druhý motor otáčí přes 2 ozubená kola skříňkou s kazetami. Poslední motor je přímo na vozíku a ovládá jazyk, který dokáže vtáhnout kazetu dovnitř nebo ji naopak vystrčit z vozíku ven. V nejvyšším patře je umístěna elektronika. Celé zařízení je díky vnitřnímu USB hubu připojeno po jediném USB kabelu. Samozřejmě plus napájení. Všechno je zavřeno ve skříni z plexiskla, zepředu jsou dvířka.

Při požadavku na výměnu kazety vozík najede před streamer, vyplázne jazyk, popojede kousek výš aby háčkem na konci jazyka zachytil kazetu a vtáhne ji do sebe. Poté popojede dolů, aby se zavřela dvířka streameru. Poté otočí skříňku s kazetami příslušnou stranou dopředu a vyjede před příslušnou poličku. Vyjede s jazykem ven a tím částečně zasune kazetu do skříňky. Popojede dolů a vtáhne jazyk dovnitř. Háček, který je na konci jazyka teď kazetu nevytáhne, protože vozík popojel o pár milimetrů dolů. Nyní vozík popojede znovu nahoru, trochu výš než předtím a čelem háčku zasune kazetu až na doraz. Teď konečně vtáhne celý jazyk zpátky dovnitř, zkontroluje jeho pozici a pro jistotu znovu zasune kazetu až na doraz a zase se vrátí. To proto, aby byla jistota, že se kazeta kompletně zasunula. Nyní vozík sjede kompletně dolů a polovina operace – vytažení a uschování kazety – je za námi.

detail vozíku
detail vozíku

Pro vložení nové kazety je operace podobná. Skříňka se otočí čelem k Ivanovi :-), vozík najede před příslušnou kazetu, ale trošku níž. Vyplázne jazyk co to jde, popojede o pár milimetrů výš, aby se kazeta podzvedla a zatáhne jazyk kompletně dovnitř. Háček přitom zachytí kazetu a ta se vytáhne a schová ve vozíku. Vozík sjede dolů. Teď je ovšem potřeba otevřít dvířka streameru. Vozík tedy částečně vyplázne jazyk a vytlačí kazetu tak, že se přední částí opírá o streamer. Nyní pomalu vyjede nahoru až před jeho slot. Kazeta, jak tře o přední stěnu streameru, zachytí jeho dvířka a pohybem vzhůru je otevře. Teď už můžeme vypláznout jazyk trochu víc, aby se kazeta částečně vsunula dovnitř. Nemůžeme ji vsunout dovnitř úplně, protože háček, kterým jazyk končí, je pod kazetou. Takže se zajede jenom do pozice, kdy se háček skoro dotkne streameru. Teď vozík sjede o pár milimetrů a vtáhne jazyk dovnitř. Popojede o dvakrát pár milimetrů nahoru a začne velmi pomalu vyplazovat jazyk. Háček se teď opře o čelo kazety a pomalu ji zasunuje. Proč velmi pomalu? Protože kazeta jde dovnitř dost ztuha a na vyšší rychlosti by motor neměl dost síly ji utlačit a začal by ztrácet kroky. Dokud jede hodně pomalu, je silnější. V jistém okamžiku je již kazeta dostatečně hluboko a streamer si ji vezme. Jazyk se vtáhne znovu zpátky do vozíku a vozík sjede dolů. Tím se zavřou dvířka streameru a operace je hotova. Uff.

[caption id=„attachment63“ align=„aligncenter“ width=„300“ caption=„vozík zepředu“]vozík zepředu[/caption]

Realizace:

Projekt jsem se snažil udělat tak, aby se co největší počet součástek dal vytisknout na Reprapu. Mám v úmyslu dát k dispozici modely všech součástek, ale musím je nejdřív dát do publikovatelné podoby. Stejně jako schéma a firmware. Ze stejného důvodu jsem pro vývoj použil pouze open source nebo free programy.

Plastové díly:

Na modelování součástek jsem použil program OpenSCAD. Oproti jiným 3d modelovacím programům má jednu nespornou výhodu. Je jako stvořen pro programátory. Modely se skládají ze základních objektů jako krychle nebo válec a popisují programem. V programu je možno používat funkce, podmínky, cykly. Prostě kdo zná programovací jazyk C a má představu o geometrii, by neměl mít s tímto programem problémy. Jediný problém, na který jsem narazil byla instalace. Nakonec – je to ostuda – jsem musel nainstalovat woknousovou verzi a provozovat ji přes wine. Jinak nebyla šance. Knihovny neměly správnou verzi, nové verze knihoven byly v konfliktu se systémem. Prostě děs. Ale přes wine to jelo v pohodě.

Pro generování gcode pro tiskárnu – v podstatě renderování 3d objektu pro tisk, používám Replicatorg. Má sice strašnou spoustu konfigurovatelných parametrů, v nichž se skoro nedá vyznat, ale když se jednou podaří zkonfigurovat, tiskne dobře.

Nejsložitější je skříňka s poličkami. Ta je složena celkem ze 12ti částí, z nichž 8 je velmi dlouhých. Pár milimetrů chybělo, musel jsem upravit Reprap, aby to zvládnul. Těch 12 částí se tisklo přibližně 40 hodin. Naštěstí se u toho nemusí sedět, většinou se tisklo přes noc. Všechny části skříňky jsou pak slepeny a sešroubeny, dohromady tvoří otočnou skříňku pro 4 × 12, celkem 48 kazet.

[caption id=„attachment58“ align=„aligncenter“ width=„300“ caption=„lepeni skříňky na kazety“]lepeni skříňky na kazety[/caption]

Všechny plastové díly jsou z ABS (černá barva samozřejmě není podmínkou). Kolik materiálu nakonec bylo potřeba nevím, odhaduji to tak na půl kila. Celková doba tisku kolem 70ti hodin. Tady samozřejmě záleží na rychlosti tiskárny.

Ostatní materiál:

Kromě dílů, které se dají vytisknout, je potřeba pár závitových tyčí M8, hrst matic a podložek, přibližně metr hladké tyče průměr 8mm, pár odřezků dřevotřísky nebo tlusté překližky a přibližně 1m čtverečný plexiskla. Skříň by se samozřejmě dala udělat i z překližky, stálo by to polovinu, ale nebylo by to celé tak krásné :-).

Elektronika:

Elektronika je postavena na univerzální desce. Tvoří ji jeden PIC18F2553 nebo podobný. Tento PIC má i USB interface, ale jak už jsem psal výše, na desce je i MAX232 a zatím je všechno připojeno přes RS232 a interface USB to RS232. Motory jsou řízeny drivery L6218. Drivery jsou pak chlazeny malým vetráčkem, protože se přehřívaly. Sice by to neměly dělat, v jiném zařízení fungují i bez větráku, ale asi jim neudělalo dobře, jak jsem je připojil na 12V místo na 5, protože jsem si spletl dráty :-). Ale ještě fungují. Krokové motory jsou všechny typu 17PM se zubatou hřídelí, plastové součástky jsou pak na hřídele motorů nalisovány. Součástí elektroniky je i tranzistor, který vypne napájení driverů, takže ve stavu power off je napájený pouze PIC a MAX232, protože zařízení je stále zapnuto a elektrika je čím dál dražší.

Schema jsem nakreslil v Eagle, který je pro neprofesionální použití free. Plošný spoj jsem zatím nenavrhoval, ovšem Eagle, i ve free verzi, umožňuje i to.

[caption id=„attachment56“ align=„aligncenter“ width=„300“ caption=„pohled shora – elektronika a motory“]pohled shora - elektronika a motory[/caption]

Ostatní zařízení:

Samozřejmě streamer, pak USB hub a zdroj 12V4A (switching). Nic víc.

Firmware:

Firmware jsem chtěl napsat v C. Jaksi jsem zlenivěl, už se mi nechce psát v assembleru. Jelikož jsem chtěl udělat celý projekt kompletně s použitím open source, nemohl jsem použít kvalitní kompilátor MikroC, který jsem používal již dříve na jiné projekty. Po krátkém hledání jsem našel Cpik. Je součástí packetu PIKDEV – obsahuje IDE, kompilátor i programátor. Má sice několik omezení, například nemá konstrukce switch-case, ale jinak funguje celkem dobře.

Při psaní firmware jsem se setkal se zajímavým problémem – zrychlením. Doposud jsem všechny krokové motory ve všech zařízeních, které jsem dělal, pouštěl hned na plnou rychlost. Případně jsem prvních N kroků udělal na poloviční rychlosti a pak jsem přepnul přímo na plnou. Ale v tomto projektu jsem to už nechtěl udělat takhle prasácky. Inspiroval jsem se firmwarem reprapu a článkem http://www.embedded.com/co­lumns/technicalinsights/56800129?prin­table=true. V zásadě jde o to, že pro korektní výpočet času za který se má provést další krok motoru, je potřeba vypočítat 2 druhé odmocniny. Vzhledem k tomu, že nejvyšší rychlost motoru v tomto zařízení je 1800 kroků za sekundu, processor by musel spočítat druhou odmocninu za 270 mikrosekund, což absolutně nedokáže. Algoritmus inspirovaný výše uvedeným článkem vyžaduje pouze jedno 32bitové dělení a pak už jenom rotace a pár sčítání a odčítání. I tak jsem ovšem musel zvýšit rychlost processoru na 24MHz. Na 12MHz nestíhal.

Firmware přijímá commandy po seriálce (v budoucnu možná přímo po USB) a postupně je provádí. Commandů není moc, pouze pohyb jednoho z motorů jedním nebo druhým směrem, synchronizace pozice podle home sensoru, zjištění stavu (kazeta ve vozíku, dvířka streameru otevřena) a power on a off. Commandy pro motory mají celkem 3 parametry. Počet kroků, počáteční rychlost a konečnou rychlost. Čím menší je počáteční rychlost, tím je menší zrychlení a zpomalení.

[caption id=„attachment61“ align=„aligncenter“ width=„300“ caption=„hotový DATchanger“]hotový DATchanger[/caption]

Driver na PC:

Driver na straně PC je celý napsán jako bash script. Původně to byl jednoduchý testovací prográmek, ale nakonec jsem ho rozšířil na všechny funkce, které byly potřeba. Má dvě úrovně. Nižší úroveň je určena pro testování. Vyšší úroveň se volá přímo z backupovacího programu BACULA a využívá samozřejmě funkce první úrovně. Na nižší úrovni akceptuje commandy jako extract, put, get, insert. Tyto commandy dělají přesně to, co vystihuje jejich jméno. Kromě toho dělají i základní kontroly, takže pokud například po commandu get není kazeta ve vozíku, command se automaticky zopakuje. Na vyšší úrovni jsou commandy loaded, load, unload, list a slots – přesně ty, které potřebuje Bacula. V této úrovni si pamatuje která kazeta je ve streameru a dokáže ji vrátit zpět na správné místo.

Bezpečnost:

Ještě bych se chtěl zmínit o jedné perličce. Vzhledem k tomu, že čas o času je potřeba otevřít dvířka skříně a vložit novou kazetu, případně vyměnit některou poškozenou, je potřeba myslet i na bezpečnost. Backupovací program se může v kterémkoliv okamžiku rozhodnout, že chce novou pásku a datchanger by se mohl rozjet v okamžiku, kdy v něm má někdo ruce. Ono by se samozřejmě nic nestalo, protože motory jsou slabé a jsou krokové – při přetížení se jednoduše zastaví a bzučí. Ale přesto jsem do driveru udělal následující drobnost: Před commandem load a unload (jediné 2 commandy z vyšší úrovně, které hýbou mechanikou) se udělá 6000 kroků na ose Z s rychlostí 3000 kroků za sekundu. Bez jakéhokoliv zrychlení. Na této rychlosti se motor nestačí roztočit, je příliš slabý, takže zůstane stát a bzučí. 2 sekundy bzučí, pak se zase všechno vypne a počká se 5 sekund. Teprve poté se provede požadovaný command. Člověk má mezitím dost času, aby dodělal co dělal a vytáhl ruce. Když už kvůli ničemu jinému, tak kvůli tomu, aby nezablokoval některý pohyb zařízení.