Lässt man eine Metallkugel auf der Erde fallen, so beschleunigt sie aufgrund der Gravitation zunächst. Der zunehmende Luftwiderstand verhindert aber eine gleichmäßige Beschleunigung. Im Vakuum würde man aber feststellen, dass Gegenstände mit g = 9.81 m/s² beschleunigen. Diesen Wert nennt man Erdbeschleunigung. Er lässt sich einfach über das Gravitationsgesetz herleiten:
Die Erde ist aber keine ideale Kugel und durch die Rotation tritt eine Zentrifugalkraft auf. Beide Effekte beeinflussen die Erdbeschleunigung. Am Äquator ist der Abstand zum Erdmittelpunkt aufgrund der Abplattung geringfügig größer und zudem wirkt dort die Zentrifugalkraft der Erdanziehungskraft maximal entgegen.
Daher ist die Erdbeschleunigung am Äquator mit 9.79 m/s² etwas geringer als zum Beispiel am Nordpol mit 9.83 m/s², wo erstens der Erdradius etwas geringer ist und zudem keine Zentrifugalkraft herrscht. Im Mittel beträgt die Erdbeschleunigung 9.81 m/s².
In der Physik kommt die Erdbeschleunigung in einigen Formeln vor. So etwa wie schon erwähnt in der Formel für den freien Fall. Für diese gleichmäßig beschleunigte Bewegung (natürlich nur ohne Luftwiderstand bzw. angenähert für kurze Fallstrecken und dichte Fallgegenstände) gilt dann die Beziehung s = 1/2 · g · t². Diese Formel bildet die Basis für dieses Experiment.
Eine Metallkugel wird zunächst mittels Solenoid fixiert. Nachdem man die Fallstrecke s eingegeben und den Startknopf betätigt hat, gibt das Solenoid die Kugel frei. Das Programm speichert die Startzeit t1. Die fallende Kugel trifft dann auf die Waage und löst dadurch die Zeit neuerlich aus. Dies ist dann die Stopzeit t2. Eingesetzt in die Formel für den freien Fall lässt sich dann die Erdbeschleunigung g ausrechnen und am Display anzeigen…
Die Teile für diesen Versuch habe ich auf Amazon gekauft:
Die Waage besteht aus einer 100g-Wägezelle, dem Modul HX711 und einem Arduino Nano. Normalerweise liest das Modul HX711 10mal in der Sekunde die Werte der Wägezelle ein. Dies wäre aber für diesen Versuch zu wenig/zu ungenau. Daher habe ich die Einleserate auf 80 Hz erhöht. Dazu muss man nur den Pin 15 des HX711 mit Pin 16 verbinden.
Hier der gesamte Schaltplan. Die Eingabe der Fallstrecke s erfolgt mit Potentiometer und mit dem Taster bestätigt man immer und kommt im Programmablauf weiter.
So, die bestellten Teile sind mittlerweile angekommen und ich konnte einen ersten Versuch starten. Für den Kugelauslöseapparat habe ich einfach ein dünnes Aluminiumblech ausgesägt und zu einem L geformt. So klemmt der Hubmagnet die Metallkugel zuverlässig gegen den Aluschenkel.
Hier die 100g-Wägezelle:
Der IRL3803-Mosfet zum Ein- und Ausschalten des Hubmagneten:
Für die Stromversorgung des Hubmagneten verwende ich drei 18650-Liion-Zellen in Serie, was in etwa eine Spannung von 12V ergibt:
Hier der Arduino-Teil mit 16×2 Display:
Mit dem Potentiometer stelle ich die gewünschte Fallhöhe ein und mit dem Taster bestätige ich die Eingabe bzw. komme im Programm weiter…
Hier der am Küchentisch fixierte Hubmagnet:
Ein Blick auf den gesamten Aufbau:
Das Experiment ergab reproduzierbar eine Fallbeschleunigung von etwa 9.5 m/s². Damit beträgt die Abweichung zum Sollwert von 9.81 m/s² rund 3.2%. Man muss aber auch bedenken, dass der Fall in Luft eine geringere Erdbeschleunigung zufolge hat und auch die Ansteuerung des Hubmagneten bzw. das Auslesen der Waage eine zeitliche Verzögerung mit sich bringt, welche die gemessene Erdbeschleunigung reduziert.
Weil es mich noch interessiert hat, habe ich einmal den freien Fall mit/ohne Luftwiderstand mit EXCEL simuliert:
Excel_Bewegungen_Erdbeschleunigung.xls
Ohne Luftwiderstand komme ich logischerweise auf eine Erdbeschleunigung g = 9.81 m/s². Mit Luftwiderstand (cw-Wert einer Kugel = 0.45, Luftdichte ρ = 1.25 kg/m³, Kugelmasse m = 4.10 g, Kugelfläche = 78.5 mm²) erhalte ich ein g = 9.796 m/s². Das bedeutet, dass sich meine Abweichung bei g = 9.50 m/s² nicht primär aus dem Luftwiderstand ergibt sondern aus anderen (Mess)Einflüssen, interessant…
Hier noch das Youtube-Video:
Das Arduino-Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
#include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 #include <HX711.h> HX711 scale(A2, A1); long sensorValue; // Einlesewert vom Potentiometer long Rohwert; // vom HX711 gelieferter Rohwert int h; // Fallhöhe float g; long time_start, time_end; const int buttonPin = 8; // the number of the pushbutton pin int triggerPin = 2; // the number of the trigger pin for the solenoid int sensorPin = A0; // pin for reading the potentiometer // ===================== // ======= SETUP ======= // ===================== void setup() { Serial.begin(115200); scale.set_gain(128); // A-Kanal: gain = 64 oder 128; B-Kanal: fix 32 pinMode(buttonPin, INPUT); pinMode(triggerPin, OUTPUT); digitalWrite(triggerPin, LOW); Rohwert = scale.read(); lcd.begin(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.setCursor(0,0); lcd.print("Erd-"); lcd.setCursor(0,1); lcd.print("beschleunigung"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); } // ============================ // ======= HAUPTSCHLEIFE ====== // ============================ void loop() { lcd.setCursor(0,0); lcd.print("Eingabe Hoehe:"); lcd.setCursor(0,1); lcd.print("h = "); lcd.setCursor(8,1); lcd.print("mm"); while(digitalRead(buttonPin) == LOW) { sensorValue = analogRead(sensorPin); sensorValue = map(sensorValue,0,1023,0,9); lcd.setCursor(6,1); lcd.print(sensorValue); } delay(300); h = sensorValue * 1; while(digitalRead(buttonPin) == LOW) { sensorValue = analogRead(sensorPin); sensorValue = map(sensorValue,0,1023,0,9); lcd.setCursor(5,1); lcd.print(sensorValue); } delay(300); h = h + sensorValue * 10; while(digitalRead(buttonPin) == LOW) { sensorValue = analogRead(sensorPin); sensorValue = map(sensorValue,0,1023,0,9); lcd.setCursor(4,1); lcd.print(sensorValue); } delay(300); h = h + sensorValue * 100; Serial.print("h = "); Serial.print(h); Serial.println(" mm"); lcd.setCursor(0,0); lcd.print("h = "); lcd.print(h); lcd.print(" mm "); lcd.setCursor(0,1); lcd.print("press button "); while(digitalRead(buttonPin) == LOW) { } delay(300); // Start the experiment // ==================== digitalWrite(triggerPin, HIGH); lcd.setCursor(0,0); lcd.print("ball in position "); lcd.setCursor(0,1); lcd.print("press button "); while(digitalRead(buttonPin) == LOW) { } delay(1000); digitalWrite(triggerPin, LOW); time_start = millis(); while(scale.read() > 1.05 * Rohwert) // wait for the ball colliding with the scale { } time_end = millis(); g = 2 * h * 1000.0 /((time_end - time_start) * (time_end - time_start)); lcd.setCursor(0,0); lcd.print("g = "); lcd.print(g); lcd.print(" m/s2 "); lcd.setCursor(0,1); lcd.print("press button "); while(digitalRead(buttonPin) == LOW) { } delay(300); lcd.setCursor(0,0); lcd.print(" "); lcd.print(g); lcd.setCursor(0,1); lcd.print(" "); } |