Sommario:

Arduino Servo Drum Machine: 4 passaggi
Arduino Servo Drum Machine: 4 passaggi

Video: Arduino Servo Drum Machine: 4 passaggi

Video: Arduino Servo Drum Machine: 4 passaggi
Video: Arduino 4-bit Drum Machine 2024, Luglio
Anonim
Image
Image

Questa è una semplice drum machine o robot controllato da due micro-servo e Arduino Uno. I servi sono montati su una staffa di legno a forma di L che è fissata al rullante con 4 potenti magneti. I servo bracci sono imbullonati a due bacchette che fungono da bacchette. È abbastanza rumoroso ma non troppo rumoroso. Colpi molto più forti potrebbero essere ottenuti usando servi di dimensioni standard e vere bacchette che sono un po' più pesanti. Ma ciò richiederebbe anche un'alimentazione separata per i servi. Usando micro-servi, Arduino fornisce abbastanza corrente per alimentarli direttamente senza un alimentatore separato.

Il video mostra il mio tentativo di programmare una versione semplice dell'assolo di batteria di Wipeout. Ovviamente non è ai veri 160 battiti al minuto, ma ciò potrebbe essere facilmente ottenuto aggiungendo un altro servo che sarebbe piuttosto interessante. Non ho calcolato quale sia il bpm superiore che può essere ottenuto utilizzando un servo e richiede un certo ritardo nel portare la bacchetta dalla posizione di parcheggio alla pelle del tamburo.

I ritmi che puoi creare sono limitati solo dalla tua immaginazione e la drum machine è un compagno più interessante con cui suonare di una drum machine digitale, se sei un musicista.

L'unico aspetto negativo è il rumore del servo che non è così evidente anche se l'audio della fotocamera sembra rilevarlo in modo abbastanza evidente.

Passaggio 1: costruisci la staffa del servo

Costruisci la staffa del servo
Costruisci la staffa del servo
Costruisci la staffa del servo
Costruisci la staffa del servo

Questa staffa è composta da alcune strisce di compensato per hobby che avevo a portata di mano. Ho creato una forma a L imbullonando due pezzi insieme con una staffa a L di metallo. Quindi un piccolo blocco di legno è stato incollato alla striscia superiore per contenere i due servi.

Avevo due comode staffe per servo che ho avvitato al blocco di legno.

Ho usato 4 magneti al neodimio per fissare la staffa al rullante.

Passaggio 2: collegare i servi ad Arduino Uno

Collega i servi ad Arduino Uno
Collega i servi ad Arduino Uno

I servi vcc (filo centrale) vanno ai pin Arduino 5 v.

Il Ground collega a terra Arduino.

I cavi di segnale vanno ai pin 6 e 7.

Uno scudo servo renderebbe ancora più facile se ne hai uno.

Passaggio 3: codice Arduino…

Di seguito è riportato il semplice schizzo per giocare a Wipeout. Devi solo regolare le posizioni dei servi per la tua particolare configurazione.

Divertiti!

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

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

#include "servo.h"

// servo batterista Jim Demello giugno 2018

Servo mioservo1, mioservo2;

int servoPin6 = 6; //servo

int servoPin7 = 7;

void myServo(int servoPosition, int servoNumber) {

if (numeroservo == 1) {

myservo1.write(servoPosition);

}

if (numeroservo == 2) {

myservo2.write(servoPosition);

}

}

void doOneEighthNote(int servoNumber, int beat) {

int delayVal = 60;

if (numeroservo == 1) {

if (battuta) {battuta = 10; // se beat = 1, aggiungi un po' più di servo verso il basso per un colpo più forte

}

myServo(150 + beat, servoNumber); //fuori uso

delay(delayVal);

myServo(100, servoNumber); // su

delay(delayVal);

}

if (numeroservo == 2) {

if (battuta) battuta = -10;

myServo(60 + beat, servoNumber); //fuori uso

delay(delayVal);

myServo(80, servoNumber); // su

delay(delayVal);

}

}

configurazione nulla()

{

// Serial.begin(9600);

myservo1.attach(servoPin6, 1000, 2000); // collega il servo sul pin 9 all'oggetto servo

mioservo1.write(100);

myservo2.attach(servoPin7, 1000, 2000); // collega il servo sul pin 9 all'oggetto servo

myservo2.write(90);

}

ciclo vuoto() {

spazzar via(); // routine del tamburo wipeout

//doOneEighthNote(2, 0);

ritardo(40);

}

cancellazione del vuoto() {

doOneEighthNote(2, 1); doOneEighthNote(1, 0); doOneEighthNote(2, 0); doOneEighthNote(1, 0); // il primo parametro è il numero del servo e il secondo parametro è la battuta (1=battuta, 0=nessuna battuta)

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);

}

Consigliato: