Inhoudsopgave:

Arduino servo-drummachine - Ajarnpa
Arduino servo-drummachine - Ajarnpa

Video: Arduino servo-drummachine - Ajarnpa

Video: Arduino servo-drummachine - Ajarnpa
Video: Arduino Servo Drum Machine 2024, November
Anonim
Image
Image

Dit is een eenvoudige twee micro-servo en Arduino Uno gestuurde drummachine of robot. De servo's zijn gemonteerd op een L-vormige beugel van hout die met 4 sterke magneten aan de snaredrum wordt vastgehouden. De servo-armen zijn vastgeschroefd aan twee eetstokjes die als drumstokken dienen. Het is vrij luid maar niet te luid. Veel luidere hits kunnen worden verkregen door servo's van standaardformaat te gebruiken en echte drumstokken die een stuk zwaarder zijn. Maar dat zou ook een aparte voeding voor de servo's vereisen. Door gebruik te maken van micro-servo's levert de Arduino voldoende stroom om ze direct van stroom te voorzien zonder aparte voeding.

De video toont mijn poging om een eenvoudige versie van de Wipeout-drumsolo te programmeren. Natuurlijk is het niet de echte 160 slagen per minuut, maar dat zou gemakkelijk kunnen worden verkregen door een andere servo toe te voegen, wat best cool zou zijn. Ik heb niet berekend wat de hoogste bpm is die kan worden verkregen door een servo te gebruiken en het vereist enige vertraging om de drumstick van zijn geparkeerde positie naar het drumvel te krijgen.

De ritmes die je kunt creëren, worden alleen beperkt door je verbeeldingskracht en de drummachine is een interessantere metgezel om mee te spelen dan een digitale drummachine, als je een muzikant bent.

Het enige nadeel is de servo-ruis die niet echt merkbaar is, hoewel de camera-audio het behoorlijk opvallend lijkt op te pikken.

Stap 1: Bouw de servobeugel

Bouw de servobeugel
Bouw de servobeugel
Bouw de servobeugel
Bouw de servobeugel

Deze beugel is gemaakt van enkele stroken hobbymultiplex die ik bij de hand had. Ik heb een L-vorm gemaakt door twee stukken aan elkaar te schroeven met een metalen L-beugel. Vervolgens werd een klein blok hout op de bovenste strook gelijmd om de twee servo's vast te houden.

Ik had twee handige servobeugels die ik op het blok hout schroefde.

Ik heb 4 neodymium-magneten gebruikt om de beugel aan de snaredrum te houden.

Stap 2: Sluit de servo's aan op de Arduino Uno

Sluit de servo's aan op de Arduino Uno
Sluit de servo's aan op de Arduino Uno

De servo's vcc (middelste draad) gaat naar de Arduino 5 v-pinnen.

De aardingsdraden naar Arduino-aarde.

De signaaldraden gaan naar pin 6 en 7.

Een servo-schild zou het nog gemakkelijker maken als je er een hebt.

Stap 3: Arduino-code…

Hieronder is de eenvoudige schets om Wipeout te spelen. U hoeft alleen de servoposities aan te passen aan uw specifieke opstelling.

Veel plezier!

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

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

#include "servo.h"

// servodrummer Jim Demello juni 2018

Servo myservo1, myservo2;

int servoPin6 = 6; //servo

int servoPin7 = 7;

void myServo(int servoPosition, int servoNumber) {

if (servoNummer == 1) {

myservo1.write(servoPositie);

}

if (servoNummer == 2) {

myservo2.write(servoPositie);

}

}

void doOneEighthNote (int servoNumber, int beat) {

int vertragingVal = 60;

if (servoNummer == 1) {

als (slag) {slag = 10; // als beat = 1 voeg dan een beetje meer servo toe voor een sterkere dreun

}

myServo(150 + beat, servonummer); //omlaag

vertraging (vertragingswaarde);

myServo(100, servoNumber);//up

vertraging (vertragingswaarde);

}

if (servoNummer == 2) {

als (beat) beat = -10;

myServo(60 + beat, servoNummer); //omlaag

vertraging (vertragingswaarde);

myServo(80, servoNumber);//up

vertraging (vertragingswaarde);

}

}

ongeldige setup()

{

// Serieel.begin (9600);

myservo1.attach (servoPin6, 1000, 2000); // bevestigt de servo op pin 9 aan het servo-object

mijnservo1.write(100);

myservo2.attach (servoPin7, 1000, 2000); // bevestigt de servo op pin 9 aan het servo-object

mijnservo2.write(90);

}

lege lus() {

uitvegen(); // wipeout drumroutine

//doOneEighthNote (2, 0);

vertraging (40);

}

ongeldig wissen() {

doOneEighthNote(2, 1); doOneEighthNote(1, 0); doOneEighthNote(2, 0); doOneEighthNote(1, 0); // eerste parm is servonummer en tweede parm is beat (1 = beat, 0 = geen beat)

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

}

Aanbevolen: