(Un)gedämpfte Schwingung am Federpendel






Dokumentation

Einleitung / Was soll die Anwendung leisten?

Im Internet kursieren sicher duzende simple Applets zum Thema Federpendel. Unser Anliegen war jedoch, ein Applet zu programmieren, bei dem alle Parameter (Federkonstante, Gewicht des Pendels, Erdbeschleunigung und Reibungsbeiwert) in Echtzeit, dh. während der laufenden Schwingung veränderbar sind. Diese Simulation kann so sogar mehr als in der realen Welt möglich ist. Da die Berechnung nur über die wirkenden Kräfte erfolgt (details siehe unten), ist die Korrektheit dieser Simulation leichter nachzuvollziehen als wenn die in Formelsammlungen zu findende Formel verwendet wird. Außerdem erlaubt nur die Berechnung über die Kräfte die erwünschte Echtzeit-Veränderung.

Lösungsstrategie / Physikalischer Ansatz

  • F .... Gesammtkraft
  • G .... Gewichtskraft
  • Ff ... Federkraft
  • Fr ... Reibungskraft
  • k ... Federkonstante
  • m ... Gewicht des Pendels
  • g ... (Erd)beschleunigung
  • R ... Reibungsbeiwert
  • x ... Auslenkung nach unten
  • v ... Geschwindigkeit (v positiv bedeutet nach unten gerichtet)
  • a ... Beschleunigung
  • dt ... Zeitabschnitt der Berechnung

Der Kräfteansatz liefert F = G - Ff - Fr
mit G=m*g; Ff=k*x und Fr= R*v erhält man : F= m*g - k*x - R*v
und mit F=m*a : a= (m*g - k*x - R*v)/m oder ausmultipliziert a= g - k*x/m - R*v/m
aus v= v_alt + a*dt folgt : v = v_alt + (g - k*x/m - R*v/m)*dt
Daraus kann mit x = x_alt + v*dt schließlich die neue Auslenkung berechnet werden.

Realisierung

  • Hauptklasse federpendel. Sie erbt von Applet und implementiert die Methoden und Eigenschaften von AdjustmentListener und Runnable. Von den implementierten Methoden wird init(), adjustmentValueChanged() und run() überschrieben.
  • Unterklasse PaintCanvas (erbt von Canvas). Diese wird benötigt, um im Canvas zeichnen zu können.
  • Unterklassen startstoL und resetL (implementieren beide Actionlistener) zum Behandeln der Button-events
  • Layout über Bordermanager. Text, Schieberegler und Buttons im eigenen Panel mit Gridlayout.
  • Bei Änderung eines Schiebereglers wird über einen zentralen AdjustmentListener die Methode schieberwerteneu() aufgerufen. Diese bildet aus den Int-Werten der Schieberegler durch Multiplikation mit 10^-x die eigentlichen Parameter. Letztere werden direkt in den Textlabels dargestellt.
  • Neuberechnug und Neuzeichnen alle 10ms mittels des Threads schwinge.
  • Gezeichnet wird mittels Doppelpufferung und nur im PaintCanvas (der modifizierten "Unterklasse" von Canvas). Der gesammte Hintergrund samt Skala links und Trennlinie wird einmalig zu Beginn gezeichnet. Nur der Bereich des schwingendes Pendels wird bei jedem repaint() "gelöscht". (Das Löschen der ganzen Fläche wird durch überschreiben der update()-Methode verhindert)
  • Der Graph wird mittels Linien zwischen dem letzten und dem aktuellen Wert der Auslenkung gezeichnet. Pro Berechnung wird ein Pixel weiter rechts gezeichnet. Hat der Graph den rechten Rand erreicht, wird die Fläche gelöscht und er fängt wieder von links an.
  • Die Schaltfläche Reset setzt Geschwindigkeit & Auslenkung auf null und löscht den Graphen
  • Über die Schaltfläche Start / Pause wird der Thread Pendel gestartet. Bei erneuter Betätigung wird der Thread pausiert (indem pause=true gesetzt wird und so der thread über while(pause) wait() "schläft") beziehungsweise über notify() fortgesetzt.

Mögliche Verbesserungen

  • Textfield-Elemente zur Direkteingabe der Parameter
  • Einzelne AdjustmentListener für jeden Schieberegler
  • Implementierung für anfängliche Geschwindigkeit und Auslenkung.
  • Variieren des Anzeigebereichs, damit mehr Kombinationen aus Federhärte und Pendelgewicht dastellbar sind.
  • Skalen für die Schieberegler & Markierung von "üblichen Werten" bei Federhärte (zB Stahlfeder, Alufeder...), Reibungsbeiwert (zB in Luft, in Wasser, in Honig, ...) und Fallbeschleunigung (zB Mond, Erde, Mars, ...)
  • Erhöhung der Sicherheit des Programmes durch Kapselung von Methoden und Variablen

Besondere Merkmale

Bei einer hohen Reibungskonstante und konstanter Federkonstante kann man direkt den Zusammenhang zwischen Auslenkung der Feder und Pendelgewicht beobachten ( m*g = G = k*x )
- oder durch stetiges Verändern der Masse ein "Bergpanorama" zeichnen: ;-)

Simon Winiger im Juli 2006