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

Das könnte dich auch interessieren …

2 Antworten

  1. Moses Pöhls sagt:

    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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert