Töne in Bewegung umsetzen – Sound to move
Mithilfe eines Microcontrollers, einem Mikrofon, einem Spektrumanalayzer IC und 2 Servomotoren können Geräusche Frequenzabhängig in Bewegung gewandelt werden.
Update 15.01.2019: Hier ist mein Verwendeter Programmcode:
include <Servo.h>
Servo myservo1; // create servo object to control a servo
Servo myservo2;
int analogPin = A0; // read from multiplexer using analog input 0
int strobePin = A5; // strobe is attached to digital pin 2
int resetPin = A4; // reset is attached to digital pin 3
int spectrumValue[7]; // to hold a2d values
int filter=155;
void setup()
{
myservo1.attach(9); // attaches the servo on pin 9 to the servo object
myservo2.attach(5);
pinMode(analogPin, INPUT);
pinMode(strobePin, OUTPUT);
pinMode(resetPin, OUTPUT);
digitalWrite(resetPin, LOW);
digitalWrite(strobePin, HIGH);
Serial.begin(9600);
}
void loop()
{
// val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
// val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
// myservo.write(val); // sets the servo position according to the scaled value
// delay(15); // waits for the servo to get there
digitalWrite(resetPin, HIGH);
digitalWrite(resetPin, LOW);
for (int i=0;i<7;i++) {
digitalWrite(strobePin, LOW);
delayMicroseconds(30);
spectrumValue[i] = analogRead(analogPin);
spectrumValue[i] = constrain(spectrumValue[i],filter, 1023);
spectrumValue[i] = map(spectrumValue[i], filter,800,10,179);
Serial.print(spectrumValue[i]);
Serial.print(" ");
digitalWrite(strobePin, HIGH);
}
Serial.println();
myservo1.write(spectrumValue[2]); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
myservo2.write(spectrumValue[4]); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
// analogWrite(redPin, );
// analogWrite(redPin, spectrumValue[1]);
// analogWrite(greenPin, spectrumValue[3]);
// analogWrite(greenPin, spectrumValue[4]);
// analogWrite(bluePin, spectrumValue[5]);
// analogWrite(bluePin, spectrumValue[6]);
Die Servos nur an den PWM Pins betreiben. Bei meinem Servos habe ich folgende Belegung vorgefunden: rot = Plus ; weiß = Masse ; gelb = Signal.
Ansonsten wird nur noch ein MSGEQ7 Equalizer IC und ein Mikrofon mit eventuellem Vorverstärker benötigt. Unter folgendem Link mehr zum MSGQ7 und dem Arduino: http://nuewire.com/info-archive/msgeq7-by-j-skoba/ (Big thanks Skoba).
Hallo MIchael,
Ich bin auf der suche nach genau so einer Schaltung mit dem MSGEQ7 + Servomotor, wie in deinem Video „Sound to move“. Könntest du mir deine Komponenten auflisten und den Code hochladen? Ich benötige die Umwandlung von Frequenzbereichen in mechanische Bewegung für mein Projekt an der TH Köln.
Schöne Grüße
Moses Pöhls
Code und Infos habe ich jetzt im Beitrag aktualisiert! Viele Grüße, MiHu-Works