Category Archives: Bastlení

Kovové závity v 3D tištěných dílech

Určitě to znáte, navrhujete krabičku pro 3D tisk a potřebujete závity pro šrouby. V konstrukci je málo místa na vkládané matice. Když je tam dostanete, tak se  s maticemi  nepracuje zrovna komfortně.  Při práci vypadávají a otvory pro ně musí být dost přesné. Další varianta je závity do díky vyřezat. Při lisování šroubem hrozí, že se při dotahování roztrhne otvor. Když máte k dispozici závitník, tak závity vyřezané do ABS nemají dlouhou životnost. To nevadí pokud závit není přetěžovaný a často v něm šroubem nevrtíte. Existuje však řešení, které můžete najít v profesionálních plastových výrobcích, takzvané vkládané kovové závity (threaded inserts for plastic).

M3 metal insert

V profesionálních aplikacích se vsouvají pomocí ultrazvuku, který rozžhaví plast pomocí vibrací. Tento postup má výhodu v možnosti rychle vkládat vložky a nečekat, až se dobře prohřejí. Pro moje potřeby byl dostatečný upravený hrot regulovatelné pájky.  Nastavil jsem teplotu 210 nasunul vložku na hrot a vpálil jej do předtištěné díry.

3MinsertIN

Nedosáhl jsem tak dobrého vzhledu jako u profesionálně vpálené vložky, ale i tak mě pevnost spoje překvapila. Bohužel zatím nemám k dispozici vhodnou váhu abych to mohl doložit čísly. Vložky se dají objednat třeba z TME.

Takhle vypadá můj nový kryt na RaspberryPi i s vkládanými závity.

raspi

Oživení levné 3D tiskárny Rebel 2

Dostala se mi na stůl jedna nefunkční 3D tiskárna, která vlastně nikdy nefungovala. Majitel si nakoupil díly a stavba se mu trošku vymkla z rukou. Potíže neustávaly a už si nevěděl rady. Tiskárna Rebel 2 je sice dobrá, ale kombinace levných dílů a malých zkušeností se může nejednomu kutilovi vymknout. Sám jsem si prošel spoustou slepých cest a zničil spoustu vybavení. Vím tedy jak může taková konstrukce jednomu zatopit.
Od deskových her a stolních desek až po jejich špičkové elektronické protějšky v konzolách a počítačích-hry představují široký a pestrý žánr zábavy. Jsou to také oblasti sebevyjádření, a proto oddaní hráči mohou utratit tolik peněz, nejen za to podstatné, ale za to, že do své hry s vlastními figurkami, ovladači, pouzdry a prostě čímkoli jiným přidají své vlastní jedinečné osobnosti. Naštěstí v této oblasti pomáhá aditivní výroba, která usnadňuje a zlevňuje výrobu přizpůsobeného příslušenství a důležitých kusů pro profesionály i fandy visit olaspill Norgescåsino.

Přizpůsobte si a objednejte si vlastní miniatury a figurky deskových her online
Proč je herní zařízení a kusy pro 3D tisk skvělé
Figurky a hračky pro 3D tisk jsou jedním z nejstarších použití této technologie. Přirozeně není tak těžké si představit, jak se aditivní výroba aplikuje na deskové hry a stolní RPG jako DnD a Warhammer 40k. Ve skutečnosti existuje řada společností, které se specializují na to, aby hráčům poskytly podrobné digitální možnosti přizpůsobení jejich postav, herních prvků a příslušenství.
Pro mě byla tato zkušenost taky trochu nová, protože jsem zatím neměl tu čest s nejlevnější variantou 3D tiskárny Rebel. Rozhodl jsem se tedy sepsat článek pro ty, kteří by chtěli touto cestou jít. Zádrhelů není zrovna málo a podobných uživatelů myslím taky ne.

  1. Nešetřete na elektronice: elektronika RAMPS má v základním provedení nevyhovující výkonové tranzistory a pojistky. Pojistky budou způsobovat náhodné vypínání v průběhu provozu. Výkonové tranzistory se budou přehřívat a po čase odejdou úplně. Vsaďte raději na českého dodavatele, ibebet here který vám buď zaručí dobře dimenzované díly a nebo správné součástky alespoň přibalí. Sám jsem šel cestou dražší elektroniky Smoothieboard, ale to asi není pro každého.
  2. Věnujte pozornost návodu při sestavování. Je to těžké, protože funkce některých dílů vám může unikat, dokud nezačnete tiskárnu kalibrovat. Například plastové matky u vyhřívané podložky slouží k jejímu výškovému nastavení a podle toho musí být sestaveny.
  3. Pravoúhlost a tuhost konstrukce je základním kamenem. Pokud odfláknete kostru, zbytkem už to nedoženete.
  4. Konstrukce na pojezdových tyčích musí jezdit maximálně volně. Pokud vám v pojezdech bude něco drhnout se časem poškodí povrch tyčí a na kvalitě tisku to poznáte. U levných konstrukcí přijdou chyby rychleji, protože neobsahují povrchově kalené tyče. Pohyblivé části je vhodné mazat olejem, aby vám déle vydržely.
  5. Ventilátor chladiče trysky musí být vždy v provozu. Nezapojujte jej přes ovládané piny, ale přímo na napájecí zdroj. Ušetříte si zapečený plast v trysce pokaždé, když se vám zasekne elektronika.
  6. Ozubené řemeny musí být napnuté tak, aby při zastavení motoru neumožňovaly konstrukci pohyb. Některé 3D tiskárny k tomu používají i pružinové napínáky. U 3D tiskárny Rebel se řemeny napínají pomocí šroubů u motoru, které jsou osazeny v oválných otvorech.
  7. K tiskárně si kupte požární senzor a ověřte si, kde máte nejbližší hasičák či hydrant. Tohle doporučení nesouvisí s 3D tiskárnami Rebel, ale obecně s 3d tiskárnami a životem. Detektor kouře stojí třeba v Ikea pár korun a může vám zachránit spoustu peněz nebo možná i ten život. Kdokoliv provozuje tiskárnu bez ochrany je u mě hazardér.

Celá oprava dobře dopadla, tiskárně se dostalo několika vylepšení a majitel může začít tisknout. Teď už pro něj bude snadnější naučit se co je potřeba. Když máte mrtvý stroj, na kterém je tisíc chyb, tak je nedovedete často ani identifikovat. Špatně sestavená konstrukce vám dokola podráží nohy, pojistky vám náhodně vypínají stroj a vy nevíte odkud vlastně začít. Když se pokazí funkční tiskárna, tak snadněji najdete tu jednu, dvě věci co umřely.

Na závěr malá reklama na dokonalé vylepšení tiskárny od JRC. Nechali vyrobit řemenice vysoustružené z kluzného plastu. Tyto řemenice jsou za dlouho dobu nejlepší investice, co jsem do tiskárny dal. Pokud jsem na nějakou radu zapomněl, tak to s radostí solte do komentářů. Pokud máte ve skříni nefunkční tiskárnu, tak to s radostí solte do emailu ondrej@pistek.eu. Něco vždycky vymyslíme.

Falešné FTDI čipy a problémy okolo

Pokud vám tato kauza unikla tak zkusím nastínit proč by vás mohla nebo nemusel zajímat. Firma FTDI vyrábí několik populárních čipů na komunikaci s USB pomocí jednodušších sériových protokolů. Jeden z jejich čipů je součástí tak oblíbeného a populárního Arduina, konkrétně u mě varianty FT232RL.  Čip to není levný ani drahý, ale 137,- Kč (u Farnell.com) může cenu ultralevných čínských hraček docela ovlivnit. Samozřejmě tedy vznikly levné čínské klony/padělky. Tak jako u spousty jiných čipů se svět nezbořil. Vyskytly se články kde došlo k odhalení padělků, bastlíři se trochu ohnili, že křemík má horší kvalitu a je toho na něm málo,ale svět se točil spokojeně dál news.

Situace se určitě nelíbila lidem z FTDI, kteří přicházeli o vývar. Chytré hlavy dumaly a přišly s dost sporným řešením. Firma FTDI vydala chytrou aktualizaci ovladače do počítače, která dokázala falešné čipy identifikovat a prakticky zničit (nastavením USB ID 0). Pokud jste tedy byli tím chudákem co někde přišel k padělku tak jste rázem měli nefunkční padělek. Nebo jako já 5 nefunkčních padělků Arduino Nano. Věřte mi poznat pouhým okem rozdíl mezi čipy není vůbec jednoduché. Na obrázku je pravý a falešný vedle sebe, lépe je vyfotit neumím.FTDI pravý a falešný

Problém se stal ještě palčivějším po té co FTDI protlačilo tohle svinstvo skrze Windows update. Rozhořela se velká diskuze jestli je to správně nebo špatně. Jestli je to etické chování ze strany FTDI. Co jsem četl tak firma vzala svůj krok zpět a do Windows se dostane verze ovladače, která s padělky pouze nekomunikuje, ale ale aktivně je neničí.

Co s tím pokud jste se stali obětí téhle legrácky? pro mě zatím neotestovaný postup je pomocí aplikace FTprog dostat zpět použitelné ID a použít starší verzi ovladačů, která čipy nevypíná. Tímto samozřejmě překročíte několik licenčních ujednání FTDI o způsobu použití jejich SW. Nebo vysvětlíte staršímu ovladači, aby kamarádil s čipem s USB ID 0, chrochro to je prasárnička. Já si příště rozhodně rozmyslím od koho budu kupovat arduino (vadné i dobré byly z dx.com). Taky zcela určitě budu sledovat diskuzi o tom, čím nahradit čipy firmy FTDI a budu upřednostňovat alternativy. Co kdyby je příště napadlo ovladačem falešný čip zapálit.

Doplnění 31.10.2014: narazil jsem na netu na informaci, že čip CY7C65213-28PVXI je prý ideální náhradou pro falešné FTDI, je pinově kompatibilní a nestojí mnoho. Problém je jeho špatná dostupnost při současné poptávce a taky šílené ceny poštovného. Pokud byste se někdo chystali k objednávce, nebo našli dodavatele bez poštovného za 40€ tak mi dejte určitě vědět.

Stavba 3D tiskárny 1: Proč, co, za kolik

Díl 1 z 1 v seriálu 3D print

3D tiskárnu považuji za velice užitečný nástroj pro každého kutila. Bohužel současný a možná trvalý stav do budoucna není úplně uspokojivý pro zájemce o koupi hotového bezproblémového řešení. 3D tisk je poměrně věda a je potřeba mu věnovat dost času a taky peněz, aby byl výsledek použitelný. Pokusím se popsat svoji cestu k 3D tisku, i když je stále na začátku, tak snad pomůžu ostatním začátečníkům a nerozhodnutým potencionálním uživatelům.

Do konstrukce 3D tiskárny jsem se dlouho nemohl odhodlat. Pořád jsem měl pocit, že používané konstrukce jsou punkové zvěrstvo, kterého se nechci účastnit. Situace se časem obrátila k lepšímu, až jsem narazil na konstrukci tiskáren Rebel. Základní konstrukce z relativně levných hliníkových profilů mě opravdu zaujala. Po lehkém průzkumu trhu jsem začal objednávat součátky a stavba se začala pomalu rýsovat. Pokud pod dojmem různých reportáží očekáváte stavbu jako podle návodu z IKEA tak jste na velkém omylu. Stavba tiskárny pořád skrývá dost komplikací, které musíte vyřešit. Tisk samotný taky není úplně srovnatelný s tiskem na tiskárně papírové. Nejde jednoduše připojit tiskárnu k počítači a tahat z ní výtisky jako králíky z klobouku.

Pokud vás zajímá co vše jsem již dokázal vytisknout tak si můžete projít galerii.

Co je třeba rozmyslet na začátku:

  1. Konstrukce 3D tiskárny
    Pokud pominu nákup tiskárny jako hotového celku, tak musíte zvolit konstrukci do které se pustíte. Já zvolil Rebel II a své volby nelituju. Stavba se mi zdá stabilnější než většina Reprap klonů a cena konstrukce není nijak závratná. Pro první tiskárnu rozhodně nedoporučuji opouštět standardní rozměr tiskové plochy 200×200 a jeden extruder.
  2. Elektronika
    Tady je výběr poměrně jednoduchý, protože většina lidí volí na adruinu založené desky s oddělenými drivery motorů. Po zkušenostech s malým CNC jsem na Kickstarteru objednal desku Smoothieboard , která nabízí několik zajímavých vylepšení. Popis elektroniky a Smoothieboardu má připravený do jednoho z dalších dílů.
  3. Smoothieboard
  4. Hotend
    Tady začíná magie.  Na výběr je velké množství hotových hotendů, celých extruderů, nebo jejich částí. S konstrukcí Rebel máte již posun filamentu vyřešený a zbývá vybrat hotend. Pro kompletní extruder by jste museli předělat konstrukci Rebela. Já zvolil DS hotend na filament 3mm s tryskou 0.4mm a nebyla to volba ideální.
    V základě vybíráte mezi dvěma rozměry filamentu 3mm a 1,75mm, kdy 1,75 myslím nabízí větším výběr materiálu a můj příští hotend bude tohoto rozměru. Velikost trysky rozhoduje o rychlosti a přesnosti tisku, pro začátek považuji 0,4 za dobrý základ, na druhém hotendu zkusím 0.3.
    Další patrametr výběru se dá zjednodušit na celokovové hotendy nebo hotendy s peek izolací. DS je celokovový, zvolil jsem jej kvůli dostupnosti a zdání odolnosti pro začátečníka. Nevýhodou celokovů je potřeba je aktivně chladit malým větrákem, dále je prý problematické s nimi tisknout PLA. Oproti tomu Peek hotendy prý nemají s PLA problém, ale pro změnu kladou prý větší odpor materiálu a proto je potřeba věnovat pozornost konstrukci a nastavení posuvu filamentu do trysky.

Pro lepší představu přikládám hlavní položky rozpočtu se kterými by jste měli počítat. Podle mých výpočtů se vedete do 10 tisíc. Pozor na to, že drobnosti jako spojovací materiál a kabeláž vás můžou nemile překvapit.

  • Plastové díly tiskárny 1200Kč
  • kovové profily 420Kč
  • vodící tyče 600Kč (koupíte i výrazně levnější když nebudete chtít přesnost CNC shopu)
  • ložiska na tyče 120Kč
  • ložiska do kladek 100Kč
  • Ozubené kladky 100Kč
  • ozubený řemen 120Kč
  • hotend 1500Kč (aktuálně koupíte http://www.3draty.cz/ za 800,-)
  • zubatice extruderu 200Kč
  • heatbed 450Kč
  • deska pod heatbed 100Kč
  • závitová tyč 40Kč
  • pružné spojky 120Kč (možno řešit hadicí nabo jinak)
  • elektronika arduino based 2260Kč (podle rebel obchodu, myslím že jde poskládat levněji), Smoothieboard 2800Kč(cena bez poštovného, objednával jsem výhodněji z kickstarteru, takže aktuální cenu přesně nevím)
  • termistory 140,-
  • zdroj (použil jsem ATX co se mi válel doma)
  • krokové motory 1000Kč
  • sklo na heatbed 50Kč
  • ventilátor extruderu
  • vypínače endstopů
  • konektory (zjednoduší práci, ale můžou znamenat výdaje na nářadí)
  • spojovací materiál
  • kabeláž

V dalších dílech se pokusím víc rozebrat mechaniku, elektroniku a první tisky. Pro ilustraci přikládám fotku jak to u mě aktuálně vypadá. Je jasné, že budete potřebovat prostor kde tiskárnu složíte.

Prostor pro 3D tiskárnu

Článek vychází z mých zkušeností a pokud máte na některou ze zmíněných věcí jiný názor podělte se o něj prosím v komentářích. Nepovažuji se zatím za žádného 3D tiskového guru :-).

3D tisk

Tak jsem to dokázal, dokončil jsem zase jeden projektík a máme doma funkční 3D tiskárnu. Je to Rebel2 s elektronikou Smoothieboard, má za sebou teprve první tisky, ale pochlubit se musím.

Na fotkách uvidíte, kalibrační schody na kterých se tisk dá testovat, funkční šroub s matkou pro malou na hraní a taky pár zmetků ať víte, že to není jenom tak :-).

2014-05-24 16.58.50 2014-05-25 10.16.54 2014-05-25 10.16.45 2014-05-24 16.59.35 2014-05-24 16.59.24 2014-05-22 22.06.51

Aktualizováno:
Postupně se učím taje a nastavení tiskárny. Na fotkách můžete vidět kameny pro hru Hive (fakt dobrá). A největší předmět jaký jsem navrhl a vytiskl, držák na kořenky do kuchyně. Jdou rozpoznat i selhání s příliš řídkou výplní v kombinaci s málo vrstvami povrchu. Pokoušel jsem se o co největší předmět s co nejmenší hustotou poloměr 8cm, tloušťka 15mm, váha pouhých 45 gramů. Budu muset trochu polevit, protože tenhle konkrétní výtisk budu muset před použitím dost opravovat, ale i tak to považuji za obrovský úspěch.

3D tištěný držák na kořenky 3D tisky

Arduino: Jak ho zničit

Tento článek není návod. Pokud se máte rizikům vyhnout musíte je znát. Žádný z popsaných způsobů nezkoušejte, dost pravděpodobně vám to může způsobit újmu na majetku a někdy i na životě. Soupis zveřejňuji proto, aby jste se popsaným chybám mohli vyhnout ve svých konstrukcích.
Propojení I/O pinů k zemi (GND)
Pokud by jste měli propojený pin přímo na zem a nastavili jej současně jakou výstupní s hodnotou logické 1, splníte podmínky pro překročení výstupního proudu na I/O portu a pravděpodobně zničíte arduino.
Důvod: Podle specifikace procesoru je maximální výstupní proud z I/O pinu 40mA s interním odporem 25ohmů na pin. Propojení mezi +5 a 0V v tomto případě může znamenat proud 200mA, což je dost na zničení procesoru.
Propojení I/O pinů mezi sebou
Když nastavíte dva piny jako výstupní, na jenom nastavíte logickou 0 a na druhém 1, opět dojde ke zničení portů.
Důvod: stejně jako v předchozím případu maximální výstupní proud z I/O pinu 40mA s interním odporem 25ohmů na pin. Propojení mezi +5 a 0V v tomto případě může znamenat proud 200mA, což je dost na zničení procesoru.
Překročení napětí na I/O pinu
Pokud připojíte k pinu napětí vyšší než 5,5V, tak jej poškodíte.
Důvod: na vstupu pinů jsou ochranné diody pro ochranu čipu před elektrostatickým výbojem. Tyto diody nejsou dimenzovány na dlouhodobé zatížení a proto při překročení napětí o 0,5V dojde k jejich zničení a nebudou dál chránit zbytek čipu a může tedy náledně dojít k poškození ostatních částí.
Otočená polarita napájení na Vin
Pokud by jste napájeli adruino pomocí pinu Vin a zapojili napětí obráceně tak dojde k poškození čipu.
Důvod: vstupní pin Vin není zapojen přes stabilizátor a je napojen rovnou na ATmega čip a ten není schopen otočené napájení přežít. Současně zničíte také regulátor na desce, protože na něj pošlete napětí z opačné strany.
Připojení napětí vyššího než 5V na port 5V
Pokud přivedete na port 5V libovolné větší napětí tak zničíte praděpodobně většinu součástek arduina a ohrozíte i USB port počítače.
Důvod: Na desce není žádná ochrana před zvýšeným napětím na 5V portu. Tento port je napojen přímo na procesor a čip USB. Je častou chybou domnívat se, že situaci zachrání stabilizátor arduina, ale ten slouží pouze ke stabilizaci napětí připojeného k napájecímu konektoru. Jakékoliv zvýšené napětí, které k němu přijde z desky, není schopen zachránit.
Připojení napětí vyššího než 3,3V na port 3,3V
Připojením zvýšeného napětí na port 3.3V můžete zničit připojené shieldy nebo vybavení připojené k tomuto portu. Pokud překročíte 9V zničíte regulátor arduina, ATmega čip a můžete poškodit USB port počítače.
Důvod: port 3,3V také není chráněn regulátorem a proto zvýšení napětí přímo ovlivní části napájené tímto napětím, Pokud překročíte 9V po zničení 3,3V regulátoru projde zvýšené napětí do dalších částí napájených 5V.
Propojení Vin a Gnd
Pokud propojíte piny Vin a Gnd tak dojde k poškození ochranné diody a může dojít i k roztavení cest na plošném spoji.
Důvod: pin Vin nemá žádnou ochranu proti vysokému proudu.
Napájení Arduina pinem 5V a používání Vin jako výstupního portu pro napájení periferií
Když chybně prohodíte používání portů Vin a 5V a přivedete napájení na 5V a odebíráte proud z Vin, spálíte regulátor arduina.
Důvod: arduino nemá žádnou ochranu proti zpětnému proudu přes regulátor
Překročíte 13V na vstupu reset
Pokud zapojíte víc jak 13V na vstup reset tak zničíte procesorový čip ATmega.
Důvod: maximální hranice napětí na reset vstupu je 13V
Překročíte maximální výstupní proud z arduina
Pokud nastavíte 10 I/O portů jako výstupní a zatížíte každý z nich proudem 20mA ( 10 svítících diod) tak překročíte celkvý výstupní proud a arduino zničíte.
Důvod: maximální výstupní proud pro celé ATmega čip je 200mA.
Přepojování výstupů za běhu
Tomuto se vyhněte vždy pokud to bude možné. Můžete zničit arduino a ledacos co je k němu připojené,
Důvod: pokud přepojíte pin když jím prochází proud, vygenerujete napěťovou špičku která může v krajním případě zničit Arduino,
Použití indukční zátěže(motor, relé, solenoid) bez ochranné diody
Pokud použijete indukční zátěž bez ochranné diody před zpětným proudem může dojít ke zničení procesoru.
Důvod: Indukční zátěže můžou vytvářet silné napěťové špičky, k jejichž odstranění slouží právě ochranná dioda zapojená paralelně k zátěži, když potom indukční zátěž vygeneruje zpětný proud, ten je zkratován diodou a neohrozí arduino.
Samozřejmě existuje spousta dalších kreativních způsobů jak arduino zničit, ale kdo by o to stál. Snad vám popsané způsoby umožní užívat si s arduinem déle a radostněji bez ztrát. Informace pro článek jsem bral ze stránek o rugeduinu (arduino které má zabudovanou ochranu před většinou těchto chyb, web obsahuje i vysvětlující schémata) a ještě jednoho anglického webu.

Arduino YÚN: vzhůru do oblak

ArduinoYunFront_2

Zdroj arduino.cc

Do oblak samozřejmě myslím do cloudu. Zatím poslední model arduina je totiž zaměřen hlavně na připojení k internetu a využití nejrůznějších služeb a cloudových řešení. Předchozí modely šlo samozřejmě také připojovat k síti pomocí ethernet shieldu, ale pro využívání internetových služeb chyběl Adruinům výpočetní výkon a také paměť. A tak to doposud vypadalo, že zajímavější konstrukce s využitím internetových služeb zůstanou doménou RaspberryPI, BeagleBone nebo podobných desek se silnějšími procesory. Na arduino zbývaly drobnosti, které neopustí bezpečí lokální síťě. Novým modelem však Arduino překračuje vlastní stín. Arduinu YÚN si bere na pomoc vestavěné rozšíření Atheros AR9331 pojmenovaného Linino. Na tomto rozšíření běží linuxová distribuce založená na OpenWRT. Zde možná někteří z vás možná zpozorněli, ano je to ten samý linux, který lze provozovat na wifi routerech a který se stal součástí sousty zajímavých konstrukcí. Linino kromě připojení k ethernetu poskytuje i WiFi(802.11b/g/n) a jako bonus slot na SD kartu a USB host.

Díky Lininu již nebude problém využívat libovolných internetových služeb, které byly doposud arduinům zapovězeny. Třeba s důvodů nezbytné autentizace, která je pro arduino ve spojení s ethernet shieldem hodně těžkým oříškem. OpenWRT je také schopný vašim konstrukcím nabídnout dodatečné zabezpečení. Nbudete se muset bát vystrčit do internetu třeba ovládání topení v domě. Nápad to rozhodně není nikterak nový, na internetu je spousta starších konstrukcí, která využívá ke komunikaci s okolním světem malý WiFi routr připojený k arduinu sériovou linkou a nebo pomocí ethernetu. Nové ardunino ovšem nabídne sjednocení řešení a tím snadnější sdílený těchto složitějších konstrukcí.

Cena 52EUR není nikterak přemrštěná za to co je k dispozici, uvidíme jak to bude vypadat u českých distributorů. Rád bych brzo nabídnul konstrukci založenou na této desce, ale na cestě z číny je malý routřík TP-LINK TL-WR703N a tak další konstrukce bude pravěpodobně založená na něm. Dvě síťové hračky v jednom měsíci by bylo i na mě dost 🙂

Doplněno: Díky upozornění kamaráda jsem se trochu víc kouknul na napájecí systém. Arduino YÚN již neobsahuje vestavěný regulátor, na což je potřeba myslet a přidat regulátor pokud budete chtít napájet arduino jinak než přes USB. Bonusem je příprava na napájení POE. Pokud nevíte tak POE (Power Over Ethernet) je způsob napájení zařízení přes ethernetový kabel současně s připojením k počítačové síti. Bohužel je Arduino YÚN na POE pouze připraveno a k využívání je nezbytné dokoupit modul. Pro jistotu ještě dodám, že na POE musíte mít vybaven router a nebo jiný síťový prvek, aby se napájení mělo jak do ethernetu vůbec dostat.
Rozhodně se jedná o užitečné rozšíření, díky kterému můžete mít například různé senzory rozmístěné po domě a připojovat je jenom a pouze ethernetovým kabelem.

Arduino 7: časování s millis() a více činností najednou

Díl 7 z 7 v seriálu Arduino

Jak někteří začínáte psát tak se mi začínají množit dotazy jak kombinovat více činností na jednom arduinu, případně jak vykonat nějakou část programu, když zrovna probíhá delay(). To totiž opravdu nejde, protože máme jednoduchý procesor a když dělá delay tak nebude současně dělat nic jiného. Nezoufejte, protože tu máme funkci millis() a když se naučíte pracovat s časem jinak tak toho arduino zvládne mnohem víc najednou.

Pokud bych měl rozdíl mezi těmi dvěma přístupy přirovnat k normálnímu životu tak, delay funguje tak, že se zastavíte uprostřed chodníku, koukáte na hodinky a dokud není 12 tak nic neděláte a čekáte na oběd. Naproti tomu millis funguje tak, že na hodinky kouknete, zjistíte, že je jedenáct a tak jdete dělat něco jiného, za čas na ně kouknete znovu a pokud už bylo dvanáct tak jdete na oběd. Z toho vyplývá výhoda i nevýhoda, můžete dělat i něco jiného než koukat na hodinky, ale taky možná přijdete na oběd o něco později než přesně ve dvanáct. To zpoždění ovšem pro většinu malých aplikací bude naprosto nepodstatné a pokud už budete psát ovládací program pro jaderný reaktor tak si na to dáte pozor.

Použití ukážu na příkladu ke kterému nebudeme potřebovat nic jiného než arduino připojené k seriovému portu. Dejme tomu, že potřebujeme aby co vteřinu blikla led dioda na půl vteřiny. S použitím delay jednoduchý úkol.

int led = 13;
void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(500);
  digitalWrite(led, LOW);
  delay(1000);
}

A teď druhý úkol, pokud po sériovém portu něco přijde tak to vrátit zpět. Pro začátek to nebudeme spojovat s blikáním LED.

void setup() {
  //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Seriovy port aktivni");
}
void loop(){
  if (Serial.available()) {
    int inByte = Serial.read();//nacti znak ze serioveho portu
    Serial.write(inByte); //vypis znak na seriovy port
  }
  //delay(1000); //pokusna pauza
}

Na příkladu si můžete snadno vykoušet jak drtivý dopad má použití delay na rychlost odezvy. Stačí vyzkoušet odeslání textu a potom zkusit druhý program s odkomentovaným řádkem s pauzou. A teď pokud si delay nahradíte blokem pro blikání diodou tak bude zpoždění ještě o polovinu delší a to obsluhujeme jedinou blikající diodu.

Po přepsání na millis a spojení obou úkolů, by program s blikáním LED mohl vypadat asi takhle.

unsigned long aktualniMillis; //aktualni cas
unsigned long predchoziMillis; //cas poseldni akce
boolean led_svetlo; // promenna pro stav LED
int led = 13; //port pro LED

void setup() {
  pinMode(led, OUTPUT);
 //konfigurace rychlosti serioveho portu
  Serial.begin(9600);

  while (!Serial) {
    ; // cekani na pripojeni serioveho portu, pry nezbytne pouze u desky Leonardo
  }

  // Prvni vypis na seriovy port
  Serial.println("Seriovy port aktivni");
}
void loop(){
  aktualniMillis = millis(); //podivam se na hodinky
  if(led_svetlo){ //potrebuju LED zhasnout nebo rosvitit?
    if(aktualniMillis - predchoziMillis > 500) { //pokud zhasnout ubehlu uz 500ms od posledni akce?
            predchoziMillis = aktualniMillis; //v tento cas jsem provedl posledni akci
            led_svetlo=LOW; //zhasni led
    }
  }else if(aktualniMillis - predchoziMillis > 1000) { //pokud zhasnout ubehlu uz 1000ms od posledni akce?
            predchoziMillis = aktualniMillis; //v tento cas jsem provedl posledni akci
            led_svetlo=HIGH; //rozsvit led
  }
  digitalWrite(led, led_svetlo); //aktualizace stavu LED
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial.write(inByte);
  }
}

Program neobsahuje jediný delay a přesto obsluhuje dvě pauzy a plynule odbavuje tok na sériovém portu. Základní myšlenou je nechat cyklus funkce loop co nejrychlejší a brzdit jej pouze vykonáváním akcí pokud je to potřeba. Kód je o něco složitější, je potřeba proměnné na to aby si pamatovaly časy, ale běh je potom plynulý. V některém dalším díle se podíváme ještě na přerušení. Využití přerušení je postup, kterak donutit arduino obsloužit opravdu neodkladné akce bez ohledu na to co je právě rozdělané.

Arduino 6: Modelářská serva

Díl 6 z 7 v seriálu Arduino

Modelářské servo je velice zajímavá součástka pokud máte v úmyslu tvořit pohyblivé věci. Servo je v podstatě elektromotor s převodovkou a elektronikou, která za vás vyřeší řízení motoru. Na rozdíl od elektromotoru se klasické servo neumí kontinuálně otáčet, ale zvládá pohyb v rozmezí 180 stupňů. Pro kontinuální rotační pohyb se musí servo upravit a nebo koupit již upravené. K tomu se dostaneme později.

Noname servo z Dealextreme a servo značky Hitec

Serva koupíte v modelářských obchodech a nebo stejně jako většinou součástek přes eBay či DealExtreme z Číny za pár korun. Pokud si servo objednáte tak dostanete přibližně to co vidíte na fotkách. Modul serva a nějaké příslušenství, které se používá k přenosu síly v modelařině typicky na pohyb křidélek na letadle a podobně.

Po elektrické stránce se servo ovládá pomocí impulsů 1ms – 2ms. Kdy impuls dlouhý 1ms znamená 0° natočení , 1.5ms 90° a 2ms 180°. Doporučená frekvence je 50Hz. Pro řízení pomocí arduina ovšem použijeme již připravenou knihovnu a ta tyto detaily pohlídá za nás.
Ze serva vedou tři dráty: červený kladné napájení, černý záporné napájení (na čínských servech může být i hnědý), žlutý řídící impulsy. Typicky se serva fungují na 5V napájení, ale vždy si dejte pozor na specifikace toho co koupíte. Některá serva s větší silou potřebují vyšší napětí, aby dosáhly udávané síly. Pokud začínáte s obyčejným malým servem tak jej můžete napojit přímo na arduino podle následujícího obrázku.

Schéma připojení serva k Arduinu

Pro ovládání budeme potřebovat již slíbenou knihovnu, která je teda součástí instalačního balíku arduina, ale použití knihoven jsem v návodech ještě neukazoval.
Je to poměrně jednoduché na začátku  přidáme knihovnu.

#include <Servo.h>

To bude fungovat pokud je knihovna Servo.h správně přidaná v adresáři “libraries”. Dále v definicích vytvoříme proměnou typu “Servo”.

Servo mojeServo;

Pak v sekci “setup” nadefinujeme ke kterému portu máme servo připojené.

mojeServo.attach(9);

Následně můžeme libovolně volat metodu “write” a říkat pod jakým úhlem má být servo natočeno(0-180).

mojeServo.write(uhel);

Dohromady by tedy mohl celý příklad vypadat takto:

/*
Program na ovládání serva
www.pistek.eu
*/

#include <Servo.h>

Servo mojeServo;

void setup(){
   mojeServo.attach(9);//definice portu připojení serva
}

void loop(){
   mojeServo.write(0);//nastav servo na uhel 0
   delay(500);//počkej 500ms
   mojeServo.write(30);//nastav servo na uhel 30
   delay(60*1000UL);//pockej 60*1000ms
}

A co to bude dělat. Nadefinujeme servo připojené na port 9, jednou za vteřinu přejde na 50ms do úhlu 0 a pak se zase vrátí na úhel 180. Ještě vás na příkaldu může zarazit “UL” u výpočtu dlouhé pauzy. UL znamená Unsigned Long, neboli typ 32 bitů kladné číslo. UL dává vědět překladači, že výsledek výpočtu může být až takhle velký.  A celá tato konstrukce může sloužit přeba jako pravidelná spoušť fotoaparátu pro tvorbu takzvaných timelapse snímků.

Ještě poslední věc a tou je slibovaná úprava na kontinuální rotační pohyb. Takto se serva předělávají na pohonné jednotky pro jednodušší roboty. Šířkou impulsu potom neřídíte úhel natočení, ale rychlost a směr otáčení. Stačí tedy následně ke dvěma upraveným servům připevnit kolečka a máte jednoduchého robotka na diferenciální ovládání. Samotná úprava serva je možná jenom u některých serv a vyžaduje jeho rozebrání. Vevnitř je potřeba ubrousit zarážku na posledním ozubeném kole tak aby se mohlo otáčet o celou otáčku. V elektronice je potřeba nahradit potenciometr, který slouží jako zpětná vazba s informací o úhlu natočení, dvěma odpory které jsou polovičního odporu než původní dráha potenciometru. V některých servech je možné servo jenom mechanicky odpojit a nastavit na střed. Sám jsem úpravu ještě neprováděl, takže vlastní fotky nemám. Možná dodám později, zatím se můžete podívat třeba na tento návod.

Arduino 5: cykly

Díl 5 z 7 v seriálu Arduino

V dnešním díle zkusím rozebrat cykly, tedy jak donutit arduino vykonávat opakované činnosti, nekonečně nebo třeba jenom několikrát.

Základní a věčný cyklus v arduinu je funkce “loop()”, do té píšeme hlavní část programu. Tato hlavní část programu se vykonává pořád dokola v nekonečném cyklu. Na příkladu prvního programu jste určitě rozpoznali obsah cyklu:

  1. zapni led
  2. pockej vterinu
  3. vypni led
  4. pockej vteřinu
/*
Blink
Zapne led diodu na jednu vteřinu, následně ji na vteřinu vypne, takhle pořád dokola.
Tento příklad je možno volně šířit.
*/

// k pinu 13 je připojena led dioda na většině Arduino desek.
// provedeme pojmenování:
int led = 13;

// následující funkce setup se provede vždy jen jednou a to po stisknutí tlačítka reset nebo zapnutí desky:
void setup() {
// nastavíme pin s LED jako výstupní(EN: output).
pinMode(led, OUTPUT);
}

// funkce loop(CZ: smyčka) se pouští pořád dokola dokud je deska zapnutá:
void loop() {
digitalWrite(led, HIGH); // zapni LED (HIGH (CZ: vysoká) je úroveň napětí nebo taky logická úroveň
delay(1000); // čekej 1000ms
digitalWrite(led, LOW); // vypni LED nastavením napětí nebo logické úrovně na LOW (CZ: nízká)
delay(1000); // čekej 1000ms
}

Pro vysvětlení dalších cycklů napíšeme program, který 10krát blikne rychle a 10krát pomaleji. Pro začátek použijeme cyklus “for”, ten má tři parametry:

  1. nastavení počitadla, nebo příkaz který se provede jenom na začátku. Klasicky začínáme od nuly: “pocitadlo=0;”
  2. podmínka pro ukončení, v našem případu dokud je pocitadlo menší než 10: “pocitadlo<10;”
  3. Navýšení počitadla, v našem příkladu je to navýšení počitadla o jedničku příkazem: “pocitadlo++;”

Cyklus “for” je ideální pro případy kdy předem znáte počet opakování, který má cyklus vykonat.
Následuje zdrojový kód s dvěma cykly, jeden pro rychlé blikání a druhý pro pomalé a ty se budou navěky opakovat. Oproti předchozímu příkladu jsem přidal ještě deklaraci proměnné “poc” v úvodu, která slouží jako počitadlo cyklů.

/*
Blink cykly
Tento příklad je možno volně šířit.
*/

int led = 13;
int poc;  //jedna promenna na pocitani cycklu

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  for(poc=0;poc<10;poc++){  //rychle blikani
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
  }
  for(poc=0;poc<10;poc++){  //pomale blikani
    digitalWrite(led, HIGH);
    delay(2000);
    digitalWrite(led, LOW);
    delay(2000);
  }
}

Zbývají nám k vysvětlení dva druhy cyklů a to je “while” a “do while”. Dělají v podstatě to samé jenom jejich syntaxe je trochu jiná. While cyklus má jediný parametr a to je podmínka pro ukončení. “While” a “do while” se liší jenom tím, že jeden kontroluje podmínku než začne provádět činnosti a “do while” kontroluje podmínku na konci činností. V praxi to znamená, že “do while” proběhne alespoň jednou, kdežto “while” nemusí proběhnout ani jednou. Tyto cykly se hodí tam kde neprovádíte jednoduché počítání, ale kontrolujete nějaký parametr co se mění v průběhu cyklu. Na vykonávání jednoduchého počítání je lepší “for”, protože všechny parametry a nastavení máte hezky pohromadě na jednom místě.
V následujícím příkladu je ukázka použití obou druhů cyklů.

/*
  Blink cykly
 */

int led = 13;
int poc;  //jedna promenna na pocitani cycklu

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  poc=0; //nejddriv nastaveni pocitadla
  while(poc<10){  //cyklus pro rychle blikani
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
    poc++; //navyseni pocitadla o jednicku
  }
  poc=0; //nejddriv nastaveni pocitadla
  do{  //cyklus pro pomale blikani
    digitalWrite(led, HIGH);
    delay(2000);
    digitalWrite(led, LOW);
    delay(2000);
    poc++; //navyseni pocitadla o jednicku
  }while (poc<10); //podminka pro ukonceni nakonci
}

Jenom jako zopakování předchozí lekce přidám kód doplněný o výpisy na sériový port, aby jste nemuseli počítat blikání, když si budete zkoušet cykly upravovat.

/*
  Blink cykly
 */

int led = 13;
int poc;  //jedna promenna na pocitani cycklu

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  poc=0; //nejddriv nastaveni pocitadla
  while(poc<10){  //cyklus pro rychle blikani
    digitalWrite(led, HIGH);
    delay(500);
    digitalWrite(led, LOW);
    delay(500);
    poc++; //navyseni pocitadla o jednicku
    Serial.print("rychle ");
    Serial.println(poc);
  }
  poc=0; //nejddriv nastaveni pocitadla
  do{  //cyklus pro pomale blikani
    digitalWrite(led, HIGH);
    delay(2000);
    digitalWrite(led, LOW);
    delay(2000);
    poc++; //navyseni pocitadla o jednicku
    Serial.print("pomalu ");
    Serial.println(poc);
  }while (poc<10); //podminka pro ukonceni nakonci
}