Difference between revisions of "Externer Magnetfeldsensor"

From phyphox
Jump to navigation Jump to search
Line 27: Line 27:
 
<pre>
 
<pre>
 
#include <phyphoxBle.h>
 
#include <phyphoxBle.h>
 
+
int AnalogPin=27;
int ADC_GPIO = 25;   // ESP32
+
float Messwert;
//int ADC_GPIO = A0; // Arduino Nano 33 BLE
+
float Magnetfeld;
 
 
 
void setup() {
 
void setup() {
 
+
PhyphoxBLE::start("Magnetfeldsensor_01");
 
+
//Experiment
  // put your setup code here, to run once:
+
PhyphoxBleExperiment experiment;
  Serial.begin(115200);
+
experiment.setTitle("Magnetfeld");
  PhyphoxBLE::start("ESP32 Voltmeter");
+
experiment.setCategory("Arduino Experiments");
 
+
experiment.setDescription("Plot the magnetic field of time");
  PhyphoxBleExperiment Voltmeter;
+
//View
 
+
PhyphoxBleExperiment::View view;
  Voltmeter.setTitle("Voltmeter");
+
//Graph
  Voltmeter.setCategory("ESP32 Experiments");
+
PhyphoxBleExperiment::Graph graph;
  Voltmeter.setDescription("This experiment will plot the measured voltage over time.");
+
graph.setLabel("B over time");
 
+
graph.setUnitX("s");
  //View
+
graph.setUnitY("mT");
  PhyphoxBleExperiment::View firstView;
+
graph.setLabelX("time");
  firstView.setLabel("Data"); //Create a "view"
+
graph.setLabelY("B");
 
+
+
  //Graph
+
-
  PhyphoxBleExperiment::Graph firstGraph;     //Create graph which will plot random numbers over time
+
Vout
  firstGraph.setLabel("Voltmeter");
+
view.addElement(graph);
  firstGraph.setUnitX("s");
+
experiment.addView(view);
  firstGraph.setUnitY("V");
+
PhyphoxBLE::addExperiment(experiment);
  firstGraph.setLabelX("time");
 
  firstGraph.setLabelY("Voltage");
 
 
 
  /* Assign Channels, so which data is plotted on x or y axis
 
    first parameter represents x-axis, second y-axis
 
    Channel 0 means a timestamp is created after the BLE package arrives in phyphox
 
    Channel 1 to N corresponding to the N-parameter which is written in server.write()
 
  */
 
 
 
  firstGraph.setChannel(0, 1);
 
 
 
  firstView.addElement(firstGraph);           //attach graph to view
 
  Voltmeter.addView(firstView);               //Attach view to experiment
 
  PhyphoxBLE::addExperiment(Voltmeter);       //Attach experiment to server
 
 
}
 
}
 
 
void loop() {
 
void loop() {
  // put your main code here, to run repeatedly:
+
Messwert=analogRead(AnalogPin);
  // measures the voltage as fast as possible, then calculates the mean over 100 values
+
Magnetfeld=(Messwert-1972)*(-0.064);
  int meas = 0;
+
PhyphoxBLE::write(Magnetfeld);
  for (int i = 0; i < 100; i++) {
+
delay(50);
    meas = meas + analogRead(ADC_GPIO);
 
  }
 
 
 
  meas = meas / 100;
 
 
 
  float meanvoltage = 3.3 * meas / 4095;
 
 
 
  //float voltage = 3.3 * analogRead(ADC_GPIO)/4095;
 
  //delay(1);
 
 
 
  PhyphoxBLE::write(meanvoltage);
 
 
 
  //Serial.print("Voltage = ");
 
  Serial.println(meanvoltage);
 
 
 
  delay(5); // approx 100Hz
 
 
}
 
}
  
/*
 
  Over serial with delay(10): approx 100Hz
 
  Without delay: much higher
 
*/
 
 
</pre>
 
</pre>
  

Revision as of 14:18, 18 August 2023

Externer Magnetfeldsensor
Experiment Externer Magnetfeldsensor
Category Arduino library experiments
Used sensors Magentic Field


Magnetfeldern von Permanentmagneten oder stromdurchflossenen Spulen lassen sich mit den in Smartphones integrierten Magnetfeldsensoren praktisch nicht messen. Das liegt daran, dass die ingebauten Sensoren für sehr schwache Magnetfelder ausgelegt sind, um eine Kompassfunktion zu ermöglichen. In der Regel geht der Messbereich bis maximal 2 bis 5 mT. Möchte man z. B. das Magnetfeld einer Spule entlang der Spulenachse ausmessen, muss der Messbereich eine Größenordnung darüberliegen. Im Folgenden Versuch wird mittels eines Hallsensors (Typ 49e) ein einfach zu benutzender Magnetfeldsensor verwendet, der auch von Oberstufenschülern selbst gebaut werden kann (aktuelle Sicherheitsrichtlinien nach RISU beachten!).

Sensor Sensor


Aufbau

Zuerst muss der ESP32 programmiert und verbunden werden. Die Spannung wird zwischen PINXY und GND gemessen.

Aufbauanleitung

Anschließend kann direkt losgelegt werden. Die entsprechenden Schaltbilder sind in den Arbeitsblättern zu finden.

Programmierung

Der ESP32 wird über die Arduino IDE programmiert. Es müssen die Definitionen für den ESP32 und die phyphox-Bibliothek installiert sein. Siehe dazu das Video unter Category: Arduino library experiments.

Es ist darauf zu achten, dass jeder ESP32 eine eigene Kennung hat (diese wird in ::start(ESP Voltmeter XY) festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.

#include <phyphoxBle.h>
int AnalogPin=27;
float Messwert;
float Magnetfeld;
void setup() {
PhyphoxBLE::start("Magnetfeldsensor_01");
//Experiment
PhyphoxBleExperiment experiment;
experiment.setTitle("Magnetfeld");
experiment.setCategory("Arduino Experiments");
experiment.setDescription("Plot the magnetic field of time");
//View
PhyphoxBleExperiment::View view;
//Graph
PhyphoxBleExperiment::Graph graph;
graph.setLabel("B over time");
graph.setUnitX("s");
graph.setUnitY("mT");
graph.setLabelX("time");
graph.setLabelY("B");
+
-
Vout
view.addElement(graph);
experiment.addView(view);
PhyphoxBLE::addExperiment(experiment);
}
void loop() {
Messwert=analogRead(AnalogPin);
Magnetfeld=(Messwert-1972)*(-0.064);
PhyphoxBLE::write(Magnetfeld);
delay(50);
}

Auswertung

Die Unterrichtseinheit gliedert sich in drei Teile: Zuerst wird eine einfache Entladekurve aufgenommen und die Spannung am Kondensator gemessen, dann wird der Strom gemessen und zuletzt der Spannungsverlauf bei verschiedenen Widerständen gemessen.


Probleme und Lösungen

  • test
  • test