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

Arduino Servo Drum Machine: 4 Βήματα
Arduino Servo Drum Machine: 4 Βήματα

Βίντεο: Arduino Servo Drum Machine: 4 Βήματα

Βίντεο: Arduino Servo Drum Machine: 4 Βήματα
Βίντεο: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Ιούλιος
Anonim
Image
Image

Πρόκειται για μια απλή μηχανή τυμπάνου ή ρομπότ με δύο μικροσέρβο και Arduino Uno. Τα σερβίτσια είναι τοποθετημένα σε ξύλινο στήριγμα σχήματος L που συγκρατείται στο τύμπανο με 4 ισχυρούς μαγνήτες. Οι σερβοί βραχίονες είναι βιδωμένοι σε δύο ξυλάκια που χρησιμεύουν ως τύμπανα. Είναι αρκετά δυνατά αλλά όχι πολύ δυνατά. Πολύ πιο δυνατά χτυπήματα θα μπορούσαν να επιτευχθούν χρησιμοποιώντας σερβίς κανονικού μεγέθους και αληθινά drum-sticks που είναι αρκετά βαρύτερα. Αλλά αυτό θα απαιτούσε επίσης ξεχωριστό τροφοδοτικό για τα servos. Χρησιμοποιώντας micro-servos, το Arduino τροφοδοτεί αρκετό ρεύμα για να τα τροφοδοτεί απευθείας χωρίς ξεχωριστό τροφοδοτικό.

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

Οι ρυθμοί που μπορείτε να δημιουργήσετε περιορίζονται μόνο από τη φαντασία σας και το drum machine είναι ένας πιο ενδιαφέρων σύντροφος για να παίξετε από μια ψηφιακή drum machine, αν είστε μουσικός.

Το μόνο μειονέκτημα είναι ο σερβο θόρυβος, ο οποίος δεν είναι τόσο αισθητός, αν και ο ήχος της κάμερας φαίνεται να τον αυξάνει αρκετά.

Βήμα 1: Κατασκευάστε το Servo Bracket

Κατασκευάστε το Servo Bracket
Κατασκευάστε το Servo Bracket
Κατασκευάστε το Servo Bracket
Κατασκευάστε το Servo Bracket

Αυτό το στήριγμα είναι φτιαγμένο από μερικές λωρίδες κόντρα πλακέ για χόμπι που είχα στο χέρι. Δημιούργησα ένα σχήμα L βιδώνοντας δύο κομμάτια μαζί με ένα μεταλλικό στήριγμα L. Στη συνέχεια, ένα μικρό τεμάχιο ξύλου ήταν κολλημένο στην επάνω λωρίδα για να κρατήσει τα δύο servos.

Είχα δύο εύχρηστα στηρίγματα στηρίγματος τα οποία βίδωσα στο ξύλο.

Χρησιμοποίησα 4 μαγνήτες νεοδυμίου για να συγκρατήσω το στήριγμα στο τύμπανο.

Βήμα 2: Συνδέστε τα Servos στο Arduino Uno

Συνδέστε τα Servos στο Arduino Uno
Συνδέστε τα Servos στο Arduino Uno

Το servos vcc (μεσαίο καλώδιο) πηγαίνει στις ακίδες Arduino 5 v.

Τα καλώδια Ground συνδέονται με τη γείωση Arduino.

Τα καλώδια σήματος πηγαίνουν στις ακίδες 6 και 7.

Μια σερβο ασπίδα θα το έκανε ακόμα πιο εύκολο αν έχετε.

Βήμα 3: Κωδικός Arduino…

Παρακάτω είναι το απλό σκίτσο για να παίξετε το Wipeout. Απλώς πρέπει να προσαρμόσετε τις θέσεις σερβο για τη συγκεκριμένη ρύθμιση.

Καλα να περνατε!

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "servo.h"

// servo drummer Jim Demello Ιούνιος 2018

Servo myservo1, myservo2;

int servoPin6 = 6; // σερβο

int servoPin7 = 7;

void myServo (int servoPosition, int servoNumber) {

εάν (servoNumber == 1) {

myservo1.write (servoPosition);

}

εάν (servoNumber == 2) {

myservo2.write (servoPosition);

}

}

void doOneEighthNote (int servoNumber, int beat) {

int delayVal = 60;

εάν (servoNumber == 1) {

if (beat) {beat = 10; // αν χτυπήσετε = 1, προσθέστε λίγο ακόμη σερβο κάτω για πιο δυνατό χτύπημα

}

myServo (150 + beat, servoNumber); //κάτω

καθυστέρηση (delayVal)?

myServo (100, servoNumber); // επάνω

καθυστέρηση (delayVal)?

}

εάν (servoNumber == 2) {

αν (χτυπήσει) κτυπήσει = -10;

myServo (60 + beat, servoNumber); //κάτω

καθυστέρηση (delayVal)?

myServo (80, servoNumber); // επάνω

καθυστέρηση (delayVal)?

}

}

void setup ()

{

// Serial.begin (9600);

myservo1.attach (servoPin6, 1000, 2000); // συνδέει το σερβο στο pin 9 στο σερβο αντικείμενο

myservo1.write (100);

myservo2.attach (servoPin7, 1000, 2000); // συνδέει το σερβο στο pin 9 στο σερβο αντικείμενο

myservo2.write (90);

}

void loop () {

wipeout (); // ρουτίνα τυμπάνου wipeout

// doOneEighthNote (2, 0);

καθυστέρηση (40)?

}

void wipeout () {

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0); // το πρώτο παρμί είναι ο αριθμός σερβο και το δεύτερο πάχος είναι χτυπημένο (1 = χτύπησε, 0 = δεν χτύπησε)

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 0); doOneEighthNote (1, 0); doOneEighthNote (2, 1); doOneEighthNote (1, 0);

doOneEighthNote (2, 0); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

doOneEighthNote (2, 0); doOneEighthNote (1, 0); doOneEighthNote (2, 1); doOneEighthNote (1, 0);

doOneEighthNote (2, 0); doOneEighthNote (1, 0); doOneEighthNote (2, 1); doOneEighthNote (1, 0);

doOneEighthNote (2, 0); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0);

}

Συνιστάται: