Spisu treści:

Arduino Servo Drum Machine: 4 kroki
Arduino Servo Drum Machine: 4 kroki

Wideo: Arduino Servo Drum Machine: 4 kroki

Wideo: Arduino Servo Drum Machine: 4 kroki
Wideo: SERVO ARDUINO DRUM 2024, Lipiec
Anonim
Image
Image

Jest to prosty automat perkusyjny lub robot sterowany dwoma mikroserwomechanizmami i Arduino Uno. Serwa są zamontowane na drewnianym wsporniku w kształcie litery L, który jest przymocowany do werbla za pomocą 4 silnych magnesów. Ramiona serwa są przykręcone do dwóch pałeczek, które służą jako pałeczki do perkusji. Jest dość głośno, ale nie za głośno. Znacznie głośniejsze uderzenia można było uzyskać, używając serwomechanizmów o standardowych rozmiarach i prawdziwych pałeczek, które są nieco cięższe. Ale to też wymagałoby osobnego zasilania serw. Dzięki zastosowaniu mikroserwomechanizmów Arduino dostarcza wystarczająco dużo prądu, aby zasilać je bezpośrednio bez osobnego zasilacza.

Film pokazuje moją próbę zaprogramowania prostej wersji solo perkusyjnego Wipeout. Oczywiście nie jest to prawdziwe 160 uderzeń na minutę, ale można to łatwo uzyskać, dodając kolejne serwo, co byłoby całkiem fajne. Nie obliczyłem, jakie najwyższe bpm można uzyskać za pomocą serwomechanizmu i wymaga to pewnego opóźnienia w przeniesieniu pałki z pozycji zaparkowanej do naciągu.

Rytmy, które możesz stworzyć, są ograniczone tylko twoją wyobraźnią, a automat perkusyjny jest bardziej interesującym towarzyszem do zabawy niż cyfrowy automat perkusyjny, jeśli jesteś muzykiem.

Jedynym minusem jest szum serwomechanizmu, który nie jest tak zauważalny, chociaż dźwięk kamery wydaje się go wyraźnie wychwytywać.

Krok 1: Zbuduj wspornik serwo

Zbuduj wspornik serwo
Zbuduj wspornik serwo
Zbuduj wspornik serwo
Zbuduj wspornik serwo

Ten wspornik jest zrobiony z kilku pasków sklejki hobby, które miałem pod ręką. Stworzyłem kształt litery L, skręcając dwa elementy razem z metalowym wspornikiem w kształcie litery L. Następnie do górnego listwy przyklejono mały drewniany klocek, który miał przytrzymywać dwa serwomechanizmy.

Miałem dwa poręczne wsporniki serwa, które przykręciłem do drewnianego klocka.

Do zamocowania wspornika do werbla użyłem 4 magnesów neodymowych.

Krok 2: Podłącz serwa do Arduino Uno

Podłącz serwa do Arduino Uno
Podłącz serwa do Arduino Uno

Serwa vcc (środkowy przewód) trafiają do pinów Arduino 5 v.

Przewody uziemiające do uziemienia Arduino.

Przewody sygnałowe idą do pinów 6 i 7.

Tarcza serwomechanizmu sprawiłaby, że byłoby to jeszcze łatwiejsze, gdybyś ją miał.

Krok 3: Kod Arduino…

Poniżej znajduje się prosty szkic do gry w Wipeout. Musisz tylko dostosować pozycje serwa do konkretnej konfiguracji.

Baw się dobrze!

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

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

#include "servo.h"

// perkusista serwo Jim Demello czerwiec 2018

Serwo myservo1, myservo2;

int serwoPin6 = 6; //serwo

int serwoPin7 = 7;

void myServo(int servoPosition, int servoNumber) {

if (numer serwa == 1) {

myservo1.write(servoPosition);

}

jeśli (numer serwo == 2) {

myservo2.write(servoPosition);

}

}

void doOneEighthNote(int servoNumber, int beat) {

int opóźnienieVal = 60;

if (numer serwa == 1) {

jeśli (uderzenie) {uderzenie = 10; // jeśli beat = 1 to dodaj trochę więcej serwa w dół dla silniejszego uderzenia

}

myServo(150 + beat, servoNumber); //w dół

opóźnienie(OpóźnienieWart);

myServo(100, numer serwo);//w górę

opóźnienie(OpóźnienieWart);

}

jeśli (numer serwo == 2) {

jeśli (uderzenie) beat = -10;

myServo(60 + beat, servoNumber); //w dół

opóźnienie(OpóźnienieWart);

myServo(80, numer serwo);//w górę

opóźnienie(OpóźnienieWart);

}

}

pusta konfiguracja()

{

// Serial.początek(9600);

myservo1.attach(servoPin6, 1000, 2000); // dołącza serwo na pin 9 do obiektu serwo

myservo1.write(100);

myservo2.attach(servoPin7, 1000, 2000); // dołącza serwo na pin 9 do obiektu serwo

myservo2.write(90);

}

pusta pętla () {

wymazać(); // procedura wymazywania bębna

//doOneEighthNote(2, 0);

opóźnienie(40);

}

nieważne wymazanie() {

doOneEighthNote(2, 1); doOneEighthNote(1, 0); doOneEighthNote(2, 0); doOneEighthNote(1, 0); // pierwszy parametr to numer serwa, a drugi parametr to bit (1=bit, 0=brak rytmu)

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

}

Zalecana: