Utilizzo CMPS10

Ciao ragazzi, sto cercando di far funzionare la bussola CMPS10 ma non riesco ad ottenere dati compensati, inclinandola arriva ad accumulare un errore di 4° e mi sembrano un pò troppi.
Ho forse saltato qualche passaggio da fare?
Lo sketch l’ho preso dalla libreria CMPS10.h e si chiama “compass_test”.

prego link alla libreria. Ciao Uwe

Marcohm: nclinandola arriva ad accumulare un errore di 4° e mi sembrano un pò troppi.

Per quel tipo di sensori low cost è la norma, per non parlare della reale precisione che è circa 2°.

Grazie per avermi risposto. Libreria: https://github.com/kragniz/CMPS10 Sensore low cost? L'ho pagato sui trenta euro!

Marcohm: Sensore low cost? L'ho pagato sui trenta euro!

Si vede che non hai mai visto i prezzi dei sensori buoni :D Una bussola compensata decente, precisione garantita migliore di 1°, costa 500$

Buongiorno :D Sto smanettando con la bussola, ma non riesco a capire come calibrarla. Sul sito del produttore viene indicato di scrivere tre diversi valori nei registri, ecc, potreste indicarmi i passaggi da fare? Non ho la minima idea su come procedere.

http://www.robot-electronics.co.uk/htm/cmps10i2c.htm

Marcohm: Buongiorno :D Sto smanettando con la bussola, ma non riesco a capire come calibrarla.

Devi seguire la procedura consigliata dal produttore:

Calibration the CMPS10 
I would recommend evaluating the CMPS10 performance first before implementing this function. 
Its purpose is to remove offsets caused by constant magnetic sources around the CMPS10.
First of all you need to determine North and align the CMPS10 with it, then write a sequence of 3 commands in the correct order with a small delay between bytes, 100ms will be more than adequate. 
The sequence to enter calibration mode is 0x31,0x45,0x5A, then calibrate the first point by sending 0x5E to the command register, this should also light the LED.
The Compass should then be rotated 90° and 0x5E sent to the command register again, repeat for two further 90° rotations and the calibration completes and the LED turns off.
 Please make sure that the CMPS10 is not located near to ferrous objects as this will distort the magnetic field and induce errors in the reading. 

Restore of factory calibration of the CMPS10 
To perform a restore of the factory calibration write a sequence of 3 commands in the correct order with a small delay between bytes, 100ms will be more than adequate.
 The sequence is 0x6A,0x7C,0x81.
[/code[

Forse sono stato poco chiaro, lui dice di mandargli questi valori, ma come faccio? Non ho la minima idea di come fare, anche perchè non so utilizzare la libreria Wire.h e penso che si faccia con questa. Devo scrivere uno sketch? Ditemi voi cosa :-\

in I2C la sequenza e' questa

Calibration the CMPS10 I would recommend evaluating the CMPS10 performance first before implementing this function. Its purpose is to remove offsets caused by constant magnetic sources around the CMPS10. First of all you need to determine North and align the CMPS10 with it, then enter the calibration mode by writing 0xF0 to the command register (22). To calibrate the first point write 0xF5 to the command register, this should also light the LED, then move the object through 90° and write 0xF5 to the command register. Repeat this twice more so four points are calibrated and the LED should also turn off to confirm calibration completion. Please make sure that the CMPS10 is not located near to ferrous objects as this will distort the magnetic field and induce errors in the reading.

quindi devi fare uno sketch che contenga questo

 // per entrare in modalita' calibrazione
  Wire.beginTransmission(0x60); // indirizzo della periferica 0X60)
  Wire.write(22); // Invia l'indirizzo del registro
  Wire.write(0xF0); // invia il valore F0 all'indirizzo 22
  Wire.endTransmission(); // Fine della trasmissione
  
  //da ripetersi per ogni Punto cardinale (Nord, est, Sud, Ovest )
  Wire.beginTransmission(0x60); // indirizzo della periferica 0X60)
  Wire.write(22); // Invia l'indirizzo del registro
  Wire.write(0xF5); // invia il valore F5 all'indirizzo 22
  Wire.endTransmission(); // Fine della trasmissione

Magnifico :D Era ciò che cercavo, mi sei tanto stato di aiuto, grazie :)

Buongiorno ragazzi :) Ho risolto il problema della calibrazione ma ora ho un altro problema. Nel tempo la bussola perde di nuovo la calibrazione e mi tocca correggere sempre lo sketch aggiungendo o togliendo gradi sia alla lettura dell'accelerometro che alla lettura della bussola. Qualcuno può aiutarmi? :sob: