Πίνακας περιεχομένων:

Rhythm Hand: 6 Βήματα
Rhythm Hand: 6 Βήματα

Βίντεο: Rhythm Hand: 6 Βήματα

Βίντεο: Rhythm Hand: 6 Βήματα
Βίντεο: Salsa Beginners Choreography #1 2024, Ιούλιος
Anonim
Ρυθμός Χεριού
Ρυθμός Χεριού

Αυτό το cyberglove έχει να κάνει με τη σωστή κίνηση τη σωστή στιγμή.

Τα φώτα πηγαίνουν από το χέρι σας (αγκώνα) στο χέρι σας και όταν τα φώτα φτάσουν στο χέρι σας πρέπει να πιέσετε τα δάχτυλά σας στο μίνι φωτοκύτταρο.

Εάν πιέσετε το χέρι σας στο μίνι φωτοκύτταρο τη σωστή στιγμή, τα led γίνονται πράσινα. Αν όχι, τα led γίνονται κόκκινα.

Βήμα 1: Συλλέξτε υλικά

  • Ενα γάντι
  • Fabφασμα για να κάνει το γάντι πιο μακρύ
  • Λωρίδα LED WS2812B
  • Καλώδια
  • Arduino
  • Μικρή πώληση φωτογραφιών

Βήμα 2: Δημιουργία κυκλωμάτων

Κατασκευή κυκλωμάτων
Κατασκευή κυκλωμάτων
Κατασκευή κυκλωμάτων
Κατασκευή κυκλωμάτων

Συνδέστε πρώτα τη λωρίδα led στο arduino. Μπορείτε να το κάνετε αυτό συνδέοντας το +5v με το 5v στο arduino. Το Din πρέπει να συνδεθεί με το A0 στο arduino και το GND πρέπει να συνδεθεί με το GND στο arduino.

Πρέπει επίσης να συνδέσετε το μίνι φωτοκύτταρο στο arduino μέσω σύνδεσης στο καλώδιο 5v από τη λωρίδα led και από την ίδια πηγή που συνδέεται με ένα καλώδιο στο PIN 6 του arduino. Η άλλη πλευρά από το μίνι φωτοκύτταρο πρέπει να συνδεθεί στο καλώδιο GND από τη λωρίδα led

Βήμα 3: Σχεδιάζοντας το γάντι

Σχεδιάζοντας το γάντι
Σχεδιάζοντας το γάντι

Το γάντι πρέπει να έχει το σωστό μέγεθος για να ταιριάζει στις λωρίδες led. Τα led πρέπει να ευθυγραμμιστούν για να φαίνονται πιο ευχάριστα.

Για αυτό το παιχνίδι πρέπει να χρησιμοποιήσετε το χέρι σας και θέλετε να μπορείτε να κινείστε ελεύθερα. Αυτό μπορεί να γίνει αντιληπτό βάζοντας το arduino στο γάντι. Χρησιμοποίησα velcro ως συνδετήρα για να κολλήσω το arduino στο γάντι. Στη συνέχεια, για μεγαλύτερη σταθερότητα, μπορείτε να βάλετε ένα σχοινί γύρω από το γάντι και γύρω από το arduino.

Το μίνι φωτοκύτταρο έχει ράψει μέσα στο γάντι, ώστε να παραμείνει στη θέση του.

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

Βήμα 4: Συγκόλληση

Συγκόλληση
Συγκόλληση

Τώρα μπορείτε να ασφαλίσετε τα καλώδια σύνδεσης από το κύκλωμα με συγκόλληση.

Βήμα 5: Κωδικοποίηση

Κωδικοποίηση
Κωδικοποίηση
Κωδικοποίηση
Κωδικοποίηση
Κωδικοποίηση
Κωδικοποίηση

// Ένα βασικό καθημερινό πρόγραμμα δοκιμών ταινιών NeoPixel.

// ΚΑΛΥΤΕΡΕΣ ΠΡΑΚΤΙΚΕΣ NEOPIXEL για πιο αξιόπιστη λειτουργία: // - Προσθέστε 1000 uF CAPACITOR μεταξύ των συνδέσεων + και - της ταινίας NeoPixel. // - ΕΛΑΧΙΣΤΕ ΜΗΚΟΣ ΚΑΛΩΔΙΩΝ μεταξύ της πλακέτας μικροελεγκτή και του πρώτου εικονοστοιχείου. //-Το DATA-IN της ταινίας NeoPixel πρέπει να περάσει από ένα 300-500 OHM RESISTOR. // - ΑΠΟΦΥΓΕΤΕ τη σύνδεση NeoPixels σε LIVE CIRCUIT. Εάν πρέπει, ΠΑΝΤΑ // συνδέστε το GROUND (-) πρώτα, στη συνέχεια +, και μετά τα δεδομένα. //-Όταν χρησιμοποιείτε μικροελεγκτή 3.3V με λωρίδα NeoPixel που τροφοδοτείται με 5V, // συνιστάται ΠΡΑΓΜΑΤΙΚΑ ένας μετατροπέας LOGIC-LEVEL στη γραμμή δεδομένων. // (Η παράλειψη αυτών μπορεί να λειτουργήσει εντάξει στον πάγκο εργασίας σας, αλλά μπορεί να αποτύχει στο πεδίο)

#include #ifdef _AVR_ #include // Απαιτείται για 16 MHz Adafruit Trinket #endif

// Ποια ακίδα στο Arduino είναι συνδεδεμένη με τα NeoPixels; // Σε ένα μπιχλιμπίδι ή Gemma προτείνουμε να το αλλάξετε σε 1: #define LED_PIN 6

// Πόσα NeoPixel είναι προσαρτημένα στο Arduino; #define LED_COUNT 60

// Δηλώστε το αντικείμενο της ταινίας NeoPixel: Λωρίδα Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800). uint32_t χρώμα = λωρίδα. Χρώμα (127, 127, 127); // Λευκό χρώμα, για προεπιλεγμένο bool κλικCorrectly = false; // Argument 1 = Αριθμός εικονοστοιχείων στην ταινία NeoPixel // Argument 2 = αριθμός pin Arduino (οι περισσότεροι είναι έγκυροι) // Argument 3 = σημαίες τύπου pixel, προσθέστε μαζί όπως απαιτείται: // NEO_KHZ800 800 KHz bitstream (τα περισσότερα προϊόντα NeoPixel w/ WS2812 LED) // NEO_KHZ400 400 KHz (κλασικά «v1» (όχι v2) εικονοστοιχεία FLORA, προγράμματα οδήγησης WS2811) // Τα pixel NEO_GRB είναι ενσύρματα για bitstream GRB (τα περισσότερα προϊόντα NeoPixel) // τα pixel NEO_RGB είναι συνδεδεμένα για RGB bitstream (v1 FLORA pixel, όχι v2) // Τα εικονοστοιχεία NEO_RGBW είναι ενσύρματα για ροή bitGB RGB (προϊόντα NeoPixel RGBW)

// λειτουργία εγκατάστασης ()-εκτελείται μία φορά κατά την εκκίνηση ------------------------------------

void setup () {// Αυτές οι γραμμές προορίζονται ειδικά για την υποστήριξη του Adafruit Trinket 5V 16 MHz. // Οποιοσδήποτε άλλος πίνακας, μπορείτε να αφαιρέσετε αυτό το μέρος (χωρίς να το βλάψετε): #εάν οριστεί (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // ΤΕΛΟΣ κώδικα για συγκεκριμένο Trinket.

pinMode (A0, INPUT); strip.begin (); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show (); // Απενεργοποίηση όλων των εικονοστοιχείων ASAP strip.setBrightness (10); // Ορίστε το BRIGHTNESS στο 1/5 περίπου (μέγ. = 255)}

// λειτουργία loop ()-εκτελείται επανειλημμένα όσο ο πίνακας είναι ενεργοποιημένος ---------------

void loop () {clickedCorrectly = theaterChaseOne (χρώμα); εάν (κλικ σωστά) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}

// Μερικές δικές μας λειτουργίες για τη δημιουργία κινούμενων εφέ -----------------

// Φώτα κυνηγητού σε στιλ θεάτρου-μαρκίζας. Περάστε ένα χρώμα (τιμή 32-bit, // a la strip. Color (r, g, b) όπως αναφέρθηκε παραπάνω) και χρόνο καθυστέρησης (σε ms) // μεταξύ πλαισίων. bool theaterChaseOne (uint32_t χρώμα) {bool correct = false; bool clickedWrong = false; για (int index = 0; index 800) {// value sensor light if (index <16) {// 2 leds before ending then you can click color = strip. Color (255, 0, 0); // κόκκινο χρώμα leds clickedWrong = true; // έκανε λάθος κλικ και έπειτα τα led γίνονται κόκκινα} else if (! clickedWrong) {// αν όχι λάθος color = strip. Color (0, 255, 0); // πράσινο χρώμα leds σωστό = true? // κλικ σωστά και μετά τα led γίνονται πράσινα}} strip.clear (); strip.setPixelColor (17 - ευρετήριο, χρώμα). // φώτα led πρώτης γραμμής strip.setPixelColor (18 + ευρετήριο, χρώμα). // φώτα led δεύτερης σειράς strip.setPixelColor (53 - ευρετήριο, χρώμα). // λυχνίες led τρίτης σειράς strip.show (); καθυστέρηση (300)? } επιστροφή σωστή? }

Βήμα 6: Αλλαγές

Αλλαγές
Αλλαγές
Αλλαγές
Αλλαγές
Αλλαγές
Αλλαγές

Έκανα κάποιες αλλαγές. Πρώτον έκρυψα το arduino έτσι θα ήταν πιο άνετο να χρησιμοποιήσω το "Rythm hand" και δεύτερον άλλαξα λίγο τον κωδικό. Άλλαξα τον κωδικό έτσι ώστε όταν πατάτε τη σωστή στιγμή το χρώμα γίνεται πράσινο και τα LEDS κινούνται πιο γρήγορα. Με αυτόν τον τρόπο το LED Swill γίνεται 10% γρηγορότερο από πριν. Αυτό κάνει το παιχνίδι πιο ενδιαφέρον

Αυτός είναι ο κωδικός τώρα:

// Ένα βασικό καθημερινό πρόγραμμα δοκιμών ταινιών NeoPixel. // ΚΑΛΥΤΕΡΕΣ ΠΡΑΚΤΙΚΕΣ NEOPIXEL για πιο αξιόπιστη λειτουργία: // - Προσθέστε 1000 uF CAPACITOR μεταξύ των συνδέσεων + και - της ταινίας NeoPixel. // - ΕΛΑΧΙΣΤΕ ΜΗΚΟΣ ΚΑΛΩΔΙΩΝ μεταξύ της πλακέτας μικροελεγκτή και του πρώτου εικονοστοιχείου. //-Το DATA-IN της ταινίας NeoPixel πρέπει να περάσει από ένα 300-500 OHM RESISTOR. // - ΑΠΟΦΥΓΕΤΕ τη σύνδεση NeoPixels σε LIVE CIRCUIT. Εάν πρέπει, ΠΑΝΤΑ // συνδέστε το GROUND (-) πρώτα, στη συνέχεια +, και μετά τα δεδομένα. //-Όταν χρησιμοποιείτε μικροελεγκτή 3.3V με λωρίδα NeoPixel που τροφοδοτείται με 5V, // συνιστάται ΠΡΑΓΜΑΤΙΚΑ ένας μετατροπέας LOGIC-LEVEL στη γραμμή δεδομένων. // (Η παράλειψη αυτών μπορεί να λειτουργήσει εντάξει στον πάγκο εργασίας σας, αλλά μπορεί να αποτύχει στο πεδίο) #include #ifdef _AVR_ #include // Απαιτείται για 16 MHz Adafruit Trinket #endif // Ποια ακίδα στο Arduino είναι συνδεδεμένη με τα NeoPixels; // Σε ένα μπιχλιμπίδι ή Gemma προτείνουμε να το αλλάξετε σε 1: #define LED_PIN 6 // Πόσα NeoPixels είναι προσαρτημένα στο Arduino; #define LED_COUNT 60 // Δηλώστε το αντικείμενο της ταινίας NeoPixel: Adafruit_NeoPixel strip (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800). uint32_t χρώμα = λωρίδα. Χρώμα (127, 127, 127); // Λευκό χρώμα, για προεπιλεγμένο bool κλικCorrectly = false; int index = 0; int interval = 300; int αποτέλεσμα = 0; ανυπόγραφο πολύ προηγούμενοMs = millis (); // Argument 1 = Αριθμός εικονοστοιχείων στην ταινία NeoPixel // Argument 2 = Αριθμός pin Arduino (οι περισσότεροι είναι έγκυροι) // Argument 3 = Σημαίες τύπου Pixel, προσθέστε μαζί όπως απαιτείται: // NEO_KHZ800 800 KHz bitstream (τα περισσότερα προϊόντα NeoPixel w/ WS2812 LED) // NEO_KHZ400 400 KHz (κλασικά «v1» (όχι v2) εικονοστοιχεία FLORA, προγράμματα οδήγησης WS2811) // Τα pixel NEO_GRB είναι ενσύρματα για bitstream GRB (τα περισσότερα προϊόντα NeoPixel) // τα pixel NEO_RGB είναι συνδεδεμένα για RGB bitstream (v1 FLORA pixel, όχι v2) // NEO_RGBW Τα pixel είναι ενσύρματα για RGBW bitstream (προϊόντα NeoPixel RGBW) // λειτουργία setup ()-εκτελείται μία φορά κατά την εκκίνηση -------------------- ------------ void setup () {// Αυτές οι γραμμές προορίζονται ειδικά για την υποστήριξη του Adafruit Trinket 5V 16 MHz. // Οποιοσδήποτε άλλος πίνακας, μπορείτε να αφαιρέσετε αυτό το μέρος (χωρίς να το βλάψετε): #εάν οριστεί (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // ΤΕΛΟΣ κώδικα για συγκεκριμένο μπιχλιμπίδι. Serial.begin (9600); ενώ (! Σειριακό) {; // περιμένετε να συνδεθεί η σειριακή θύρα. Απαιτείται μόνο για εγγενή θύρα USB} pinMode (A0, INPUT). strip.begin (); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show (); // Απενεργοποίηση όλων των εικονοστοιχείων ASAP strip.setBrightness (10); // Ρυθμίστε το BRIGHTNESS σε περίπου 1/5 (max = 255)} // βρόχος ()-εκτελείται επανειλημμένα όσο ο πίνακας είναι ενεργοποιημένος --------------- void loop () {unsigned long currentMs = millis (); // Λήψη της τρέχουσας ώρας int value = analogRead (A0); // Ανάγνωση του τρέχοντος αισθητήρα φωτός εάν (τιμή> 900 && αποτέλεσμα == 0) {// Εάν ο αισθητήρας πατηθεί και δεν έχει καταγραφεί ακόμη αποτέλεσμα, ενεργοποιήστε τη λήψη αποτελεσμάτων εάν (δείκτης = διάστημα) {// Ελέγξτε εάν το ρεύμα ο βρόχος υπερβαίνει το διάστημα previousMs = currentMs. // Ορίστε το νέο διάστημα στο τρέχον χρονικό + δείκτη διαστήματος + = 1; // Ορίστε τα led ένα βήμα παραπέρα στον βρόχο if (index> 17) {// Trigger end of loop handling index = 0; εάν (αποτέλεσμα == 2) {// Σε σωστό διάστημα αποτελεσμάτων = (int) max ((διάστημα * 0,95), 50); // Ταχύτητα κατά 10%, έως 50ms διάστημα/ χρώμα = λωρίδα. Χρώμα (0, 255, 0). // Ορίστε τα led σε πράσινο} else if (αποτέλεσμα == 1) {// Σε λάθος διάστημα αποτελεσμάτων = 300; // Επαναφορά του διαστήματος χρώμα = λωρίδα. Χρώμα (255, 0, 0); // Ρυθμίστε τα led στο κόκκινο} else {// Σε κανένα αποτέλεσμα δεν έχει καταγραφεί χρώμα = strip. Color (255, 0, 0); // Ορίστε τα led στο κόκκινο} result = 0; // Επαναφορά του αποτελέσματος για τον επόμενο βρόχο} theaterChaseOne (χρώμα, ευρετήριο); // Φωτίστε τα led για προβολή. }} // Μερικές δικές μας λειτουργίες για τη δημιουργία κινούμενων εφέ ----------------- // Φώτα κυνηγητού σε στιλ θεάτρου. Περάστε ένα χρώμα (τιμή 32-bit, // a la strip. Color (r, g, b) όπως αναφέρθηκε παραπάνω) και χρόνο καθυστέρησης (σε ms) // μεταξύ πλαισίων. void theaterChaseOne (uint32_t χρώμα, int index) {strip.clear (); strip.setPixelColor (17 - ευρετήριο, χρώμα). // φώτα led πρώτης γραμμής strip.setPixelColor (18 + ευρετήριο, χρώμα). // φώτα led δεύτερης σειράς strip.setPixelColor (53 - ευρετήριο, χρώμα). // λυχνίες led τρίτης σειράς strip.show (); }

Συνιστάται: