meta data for this page
  •  

This is an old revision of the document!


Syntax und Funktionen im Wiki

Hier noch Links zu

Alles, was beim ersten Aufruf auf der Seite zu lesen ist, soll Ihnen den Start erleichtern. Sie können es nach Belieben löschen und durch Ihre eigenen inhalte ersetzen.

Fußnotentest 1)



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

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.

Aufbau schematisch

Aufbau für kleine Längen

Aufbau für große Längen

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.

Die verwendete Lichtschranke wurde mit dem Microcontroller-Board Arduino Uno realisiert. Der Programmcode dazu befindet sich am Ende dieses Abschnittes.

englische Variante

Zunächst zur allg. Berechnung des Winkels in Abhgkt. zur Zeit

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

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

Computerprogramm

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.

Fotos

1)
das ist eine Fußnote
You could leave a comment if you were logged in.