Bildquelle: Wikipedia
Mit dem Arduino lässt sich die berühmte Lorentzkraft, benannt nach dem holländischen Physiker und Nobelpreisträger Hendrik Antoon Lorentz (1853 – 1928), experimentell bestimmen.
Was ist die Ursache für die Lorentzkraft. Elektrische Ladungen besitzen ein elektrisches Feld. Bewegen sie sich zudem, so erzeugen sie zusätzlich ein Magnetfeld. Bewegt sich nun eine elektrische Ladung Q in einem äußeren Magnetfeld, so wechselwirken die beiden Magnetfelder miteinander und es kommt zu Kräften, der sog. Lorentzkraft.
Die Lorentzkraft steht durch das Kreuzprodukt/Vektorprodukt senkrecht auf die Geschwindigkeit v und die Flussdichte B. Die wichtige Formel für die Lorentzkraft lautet also:
Wie gelangt man nun von der einen Formel zur anderen? Betrachtet wir hierfür einen stromdurchflossenen Draht:
In diesem Experiment werde ich die Kraft eines stromdurchflossenen Drahts in einem äußeren Magnetfeld bestimmen. Der Aufbau sieht folgendermaßen aus:
Zur Erzeugung eines möglichst homogenen Magnetfelds dienen zwei starke Permanentmagnete mit den Abmessungen 45 x 45 x 15 mm. Diese habe ich günstig auf Aliexpress.com erworben und waren ursprünglich für den Zeemaneffekt gedacht.
Mit einem Hallsensor CYSJ362A und Arduino lässt sich die magnetische Flussdichte B im Inneren der beiden Magnete einfach bestimmen. Mein Ergebnis lautet 0.19 T, wobei das Magnetfeld im Zwischenraum relativ homogen ist und an den Seiten sehr schnell gegen Null abfällt:
Hier die Elektronik und das simple 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 |
#include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 float voltage; float B; // =========================== // ======= SETUP ========= // =========================== void setup() { Serial.begin(9600); lcd.init(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print(" Teslameter"); lcd.setCursor(0,1); lcd.print(" max. 3 Tesla"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); } // =========================== // ======= LOOP ========= // =========================== void loop() { voltage = analogRead(A0) * 5.0 / 1023.0; // Eingangsspannung in Volt B = voltage / 1.5; // Umrechnung U[Volt] in B[Tesla] //Serial.println(voltage); lcd.setCursor(0,0); lcd.print("B = "); lcd.print(B,2); lcd.print(" T "); delay (100); } |
Die Lorentzkraft des stromdurchflossenen Drahts auf den Magneten (vgl. Newtonaxiom actio = reactio) erfasse ich ebenfalls mit Arduino und einem 1 kg Biegebalken. Dieser wird an das AD-Wandlermodul HX711 angeschlossen, welches man schon für rund 5 Euro im Internet erhält.
Hier der gesamte experimentelle Aufbau:
Erhöht man die Stromstärke I durch den Draht, so müsste die Lorentzkraft dazu direkt proportional wachsen:
Wie man sehen kann, erhalte ich einen schön linear wachsenden Graphen mit der Steigung von 7.973 mN pro Ampere.
Der Theorie nach müsste die Kraft gleich 8.55 mN/A betragen. Damit liegen Theorie und Experiment recht knapp beisammen, Heureka 😉
Hier noch das Youtube-Video:
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 |
#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 Rohwert; // vom HX711 gelieferter Rohwert long offset = 44150; // offset float Scale = -198.50; // scale float Kraft; // berechnete Kraft in mN const int buttonPin = 8; // the number of the pushbutton pin int buttonState = 0; // variable for reading the pushbutton status // ===================== // ======= SETUP ======= // ===================== void setup() { Serial.begin(115200); scale.set_gain(128); // A-Kanal: gain = 64 oder 128; B-Kanal: fix 32 pinMode(buttonPin, INPUT); lcd.begin(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.setCursor(0,0); lcd.print("Tragfluegel-"); lcd.setCursor(0,1); lcd.print("messstand"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,0); lcd.print("F = "); } // ============================ // ======= HAUPTSCHLEIFE ====== // ============================ void loop() { buttonState = digitalRead(buttonPin); // button for new tara (offset) if (buttonState == HIGH) { offset = scale.read_average(20); // Einlesen von 20 Rohwerten zur Ermittlung des tara (offset) } Rohwert = scale.read_average(10); // Einlesen von 10 Rohwerten Kraft = (Rohwert - offset) / Scale; // Berechnung der Kraft in mN /* Serial.print("Rohwert = "); Serial.println(Rohwert); */ /* Serial.print("Kraft = "); Serial.println(Kraft); */ lcd.setCursor(4,0); lcd.print(" "); lcd.setCursor(4,0); lcd.print(Kraft,0); lcd.print(" mN"); delay(50); } |