Tabla de contenido:

Arduino Servo Drum Machine: 4 pasos
Arduino Servo Drum Machine: 4 pasos

Video: Arduino Servo Drum Machine: 4 pasos

Video: Arduino Servo Drum Machine: 4 pasos
Video: Amazing arduino project 2024, Mes de julio
Anonim
Image
Image

Esta es una simple caja de ritmos o robot controlado por dos micro-servos y Arduino Uno. Los servos están montados en un soporte de madera en forma de L que se sujeta al tambor con 4 potentes imanes. Los brazos del servo están atornillados a dos palillos que sirven como baquetas. Es bastante ruidoso pero no demasiado fuerte. Se podrían obtener golpes mucho más fuertes usando servos de tamaño estándar y baquetas reales que son un poco más pesadas. Pero eso también requeriría una fuente de alimentación separada para los servos. Al usar micro-servos, Arduino suministra suficiente corriente para alimentarlos directamente sin una fuente de alimentación separada.

El video muestra mi intento de programar una versión simple del solo de batería de Wipeout. Por supuesto, no está en los 160 latidos por minuto reales, pero eso podría obtenerse fácilmente agregando otro servo que sería bastante bueno. No he calculado cuáles son los bpm máximos que se pueden obtener usando un servo y se requiere algo de demora para que la baqueta pase de su posición de estacionamiento al parche del tambor.

Los ritmos que puedes crear solo están limitados por tu imaginación y la caja de ritmos es un compañero más interesante para tocar que una caja de ritmos digital, si eres músico.

El único inconveniente es el ruido del servo, que en realidad no es tan notable, aunque el audio de la cámara parece captarlo de manera notable.

Paso 1: construya el soporte del servo

Construye el soporte del servo
Construye el soporte del servo
Construye el soporte del servo
Construye el soporte del servo

Este soporte está hecho de algunas tiras de madera contrachapada de hobby que tenía a mano. Creé una forma de L atornillando dos piezas con un soporte en L de metal. Luego se pegó un pequeño bloque de madera a la tira superior para sostener los dos servos.

Tenía dos prácticos soportes de servo que atornillé al bloque de madera.

Usé 4 imanes de neodimio para sujetar el soporte a la caja.

Paso 2: conecta los servos al Arduino Uno

Conecte los servos al Arduino Uno
Conecte los servos al Arduino Uno

Los servos vcc (cable del medio) van a los pines Arduino 5 v.

Los cables de tierra a la tierra de Arduino.

Los cables de señal van a los pines 6 y 7.

Un servo escudo lo haría aún más fácil si tiene uno.

Paso 3: Código Arduino …

A continuación se muestra el boceto simple para jugar Wipeout. Solo tiene que ajustar las posiciones de los servos para su configuración particular.

¡Divertirse!

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

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

#include "servo.h"

// servo batería Jim Demello Junio 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) {

int delayVal = 60;

if (servoNumber == 1) {

if (latido) {latido = 10; // si beat = 1, agregue un poco más de servo hacia abajo para un golpe más fuerte

}

myServo (150 + latido, servoNumber); //abajo

delay (delayVal);

myServo (100, servoNumber); // arriba

delay (delayVal);

}

if (servoNumber == 2) {

si (latido) latido = -10;

myServo (60 + latido, servoNumber); //abajo

delay (delayVal);

myServo (80, servoNumber); // arriba

delay (delayVal);

}

}

configuración vacía ()

{

// Serial.begin (9600);

myservo1.attach (servoPin6, 1000, 2000); // conecta el servo en el pin 9 al objeto servo

myservo1.write (100);

myservo2.attach (servoPin7, 1000, 2000); // conecta el servo en el pin 9 al objeto servo

myservo2.write (90);

}

bucle vacío () {

limpiar(); // rutina de limpieza del tambor

// doOneEighthNote (2, 0);

retraso (40);

}

anular wipeout () {

doOneEighthNote (2, 1); doOneEighthNote (1, 0); doOneEighthNote (2, 0); doOneEighthNote (1, 0); // el primer parm es el número de servo y el segundo parm es el tiempo (1 = tiempo, 0 = sin tiempo)

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: