Índice:

Arduino Servo Drum Machine: 4 etapas
Arduino Servo Drum Machine: 4 etapas

Vídeo: Arduino Servo Drum Machine: 4 etapas

Vídeo: Arduino Servo Drum Machine: 4 etapas
Vídeo: Arduino Servo Robotic Drummer - Does Wipeout 2024, Novembro
Anonim
Image
Image

Este é um simples robô ou bateria controlada por dois micro-servos e Arduino Uno. Os servos são montados em um suporte de madeira em forma de L que é preso à caixa com 4 ímãs fortes. Os braços do servo são aparafusados a dois pauzinhos que servem como baquetas. É muito alto, mas não muito alto. Batidas muito mais altas poderiam ser obtidas usando servos de tamanho padrão e baquetas reais, que são um pouco mais pesadas. Mas isso também exigiria uma fonte de alimentação separada para os servos. Usando micro-servos, o Arduino fornece corrente suficiente para alimentá-los diretamente sem uma fonte de alimentação separada.

O vídeo mostra minha tentativa de programar uma versão simples do solo de bateria Wipeout. Claro que não são 160 batidas por minuto, mas isso poderia ser facilmente obtido adicionando outro servo que seria muito legal. Eu não calculei qual o bpm máximo que pode ser obtido usando um servo e requer algum atraso para levar a baqueta de sua posição estacionada para a pele da bateria.

Os ritmos que você pode criar são limitados apenas pela sua imaginação e a bateria eletrônica é uma companhia mais interessante para se tocar do que uma bateria eletrônica, se você for músico.

A única desvantagem é o ruído do servo que não é realmente perceptível embora o áudio da câmera pareça captá-lo notavelmente.

Etapa 1: Construir o Servo Bracket

Construir o Servo Bracket
Construir o Servo Bracket
Construir o Servo Bracket
Construir o Servo Bracket

Este suporte é feito de algumas tiras de compensado artesanal que eu tinha em mãos. Eu criei uma forma de L aparafusando duas peças juntas com um suporte em L de metal. Em seguida, um pequeno bloco de madeira foi colado na tira superior para segurar os dois servos.

Eu tinha dois práticos suportes de servo que aparafusei no bloco de madeira.

Usei 4 ímãs de neodímio para prender o suporte na caixa.

Etapa 2: conecte os servos ao Arduino Uno

Conecte os Servos ao Arduino Uno
Conecte os Servos ao Arduino Uno

O servos vcc (fio do meio) vai para os pinos do Arduino 5 v.

Os fios de aterramento para o aterramento do Arduino.

Os fios de sinal vão para os pinos 6 e 7.

Um servo escudo tornaria tudo ainda mais fácil se você tiver um.

Etapa 3: Código Arduino …

Abaixo está o esboço simples para jogar Wipeout. Você apenas precisa ajustar as posições do servo para sua configuração particular.

Divirta-se!

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

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

#include "servo.h"

// servo baterista Jim Demello, junho de 2018

Servo myservo1, myservo2;

int servoPin6 = 6; // servo

int servoPin7 = 7;

void myServo (int servoPosition, int servoNumber) {

if (servoNumber == 1) {

myservo1.write (servoPosition);

}

if (servoNumber == 2) {

myservo2.write (servoPosition);

}

}

void doOneEighthNote (int servoNumber, int beat) {

valor do retardo interno = 60;

if (servoNumber == 1) {

if (batida) {batida = 10; // se beat = 1 então adicione um pouco mais de servo para baixo para um baque mais forte

}

myServo (150 + batida, servoNumber); //baixa

atraso (atrasoVal);

myServo (100, servoNumber); // up

atraso (atrasoVal);

}

if (servoNumber == 2) {

if (batida) batida = -10;

myServo (60 + batida, servoNumber); //baixa

atraso (atrasoVal);

myServo (80, servoNumber); // up

atraso (atrasoVal);

}

}

void setup ()

{

// Serial.begin (9600);

myservo1.attach (servoPin6, 1000, 2000); // anexa o servo no pino 9 ao objeto servo

myservo1.write (100);

myservo2.attach (servoPin7, 1000, 2000); // anexa o servo no pino 9 ao objeto servo

myservo2.write (90);

}

void loop () {

destrua(); // wipeout drum rotina

// doOneEighthNote (2, 0);

atraso (40);

}

void wipeout () {

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0); // o primeiro parâmetro é o número do servo e o segundo parâmetro é a batida (1 = batida, 0 = sem batida)

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

}

Recomendado: