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); }
Arbeitsmaterial
Hier sind zwei Arbeitsblätter zu finden: File:Distanzsensor 1.pdf und File:Distanzsensor 2.pdf
Probleme und Lösungen
- test
- test