Besenstiel -- gruppe327

Der Versuch wurde durchgeführt von: Bennet Edelburg und Lars Krieger
Die Wiki-Seite wurde angelegt am: 3 January 2021 13:34

Diese Seiten

Diese Seite und ihre Unterseiten sind Ihr Bereich im APwiki für die Bearbeitung des Heim-Versuchs “Kippender Besenstiel”. Er soll die Funktion übernehmen, die im Präsenzpraktikum das Heft hat. Das heißt, es ist Ihre Logbuch für das, was Sie konkret experimentell und bei der Programmierung durchführen.

Legen Sie Fotos ab, notieren Sie Messwerte, laden sie ihr Programm hoch. Form und Formatierung sind dabei zweitrangig.

Damit dieser Bereich diese Aufgabe erfüllen kann, haben wir ihn mit speziellen Zugriffsrechten ausgestattet:

  1. Ihre Gruppe hat das exklusive Schreibrecht für diese Seite.
  2. Die Seite ist nur für Ihre Gruppe, die Tutoren und die Praktikumsleitung einsehbar.

Unten auf dieser Seite finden Sie einen Abschnitt “Diskussion”. Über diesen Abschnitt findet die Kommunikation mit Ihrem Tutor statt. Sie oder er wird Ihnen dort Rückmeldung zu Ihrem Versuchsbericht geben.

Hier im Wiki gibt es Hinweise für die Formatierung ihres Versuchsberichts mit Latex. Den Versuchsbericht geben Sie dann im Ilias ab.

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.

Computerprogramm

Unser Computerprogramm für die numerische Lösung:

numerical_solution.cpp
  1. #include <fstream>
  2. #include <math.h>
  3. #include <string>
  4. #include <vector>
  5. #define _USE_MATH_DEFINES
  6.  
  7. double degree_to_rad(double phi) {
  8. return phi * M_PI / 180;
  9. }
  10.  
  11. class args {
  12. public:
  13. double dt = 1e-5;
  14. double yp0 = 0;
  15. double tau;
  16. double g = 9.81;
  17. args(double l) {
  18. tau = sqrt(2 * l / (3 * g));
  19. }
  20. };
  21.  
  22. //function for solving an one dimensional differential equation
  23. std::vector<std::vector<double>> differentialSolve(double f(double, args), double t0, double tmax, double y0, args Args) {
  24. int stepNumber = (int)(tmax - t0) / Args.dt;
  25. double h = Args.dt;
  26. std::vector<std::vector<double>> points; //vector of three elementric vectors. (t,phi,dphi/dt)
  27. points.push_back({t0, y0, Args.yp0});
  28. if (t0 < tmax) {
  29. for (int i = 0; i < stepNumber; i++) {
  30. double newT = points[i][0] + h;
  31. double newDPhi = points[i][2] + h * f(points[i][1], Args);
  32. double newPhi = points[i][1] + h * newDPhi;
  33. //for greater angles it doesn't make sense
  34. if (newPhi >= M_PI / 2) {
  35. break;
  36. }
  37. points.push_back({newT, newPhi, newDPhi});
  38. }
  39. }
  40. return points;
  41. }
  42.  
  43. //function for calculating the fall time for a given phi0
  44. double fallTime(double f(double, args), double t0, double tMax, double phi0, args Args) {
  45. std::vector<std::vector<double>> angles = differentialSolve(f, t0, tMax, phi0, Args);
  46. return angles[angles.size() - 1][0] - t0;
  47. }
  48.  
  49. //the second derivitative of phi based on phi
  50. double phiPP(double phi, args Args) {
  51. return sin(phi) / pow(Args.tau, 2);
  52. }
  53.  
  54. //function for writing a string to a csv file
  55. int writeTextToCsv(std::string text, std::string filename) {
  56. std::ofstream fileStream;
  57. fileStream.open(filename + ".csv");
  58. fileStream << text;
  59. fileStream.close();
  60. return 0;
  61. }
  62.  
  63. int main() {
  64. int t0 = 0;
  65. int tMax = 100;
  66. args Args(1.45);
  67. std::vector<std::vector<double>> angles = differentialSolve(phiPP, t0, tMax, 0.25, Args);
  68. std::string outputString = "t\tphi\n";
  69. for (int i = 0; i < angles.size(); i++) {
  70. outputString += std::to_string(angles[i][0]) + "\t";
  71. outputString += std::to_string(angles[i][1]) + "\n";
  72. }
  73. writeTextToCsv(outputString, "Winkel_in_Abhaengigkeit_der_Zeit_bei_phi0_0_25");
  74.  
  75. std::vector<std::vector<double>> fallTimePhi0;
  76. for (double phi0 = 0.001; phi0 < M_PI / 2; phi0 += 0.001) {
  77. fallTimePhi0.push_back({phi0, fallTime(phiPP, t0, tMax, phi0, Args)});
  78. }
  79. std::string outputStringPhi0 = "phi0\tt_fall\n";
  80. for (int i = 0; i < fallTimePhi0.size(); i++) {
  81. outputStringPhi0 += std::to_string(fallTimePhi0[i][0]) + "\t";
  82. outputStringPhi0 += std::to_string(fallTimePhi0[i][1]) + "\n";
  83. }
  84. writeTextToCsv(outputStringPhi0, "Fallzeit_in_Abhaengigkeit_des_Startwinkels");
  85.  
  86. std::vector<std::vector<double>> fallTimeDeltaT;
  87. for (Args.dt = 1; Args.dt > 1e-6; Args.dt *= 0.5) {
  88. fallTimeDeltaT.push_back({Args.dt, fallTime(phiPP, t0, tMax, 0.25, Args)});
  89. }
  90. std::string outputStringDeltaT = "delta_t\tt_fall\n";
  91. for (int i = 0; i < fallTimeDeltaT.size(); i++) {
  92. outputStringDeltaT += std::to_string(fallTimeDeltaT[i][0]) + "\t";
  93. outputStringDeltaT += std::to_string(fallTimeDeltaT[i][1]) + "\n";
  94. }
  95. writeTextToCsv(outputStringDeltaT, "Fallzeit_in_Abhaengigkeit_der_Laenge_der_Zeitschritte");
  96.  
  97. //now the part for the comparison of the numerical solution and the measured data
  98.  
  99. args ArgsB1(1.81); //the length of the broom
  100. double phi01[] = {degree_to_rad(5), degree_to_rad(10), degree_to_rad(20), degree_to_rad(35), degree_to_rad(45)}; //the initial angles
  101. std::vector<std::vector<double>> fallTimePhi01;
  102. for (int i = 0; i < sizeof(phi01) / sizeof(phi01[0]); i++) {
  103. fallTimePhi01.push_back({phi01[i], fallTime(phiPP, t0, tMax, phi01[i], ArgsB1)});
  104. }
  105. std::string outputStringPhi01 = "phi0\tt_fall\n";
  106. for (int i = 0; i < fallTimePhi01.size(); i++) {
  107. outputStringPhi01 += std::to_string(fallTimePhi01[i][0]) + "\t";
  108. outputStringPhi01 += std::to_string(fallTimePhi01[i][1]) + "\n";
  109. }
  110. writeTextToCsv(outputStringPhi01, "Fallzeit_in_Abhaengigkeit_des_Startwinkels_zu_Besen1_81");
  111.  
  112. args ArgsB2(1.358); //the length of the broom
  113. double phi02[] = {degree_to_rad(10), degree_to_rad(20), degree_to_rad(25), degree_to_rad(35), degree_to_rad(45), degree_to_rad(55), degree_to_rad(65)}; //the initial angles
  114. std::vector<std::vector<double>> fallTimePhi02;
  115. for (int i = 0; i < sizeof(phi02) / sizeof(phi02[0]); i++) {
  116. fallTimePhi02.push_back({phi02[i], fallTime(phiPP, t0, tMax, phi02[i], ArgsB2)});
  117. }
  118. std::string outputStringPhi02 = "phi0\tt_fall\n";
  119. for (int i = 0; i < fallTimePhi02.size(); i++) {
  120. outputStringPhi02 += std::to_string(fallTimePhi02[i][0]) + "\t";
  121. outputStringPhi02 += std::to_string(fallTimePhi02[i][1]) + "\n";
  122. }
  123. writeTextToCsv(outputStringPhi02, "Fallzeit_in_Abhaengigkeit_des_Startwinkels_zu_Besen1_358");
  124.  
  125. return 0;
  126. }

Bilder einbinden

Ihr Versuchsaufbau sollte so beschrieben sein, dass er für sich stehend verständlich ist - gerne mit einem Foto.

Der Anfangswinkel des Besens wurde mit der Neigungsfunktion der App Phyphox bestimmt. Dafür wird das Handy an den Besentil gehalten. Die App gibt dann den Neigungswinkel ausgehend vom Lot aus. Die Fallzeit wurde mit der akustischen Stoppuhr der App Phyphox gemessen. Der Startton wurde dabei stimmlich im Moment des Loslassens selbst erzeugt.

Dies ist der Besen mit der Länge von 1,358 m. Phyphox

Der 181cm Besen. Es wurde wieder Phyphox verwendet. Die Terasse auf der 181cm Besen fallen gelassen wurde hat Rillen. Diese können es vermindern, dass der Besen wegrutscht, da der Besen orthogonal zu diesen Fallen gelassen wurde. An dem Besen war der Borstenkopf nicht entfernbar.

Bei der Messung mit dem Luftwiderstand wurde an die Spitze des Besenstiels ein Stück Pappe im DIN A4-Format befestigt. So kann man die Angriffsfläche des Besens erhöhen, wodurch die Luftreibung eine größere Rolle spielt und somit Einfluss auf die Fallzeit nimmt. Die Versuchsdurchführung war sonst gleich der Messreihe ohne zusätzlicher Pappe.

Tabellen

Hier sind unsere Messwerte der Messungen.

Tabllen zur Fallzeit in Abhängigkeit des Startwinkels φ0

Fallzeit t in Abhängigkeit des Startwinkels φ t1 in s t2 in s t3 in s t4 in s t5 in s
Startwinkel: 10° 0,742 0,749 0,816 0,886 0,820
Startwinkel: 20° 0,686 0,717 0,716 0,633 0,747
Startwinkel: 25° 0,550 0,601 0,504 0,644 0,644
Startwinkel: 35° 0,490 0,574 0,510 0,513 0,581
Startwinkel: 45° 0,365 0,454 0,407 0,342 0,414
Startwinkel: 55° 0,317 0,359 0,293 0,313 0,356
Startwinkel: 65° 0,225 0,267 0,303 0,284 0,281

Die verwendete Besenstiel länge war l = 1,358 m mit eine Unsicherheit von u(l) = 1 mm. Für die Unsicherheit des Winkels schätze ich u(φ) = 1° ab. Der Winkel wurde mit der Funktion Neigung (Senkrecht) der App PhyPhox bestimmt. Für die Messung der Fallzeit wurde die akustische Stoppuhr von PhyPhox verwendet. Die Abschätzung der Unsicherheiten für die Zeit folgen im Bericht.

Fallzeit t in Abhängigkeit des Startwinkels φ t1 in s t2 in s t3 in s t4 in s t5 in s
Startwinkel: 5° 1,095 1,016 0,997 0,97 0,954
Startwinkel: 10° 0,918 0,910 0,892 0,92 0,943
Startwinkel: 20° 0,713 0,73 0,732 0,609 0,737
Startwinkel: 35° 0,628 0,513 0,531 0,53 0,528
Startwinkel: 45° 0,45 0,499 0,469 0,471 0,481

Die verwendete Besenstiel länge war l = 181 cm mit einer Unsicherheit von u(l) = 1/2 cm. Für die Unsicherheit des Winkels schätze ich u(φ) = 2° ab. Der Winkel wurde mit der Funktion Neigung (Senkrecht) der App PhyPhox bestimmt. Für die Messung der Fallzeit wurde die akustische Stoppuhr von PhyPhox verwendet. Die Abschätzung der Unsicherheiten für die Zeit folgen im Bericht.

Fallzeit t in Abhängigkeit des Startwinkels φ t1 in s t2 in s t3 in s t4 in s t5 in s
Startwinkel: 10° 0,802 0,787 0,759 0,885 0,831
Startwinkel: 20° 0,718 0,774 0,687 0,699 0,717
Startwinkel: 25° 0,673 0,663 0,696 0,698 0,669
Startwinkel: 35° 0,577 0,472 0,530 0,497 0,528
Startwinkel: 45° 0,429 0,439 0,454 0,436 0,393

Werte bei der Untersuchen des Einflusses der Luftreibung. Es wurde der Besen mit der Länge l = 1,358 m mit u(l) = 0,001 m verwendet. Oben an die Spitze wurde ein Stück Pappe (Größe DIN A4-Format) befestigt. Hier sind die entsprechenden Mittelwerte, empirische Standardabweichung und der Standardfehler.

Startwinkel φ0 in ° Mittelwert Standardabweichung Standardfehler
10 0,807 0,037 0,017
20 0,719 0,033 0,015
25 0,680 0,016 0,007
35 0,521 0,040 0,018
45 0,430 0,023 0,010

Syntax und Funktionen im Wiki

You could leave a comment if you were logged in.