26-12-2024, 09:19 AM
Bonjour,
C'est bien de pouvoir tester, cela permet de valider les modules merci Lolo69.
Le capteur serait également sensible aux métaux assez proches.
J'ai vu quelque part, qu'il fallait le calibrer si tu veux essayer ce bout de code:
A+
C'est bien de pouvoir tester, cela permet de valider les modules merci Lolo69.
Le capteur serait également sensible aux métaux assez proches.
J'ai vu quelque part, qu'il fallait le calibrer si tu veux essayer ce bout de code:
Code :
#include <Wire.h>
#include <QMC5883L.h>
QMC5883L compass;
float minX = 32767, maxX = -32768, minY = 32767, maxY = -32768, minZ = 32767, maxZ = -32768;
float offsetX, offsetY, offsetZ;
float scaleX, scaleY, scaleZ;
void setup() {
Serial.begin(9600);
while (!compass.begin()) {
Serial.println("Could not find a valid QMC5883L sensor, check wiring!");
delay(500);
}
compass.setRange(QMC5883L_RANGE_200uT);
compass.setMeasurementMode(QMC5883L_CONTINOUS);
compass.setDataRate(QMC5883L_DATARATE_50HZ);
compass.setSamples(QMC5883L_SAMPLES_8);
}
void loop() {
Vector raw = compass.readRaw();
// Enregistrer les valeurs maximales et minimales pour chaque axe
if (raw.XAxis < minX) minX = raw.XAxis;
if (raw.XAxis > maxX) maxX = raw.XAxis;
if (raw.YAxis < minY) minY = raw.YAxis;
if (raw.YAxis > maxY) maxY = raw.YAxis;
if (raw.ZAxis < minZ) minZ = raw.ZAxis;
if (raw.ZAxis > maxZ) maxZ = raw.ZAxis;
// Calculer l'offset pour chaque axe
offsetX = (maxX + minX) / 2;
offsetY = (maxY + minY) / 2;
offsetZ = (maxZ + minZ) / 2;
// Calculer l'échelle pour chaque axe
scaleX = (maxX - minX) / 2;
scaleY = (maxY - minY) / 2;
scaleZ = (maxZ - minZ) / 2;
// Normaliser les valeurs
float normX = (raw.XAxis - offsetX) / scaleX;
float normY = (raw.YAxis - offsetY) / scaleY;
float normZ = (raw.ZAxis - offsetZ) / scaleZ;
// Calculer l'azimut
float heading = atan2(normY, normX);
float headingDegrees = heading * 180.0 / M_PI;
if (headingDegrees < 0) {
headingDegrees += 360;
}
Serial.print("Heading: ");
Serial.println(headingDegrees);
// Élévation (inclinaison par rapport à l'horizontale)
float elevation = atan2(normZ, sqrt(normX * normX + normY * normY));
float elevationDegrees = elevation * 180.0 / M_PI;
Serial.print("Elevation: ");
Serial.println(elevationDegrees);
delay(1000);
}
A+
RMS V12, UxI Chauffage soufflant + CE Thermodynamique
6 X 500Wc Dualsun Half-cut Black, Domoticz
6 X 500Wc Dualsun Half-cut Black, Domoticz