Imitace obloukového svařování nebo ohně pomocí arduina

Edit : byl přidán světelný efekt imitace výbojkového osvětlení, byl přidán popis upgrade zavaděče modulu Digispark. 

Kamarád za mnou přišel s prosbou o výrobu modulu, který by imitoval práci s obloukovou svářečkou. Jelikož se učím programovat ve wiringu, napadlo mne použít Arduino s procesorem ATTiny85. Toto Arduino se nazývá Digispark a již je na něm osazen napěťový stabilizátor, výroba desky tak není potřebná. Na integrovaný stabilizátor je podle zdroje Digistump možno přivést až 32V (podle katalogových listů až 35V) , ale při napájení modulu napětím vyšším než 12V (nebo při odběru nad 100mA) již může nastat potřeba přidat chlazení stabilizátoru. Procesor disponuje třemi PWM výstupy, se kterými se dají jednoduše vytvořit různé imitace např. plamenů ohně. Programy jsou proto upraveny pro tyto výstupy. K napájení jsou použity piny arduina GND a VIN. K napájení můžete použít stejnosměrný zdroj, já jsem napájecí piny připojil na výstup spínacího dekodéru. Pozor na polaritu napětí. Digispark nemá na vstupu VIN ochrannou diodu proti přepólování, proto při chybném zapojení dojde k okamžitému zničení Arduina (tohle jsem však nezkoušel). Digispark pracuje s 5V logikou a maximální zatížitelnost jednoho výstupu je podle zdroje Digistump 20mA (podle katalogových listů až 40mA). Doporučuji kupovat větší verzi Digisparku osazenou stabilizátorem 78M05. U menší verze Digisparku (s konektorem micro USB) je osazen stabilizátor 78L05 a celkový odběr proto nesmí překročit 100mA, ale i to není problém dodržet. Při výpočtu předřadných odporů k LED je třeba se držet těchto hodnot. Umístění předřadných rezistorů a LED pro dosažení kýženého efektu, je na vkusu každého modeláře. Pro eliminaci poškození procesoru však doporučuji rezistory umístit co nejblíže k výstupům Arduina.

Klon Arduina Digispark vychází levněji, než koupě samotného procesoru. Lze tak vytvořit libovolný světelný efekt za bezkonkurenční cenu (použití rozhraní Arduino IDE je zdarma). Programy jsou velice jednoduché. Pokud chcete využít již vytvořené programy pro imitaci obloukového svařování nebo ohně, stačí jen stáhnout z internetu a nahrát. Do vyhledávače napište "arduino arc welding", nebo "arduino flame effect" a najdete jich spoustu. Osobně jsem tyto programy nepsal, jen upravil pro svou potřebu a pro použití s verzí Digispark.

Existují i jiná Arduina a klony s procesorem ATTiny85 (Trinket, Gemma, LilyPad), ale ty už nejsou tak cenově zajímavé.

Program s imitací obloukového svařování se spustí po přivedení napětí na svorky GND a VIN. Svařování imitují tři různě zbarvené LED diody, které jsou přes rezistory zapojeny na výstupy (P0 bílá, P1 modrá a P4 oranžová). Modrá a bílá LED imitují oblouk při svařování, oranžová potom chladnutí právě vytvořeného svaru. Katody diod jsou připojeny na společnou zem napájení.

Program s imitací světel ohně se spustí po přivedení napětí na svorky GND a VIN. Oheň imitují tři různě zbarvené (červená, žlutá, oranžová) LED diody, které jsou přes rezistory zapojeny na výstupy P0, P1 a P4 (barvy libovolně).

Digispark má zvláštní způsob nahrávání programu. To má na starosti bootloader. Ten je aktivní 6 sekund po připojení napájení (nebo po resetu). Po tuto dobu je hlavní program neaktivní, a pin P3 je ve stavu logické 1 (Digispark má na tomto pinu externí 1k5 pullup rezistor). Tento pin ale nechávám nepoužit.

