Audio -> Drehung - Neuling Part 2

Hallo Leute, ich bin's mal wieder ;)... Ich würde gerne mit einem Servo einen Papp-Gitarrenarm (4x2x0,5cm) steuern, der die Bewegung über eine Gitarrenaufnahme bekommt. Die Servo Drehung soll auf einen minimal und maximalwert beschränkt werden.( 0° und 45°)

Für die bessere Vorstellung: http://aiminstitute.org/blog/wp-content/uploads/2010/09/VU_Meter.jpg

Als Kind hatten meine Eltern eine HIFI Anlage, die so eone Anzeige besessen hat. Die Bewegungen kamen dabei schön locker flockig. Jetz weiss ich nicht ob ich das mit einem Servo ähnlich hinbekomm und wie ich am besten da ran gehen sollte. Alternativ einen Ozillator hernehmen? Hat der aber dann die Kraft einen Papp-Arm (4x2x0,5cm) zu heben? Mir fehlt da noch jegliche Erfahrung.

Hättet ihr ein paar Ratschläge für mich übrig?

bestes

Ich verstehe Dich nicht ganz; Du möchtest ein Karton-Arm-Nachbildung als VU-Meter benutzen und mit einem Servo bewegen? Grüße Uwe

Äh... du hast ja meinen alten Thread verfolgt. Da lief es darauf hinaus, dass ich diesen Papparm mit einem Servo ansteuern soll. Hab vor einigen Stunden zum ersten mal einen Servo über Arduino angesteuert und bin grad am überlegen, wie ich am Ende den Papparm synchron zur Musik bewegen kann. Auf Animationsbasis hatte ich das nämlich schon geschafft. Nur funktioniert das Prinzip was ich in der Animation angewandt habe nicht unbedingt auf dieses "echte" Modell was ich jetz umsetzen will.

Auf der Suche nach einer alternativen Lösung, kam mir spontan die Idee - möglicher Weise statt Servo - einen VU-Meter zu verwenden, an dem der Arm befestigt ist. Weiss aber bisher noch nicht, ob es möglich ist VU-Meter irgendwie mit dem Arduino zu kombinieren.

Aber im Prinzp hast du's schon richtig verstanden ;).. Der Karton-Arm soll sich wie ein VU-Meter verhalten. Stellt sich nur die Frage, wie? Also... er soll sich wie ein analoges VU-Meter verhalten. Die sind von der Bewegung her irgendwie natürlicher, weil sie durch die Trägheit nicht sofort ihre Richtung wechseln.

Edit: hmmm... genauer gesagt: Du hast es sogar vor mir verstanden. Wenn ich drüber nachdenke ist es genau das was ich erreichen will. Ist dies ohne weiteres machbar?

Ein Drehspulenmeßwerk eines VU-Meters ist zu schwach und zu zerbrechlich um einen Paparm dranzumontieren. Das Eigegewicht des Papparms würde den Zeiger unten blockieren.

Hat Du eine kaputte Harddisk (einen nicht zu alte)? Da funktioniert die Magnetkopf-Armbewegung ähnlich einem Drehspulmeßwerk. Nur ist es etwas robuster aufgebaut.

Aufpassen auch auf die Masse des Arms die der Beschleunigung entgegenwirkt. und versuch den Arm möglicht mit Gegengewicht auszubalanzieren.

grüße Uwe

ah....schad. ne alte harddisk konnt ich erstmal nicht auftreiben. zerbrech mir aber seit stunden den kopf wie ich überhaupt mit audio arbeiten kann. find irgendwie nix. das darf doch gar ned so kompliziert sein. audio signal rein, frequenz auslesen, in werte umwandeln und die werte als position vom servo hernehmen. aber ich weiss ja nicht mal wie man audio ans arduino schickt.... man man man...ich weiss da glaub ich nicht vorauf ich mich eingelassen hab.

Das müsste doch mit dem Servo funktionieren. Prinzipiell hast du eine PWM Ausgangsspannung aus dem Arduino. Der Servo stellt sich auf diese Werte ein. Das größere Problem hierbei ist es, das Audiosignal (woher auch immer) in entsprechender Weise zu verstärken. Opamp. Wenn du also ein "Line-out" von einem Verstärker oder Elektrogitarre hast, dann musst du es auf Pegel zwischen 0V und +5V bringen. Verstärken und gleichrichten. Dieses kannst du dann mit einem Analog-In des Arduinos verbinden. Ggf. Glätten oder dämpfen.

Der Rest ist Software. Prinzipiell ist es eine einfache Gleichung. Beispiel: Du willst nur 45° Servoausschlag. Hast 0 bis 5V Eingangsspannung am Arduiono Analog-In. Dann entspricht +5V = 45°. 0V = 0°.

Dein Problem wird sein, das Analogsignal in ein Arduinotauglichen Pegel zu wandeln.

Grüße Micha

hallo micha, ich höre jetz zum zweiten mal davon mit mV zu arbeiten. Hier was mir ein Bekannter zu dem Thema geschrieben hat. Es ist jedoch noch anzumerken, dass ich neben den Gitarrenarm später noch eine Mundpartie synchroniseren will.

Audioanalyse in Echtzeit ist nicht-trivial. Ich würde was anderes vorschlagen, bei dem Du mehr Kontrolle über die Aktuation hast: Du machst je eine Audiospur für Gesang und Gitarre. In dieser ist aber jedesmal, wenn der Mund geschlossen sein soll, bzw. der Arm oben sein soll, eine Maximalaussteuerung (keine Frequenz, sondern nur der Maximalpegel, ~350 mV), sonst kein Signal (= 0 mV, NICHT eine negative Aussteuerung). Jede der beiden Spuren wird dann über einen Stereokanal ausgegeben (d.h. du brauchst noch einen zweiten Stereoausgang für die normale Musik, z.B. über eine USB-Soundkarte). Die Signale auf beiden Spuren nimmst Du zum Steuern von Arm und Kiefer. Jeder Kanal kommt dann an einen analogen Eingang an einem Arduino. Der steuert dann je einen Servomotor abhängig davon ob ein Signal anliegt oder nicht. Prinzipiell kannst Du auch Zwischenstufen am Audioausgang ausgeben und dann auch den Servomotor auf verschiedene Positionen steuern.

Wenn ich das richtig verstehe, meint ihr im das Gleiche. Jedoch verstehe ich das Prinzip nicht. Was für eine Auswirkung hat den die Änderung der Spannung? Also in welchem Bezug stehen den Spannung und Servo? Muss ich den Servo auf Codebasis so einstellen dass er sich ununterbrochen dreht. Wenn es aber keine Spannung hat, dann dreht er sich nicht mehr?

Das einzige was ich bisher geschafft hab (was weit weg vom Ziel und nix mit euren Lösungsvorschlägen zu tun hat) ist es das "Sweep"-Beispiel so um zuschreiben, dass es aus einem Array Werte ausliest und immer an diese Position fährt. Ich dachte urspünglich man könnte z.B. die Amplitudenwerte eines Audiosignal in einem Array zwischenspeichern, beschneiden und dann auslesen lassen...aber das scheint's noch nicht zu sein.

gruss bob

P.S: wäre es eigentlich nicht möglich es wie bei diesen LED-Musikanzeigen zumachen? Die lesen doch auch den Sound aus und bekommen Werte um den Ausschlag zu visualisieren. Anstatt dass LEDs angesteuert werden, soll der Servo die Werte in Positionen umsetzten?

Hallo barbarian, ja ich glaube dein Bekannter und ich meinen das selbe. Und die Idee mit dem linken und rechten Kanal finde ich Klasse.

Also in welchem Bezug stehen den Spannung und Servo?

Der Servo ist dann nichts anderes als die Aussteuerungsanzeige die du weiter oben erwähnt hast. Allerdings viel kräftiger. Der Zeiger von einem Analogistrument könnte noch nichtmal eine Fliege erschlagen. Ergo nimmst du einen Servo und steuerst ihn genau so an damit er sich wie dieses "VU"-Meter verhält.

Was für eine Auswirkung hat den die Änderung der Spannung?

Damit ist gemeint die Amplitude, also die Höhe des Ausschlags (wenn man so sagen will). Je lauter der Ton desto größer ist dann die Bewegung des Servo's.

Ich will es nicht unnötig kompliziert machen, aber denkbar wäre auch nur den sogenannten "Peak", also eine Spitze pro Ton als Trigger zu benutzen, um dann den Servo einen Zyklus (also runter hoch) zu fahren. Genau dasselbe für den Mund. Wenn du Stimme und Gitarre in separaten Spuren (oder links,rechts) hast, dann bewegen sich die Servos sogar unabhängig voneinander.

Gruß Micha

Hallo,

wie wärs den Sound nicht direkt abzugreifen, statt dessen über ein Mikro oder Piezo Buzzer?

z.B. wie hier: http://www.nerdkits.com/videos/sound_meter/

die Signale dann so auswerten, dass die gewünschten Servobewegungen ausgeführt werden. Naja, geht leider wohl kaum getrennt für Gitarre und Gesang.

Gruß Klaus

Ja berlin1109, im Grunde genommen ist dies nichts anderes als ein "Audiosignal" welches verstärkt werden will. Bein 2 Kanälen muss man es eben zwei mal aufbauen. Das geht genau in die Richtung was ich sagen wollte.

Danke für den Link. Sehr interessant und lehrreich noch dazu ! Mit entsprechender Anpassung der Bauteile ließe sich das bestimmt auch auf ein Gitarren oder Line - Signal umstricken (falls überhaupt nötig) -> ausprobieren !

Gruß Micha

Danke noch mal für die Anteilnahme.
Bin leider grad nur auf’m Sprung, würde mich trotzdem gerne kurz mitteilen :wink:

Nur vorab schon mal: Ich hab von dem gewünschten Song sowhl Gitarren- als auch Gesangsspur extra. D.h. in sofern alles machbar…

zurück:
Hab jetzt das auch hier erwähnte Prinzip noch mal mit Bekannten durchgesprochen.
Die Idee momentan:
Ich zerschneide Kopfhörer, gehe damit aus dem line-out, des PCs in den Arduino. In einen der analog-Slots. Also… linker Kanal in den einen, rechter in den anderen. Die Sounddatei wird so vorbereitet das links die Gitarrenspur ist und rechts die Gesangsspur.
Die weitere Überlegung (sicherlich irgendwo auch analog zu dem von euch geschriebenen):
(Ausgehend von nur einem Servo erstmal in Pseudo-Code sprache)
Ich hole mir den Wert von z.B. Pin 9 (wo das Audiosignal ankommt) und speicher es als variable.
in der späteren Funktion schreib ich dann etwas in der art:
map(0,variable,0, 45) …

ich “glaube” so in etwas dürfte es gehen, odeR?
Wobei ich mir da eben wieder nicht sicher bin, ob man das so einfach machen kann. schliesslich kann man ja nicht vorhersagen welcher wert grad der maximalwert ist, damit man den mappen kann.

und ist es dann möglich zu sagen:
int position = map(0,variable,0, 45)
und später die “position” einfach dem servo übermitteln?
myservo.write(position); oder so?

Was meint ihr?

Hier hat jemand schon mal ein VU Meter mit einem Arduino gezaubert. Sicher wirst du hier ein paar Interessante Codeschipsel entleihen können nur das du halt nicht LED ansteuerst sondern Servos. http://arduino.cc/forum/index.php/topic,51912.0.html

hmmm... Also ich habe jetz n kopfhörer auseinander genommen und das eine kabel davon in den analog in hingeführt. über folgenden code versuch ich die werte von diesem pin auszulesen: int analogPin = 5; int val = 0;

void setup() { Serial.begin(9600); }

void loop() { val = analogRead(analogPin); Serial.println(val); }

Ergebnis: Wenn nix im pin steckt, dann werden werte um ca. 150 ausgegeben. Sobald ich das Kabel reinsteck wird 0 ausgegeben. Kabel ist am Kopfhörer ausgang angeschlossen und der PC-Lauststärke Mixer ist voll aufgedreht.

Bedeutet das jetz, dass ich einen Verstärker brauche oder hab ich da was falsch angeschlossen?

Nun ich hatte es ja weiter oben schon geschrieben, lies dir das nochmal genau durch unter anderem:

Wenn du also ein “Line-out” von einem Verstärker oder Elektrogitarre hast, dann musst du es auf Pegel zwischen 0V und +5V bringen. Verstärken und gleichrichten. Dieses kannst du dann mit einem Analog-In des Arduinos verbinden. Ggf. Glätten oder dämpfen.

Du kannst nicht von einem Audiosignaleingang direkt in den Analogport des Aruinos reingehen. Geht nicht weil:

  1. Spannung zu gering
  2. Wechselspannung
  3. Keinen Tiefpassfilter

Und die Gnd’s der Geräte musst du auch noch miteinander verbinden. Stell dir das bitte nicht so einfach vor.

Mich würde die genaue Verkabelung deiner Hardware ineressieren. Kannst du uns mal die Verdrahtung als Bild oder Schema geben ?

Gruß Micha

Hatte das ja eigentlich auch gelesen, dachte aber eher das wäre schon Feintuning. Bin davon ausgegangen, dass zumindest irgendwas "printbares" im Arduino ankommt. Das wusste ich noch nicht: 1. Spannung zu gering 2. Wechselspannung 3. Keinen Tiefpassfilter

Naja... zur genauen Verkabelung gibt's eigentlich wenig zu sagen: - Arduino Uno via USB an PC angeschlossen - 'Nen billigen mp-3Player Kopfhörer auseinander geschnitten - Das eine Kabel davon genommen, gezwirbelt und in den Arduino gesteckt (sowohl das linke als auch das rechte Kabel hatten jeweils zwei Kabel in der Ummantelung)

Ich hab's mir in der Tat ziemlich einfach vorgestellt XD Habe übrigens nicht vor über Gitarrenverstärker oder ähnliches da rein zu gehen.

Mein eigentlicher Plan wäre gewesen: - Kopfhörer an den line-out des PC anzuschliessen (ich glaube, beim line-out geht immer die gleiche Lautstärke raus) - Linkes Kabel in Analog In 1 und rechtes in Analog In 2 - Via Phones-Out an ne HiFi-Anlage oder ähnliches Anschliessen (Für's Playback)

Der Song selber würde auf dem linken Kanal die Gitarrenspur beinhalten und auf dem rechten den Gesang.

klang für mich zumindest plausibel, wobei ich mich da leider null auskenn.

Deine Grundidee ist eigentlich schon ganz gut. 2 Kanäle, Servo…
Aber um eine brauchbare Signalaufbereitung kommt du leider nicht rum. Ob das Signal nun aus dem PC, Stereoanlage oder Gitarrenverstärker kommt, das ist immer ganz ähnlich.

Und beim Line Out kommt auch nicht immer die gleiche Lautstärke raus. Es gibt immer Soundpassagen die “leiser, lauter” sind. Auch das musst du berücksichtigen.

Ich will dir keinesfalls die Hoffnungen nehmen. Aber da wirst du dich noch heftig einarbeiten müssen. Eines ist sicher: Es geht, wenn man es richtig macht. Nur ich habe leider nicht die Zeit dir die komplette Schaltung zu erstellen.

Vielleicht hat hier noch der eine oder andere ein “Modul” in der Hinterhand, welches dieses Problem löst. Aber ich glaube da ist Einarbeiten und Lernen angesagt.

Eines ist sicher: Hier wird dir bestimmt geholfen, jedoch wird dir keiner eine fertige Lösung liefern. Die Ansätze sind da. Bau darauf auf :slight_smile:

Hach ja... das einfache Sachen immer so kompliziert sein müssen :D... Wobei ein simples Modul sicherlich zu finden sein sollte. Bin ja schlieeslich nicht der erste der versucht ein Audiosignal in den Arduino zu schicken. ;)

barbarian, jetzt schaust du dir nochmal das Material von der Seite an die berlin1109 verlinkt hat. Da ist schon mal das Wesentliche drin. Dort wird ein Microcontroller über einen Verstärker aus einer Audioquelle gespeist.

Lass dir die dort gezeigte Schaltung nochmal auf der Zunge zergehen. Sooo kompliziert ist das nun auch wieder nicht. Und nicht den Sand in den Kopf stecken ;) . Es ist noch kein Meister vom Himmel gefallen.

Gruß Micha

werd mal versuchen mich da reinzu lesen. abgesehen davon.., dürfte das hier nicht den zweck erfüllen? http://macetech.com/store/index.php?main_page=product_info&cPath=4&products_id=11

klingt zumindest als ob's genau das mach, was ich brauche und ich möchte das rad nicht neu erfinden ;)

Das scheint in der Tat das zu sein, was du suchst. Ich habe es nur kurz überflogen. Wenn ich es richtig gesehen habe braucht es noch ein paar Digitalpins zusätzlich. Mir wird die Zeit gerade zu knapp. Aber es schaut auf den ersten Blick garnicht schlecht aus. Und für den Preis scheint es auch ok.

Vielleicht hat hier der Eine oder Andere auch noch einen Kommentar dazu. Ich würde mich in das Teil genau einlesen.

Ansonsten, ja das wäre eine Alternative zur Bastellösung. Ich würde es an deiner Stelle probieren. Behalte die Bastellösung zumindest im Hinterkopf, damit du auch ungefähr weißt was da passiert ;)

Gruß Micha