
Michael Cain
0
3455
1028
Nudíš se? Mohu také postavit laserovou věžičku. Víte, ten, který jde pew pew, střílí červený paprsek mnoha různými směry a možná dokonce hodí do kouřového stroje? Jo, jeden z nich.
Co budete potřebovat
- Arduino
- 2 serva
- Laserový modul, například jeden z této sady senzorů
- Piezo bzučák nebo jiné malé výstupní zařízení
- Kovové dráty a kabelové spony pro upevnění
- Dlouhé samičí-> samčí skokové kabely plus normální skokové kabely
Volitelně je třeba kouřový stroj - laser má docela nízký příkon, takže nebudete moci vidět paprsek bez kouře ani v temné místnosti.
Sestavte plán
Základní myšlenkou věže je umístit laserový modul na horní část jednoho serva, aby se zajistila horizontální rotace; pak namontujte tento balíček na jiné servo umístěné pod úhlem 90 stupňů, aby se zajistil vertikální pohyb. Máme k dispozici piezo pew pew zvukové efekty, a já hodím do kouřového stroje pro dobrou míru.
Testování servo
V závislosti na vašem servopohonu mohou být dráty barevně odlišné, ale obecně:
- Červený je kladný drát a na obou mých servech byl střed tří - měl být připojen k + 5V kolejnici.
- Hnědá nebo černá je negativní, která má být připojena k GND na Arduino.
- Bílý nebo oranžový je signální vodič, který má být připojen k digitálnímu I / O kolíku s podporou PWM (9 a 10 v ukázce níže).
Jakmile zapojíte svá dvě serva, nahrajte následující ukázkový kód. Pojmenoval jsem jedno servo “hori” ovládat horizontální pohyb a další “vert”. Každý by měl provádět celou škálu pohybu (asi 60 stupňů, v mém případě).
#include Servo vert, hori; // create servo object for control servo // lze vytvořit maximálně osm servo objektů int pos = 0; // proměnná pro uložení pozice servo void setup () hori.attach (9); vert.attach (10); // připojí servo na pin 9,10 k objektům serva vert.write (0); hori.write (0); void loop () for (pos = 0; pos = 1; pos- = 10) // se vrací ze 180 stupňů na 0 stupňů vert.write (pos); // řekni servo, aby šlo na pozici v proměnné 'pos' hori.write (pos); zpoždění (100); // čeká 100ms na to, aby servo dosáhlo polohy
Vše dobré? Jdeme dál.
Testování laseru a Pew Pew Zvuk
Laserový modul je jako LED, ale má zabudovaný rezistor, takže jej můžeme připojit přímo k digitálnímu I / O - velmi jednoduché. Pokud používáte stejný laserový modul jako já, “-” jde do GND, S přejde na pin 12. Upravte ukázkový kód výše tak, aby se pin 12 stal výstupem:
int laser = 12; pinMode (laser, OUTPUT);
Poté bliknutím připněte a vypněte každou smyčku pomocí standardu digitalWrite () metoda.
Prostě použijeme PWM k ovládání piezového bzučáku na pohodlné úrovni zvuku - pokud byste chtěli, mohli byste experimentovat s použitím knihovny tónů, ale potřebuji jednoduchý šum. Připojte černý vodič k zemi a červený vodič k kolíku 11. Definujte svůj bzučák na příslušném pin, nastavte do režimu výstupu a aktivujte pomocí analogWrite (bzučák, 100) (nebo libovolné číslo, které chcete až 254); a analogWrite (bzučák, 0) vypnout.
Celý ukázkový kód upravený tak, aby zametal dvě serva, aktivoval laser a přehrával nepříjemný zvuk, najdete zde.
Všechny vaše komponenty by měly fungovat - nyní je musíme spojit dohromady.
Vytvoření věže
Pomocí kabelových svazků připojte jedno servo k druhému; na tom nezáleží, jen se ujistěte, že jeden se bude pohybovat na horizontální a druhý se bude pohybovat ve vertikální. Pokud není úhel v pravém úhlu, můžete během testování stáhnout list rotoru a znovu jej usadit.
K upevnění laserového modulu k čepeli druhého serva použijte nějaký tuhý vodič pro modelování, například:
Nakonec jsem celou věc připevnil na nohu stolu s ještě více kabelovými svorkami a trochou šrotu.
Programování věže
Nevím o tobě, ale moje představa o laserové věži pochází z nesčetného počtu sci-fi filmů a epizod hvězdných treků. Někdy bude létat kolem věže a trochu pew-pew výstřely budou létat v zametacím vzoru, vždy milisekundy příliš pomalé, aby náš protagonista nebyl zasažen. To se snažím zopakovat, i když klidně vyladím hlavní rutinu, aby vyhovovala vaší představě o tom, co by věžička měla udělat.
Zde je pseudo kód, který jsem nakonec použil pro hlavní smyčku:
- Randomizujte čas mezi dávkami a čas mezi jednotlivými výstřely.
- Randomizujte počáteční a koncovou polohu každého serva, vert a hori.
- Náhodný počet snímků.
- Vypočítejte počet stupňů změny po každém výstřelu jako rozdíl mezi počáteční a koncovou polohou děleno počtem výstřelů.
- Přesuňte serva do výchozí polohy a počkejte, až se tam dostanou (100ms)
- Smyčka, dokud nebyly pořízeny všechny výstřely, při každém pohybu serva o něco dříve, pohybovat a střílet, pohybovat a střílet.
- Opakovat.
Také jsem přidal samostatný oheň() metoda strukturovat kód trochu lépe. Upravte rozsahy všech náhodný() funkce pro zrychlení nebo zpomalení každého parametru; nebo zvýšit počet výstřelů pro více vibrací tanečního klubu. Přejděte dolů pro video kódu v akci!
#include Servo vert, hori; // create servo object pro ovládání servo int pos = 0; // proměnná pro uložení pozice serva int laser = 12; int bzučák = 11; void setup () hori.attach (9); vert.attach (10); // připojí servo na kolíku 9 k objektu pinMode pro servo (laser, OUTPUT); pinMode (bzučák, VÝSTUP); void loop () int timeBetweenBursts = random (200,1000); int timeBetweenShots = náhodný (50 200); int vertStart = náhodný (1 180); int vertEnd = náhodný (1 180); int horiStart = náhodný (1 180); int horiEnd = náhodný (1 180); int numShots = náhodný (5,20); int vertChange = (vertEnd - vertStart) / numShots; // kolik pohybovat svislou osou při každém výstřelu int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // nechte ho dostat se na počáteční pozici jako první, počkejte trochu hori.write (horiStart); zpoždění (100); for (int shot = 0; shot
V akci
Nemyslím si, že pro tuto malou hračku je praktické použití, ale je to strašně zábavné a existuje mnoho proměnných, které můžete vyladit, abyste dosáhli požadovaného účinku. Možná se hodí pro domácí film LEGO?