This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Temperature Measurement- Sending Data from ESP32
#1
Hallo zusammen,
ich arbeite gerade an einem kleinen Projekt, das für eine Reihe von Experimenten interessant sein könnte.
Ich möchte hier den aktuellen Stand zeigen, weil ich denke, dass eine Temperaturkontrolle ein praktisches Werkzeug für eine ganze Reihe von Experimenten sein kann.
Ich habe den Beitrag in 3 Teile aufgeteilt:
1. Geschichte - Warum baue ich einen Temperaturregler und welchen Zweck soll er erfüllen?
2. Hardware - Welche Hardware verwende ich und warum?
3. Software - Welchen Code und welches Phyphox-Experiment verwende ich?
Geschichte:
Ich betreibe derzeit zusammen mit einem Freund ein Rallyeauto.
Bei unserer ersten Veranstaltung hatten wir einen Bremsenausfall wegen einer überhitzten Bremse.
Bremsen haben einen Temperaturbereich, in dem sie gut funktionieren. Für eine "normale" Bremse bedeutet dies, dass sie bei jeder kalten Temperatur gut funktionieren sollte, aber schlechter funktioniert, sobald sie zu heiß wird. Das ist das große Problem: Unter Rennbedingungen wird eine Bremse richtig heiß!
Die Lösung für unser Problem war recht einfach. Besorgen Sie sich bessere Bremsbeläge!
Das hat gut funktioniert. Wir investierten etwas Geld in Bremsbeläge und besorgten uns Rennbremsen.
Aber das Grundproblem bleibt bestehen. Bremsen haben einen Temperaturbereich, in dem sie gut funktionieren. Bei den Rennbremsen ist dieser Bereich nur in einen heißeren Bereich verschoben... um einiges. Unsere alte Bremse hat bei -50°C bis ~300°C gut funktioniert, während unsere neue Bremse bei ~150°C bis 450°C richtig zu funktionieren beginnt.
Dies eröffnet ein neues Problem. Kalte Bremsen.
Wir müssen nun die Bremsen auf die Betriebstemperatur vorwärmen, um sicher zu sein, dass wir sicher sind.

Zu diesem Zweck wollte ich einen kleinen und robusten Temperatursensor bauen, der meine Bremstemperaturdaten aufzeichnet.

Die Anforderungen für diesen Bau sind:
- Messung von Temperaturen bis zu 700°C. (Das Ende des Betriebsbereichs unserer Bremse ist ~650°).
- Die Daten müssen aufgezeichnet und live und nach dem Rennen ausgelesen werden können.
- Eine robuste Konstruktion, die den Belastungen und Umwelteinflüssen des Rallyesports standhält.


Die Hardware:
Zuerst musste ich entscheiden, wie ich die Temperatur messen wollte.
Ich hatte 2 Ideen im Kopf. Entweder Infrarot oder ein Termokoppeldraht. Aufgrund der rauen Umgebung, in der ich arbeiten muss, habe ich mich für das Termoelement entschieden. Außerdem kann ich die Temperatur direkt auf dem Pad messen, das sich nicht bewegt. Wenn ich die Temperatur der Scheibe oder des Reifens messen möchte, benötige ich eine Infrarotmessung, die ebenfalls einfach zu realisieren ist.
Aufgrund der sehr hohen Temperaturen, mit denen wir konfrontiert werden könnten, habe ich mich für einen Termokopplerdraht in Industriequalität entschieden. Dieser kann viel billiger gekauft werden, wenn man keine hohen Temperaturen messen muss. Wahrscheinlich könnte ich auch einen Draht mit einem niedrigeren Wert verwenden. Der Verstärker verträgt die Typen K, J, T, N, S, E, B und R. Ich habe den Typ K verwendet.
Der Termoelementdraht ist mit einem MCP9601 Termoelementverstärker verbunden, der über I2C mit einem Mikrocontroller (XIAO ESP32C3) verbunden ist.
Dieser Mikrocontroller wird verwendet, um die Sensordaten über Bluetooth an mein Smartphone zu senden.
     
Software:
Ich habe dieses Skript für meinen Mikrocontroller verwendet:

Code:
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <phyphoxBle.h>
#include <Wire.h>
#include "Adafruit_MCP9601.h"
#include <Adafruit_GFX.h>
#include <Adafruit_MLX90614.h>
//RR mcp4 67
#define I2C_ADDRESS1 (0x67)
#define temp_alert1 100
#define temp_alert2 300
#define temp_alert3 400
#define temp_alert4 500

//BLE server name
#define bleServerName "TempControl"
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Adafruit_MCP9601 mcp1;


uint16_t temp;
// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

bool deviceConnected = false;

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
#define SERVICE_UUID "0ef187e8-eb07-45d3-9a5a-0c736f917661"


// Temperature Characteristic and Descriptor
BLECharacteristic TemperatureCharacteristics("813b7a91-c7ef-47fd-844e-dc28ffdf9dfe", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor bmeTemperatureDescriptor(BLEUUID((uint16_t)0x2902));

//Setup callbacks onConnect and onDisconnect
class MyServerCallbacks: public BLEServerCallbacks {
  void onConnect(BLEServer* pServer) {
    deviceConnected = true;
  };
  void onDisconnect(BLEServer* pServer) {
    deviceConnected = false;
  }

};

// ... //


void setup()

Serial.begin(9600);


// Create the BLE Device
BLEDevice::init(bleServerName);

// Create the BLE Server
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());

// Create the BLE Service
BLEService *bmeService = pServer->createService(SERVICE_UUID);

// Create BLE Characteristics and Create a BLE Descriptor
// Temperature
bmeService->addCharacteristic(&TemperatureCharacteristics);
bmeTemperatureDescriptor.setValue("IR Temperature Celsius");
TemperatureCharacteristics.addDescriptor(&bmeTemperatureDescriptor);
 
// Start the service
bmeService->start();

// Start advertising
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pServer->getAdvertising()->start();
Serial.println("Waiting a client connection to notify...");

mlx.begin();
/* Initialise the driver with I2C_ADDRESS and the default I2C bus. */
if (! mcp1.begin(I2C_ADDRESS1)) {
    Serial.println("Sensor not found. Check wiring!");
    while (1);
    }

  Serial.println("Found MCP9601!");

  mcp1.setADCresolution(MCP9600_ADCRESOLUTION_18);
  Serial.print("ADC resolution set to ");
  switch (mcp1.getADCresolution()) {
    case MCP9600_ADCRESOLUTION_18:   Serial.print("18"); break;
    case MCP9600_ADCRESOLUTION_16:   Serial.print("16"); break;
    case MCP9600_ADCRESOLUTION_14:   Serial.print("14"); break;
    case MCP9600_ADCRESOLUTION_12:   Serial.print("12"); break;
  }
  Serial.println(" bits");

  mcp1.setThermocoupleType(MCP9600_TYPE_N);
  Serial.print("Thermocouple type set to ");
  switch (mcp1.getThermocoupleType()) {
    case MCP9600_TYPE_K:  Serial.print("K"); break;
    case MCP9600_TYPE_J:  Serial.print("J"); break;
    case MCP9600_TYPE_T:  Serial.print("T"); break;
    case MCP9600_TYPE_N:  Serial.print("N"); break;
    case MCP9600_TYPE_S:  Serial.print("S"); break;
    case MCP9600_TYPE_E:  Serial.print("E"); break;
    case MCP9600_TYPE_B:  Serial.print("B"); break;
    case MCP9600_TYPE_R:  Serial.print("R"); break;
  }
  Serial.println(" type");

  mcp1.setFilterCoefficient(0);
  Serial.print("Filter coefficient value set to: ");
  Serial.println(mcp1.getFilterCoefficient());

  mcp1.setAlertTemperature(1, temp_alert1);
  Serial.print("Alert #1 temperature set to ");
  Serial.println(mcp1.getAlertTemperature(1));
  mcp1.configureAlert(1, true, true, false, true, true);  // alert 1, enabled, rising temp, cold junction,high on alert

  mcp1.setAlertTemperature(2, temp_alert2);
  Serial.print("Alert #1 temperature set to ");
  Serial.println(mcp1.getAlertTemperature(1));
  mcp1.configureAlert(2, true, true, false, true, true);  // alert 1, enabled, rising temp, cold junction,high on alert

  mcp1.setAlertTemperature(3, temp_alert3);
  Serial.print("Alert #1 temperature set to ");
  Serial.println(mcp1.getAlertTemperature(1));
  mcp1.configureAlert(3, true, true, false, true, true);  // alert 1, enabled, rising temp, cold junction,high on alert

  mcp1.setAlertTemperature(4, temp_alert4);
  Serial.print("Alert #1 temperature set to ");
  Serial.println(mcp1.getAlertTemperature(1));
  mcp1.configureAlert(3, true, true, false, true, true);  // alert 1, enabled, rising temp, cold junction,high on alert

  mcp1.enable(true);

  Serial.println(F("------------------------------"));

}

