
Harry James
0
4569
376
Je li ti dosadno? Moglo bi se izgraditi i laserska kupola. Znate - jedan koji ide pew pew, puca u crvenu zraku u puno različitih smjerova, a možda čak i baca u dimni stroj? Da, jedan od njih.
Što će vam trebati
- Težak
- 2 servosa
- Laserski modul, poput onog iz ovog kompleta senzora
- Piezo zujalica ili drugi mali izlazni uređaj
- Metalne žice i kabele za vezanje
- Dugi ženski-> muški skočni kablovi, plus redovni kablovi za skok
Po želji, potreban je stroj za dim, laser je prilično niske snage, tako da nećete moći vidjeti snop bez dima čak i u mračnoj sobi.
Izgradite plan
Osnovna ideja kupole je da se laserski modul postavi na jedan servo radi horizontalne rotacije; zatim montirajte taj paket na drugi servo uređaj postavljen pod kutom od 90 stupnjeva da biste osigurali okomito kretanje. Imamo piezo za pružanje pew pew zvučni efekti, a ja bačim u dimni stroj za dobru mjeru.
Ispitivanje servo
Ovisno o vašem servu, žice se mogu obojati različito, ali općenito:
- Crvena je pozitivna žica, a na oba moja servo uređaja bila je središte tri - biti spojen na + 5V šinu.
- Smeđa ili crna je negativan, biti povezan s GND-om na Arduinu.
- Bijela ili narančasta je signalna žica za spajanje na PWM digitalni I / O pin (9 i 10 u demonstraciji ispod).
Nakon što spojite dva servo uređaja, prenesite sljedeći uzorak koda. Nazvao sam jedan servo “Hori” za kontrolu horizontalnog kretanja i drugo “rastinje”. Svaki od njih trebao bi obaviti cijeli raspon kretanja (u mom slučaju oko 60 stupnjeva).
#include Servo vert, hori; // stvoriti servo objekt za kontrolu servo // može se stvoriti najviše osam servo objekata int pos = 0; // varijabla za spremanje postave void servo položaja () hori.attach (9); vert.attach (10); // pričvršćuje servo na pin 9,10 na servo objekte vert.write (0); hori.write (0); void petlja () for (pos = 0; pos = 1; pos- = 10) // vraća se sa 180 stupnjeva na 0 stupnjeva vert.write (pos); // reći servu da ide na poziciju u varijabli 'pos' hori.write (pos); kašnjenja (100); // čeka 100ms da servo dođe do položaja
Sve dobro? Krećući se tada.
Ispitivanje lasera i Pew Pew Zvuk
Laserski modul je poput LED-a, ali u njega je ugrađen otpornik, tako da ga možemo izravno spojiti na digitalni I / O - vrlo je jednostavno. Ako koristite isti laserski modul kao i ja, “-” Ide na GND, S ide na pin 12. Izmijenite gornji uzorak da biste dobili pin 12 izlaz:
int laser = 12; pinMode (laser, OUTPUT);
Zatim trepćite pribadaču i isključite svaku petlju koristeći se standardnim digitalWrite () način.
Koristit ćemo samo PWM za pokretanje piezo zujanja na ugodnoj razini zvuka - ako želite, mogli biste eksperimentirati s tonovnom bibliotekom, ali potreban je jednostavan šum. Crnu žicu povežite s masom, a crvenu žicu za pin 11. Definirajte svoju zvučni signal na odgovarajućem pinu postavite na način izlaza i aktivirajte pomoću analogWrite (zujalica, 100) (ili bilo koji broj koji želite do 254); i analogWrite (zujalica, 0) isključiti.
Kompletan uzorak koda modificiran da proguta dva servo-a, aktivira laser i reproducira dosadni zvuk, možete pronaći ovdje.
Sve bi vaše komponente trebale raditi - sada moramo sve to povezati.
Stvaranje kupole
Pomoću kabelskog spoja pričvrstite jedan servo na drugi; zapravo nije važno koji, samo se pobrinite da se jedan pomiče po horizontali, a drugi će se kretati okomito. Tijekom ispitivanja možete izvaditi oštricu rotora i ponovno sjediti ako kut nije pravi.
Upotrijebite neku krutu žicu za modeliranje kako biste pričvrstili laserski modul na sječivo drugog servo-uređaja:
Napokon sam sve to pričvrstio na stolu s još više kablova i malo drveta.
Programiranje kupole
Ne znam za vas, ali moja zamisao o laserskoj kupoli dolazi iz bezbroj znanstveno-fantastičnih filmova i epizoda zvijezde. Neizbježno će netko proći pored kupole i malo Pew-Pew snimke će izletjeti u zamršenom obrascu, uvijek milisekundi presporima, tako da naš glavni lik zapravo ne bude pogođen. To pokušavam replicirati, iako slobodno prilagodite glavnu rutinu kako bi odgovarao vašoj ideji o tome što bi toranj trebao učiniti.
Evo pseudo koda koji sam na kraju koristio za glavnu petlju:
- Nasumično odredite vrijeme između snimki i vrijeme između svakog pojedinog snimka.
- Slučajno odredite početni i krajnji položaj za svaki servo, vert i hori.
- Nasumično odredite broj snimaka.
- Izračunajte broj stupnjeva promjene nakon svakog pucanja kao razliku između početne i krajnje pozicije podijeljene s brojem pucnjeva.
- Pomaknite servo na početne položaje i pričekajte malo da stignu tamo (100 ms)
- Petljajte dok se ne naprave svi snimci, svaki put pomaknuvši servo malo kako je prethodno izračunato; pomicati i pucati, pomicati i pucati.
- Ponoviti.
Dodao sam i zasebno vatra() metoda malo bolje strukturirati kod. Podesite raspone svih slučajna () funkcije za ubrzavanje ili usporavanje svakog parametra; ili povećati broj snimaka za više plesnog kluba. Pomaknite se prema dolje za videozapis koda u akciji!
#include Servo vert, hori; // stvoriti servo objekt za kontrolu servo int pos = 0; // varijabla za pohranu servo položaja int lasera = 12; int zvuk = 11; praznina postava () hori.attach (9); vert.attach (10); // pričvršćuje servo na pin 9 na servo objekt pinMode (laser, OUTPUT); pinMode (zujalica, OUTPUT); void petlja () int timeBet BetweenBursts = slučajno (200,1000); int timeBet BetweenShots = slučajno (50,200); int vertStart = slučajni (1,180); int vertEnd = slučajni (1,180); int horiStart = slučajni (1,180); int horiEnd = slučajni (1,180); int numShots = slučajni (5,20); int vertChange = (vertEnd - vertStart) / numShots; // koliko pomaknuti okomitu os po svakom snimku int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // neka prvo krene u početni položaj, pričekajte malo hori.write (horiStart); kašnjenja (100); for (int pucati = 0; pucati
U akciji
Mislim da nema praktične koristi za ovu malu igračku, ali to je jako zabavno i postoji puno varijabli koje možete prilagoditi da biste postigli željeni učinak. Možda će vam dobro doći za domaći LEGO film?