Pro odstranění této prodlevy existuje složitější řešení a je k tomu potřeba programátor AVR procesorů. Program je nutno převést na .hex a za pomoci programátoru tímto programem přepsat bootloader. Tento postup lze však použít pouze u klonů Digisparku. U klonů je pin P5 použit pro reset a proto je možno bootloader přepsat běžným programátorem. Originál Digispark má pin P5 použit pro vstup/výstup a bez vysokonapěťového programátoru přepsat nelze. Protože jsem v programu při převodu snížil frekvenci oscilátoru na 8MHz (Digispark používá 16,5MHz), je zapotřebí ještě přeprogramovat pojistky (low:E2 high:DF ext:FF). Pokud by jste v budoucnu chtěli modul opět používat jako arduino, museli by jste bootloader zpět do procesoru nahrát a vrátit pojistky na původní hodnoty (pro klon low: 0xE1, high: 0xDD, ext: 0xFE). 

Komu 6-ti sekundové zpoždění nevadí, může si nahrát program přímo v Arduino IDE, musí si ale doplnit podporu desky a ovladač (podle návodu např. zde).

Edit: Další možností, jak se zbavit prodlevy při zapnutí, je použití jiné varianty firmware bootloaderu. Byla vytvořena varianta, u které pokud není na pinu D- kladné napětí (připojeno USB), je bootloader ukončen a prakticky ihned je spuštěn hlavní program. Další variantou je spuštění bootloaderu pouze při resetu. Podrobnosti o všech variantách a jejich kombinacích si můžete přečíst na GitHubu. Samozřejmě si můžete zkompilovat kombinaci vlastní. Připravené firmwary naleznete po stažení a rozbalení v adresáři "releases". Tyto firmwary je nutno nahrávat externím programátorem. Pozor, před nahráním některých variant je potřeba nejprve prověřit funkce firmware v kombinaci s nastavenými pojistkami (např. zakázaný reset, jak je u klonů běžné), aby se vám z Digisparku nestalo těžítko. V adresáři "...\firmware\upgrades" jsou uloženy firmwary, které lze do Digisparku nahrát pomocí skriptu ve Windows, k tomuto nahrávání již externí programátor není zapotřebí. Skripty jsou uloženy v adresáři "...\Utils". Spuštěním skriptu "Upgrade-t85_entry_on_powerOn_fast_Exit.cmd" se nám otevře okno příkazového řádku, ve kterém jsme vyzváni k připojení zařízení. Po připojení se již provede upgrade. Pozn. Přiložené snímky obrazovky zobrazují skript pro ATtiny167 a chybné nahrání do ATtiny85, (také metoda, jak vyrobit těžítko). Pozn. Program micronucleus bude pracovat pouze na 64-bitovém systému, na 32-bitovém zahlásí skript chybu.

Pokud požadujeme vypnutí zavaděče (když Digispark nebude připojen k USB), je na modulu potřebné upravit připojení pull-up odporu. Pozn. tato úprava také uspoří několik miliampér vždy, když bude pin PB3 ve stavu LOW. Aby bylo napětí na pinu D- pouze při připojení USB, je nutno tento rezistor v bodě A odpojit ze sběrnice +5V (jehlou, nebo pilníkem přerušit spojení na desce) a propojením bodů B a C spojit přímo na napájení z USB. K propojení byl použit pájitelný lakovaný drát. Jelikož je Digispark oblíben, bylo také vytvořeno více variant klonů těchto desek, proto místo přerušení nelze jednoznačně určit pro všechny desky. Berte proto následnou fotografii pouze jako ukázku.

Fotografie byla pořízena ještě před očištěním desky od použité pájecí pasty. Vím, že pro prezentaci je to nevhodné, ale účelu poslouží. Ve schématu je červeně vyznačeno přerušení spoje na 5V a nový propoj na V+.

Popíšu také metodu upgrade firmwaru, která je přístupná v Arduino IDE. Tuto metodu lze použít i na 32-bitovém systému. Spustíme si Arduino IDE a otevřeme okno "Vlastnosti". Otevřeme "Správce dalších desek URL": a nahradíme původní digistump tímto : https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json. Potvrdíme tlačítkem OK.

Nyní můžeme přejít na "Manažera desek" vyhledat "digistump" a instalovat příp. aktualizovat.

Nyní již můžeme přistoupit k samotnému upgradu. V záložce "Nástroje" si nastavíme vše potřebné: Vývojová deska: "Digispark, Clock: 16,5MHz -For V-USB, Burn bootloader method: Upgrade (viaUSB), programátor: micronucleus2.5. V záložce "Micronucleus variant" si zvolíme variantu firmware "Recommended" a kliknutím na "Vypálit zavaděč" spustíme upgrade. Digispark samozřejmě připojíme až po výzvě.

Výsledkem je výpis: Vypalování zavaděče ukončeno

Upgradovaný Digspark již program bude spouštět ihned po přivedení napájení na piny VIN a GND, příp. 5V a GND. Pokud jste neprovedli úpravu přepojením pull-up odporu a nebo míníte modul napájet přes USB, zavaděč bude při zapnutí vždy aktivní. Po upgradu to však nebude 6 sekund, ale pouze několik desetin sekundy. 

Efekt výbojkového osvětlení

Co mi u dekodérů chybělo, byl efekt výbojkového osvětlení. Nějaké dekodéry tvořil Jindra Fučík, ale ty byly pouze pro jedno světlo a potřebovaly pro provoz napájecí základnu. Neplánuji tvořit dekodér a napsal jsem proto program tak, aby jej mohli využít i příznivci analogového ježdění a abych využil všechny piny modulu Digispark. Pro využití všech pinů musí být zakázán reset na pinu P5 (originál Digispark - pojistky low: 0xE1, high: 0x5D, ext: 0xFE). Pinem P3 je pak ovládáno 5 výbojkových lamp na výstupech P0, P1, P2, P4, P5. Pokud je vstup P3 ve stavu logické 1 (pin P3 má osazen externí 1k5 pullup rezistor), budou se lampy na výstupech zapínat (nejprve krátký záblesk a následně postupné zvyšování intenzity osvětlení). Pokud vstup P3 přivedu do stavu logické 0 (uzemním), lampy pomalu zhasnou. Pokud použijete klon modulu Digispark (nastavení pojistek low: 0xE1, high: 0xDD, ext: 0xFE), bude na pinu P5 povolen reset a tento pin nebude možné použít pro připojení lampy. 

 Edit: výše jsou popsány metody upgrade firmwaru, následující text je staršího data a popisuje neupravené zapojení bez upgrade: Jak jsem již psal, nevýhodou "Digispark" řešení je aktivní bootloader při zapnutí (zpoždění programu a stavy pinů P3, P4). Komu nevadí zpoždění, může program nahrát pomocí bootloaderu přímo v Arduino IDE. Další možností je opět pomocí programátoru přepsání bootloaderu souborem hex. V tomto případě budou pojistky procesoru nastaveny takto: low 0xE1, high 0x5D, ext 0xFE. Pozor, toto nastavení pojistek zakáže reset procesoru, takže jej již nebude možné programovat běžným programátorem, ale pouze vysokonapěťovým. Pokud však nastavíte pojistky podle klonu modulu Digispark, programování bude možné, ale opět nevyužijete pin P5. Dalším řešením je použít Arduino s větším počtem výstupů, ale to už by se jednalo o jiné řešení, než jsem zde chtěl uvést.

Pokud vidíte blikání LED, je to způsobeno snímací frekvencí fotoaparátu. Ve skutečnosti diody tak neblikají. Toto je pouze zkušební deska, proto jsou zapojeny pouze tři LED a pro demonstraci je místo vypínače použito tlačítko.