void loop()
{
// Read temperature as Celsius (the default)
uint16_t temp = mcp1.readThermocouple();
//Notify temperature reading from BME sensor
//Set temperature Characteristic value and notify connected client
TemperatureCharacteristics.setValue(temp);
TemperatureCharacteristics.notify();
Serial.println(mlx.readObjectTempC());
Serial.println(mcp1.readThermocouple());
delay(50);
}

Der Code ist so geschrieben, dass ich das Thermoelement leicht gegen einen Infrarotlaser (mlx90614) austauschen kann.

Um den Mikrocontroller mit Phyphox zu verwenden, musste ich ein Cusom-Experiment erstellen. Dieses Experiment beinhaltet auch eine GPS-Aufzeichnung und eine Beschleunigungsaufzeichnung, da diese Daten auch für den Rallyesport sehr interessant sein können.

Das Experiment wird durch diese xml definiert:
Code:

Code:
<phyphox xmlns="http://phyphox.org/xml" xmlns:editor="http://phyphox.org/editor/xml" version="1.7" editor:version="1.0" locale="en">
    <title>Temp_light</title>
    <category>Rally</category>
    <color>green</color>
    <description>GPS 1Hz
Acceleration 20Hz
Temp 1 Hz</description>
    <icon format="base64">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</icon>
    <data-containers>
        <container size="1000" static="false">Output 1</container>
        <container size="1000" static="false">out</container>
        <container size="1000" static="false">dir</container>
        <container size="1000" static="false">v</container>
        <container size="1000" static="false">y</container>
        <container size="1000" static="false">z</container>
        <container size="1000" static="false">x</container>
        <container size="1000" static="false">status</container>
        <container size="1000" static="false">accuracy</container>
        <container size="1000" static="false">lon</container>
        <container size="1000" static="false">zAccuracy</container>
        <container size="1000" static="false">satellites</container>
        <container size="1000" static="false">z (1)</container>
        <container size="1000" static="false">lat</container>
        <container size="1000" static="false">t</container>
        <container size="1000" static="false">count</container>
        <container size="1000" static="false">sum</container>
        <container size="1000" static="false">result</container>
        <container size="1000" static="false">count (1)</container>
        <container size="1000" static="false">out (1)</container>
        <container size="1000" static="false">out (2)</container>
        <container size="1000" static="false">out (3)</container>
        <container size="1000" static="false">out (4)</container>
        <container size="1000" static="false">out (5)</container>
        <container size="1000" static="false">out (6)</container>
        <container size="1000" static="false">first</container>
        <container size="1000" static="false">first (1)</container>
        <container size="1000" static="false">out (7)</container>
    </data-containers>
    <input>
        <bluetooth editor:uuid="821" editor:posx="788.2153043746948" editor:posy="53.22222137451172"    mode="notification" rate="1" subscribeOnStart="false">
            <output char="813b7a91-c7ef-47fd-844e-dc28ffdf9dfe" conversion="int16LittleEndian">Output 1</output>
        </bluetooth>
        <location editor:uuid="822" editor:posx="48.11111068725586" editor:posy="881.0000267028809">
            <output component="lat">lat</output>
            <output component="lon">lon</output>
            <output component="z">z (1)</output>
            <output component="v">v</output>
            <output component="dir">dir</output>
            <output component="t">t</output>
            <output component="accuracy">accuracy</output>
            <output component="zAccuracy">zAccuracy</output>
            <output component="status">status</output>
            <output component="satellites">satellites</output>
        </location>
        <sensor editor:uuid="823" editor:posx="27.302084922790527" editor:posy="1476.222312927246" rate="20" average="false" type="linear_acceleration">
            <output component="x">x</output>
            <output component="y">y</output>
            <output component="z">z</output>
        </sensor>
    </input>
    <output>
    </output>
    <analysis sleep="0"  onUserInput="false">
        <timer editor:uuid="871" editor:posx="33.486117362976074" editor:posy="1351.9410018920898">
            <output as="out">out</output>
        </timer>
        <count editor:uuid="911" editor:posx="1193.6729354858398" editor:posy="1023.9874649047852">
            <input as="buffer" clear="false">t</input>
            <output as="count">count</output>
        </count>
        <first editor:uuid="923" editor:posx="1196.859375" editor:posy="577.8297119140625">
            <input as="value" clear="false">lat</input>
            <output as="first">first</output>
        </first>
        <first editor:uuid="921" editor:posx="1200.09375" editor:posy="690.5">
            <input as="value" clear="false">lon</input>
            <output as="first">first (1)</output>
        </first>
        <add editor:uuid="913" editor:posx="1205.84375" editor:posy="850.3171997070312">
            <input as="summand" clear="false">count (1)</input>
            <input as="summand" type="value">1</input>
            <output as="sum">sum</output>
        </add>
        <if editor:uuid="912" editor:posx="1410.3604736328125" editor:posy="1022.6332778930664" less="false" equal="false" greater="true">
            <input as="a" clear="false">count</input>
            <input as="b" clear="false">sum</input>
            <input as="true" clear="false">out (5)</input>
            <output as="result">result</output>
        </if>
        <formula editor:uuid="924" editor:posx="1494.7280883789062" editor:posy="571.9375" formula="6371*acos(sin(0.01745329252*[1])*sin(0.01745329252*[3])+cos(0.01745329252*[1])*cos(0.01745329252*[3])*cos(0.01745329252*([2]-[4])))">
            <input as="in" clear="false">first</input>
            <input as="in" clear="false">first (1)</input>
            <input as="in" clear="false">lat</input>
            <input as="in" clear="false">lon</input>
            <output as="out">out (7)</output>
        </formula>
        <count editor:uuid="915" editor:posx="1655.53125" editor:posy="1170.125">
            <input as="buffer" clear="false">result</input>
            <output as="count">count (1)</output>
        </count>
        <integrate editor:uuid="920" editor:posx="1665.3096923828125" editor:posy="975.8937377929688">
            <input as="in" clear="false">result</input>
            <output as="out">out (6)</output>
        </integrate>
        <subrange editor:uuid="916" editor:posx="1869.8341064453125" editor:posy="1250.8626098632812">
            <input as="in" clear="false">lon</input>
            <input as="from" clear="false">count (1)</input>
            <output as="out">out (1)</output>
        </subrange>
        <subrange editor:uuid="914" editor:posx="1871.0625" editor:posy="1084.828125">
            <input as="in" clear="false">lat</input>
            <input as="from" clear="false">count (1)</input>
            <output as="out">out (2)</output>
        </subrange>
        <differentiate editor:uuid="918" editor:posx="2100.737060546875" editor:posy="1256.4612426757812">
            <input as="in" clear="false">out (1)</input>
            <output as="out">out (4)</output>
        </differentiate>
        <differentiate editor:uuid="917" editor:posx="2103.13916015625" editor:posy="1084.6487426757812">
            <input as="in" clear="false">out (2)</input>
            <output as="out">out (3)</output>
        </differentiate>
        <formula editor:uuid="919" editor:posx="2388.0828857421875" editor:posy="1139.3125" formula="0.01745329252*sqrt((cos(0.01745329252*[1_])*[2_])^2+[1_]*[1_])*6371">
            <input as="in" clear="false">out (3)</input>
            <input as="in" clear="false">out (4)</input>
            <output as="out">out (5)</output>
        </formula>
    </analysis>
    <views>
        <view label="Temp Values">
            <value editor:uuid="878" editor:posx="1010.2604703903198" editor:posy="53.37152862548828" label="Temperature" size="3" precision="2" scientific="false"  factor="1" >
                <input>Output 1</input>
            </value>
        </view>
        <view label="Acceleration">
            <graph editor:uuid="879" editor:posx="1122.7258024215698" editor:posy="1418.4479293823242" label="Accelerometer x" aspectRatio="2.5" style="lines" lineWidth="1" color="green" partialUpdate="true" history="1" labelX="t" labelY="a" labelZ="" unitX="s" unitY="m/s²" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">out</input>
                <input axis="y">x</input>
            </graph>
            <graph editor:uuid="880" editor:posx="1120.7361783981323" editor:posy="1548.8125228881836" label="Accelerometer y" aspectRatio="2.5" style="lines" lineWidth="1" color="blue" partialUpdate="true" history="1" labelX="t" labelY="a" labelZ="" unitX="s" unitY="m/s²" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">out</input>
                <input axis="y">y</input>
            </graph>
            <graph editor:uuid="881" editor:posx="1119.5417203903198" editor:posy="1681.5485153198242" label="Accelerometer z" aspectRatio="2.5" style="lines" lineWidth="1" color="yellow" partialUpdate="true" history="1" labelX="t" labelY="a" labelZ="" unitX="s" unitY="m/s²" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">out</input>
                <input axis="y">z</input>
            </graph>
        </view>
        <view label="Movement">
            <value editor:uuid="882" editor:posx="704.8542203903198" editor:posy="1127.8783798217773" label="Status" size="1" precision="2" scientific="false"  factor="1" >
                <input>status</input>
                <map  max="-1">GPS disabled</map>
                <map min="0" >GPS active</map>
            </value>
            <separator editor:uuid="883" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <graph editor:uuid="884" editor:posx="957.390625" editor:posy="697.8734436035156" label="Speed" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="true" history="1" labelX="t" labelY="v" labelZ="" unitX="s" unitY="m/s" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">out</input>
                <input axis="y">v</input>
            </graph>
            <graph editor:uuid="885" editor:posx="962.0234375" editor:posy="845.0750122070312" label="Direction" aspectRatio="2.5" style="dots" lineWidth="1" color="ff7e22" partialUpdate="true" history="1" labelX="t" labelY="Direction" labelZ="" unitX="s" unitY="°" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">out</input>
                <input axis="y">dir</input>
            </graph>
            <graph editor:uuid="886" editor:posx="1900" editor:posy="940.6875" label="Distance travelled" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="true" history="1" labelX="t" labelY="d" labelZ="" unitX="s" unitY="km" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">t</input>
                <input axis="y">out (6)</input>
            </graph>
        </view>
        <view label="Simple">
            <value editor:uuid="887" editor:posx="705.5243253707886" editor:posy="1213.8992538452148" label="Status" size="1" precision="2" scientific="false"  factor="1" >
                <input>status</input>
                <map  max="-1">GPS disabled</map>
                <map min="0" >GPS active</map>
            </value>
            <separator editor:uuid="888" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <value editor:uuid="889" editor:posx="715.8368253707886" editor:posy="438.5171771645546" label="Latitude" size="1" precision="6" scientific="false" unit="°" factor="1" >
                <input>lat</input>
            </value>
            <value editor:uuid="890" editor:posx="715.9444913864136" editor:posy="525.003303527832" label="Longitude" size="1" precision="6" scientific="false" unit="°" factor="1" >
                <input>lon</input>
            </value>
            <value editor:uuid="891" editor:posx="711.8611173629761" editor:posy="610.8887252807617" label="Height" size="1" precision="1" scientific="false" unit="m" factor="1" >
                <input>z (1)</input>
            </value>
            <separator editor:uuid="892" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <value editor:uuid="893" editor:posx="714.6111173629761" editor:posy="698.3401412963867" label="Speed" size="1" precision="1" scientific="false" unit="m/s" factor="1" >
                <input>v</input>
            </value>
            <value editor:uuid="894" editor:posx="711.6250333786011" editor:posy="781.6769638061523" label="Speed" size="1" precision="1" scientific="false" unit="km/h" factor="3.6" >
                <input>v</input>
            </value>
            <separator editor:uuid="895" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <value editor:uuid="896" editor:posx="709.4201993942261" editor:posy="869.4338912963867" label="Direction" size="1" precision="1" scientific="false" unit="°" factor="1" >
                <input>dir</input>
            </value>
            <value editor:uuid="897" editor:posx="707.5243864059448" editor:posy="951.5693588256836" label="Compass" size="1" precision="2" scientific="false"  factor="1" >
                <input>dir</input>
                <map  max="-157.5">S</map>
                <map  max="-112.5">SW</map>
                <map  max="-67.5">W</map>
                <map  max="-22.5">NW</map>
                <map  max="22.5">N</map>
                <map  max="67.5">NE</map>
                <map  max="112.5">E</map>
                <map  max="157.5">SE</map>
                <map  max="202.5">S</map>
                <map  max="247.5">SW</map>
                <map  max="292.5">W</map>
                <map  max="337.5">NW</map>
                <map  >N</map>
            </value>
            <separator editor:uuid="898" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <value editor:uuid="899" editor:posx="1919.0795593261719" editor:posy="796.175048828125" label="Distance travelled" size="1" precision="3" scientific="false" unit="km" factor="1" >
                <input>out (6)</input>
            </value>
            <value editor:uuid="900" editor:posx="1729.521728515625" editor:posy="575.3484191894531" label="Distance from start" size="1" precision="3" scientific="false" unit="km" factor="1" >
                <input>out (7)</input>
            </value>
            <separator editor:uuid="901" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <value editor:uuid="902" editor:posx="706.6284818649292" editor:posy="1035.3367233276367" label="Horizontal Accuracy" size="1" precision="1" scientific="false" unit="m" factor="1" >
                <input>accuracy</input>
            </value>
            <value editor:uuid="903" editor:posx="961.7562713623047" editor:posy="1246.7582778930664" label="Vertical Accuracy" size="1" precision="1" scientific="false" unit="m" factor="1" >
                <input>zAccuracy</input>
            </value>
            <value editor:uuid="904" editor:posx="706.6458463668823" editor:posy="1299.9895553588867" label="Satellites" size="1" precision="0" scientific="false"  factor="1" >
                <input>satellites</input>
            </value>
            <separator editor:uuid="905" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <info editor:uuid="906" editor:posx="0" editor:posy="0" label="Note, that some devices do not have a GPS sensor, but provide location data through mobile or WIFI connections. These data sources produce data with bad accuracy." >
            </info>
            <separator editor:uuid="907" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <info editor:uuid="908" editor:posx="0" editor:posy="0" label="Also make sure that your system's location setting is not set to &quot;Power saving&quot; because this usually turns off the precise GPS source." >
            </info>
            <separator editor:uuid="909" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <info editor:uuid="910" editor:posx="0" editor:posy="0" label="The horizontal accuracy is the uncertainty of your location, while the vertical accuracy is the (usually worse) uncertainty of your elevation (height). If the accuracy is zero, this information is not available." >
            </info>
        </view>
    </views>
    <export>
        <set name="Temp Data">
            <data name="Temp">Output 1</data>
        </set>
    </export>
</phyphox>

Ich möchte das Projekt in Zukunft etwas straffen und auch viele Dinge etwas besser kommentieren.
Falls jemand Interesse daran hat, einen Mikrocontroller zu benutzen, um Daten an phyphox zu senden, könnte dies eine kleine Hilfe sein, um das Konzept zu verstehen.

Ich denke, das Basisprojekt kann auch für eine Menge cooler Mikrocontroller-Experimente verwendet werden.
FindenBearbeiten Löschen Antworten Zitieren Bericht
Schlüsselwörter eingeben
Reply


Forum Jump: