Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Qui veux m'aider à la création d'un programme
#25
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:
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
Répondre


Messages dans ce sujet
RE: Qui veux m'aider à la création d'un programme - par marcos83 - 21-12-2024, 03:41 PM
RE: Qui veux m'aider à la création d'un programme - par marcos83 - 21-12-2024, 04:17 PM
RE: Qui veux m'aider à la création d'un programme - par marcos83 - 21-12-2024, 08:09 PM
RE: Qui veux m'aider à la création d'un programme - par CF8929 - 26-12-2024, 09:19 AM

Atteindre :


Utilisateur(s) parcourant ce sujet : 14 visiteur(s)