Talaan ng mga Nilalaman:

Arduino Servo Drum Machine: 4 na Hakbang
Arduino Servo Drum Machine: 4 na Hakbang

Video: Arduino Servo Drum Machine: 4 na Hakbang

Video: Arduino Servo Drum Machine: 4 na Hakbang
Video: Arduino Drum Sequencer: 8 tracks, 16 steps per measure, 8 measures per pattern 2024, Hulyo
Anonim
Image
Image

Ito ay isang simpleng dalawang micro-servo at Arduino Uno na kinokontrol na drum machine o robot. Ang mga servo ay naka-mount sa isang hugis L na bracket na kahoy na hawak sa bitag drum na may 4 na malalakas na magnet. Ang mga braso ng servo ay nakakabit sa dalawang chopstick na nagsisilbing drum-sticks. Ito ay medyo malakas ngunit hindi masyadong malakas. Ang mas malakas na mga hit ay maaaring makuha sa pamamagitan ng paggamit ng karaniwang mga laki ng servo at totoong mga drum-stick na medyo mabibigat. Ngunit mangangailangan din iyon ng isang hiwalay na supply ng kuryente para sa mga servo. Sa pamamagitan ng paggamit ng mga micro-servos ang Arduino ay naghahatid ng sapat na kasalukuyang upang mapagana ang mga ito nang direkta nang walang hiwalay na suplay ng kuryente.

Ipinapakita ng video ang aking pagtatangka sa pagprograma ng isang simpleng bersyon ng solo ng Wipeout drum. Siyempre hindi ito sa totoong 160 beats bawat minuto ngunit madali itong makuha sa pamamagitan ng pagdaragdag ng isa pang servo na magiging cool. Hindi ko kinakalkula kung ano ang nangungunang bpm na maaaring makuha sa pamamagitan ng paggamit ng isang servo at nangangailangan ito ng ilang pagkaantala sa pagkuha ng drumstick mula sa naka-park na posisyon nito sa drum-head.

Ang mga ritmo na maaari mong likhain ay limitado lamang ng iyong imahinasyon at ang drum machine ay isang mas kawili-wiling kasamang makakapaglaro kaysa sa isang digital drum machine, kung ikaw ay isang musikero.

Ang tanging downside ay ang ingay ng servo na kung saan ay hindi talaga kapansin-pansin kahit na ang audio ng camera ay tila napulot ito nang kapansin-pansin.

Hakbang 1: Buuin ang Servo Bracket

Buuin ang Servo Bracket
Buuin ang Servo Bracket
Buuin ang Servo Bracket
Buuin ang Servo Bracket

Ang bracket na ito ay ginawa mula sa ilang mga piraso ng libangan na playwud na mayroon ako. Lumikha ako ng isang L-hugis sa pamamagitan ng bolted dalawang piraso kasama ang isang metal na L-bracket. Pagkatapos isang maliit na bloke ng kahoy ang nakadikit sa tuktok na strip upang hawakan ang dalawang servos.

Mayroon akong dalawang madaling gamiting servo bracket na isinelyo ko sa bloke ng kahoy.

Gumamit ako ng 4 na neodymium magnet upang hawakan ang bracket sa snare drum.

Hakbang 2: Wire the Servos to the Arduino Uno

Wire ang mga Servos sa Arduino Uno
Wire ang mga Servos sa Arduino Uno

Ang servos vcc (gitnang wire) ay papunta sa Arduino 5 v pins.

Ang Ground wires sa Arduino ground.

Ang signal wires ay pumunta sa pin 6 at 7.

Ang isang servo na kalasag ay gagawing mas madali kung mayroon ka nito.

Hakbang 3: Arduino Code…

Nasa ibaba ang simpleng sketch upang i-play ang Wipeout. Kailangan mo lang ayusin ang mga posisyon ng servo para sa iyong partikular na pag-setup.

Magsaya ka!

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

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

# isama ang "servo.h"

// servo drummer Jim Demello Hunyo 2018

Servo MyServer1, MyServo2;

int servoPin6 = 6; // servo

int servoPin7 = 7;

void myServo (int servoPosition, int servoNumber) {

kung (servoNumber == 1) {

myservo1.write (servoPosition);

}

kung (servoNumber == 2) {

myservo2.write (servoPosition);

}

}

void doOneEightyNote (int servoNumber, int beat) {

int delayVal = 60;

kung (servoNumber == 1) {

kung (matalo) {beat = 10; // if beat = 1 pagkatapos ay magdagdag ng kaunti pang servo pababa para sa mas malakas na tibok

}

myServo (150 + beat, servoNumber); // pababa

antala (delayVal);

myServo (100, servoNumber); // pataas

antala (delayVal);

}

kung (servoNumber == 2) {

kung (matalo) talunin = -10;

myServo (60 + beat, servoNumber); // pababa

antala (delayVal);

myServo (80, servoNumber); // pataas

antala (delayVal);

}

}

walang bisa ang pag-setup ()

{

// Serial.begin (9600);

myservo1.attach (servoPin6, 1000, 2000); // nakakabit ang servo sa pin 9 sa object ng servo

myservo1.write (100);

myservo2.attach (servoPin7, 1000, 2000); // nakakabit ang servo sa pin 9 sa object ng servo

myservo2.write (90);

}

void loop () {

wipeout (); // wipeout drum routine

// doOneEightyNote (2, 0);

pagkaantala (40);

}

void wipeout () {

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0); // first parm ay servo number at ang pangalawang parm ay pinalo (1 = beat, 0 = no beat)

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 0); doOneEightyNote (1, 0); doOneEightyNote (2, 1); doOneEightyNote (1, 0);

doOneEightyNote (2, 0); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 1); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

doOneEightyNote (2, 0); doOneEightyNote (1, 0); doOneEightyNote (2, 1); doOneEightyNote (1, 0);

doOneEightyNote (2, 0); doOneEightyNote (1, 0); doOneEightyNote (2, 1); doOneEightyNote (1, 0);

doOneEightyNote (2, 0); doOneEightyNote (1, 0); doOneEightyNote (2, 0); doOneEightyNote (1, 0);

}

Inirerekumendang: