Auswertung Gruppe 310 - Besenstiel

Der Versuch wurde durchgeführt von: Erin Feldkemper und Arthur Wohlfahrt
Die Wiki-Seite wurde angelegt am: @DATE@

In diesem Wiki soll die Durchführung des Besenstiel-Versuches im HomeLab dokumentiert werden

Vorüberlegungen

In diesem Experiment wollen wir die Fallbewegung eines kippenden Besenstiels untersuchen. Hierfür machen wir zunächst ein paar Vorüberlegungen.

Wir wollen erst einmal die Kippbewegung mithilfe von physikalischen Begriffen beschreiben. Wir wissen, dass die Masse des Stabes homogen über seine Länge verteilt ist, und somit der Schwerpunkt in der Stabmitte liegt. Wenn der Stab nun umkippt, verläuft die Bewegung nicht geradlinig. Stattdessen handelt es sich um eine Drehbewegung nach unten um den Kontaktpunkt herum. Der Kontaktpunkt stellt hierbei die Stelle dar, an der der Besenstiel den Boden berührt.
Das Moment, welches auf den Stab wirkt, setzt sich also aus der Kraft und dem Hebelarm a zusammen. Die Kraft lässt sich in parallele und senkrechte Anteile relativ zum Stab zerlegen. Es gilt:

\begin{align*} \vec{M} & = \vec{F} \times \vec{a} \\ F & = m\cdot g = mg\cdot (sin(\phi)+cos(\phi))\\ a & = \frac{L}{2} \\ => M &= m\cdot g\cdot sin(\phi)\cdot\frac{L}{2} \end{align*}

Da nur der Anteil der Kraft senkrecht zum Stab zum Drehmoment beiträgt und dieser mit größerem Winkel ebenfalls ansteigt, beschleunigt der Stab immer schneller. Für die Fallzeit gilt: Je kleiner der Anfangswinkel ist, desto größer ist die Kippzeit T.

Wenn man die Luftreibung vernachlässigt, so hängt bei gleicher Stablänge die Kippzeit $T$ nicht von der Stabmasse $m$ ab. Das Drehmoment M einer Drehbewegung kann man über $M = J\cdot b$. Wobei es sich bei $J$ um das Trägheitsmoment und bei $b$ um die Winkelbeschleunigung handelt. Wir betrachten nun das Trägheitsmoment einer Punktmasse $m$ in einem gewissen Abstand $L$ um eine Drehachse, es gilt:

\begin{align*} J & = m \cdot L^{2} \end{align*}

Unsere Masse ist nun aber homogen über die gesamte Länge $L$ verteilt, es gilt also $J=\frac{m}{L}\cdot L^2$ und wenn wir hierüber integrieren von 0 bis L erhalten wir:

\begin{align*} J & = \frac{1}{2} m \cdot L^2 \end{align*}

Setzt man nun die Formel $M=J\cdot b$ nach J um und setzt $M=m\cdot g\cdot sin(\phi)\cdot\frac{L}{2}$ ein, erhalten wir:

\begin{align*} b & = \frac{3}{2}\cdot g\cdot\frac{1}{L}\cdot sin(\phi) \end{align*}

Es ist also eindeutig, dass die Winkelbeschleunigung $b$ nicht von der Masse abhängig ist, und dementsprechend ist auch die Fallzeit $T$ nicht von der Masse abhängig.
Weiterhin sehen wir, dass je größer die Stablänge $L$ wird, desto kleiner wird die Winkelbeschleunigung $b$ und dadurch die Fallzeit $T$ größer.
Die Stablänge beeinflusst also die Zeit die der Stab zum Fallen benötigt.

Aus diesen Experimenten lässt sich schlussfolgern, dass das Jonglieren/Balancieren leichter ist, wenn der Stab länger ist, da dadurch die Kippzeit größer ist.
Es besteht dann also eher die Möglichkeit, das “Wegkippen” des Stabes durch eine Bewegung auszugleichen, da man mehr Zeit dafür hat.

Messung 1

Winkel in ° L=16.7cm
27 0.148 0.142 0.153 0.158 0.148 0.154
6 0.334 0.331 0.335 0.327 0.332 0.331
14.5 0.214 0.224 0.218 0.222 0.222 0.224
19.5 0.186 0.187 0.191 0.187 0.195 0.185
25 0.157 0.161 0.154 0.161 0.163 0.162
31 0.137 0.135 0.134 0.139 0.134 0.136
38.5 0.109 0.114 0.112 0.114 0.114 0.111
48.5 0.097 0.094 0.093 0.093 0.092 0.089

Stab 2, langer Stab: L=132cm

+/- 2[°]
2 1.148 1.178 1.158 1.164 1.164 1.175
5 0.934 0.932 0.931 0.935 0.961 0.953
11 0.735 0.74 0.739 0.735 0.735 0.733
15 0.672 0.672 0.671 0.672 0.677 0.671
25 0.571 0.572 0.571 0.577 0.591 0.588
32.5 0.485 0.595 0.587 0.592 0.484 0.497

Aufbau 1

Zur Messung der Fallzeit haben wir uns für eine Lichtschranke entschieden. An einem Ausleger und einer Bodenstation wird so die Fallzeit des Besens gemessen. Ein Arduino-Uno Mikrocontroller übernimmt das Auslesen der Lichtschranken und die Zeitmessung zwischen den Signalen.

Aufbau schematisch

Der eingezeichnete Ausleger dient zur Einstellung eines festen Startwinkels und gleichzeitig als Halterung für die Lichtschranke. Die Winkelmessung geschieht mittels Geodreieck mit einer Genauigkeit von ca. 1-2°.

Aufbau für kleine Längen

Mit diesem Aufbau konnte auch die Fallzeit eines Stiftes erfolgreich untersucht werden. Vorn im Bild ist der Arduino-Uno und die Schaltung zu sehen.Es folgt der winkelverstellbare Trägerarm und zur Anzeige der Messwerte via serielle Schnittstelle ein Laptop. Zum Betrieb der Lichtschranken werden LED/kleine Laserdioden verwendet. Aufbaubedingt hat die untere Lichtschranke einen Abstand zum Boden von ca. (2.5±0.1)cm. Bedingt dadurch verkürzt sich die Zeitmessung.

//  
Aufbau für große Längen

Gleiches Prinzip, wie eben. Hier dient der Tisch als Stabilisierung. Zu beachten ist, dass durch die Gymnastikmatte die effektive Höhe der Lichtschranke 1cm tiefer liegt.

// 
Lichtschranke

// 

Schaltung

Computerprogramm

Das Zeitschrittverfahren oder auch Euler-Verfahren zur numerischen Berechnung der Fallzeit wurde mit Python realisiert. Code (samt Kommentaren) und resultierende Plots sind eingefügt.

englische Variante

Zunächst zur allg. Berechnung des Winkels in Abhgkt. zur Zeit und Überprüfung mit Beispielwerten. Ausgabeplots im beiliegenden Bericht.

ExplizitesEulerVerfahren.py
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import math
  4.  
  5. #Variablen und Konstanten
  6. tmax=2
  7. dt=0.01 #10 ms
  8. g=9.81
  9. l=1.45 # m
  10. tau=math.sqrt(2*l/(3*g))
  11. vPhi0=0 #zero initial phi-velocity
  12. phi0=0.25
  13.  
  14. t=[]
  15. phi=[]
  16. vPhi=[]
  17.  
  18. # initial values
  19. phi.append(phi0)
  20. vPhi.append(vPhi0)
  21. i=0
  22.  
  23. #Explizites Euler Verfahren/ Iteration
  24. while True:
  25. vPhi.append(vPhi[i] +dt*math.sin(phi[i])/(tau**2))
  26. phi.append(phi[i]+dt*vPhi[i])
  27.  
  28. i+=1
  29.  
  30. if phi[i] >= math.pi/2:
  31. break
  32.  
  33. # Berechnung Auftreffzeitpunkt
  34. tmax=len(phi)*dt
  35. print(tmax)
  36.  
  37. #erzeuge Zeiten
  38. t=np.arange(0,tmax,dt)
  39.  
  40. # Erzeuge eine Figure.
  41. fig = plt.figure(figsize=(9, 4))
  42. fig.set_tight_layout(True)
  43.  
  44. # Plotte das Winkel-Zeit-Diagramm.
  45. ax1 = fig.add_subplot(1, 1, 1)
  46. ax1.set_xlabel("t [s]")
  47. ax1.set_ylabel("phi [rad]")
  48. ax1.grid()
  49. #ax1.plot(t, vPhi, ".b", label="Vphi")
  50. ax1.plot(t, phi, ".r", label="Phi")
  51. ax1.legend()
  52.  
  53. plt.show()

Nun zur Untersuchung des Einflusses der Schrittweite und der Fallzeit für verschiedene Anfangswinkel. Dazu wird das Zeitschrittverfahren in einer Methode implementiert. Auch hier sind die resultierenden Plots im Bericht zu finden.

StartwinkelFallzeit.py
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import math
  4.  
  5. #variables and constants
  6. tmax=2
  7. dt=0.01 #stepsize
  8. g=9.81
  9. l=1.45 # m
  10. tau=math.sqrt(2*l/(3*g))
  11. vPhi0=0 #zero initial phi-velocity
  12.  
  13. #method to solve the diff-eq.
  14. def solver2(phi0,stepT):
  15. t=[] #generate lists
  16. phi=[]
  17. vPhi=[]
  18.  
  19. # initial values
  20. phi.append(phi0)
  21. vPhi.append(vPhi0)
  22. i=0
  23.  
  24. while True: #iterations according to Euler
  25. vPhi.append(vPhi[i] +stepT*math.sin(phi[i])/(tau**2))
  26. phi.append(phi[i]+stepT*vPhi[i])
  27.  
  28. i+=1 #next step
  29.  
  30. if phi[i] >= math.pi/2: # stick has reached ground at 90°
  31. break
  32.  
  33. tmax=len(phi)*stepT #calculate elapsed time
  34. t=np.arange(0,tmax,stepT)
  35. return (tmax,t,phi) #return tupel with fall-time + time and angle arrays
  36.  
  37. #initial angles
  38. initPhi=np.arange(0.25,1.3,0.05)
  39.  
  40. def calcTs(step): #calc the fall time for different initial phi
  41. ts=[]
  42.  
  43. for i in initPhi: #generate list of times
  44. ts.append(solver2(i,step)[0]) #first element in return tuple is tmax
  45.  
  46. return ts
  47.  
  48.  
  49. steps=np.array([0.1,0.05,0.01,0.001])
  50.  
  51. times=[]
  52. for m in steps:
  53. times.append(calcTs(m))
  54.  
  55.  
  56. # Erzeuge eine Figure.
  57. fig = plt.figure(figsize=(7, 5))
  58. fig.set_tight_layout(True)
  59.  
  60. # Plotte das Diagramm.
  61. ax1 = fig.add_subplot(1, 1, 1)
  62. ax1.set_xlabel("phi0 [rad]")
  63. ax1.set_ylabel("T [s]")
  64. ax1.grid()
  65.  
  66. ax1.plot(initPhi, times[0], ".b", label=f"dt={steps[0]}")
  67. ax1.plot(initPhi, times[1], ".r", label=f"dt={steps[1]}")
  68. ax1.plot(initPhi, times[2], ".g", label=f"dt={steps[2]}")
  69. ax1.plot(initPhi, times[3], "xm", label=f"dt={steps[3]}")
  70. ax1.legend()
  71.  
  72. #anzeigen
  73. plt.show()

Arduino Code

Die verwendete Lichtschranke wurde mit dem Microcontroller-Board Arduino Uno realisiert. Mit einer Kalibrierung der Lichtschranken, wurden die Auslösegrenzen an die jeweiligen Lichtverhältnisse angepasst.

Bei Aktivierung der Ausgabe der internen Zeitmessung konnte eine Totzeit von 6-8ms zwischen den Schleifendurchläufen in der Main-Loop und damit zwischen den Messungen ermittelt werden.

Lichtschranke.ino
  1. /*
  2. Control two light barriers, connected to pin A0 and A2 (arduino UNO)
  3. Indicator leds are connected to pin 12 and 13.
  4. Measure time in ms between to detections of the upper/lower light barrier.
  5.  
  6. 27.12.2020
  7.  
  8. */
  9.  
  10.  
  11.  
  12. boolean dectUp = false;
  13. boolean dectLow = false;
  14. boolean timer = false; //timer running?
  15.  
  16. int trigUp = 700;
  17. int trigLow = 950;
  18.  
  19. unsigned long deltaT = 0;
  20. unsigned long t = 0;
  21.  
  22. unsigned long deltaTU = 0;
  23. unsigned long tU = 0;
  24.  
  25.  
  26.  
  27. void setup() {
  28. // initialize serial communication at 9600 bits per second:
  29. Serial.begin(9600);
  30. pinMode(12, OUTPUT); //indicator low
  31. pinMode(13, OUTPUT); //indicator high
  32.  
  33. }
  34.  
  35. void loop() {
  36.  
  37. // read the input on analog pin 0:
  38.  
  39. int valueLow = analogRead(A0);
  40. int valueUp = analogRead(A2);
  41.  
  42.  
  43.  
  44. // print out the value you read:
  45. /*Serial.print(valueLow);
  46.   Serial.print(" | oben: ")
  47.   Serial.println(valueUp);
  48.   */
  49. //delay(100); // delay in between reads for stability
  50.  
  51.  
  52.  
  53. if (valueUp < trigUp) { // upper sensor
  54. //Serial.println("Ready");
  55. if (dectUp && timer == false) { //first light after dark and timer not running
  56. Serial.println("Rest");
  57. Serial.println(millis() - t);
  58. t = millis(); //start timer
  59. timer = true; //timer on
  60. Serial.println("Start");
  61. }
  62. digitalWrite(13, HIGH);
  63. dectUp = false;
  64.  
  65. }
  66. else { // Dark UP
  67. //Serial.println("Detected");
  68. digitalWrite(13, LOW);
  69. delay(5); // detection break
  70. dectUp = true;
  71. timer = false; //timer off
  72. }
  73.  
  74. //Serial.print("time-complexity: ");
  75. //Serial.println(millis()-tU);
  76. //tU = millis();
  77.  
  78. if (valueLow < trigLow) { //lower sensor
  79. digitalWrite(12, HIGH);
  80. //Serial.println("Ready");
  81. dectLow = false;
  82. }
  83. else { // Dark LOW
  84. //Serial.println("Detected");
  85. if (!dectLow && timer) { //first dark after light
  86. deltaT = millis() - t;
  87. timer = false; //timer off
  88. Serial.print("Detected: ");
  89. Serial.println(deltaT);
  90. }
  91.  
  92. digitalWrite(12, LOW);
  93. //delay(1); // detection break
  94. dectLow = true;
  95. }
  96.  
  97.  
  98. }

Vorgehen - Messung 2

Um die Fallzeit des Besenstiels mit der Länge l=1.2(m) zu bestimmen, wurden auf dem Boden eine Markierung neben den Schreibtisch gemacht um den Besenstiel immer vom gleichen Ort fallen lasse zu können. Auf dem Schreibtisch wurden 5 verschiedene Markierungen geklebt um verschiedene Winkel messen zu können (siehe Foto). Anschließend wurden mithilfe der App “iLevel” die Winkel bestimmt und pro Winkel werden nun jeweils 5 Fallzeiten manuell aufgenommen (siehe Tabelle).

img_0152.jpg

98.0° 115.4° 127.3° 136.8° 143.4°
1. 0.93 0.69 0.91 0.65 0.64
2. 1.07 0.64 0.65 0.83 0.46
3. 0.97 0.79 0.56 0.75 0.37
4. 0.99 0.7 0.63 0.48 0.49
5. 1.09 0.76 0.74 0.53 0.49

Wir haben uns jedoch dazu entschlossen in unserer Auswertung nur die Messwerte der ersten Messung zu werden um gleiche Fehlerabschätzungen zu haben, und bessere Aussagen treffen zu können.

You could leave a comment if you were logged in.