Pew Pew! Πώς να χτίσετε ένα λέιζερ πυργίσκων με ένα Arduino

Βαριέσαι? Μπορεί επίσης να χτίσει έναν πυργίσκο λέιζερ.

Βαριέσαι?  Μπορεί επίσης να χτίσει έναν πυργίσκο λέιζερ.
Διαφήμιση

Βαριέσαι? Μπορεί επίσης να χτίσει έναν πυργίσκο λέιζερ. Ξέρετε - ένα που πηγαίνει pew pew, πυροβολεί μια κόκκινη ακτίνα σε πολλές διαφορετικές κατευθύνσεις, και ίσως ακόμη και ρίξει σε μια μηχανή καπνού; Ναι, ένας από αυτούς.

Τι θα χρειαστείτε

  • Arduino
  • 2 σερβομηχανισμοί
  • Μονάδα λέιζερ, όπως ένα από αυτό το κιτ αισθητήρα
  • Πιεζοηλεκτρικός βομβητής ή άλλη συσκευή μικρού εξόδου
  • Μεταλλικά σύρματα και καλώδια για στερέωση
  • Μεγάλα θηλυκά-> αρσενικά καλώδια άλματος, συν κανονικά καλώδια άλματος

Προαιρετικά, απαιτείται μηχανή καπνού - το λέιζερ έχει πολύ χαμηλή ισχύ, οπότε δεν θα μπορείτε να δείτε τη δέσμη χωρίς καπνό ακόμα και σε σκοτεινό δωμάτιο.

συστατικά

Δημιουργία σχεδίου

Η βασική ιδέα του πυργίσκου είναι η τοποθέτηση της μονάδας λέιζερ στην κορυφή ενός σερβο για την παροχή οριζόντιας περιστροφής. στη συνέχεια, τοποθετήστε τη συσκευασία σε άλλο σερβο που έχει τοποθετηθεί σε γωνία 90 μοιρών για να παρέχει κάθετη κίνηση. Έχουμε ένα πιεζοειδές για να προσφέρουμε τα ηχητικά εφέ του pew, και ρίχνω μια μηχανή καπνού για καλή μέρα.

Σέρβο Δοκιμές

Ανάλογα με το σερβο, τα καλώδια ενδέχεται να είναι διαφορετικά χρωματισμένα, αλλά γενικά:

  • Το κόκκινο είναι το θετικό καλώδιο, και στις δύο σερβοί μου ήταν το κέντρο τριών - να συνδεθεί με + 5v σιδηροτροχιά.
  • Το καφέ ή το μαύρο είναι το αρνητικό, το οποίο πρέπει να συνδεθεί με το GND στο Arduino.
  • Το λευκό ή πορτοκαλί είναι το καλώδιο σήματος, το οποίο πρέπει να συνδεθεί σε μια ψηφιακή είσοδο / έξοδο PWM (9 και 10 στην παρακάτω επίδειξη).

Μόλις συνδέσετε τα δύο σας σερβοσυστήματα, μεταφορτώστε τον ακόλουθο δείγμα κώδικα. Έχω ονομάσει ένα σερβο "hori" για τον έλεγχο της οριζόντιας κίνησης, και το άλλο "vert". Ο καθένας πρέπει να εκτελέσει μια πλήρη σειρά σάρωσης κίνησης (περίπου 60 μοίρες, στην περίπτωσή μου).

#include Servo vert, hori; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { hori.attach(9); vert.attach(10); // attaches the servo on pin 9, 10 to the servo objects vert.write(0); hori.write(0); } void loop() { for(pos = 0; pos =1; pos-=10) // goes back from 180 degrees to 0 degrees { vert.write(pos); // tell servo to go to position in variable 'pos' hori.write(pos); delay(100); // waits 100ms for the servo to reach the position } } 

Ολα καλά? Συνεχίζοντας.

Δοκιμάστε τον ήχο laser και Pew Pew

Η μονάδα λέιζερ είναι ακριβώς όπως ένα LED, αλλά έχει μια αντίσταση ενσωματωμένη στην ενότητα έτσι μπορούμε να την συνδέσουμε απευθείας σε ένα ψηφιακό I / O - πολύ απλό. Εάν χρησιμοποιείτε την ίδια μονάδα λέιζερ με εμένα, το " - " πηγαίνει στο GND, το S πηγαίνει στον ακροδέκτη 12. Τροποποιήστε τον παραπάνω δείγμα για να κάνετε τον ακροδέκτη 12 μια έξοδο:

 int laser = 12; pinMode(laser, OUTPUT); 

Στη συνέχεια, αναβοσβήνετε την ακίδα και ενεργοποιείτε κάθε βρόχο χρησιμοποιώντας την τυπική μέθοδο digitalWrite () .

Θα χρησιμοποιήσουμε μόνο PWM για να οδηγήσουμε τον πιεζοηλεκτρικό βομβητή σε ένα άνετο ηχητικό επίπεδο - θα μπορούσατε να πειραματιστείτε με τη χρήση της βιβλιοθήκης τόνων, αν θέλετε, αλλά ένας απλός θόρυβος είναι μόνο που χρειάζομαι. Συνδέστε το μαύρο καλώδιο στη γείωση και το κόκκινο καλώδιο στο pin 11. Καθορίστε τον βομβητή σας στον αντίστοιχο ακροδέκτη, ρυθμίστε σε κατάσταση εξόδου και ενεργοποιήστε χρησιμοποιώντας το analogWrite (βομβητής, 100) (ή οποιοσδήποτε αριθμός θέλετε έως 254). και analogWrite (buzzer, 0) για απενεργοποίηση.

Ο πλήρης κώδικας δειγματοληψίας που τροποποιείται για να σκουπίσει δύο σέρβο, να ενεργοποιήσει ένα λέιζερ και να παίξει τον ενοχλητικό ήχο, μπορεί να βρεθεί εδώ.

Όλα τα συστατικά σας θα πρέπει να λειτουργούν - τώρα πρέπει να τα συνδέσουμε όλα μαζί.

Δημιουργία του πυργίσκου

Χρησιμοποιώντας δεσμούς καλωδίων, συνδέστε ένα σερβο στον άλλο. δεν έχει σημασία το ποια, βεβαιωθείτε ότι κάποιος θα κινηθεί στην οριζόντια και ο άλλος θα μετακινηθεί στην κάθετη. Μπορείτε να τραβήξετε τη λεπίδα του δρομέα και να επανατοποθετήσετε κατά τη διάρκεια της δοκιμής αν η γωνία δεν είναι σωστή.

σερβο

Χρησιμοποιήστε κάποιο σκληρό καλώδιο μοντελοποίησης για να στερεώσετε τη μονάδα λέιζερ στην λεπίδα του άλλου σέρβο, όπως έτσι:

σύρμα-για-λέιζερ-ενότητα

Τελικά, έβαλα όλο το πράγμα σε ένα πόδι γραφείου με ακόμα περισσότερους δεσμούς καλωδίων και λίγο ξύλο θραυσμάτων.

επισυνάψτε-πυργίσκος-στο-τραπέζι

Προγραμματισμός του πυργίσκου

Δεν ξέρω για σας, αλλά η ιδέα μου για έναν πυργίσκο λέιζερ προέρχεται από αμέτρητες ταινίες sci-fi και επεισόδια αστέρι trek. Οπωσδήποτε κάποιος θα πετάξει πέρα ​​από έναν πυργίσκο και μικρά πυροβολισμένα πασσάλια θα πετάξουν έξω με ένα σαρωτικό μοτίβο, πάντα πολύ αργά, έτσι ώστε ο πρωταγωνιστής μας να μην χτυπήσει. Αυτό προσπαθώ να αντιγράψω, αν και μπορείτε να τροποποιήσετε την κύρια ρουτίνα για να ταιριάξετε την ιδέα σας για το τι πρέπει να κάνει ένας πυργίσκος.

Εδώ είναι ο ψευδοκώδικας που κατέληξα να χρησιμοποιώ για τον κύριο βρόχο:

  • Τυχαίνει το χρόνο μεταξύ των ριπών και του χρόνου μεταξύ κάθε ξεχωριστής λήψης.
  • Τυποποιήστε την αρχική και την τελική θέση για κάθε σερβο, vert και hori.
  • Τυχαίνει τον αριθμό των λήψεων που πρέπει να ληφθούν.
  • Εκτελέστε τον αριθμό των βαθμών αλλαγής μετά από κάθε λήψη ως διαφορά μεταξύ αρχικών και τελικών θέσεων διαιρούμενων με τον αριθμό των βολών.
  • Μετακινήστε το σερβο στις θέσεις εκκίνησης και περιμένετε λίγο για να φτάσουν εκεί (100ms)
  • Βρόχο μέχρι να ληφθούν όλα τα πλάνα, κάθε φορά που μετακινούνται οι σερβοί λίγο όπως υπολογίστηκε προηγουμένως. μετακινήστε και πυροβολήστε, μετακινήστε και πυροβολήστε.
  • Επαναλαμβάνω.

Πρόσθεσα επίσης μια ξεχωριστή μέθοδο fire () για να δομήσω τον κώδικα λίγο καλύτερα. Ρυθμίστε τις περιοχές όλων των τυχαίων () λειτουργιών για να επιταχύνετε ή να επιβραδύνετε κάθε παράμετρο. ή να αυξήσετε τον αριθμό των πυροβολισμών για μια πιο χορευτική ατμόσφαιρα. Κάντε κύλιση προς τα κάτω για να δείτε ένα βίντεο του κώδικα σε δράση!

 #include Servo vert, hori; // create servo object to control a servo int pos = 0; // variable to store the servo position int laser = 12; int buzzer = 11; void setup() { hori.attach(9); vert.attach(10); // attaches the servo on pin 9 to the servo object pinMode(laser, OUTPUT); pinMode(buzzer, OUTPUT); } void loop() { int timeBetweenBursts = random(200, 1000); int timeBetweenShots = random(50, 200); int vertStart = random(1, 180); int vertEnd = random(1, 180); int horiStart = random(1, 180); int horiEnd = random(1, 180); int numShots = random(5, 20); int vertChange = (vertEnd - vertStart) / numShots; //how much to move vertical axis by each shot int horiChange = (horiEnd - horiStart) / numShots; vert.write(vertStart);//let it get to start position first, wait a little hori.write(horiStart); delay(100); for(int shot = 0; shot  

Εν ΔΡΑΣΕΙ

Δεν νομίζω ότι υπάρχει μια πρακτική χρήση για αυτό το μικρό παιχνίδι, αλλά είναι μια φοβερή διασκέδαση και υπάρχουν πολλές μεταβλητές που μπορείτε να τσιμπήσετε για να έχετε το επιθυμητό αποτέλεσμα. Ίσως θα έρθει χρήσιμο για μια σπιτική ταινία LEGO;

In this article