Difference between revisions of "Distanzsensor (Federpendel)"

From phyphox
Jump to navigation Jump to search
(Created page with "{{Infobox Experiment | Name = Distanzsensor (Federpendel) | Category = Arduino library experiments | Sensors = Distance }} Die verschiedenen Arten einer Pendelschwingung si...")
 
Line 14: Line 14:
  
 
Anschließend wird der Sensor unter das Glas gelegt (am besten mit Doppelseitigem Klebeband befestigen) und die Messung kann gestartet werden.
 
Anschließend wird der Sensor unter das Glas gelegt (am besten mit Doppelseitigem Klebeband befestigen) und die Messung kann gestartet werden.
 +
 +
<gallery widths=500px heights=400px>
 +
File:ESP pendulum.jpg
 +
</gallery>
  
 
==Programmierung==
 
==Programmierung==

Revision as of 14:34, 27 September 2023

Distanzsensor (Federpendel)
Experiment Distanzsensor (Federpendel)
Category Arduino library experiments
Used sensors Distance

Die verschiedenen Arten einer Pendelschwingung sind integraler Bestandteil des Lehrplans. mit phyphox können direkt nur die Beuschleunigung und die Drehrate des Smartphones gemessen werden und so die Schwingung dargestellt werden.

Mit einem Distanzsensor kann die Schwingung eines Federpendels sehr simpel gemessen werden. Generell ist natürlich die Messung sämtlicher Distanzen möglich, beim Federpendel ist der Aufbau jedoch am einfachsten.

Aufbau

Zuerst muss der ESP32 programmiert und verbunden werden. Der Sensor wird mit Plus und Minus an den 3,3V-PIN und den GND-PIN des ESP angeschlossen. SDA kommen an PIN21 und SCL an PIN22. Wir verwenden an dieser Stelle den Time of Flight (ToF) Sensor VL32L0X, dieser misst mittels Lichtpulsen die Distanz zum Objekt recht genau. Als Reflektionsfläche reicht ein größeres Stück Papier, das auf den Pendelkörper geklebt wird.

Als Pendelkörper kann ein Glas verwendet werden, in dessen Deckel ein kleines Loch gebohrt wird und eine Schnur befestigt wird. Dann kann das ganze Glas an eine Feder gehängt werden und das Gewicht mittels Wasser im Glas verändert werden. Unten auf das Glas wird ein festes Stück Papier geklebt.

Anschließend wird der Sensor unter das Glas gelegt (am besten mit Doppelseitigem Klebeband befestigen) und die Messung kann gestartet werden.

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 Distance-Sensor XY) festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.

/* phyphox ESP32 for distance sensor VL53L0X
  reads out values and sends them to phyphox
  AUTHOR: Niklas Westermann
  LICENCSE: CC0
*/

#include <phyphoxBle.h>
#include "Adafruit_VL53L0X.h" // needs to be installed!

// SDA to PIN21 und SCL to PIN22
Adafruit_VL53L0X distSensor = Adafruit_VL53L0X();
float distValue;

void setup() {
  PhyphoxBLE::start("ESP32 Distance-Sensor");

  PhyphoxBleExperiment vl53l0x;

  vl53l0x.setTitle("Distance-Sensor");
  vl53l0x.setCategory("ESP32 Experiment");

  // Views (Tabs in der App)
  PhyphoxBleExperiment::View firstView;
  firstView.setLabel("Rohdaten");

  // Graph (ein einzelner Graph)
  PhyphoxBleExperiment::Graph firstGraph;
  firstGraph.setLabel("Abstand");
  firstGraph.setUnitX("s");
  firstGraph.setUnitY("mm");
  firstGraph.setLabelX("Zeit");
  firstGraph.setLabelY("Abstand");
  firstGraph.setChannel(0, 1);

  // Value (zeige letzten Wert)
  PhyphoxBleExperiment::Value firstValue;
  firstValue.setLabel("Abstand");
  firstValue.setUnit("mm");
  firstValue.setPrecision(0);
  firstValue.setChannel(1);

  // Export
  PhyphoxBleExperiment::ExportSet dataSet;       //Provides exporting the data to excel etc.
  dataSet.setLabel("Data Set");
  PhyphoxBleExperiment::ExportData exportData;
  exportData.setLabel("Data Export");
  exportData.setDatachannel(1);

  // Attach to experiment
  firstView.addElement(firstGraph);            //attach graph to view
  firstView.addElement(firstValue);            //attach graph to view
  //secondView.addElement(myInfo);                //attach info to view
  //secondView.addElement(calibrate);          //attach separator to view
  vl53l0x.addView(firstView);         //attach view to experiment
  //vl53l0x.addView(secondView);
  dataSet.addElement(exportData);                   //attach data to exportSet
  vl53l0x.addExportSet(dataSet);        //attach exportSet to experiment
  PhyphoxBLE::addExperiment(vl53l0x);      //attach experiment to server

  // Test distance sensor
  Serial.println("Adafruit VL53L0X test");
  if (!distSensor.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
}

void loop() {
  // read data
  VL53L0X_RangingMeasurementData_t distMeas;
  distSensor.rangingTest(&distMeas, false); // pass in 'true' to get debug data printout!

  // phase failures have incorrect data
  if (distMeas.RangeStatus != 4) {
    Serial.print("Distance (mm): "); Serial.println(distMeas.RangeMilliMeter);
    distValue = distMeas.RangeMilliMeter;
    PhyphoxBLE::write(distValue);
  }
  else {
    Serial.println("out of range");
  }
 
  delay(10);
}

Auswertung

Probleme und Lösungen

  • test
  • test