Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Qui veux m'aider à la création d'un programme
#21
1er test de mesure position avec QMC5883L
Câblage ultra rapide avec 4 fils sur une planche à pain
C est le cote positif.

Cote résultat c’est inutilisable, les mesures brutes du champs magnétique ne sont pas stables du tout. En positionnant la sonde plusieurs fois strictement de façon identiques , les mesures different

Comme ce n est pas stable tous les calculs sont erronés…. J essaierai en plein air voir si ca stabilise, mais je n’ y crois pas.

Comme les sondes étaient livrées par 2 j ai essayé avec les 2eme avec des résultats très différents de la première….
Répondre
#22
Salut lolo69
c'est quoi ton cablage de tests ?
une photo pour tenter de comprendre tes manips ?
j'imagine que ta as procédé à tests dans un lieu neutre du point de vue magnétique .
cdlt Gilles
Config : 3 routeurs F1ATB en V12_06 - mode Triacs 
PV 3kw (8 panneaux TrinaSolar 425W +Onduleur SunGrow 3KW) - Supervision Domotique : Home Assistant via Shelly & MQTT
Autoconsommation moyenne 95 %
Répondre
#23
Pour les photos c est on ne peut plus simple Une planche à pain avec un QMC5883 connecté au +3,3 V fil rouge, au GND fil Gris  , au bus I2C standard GPIO 21 et GPIO23 fil jaune et fil bleu


           
Sur la photo de droite on voit bien la direction des trois axes, x, y et z pour pouvoir faire les calculs , j'ai mis longtemps avant de trouver dans quel sens cette sonde mesurait les champs.
Coté programme j'ai essayé plusieurs bibliothèques mais celle qui parait le mieux fonctionner et la plus complète est QMC5883LCompass

Elle permet d'obtenir les valeurs du champs magnetiques dans les 3 directions ce qui permet de 
- faire les differents calculs verctoriel pour obtenir l'azimuth , inclinaison qui nous serait utile. 
- Dans cette même bloibliotheque il y a le calcul tout fait de l azimuth , qui m'ont permis de verifier que "mes calculs" étaient justes car il y a longtemps queje n'avais pas fait de trigo.
- De faire une calibration de la sonde pour nettoyer les bruits eletromagnetique ambiant
- De filtrer et moyenner les mesures 

J'ai donc utiliseé les programmes exemples + un peu de mes meurones. ¨Pour l'instant je ne suis pas très sûr de mes calculs qui peuvent etre faux, mais ce qui est génant c'est qu'a position strictement identique les mesures brutes varient beaucoup.


Pour mes tests je compare les résultats avec la boussole de mon Iphone qui me semble très fiable quand je m'aligne sur la position du soleil avec l'application SunSurveyor ou SkyView

J'étais à l'interieur pour ces tests, dans un environnment magentique normalement assez calme, je ferais d'autres tests au milieu du jardin quand il fera moins froid ;-)

Prochaine campagne de test sans passer par la bibliothèque mais en pilotant directement les registres du QMC via l I2C cela permet un contrôle beaucoup plus fin ( meme si ce registre est accessible depuis la bibliothèque cela évitera de chercher et d installer la bonne bibliothèque)
Rdv fin de la semaine pour les resultats

Si quelqu'un veut une sonde pour faire des tests, je peux lui envoyer gratos , il suffit de me donner votre adresse en MP
Répondre
#24
Merci lolo69 pour le partage de tes investigations .
A suivre donc !
Config : 3 routeurs F1ATB en V12_06 - mode Triacs 
PV 3kw (8 panneaux TrinaSolar 425W +Onduleur SunGrow 3KW) - Supervision Domotique : Home Assistant via Shelly & MQTT
Autoconsommation moyenne 95 %
Répondre
#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
#26
Merci trop bien d avoir les maxi des échelles je n arrivais pas à les trouver mais j aurais pu deviner ca doit faire de 2^16 !!
Les exemples de la biblio compass etaient moins complet que ton exemple sur lequel je vais aussi m appuyer
Et en fait en utilisant directement les registres ca revient à peu pres au meme.
Je poursuis les tests demain en allant un peu plus dans les details en jouant sur les sensibilités maintenant que je connais les valeurs de champs théoriques ca me dira si les valeurs de calibration sont cohérentes et surtout avec le dataready…
Répondre
#27
Bon résultat des tests
le programme de CF8929 est très astucieux. c'est très interessant de comprendre les calcuks qui s'y trouvent et ceka pourrait etre un très bon départ
Malheureusement je pense que les sondes que j'ai reçues sont de pales copies des sondes originales de Honeywell.
Malgrés tous les tests à différentes sensibilités, vitesses résolutions, filtrages, calibrages etc etc à position strictement identiques , champs magnétiques environnants calmes et stables les données brutes ne sont pas stables du tout et pas surtout ne sont pas répetitives.

Donc pour un tracker impossible d'utiliser, je ne ferais pas le test de racheter d'autres sondes pour savoir si je suis "mal tombé" ou si c'est générique.
Les différents tutos et avis laissent à penser que normalement ca fonctionne plutot bien alors je pense que j 'ai pas eu de bol avec ces sondes, d'ailleurs la serigraphie sur la puce est quasi invisible me laissant penser à du rebut. La piste reste ouverte car d'un point de vue programme avec bibliotheque ou pas cela reste très simple à programmé une fois qu'on a reussi à comprendre la trigonometrie des ces 3 axes dans l'espace.
Répondre
#28
Bonjour,

Merci de partager ton expérience tout de même!
Il semble en effet que d'apprivoiser ces gyroscopes ne soit pas facile.
Une autre direction alors?
A+

Pourquoi pas un capteur d'angle à potentiomètre, l'ESP32 procède des entrées Analogiques.
Dans la simplicité avec ceci:
Codeur

A+
RMS V12, UxI Chauffage soufflant + CE Thermodynamique
6 X 500Wc Dualsun Half-cut Black, Domoticz
Répondre
#29
Le potentiomêtre est une bonne idée
Pour ma part j'utilise une poulie crantée donc très facile de compter les impulsions fournies par un simple détecteur inductif.
Il y a 120 crans soit 60 pour une révolution de 180°. 1 pour 6 ° qui est je pense très suffisant.
le cycle :
je fait tourner en azimut et je controle le nombre d'impulsions et j'arrête la rotation. J'adapte le cycle en fonction d'une bibliothèque encapculée dans l'esp.
C'est simple, très simple, peut être trop simple pour vous mais je fais peut être fausse route.
Répondre
#30
Attends, ce n'est 3° par cran?

Mais pas du tout la simplicité est toujours la meilleur chose!

Seulement est ce que ta mécanique est facile répétable par quiconque?

A+
RMS V12, UxI Chauffage soufflant + CE Thermodynamique
6 X 500Wc Dualsun Half-cut Black, Domoticz
Répondre


Atteindre :


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