Création d'un head tracker

BESQUEUT

Senior Member
Mais difficile de calculer les angles avec un Picaxe ...
Dans le cas général, c'est certain.
Toutefois, dans le cas qui intéresse dje, une approximation telle que proposée pour l'accéléromètre-LSM303DLM semble suffisante.
Quand à la compensation, ça ne devrait pas être vraiment nécessaire tant que la tête n'est pas trop penchée.

Plus précisément, votre programme assimile l'angle à son sinus entre 0 et 50°. La même chose est faite pour les valeurs négatives.
On couvre donc déjà un quart de cercle.
Or un cercle complet comporte 8 quadrants de 45°.
Entre 45 et 90°, c'est le cosinus qui est assimilable à l'angle (ça revient au même en fait...)
En faisant la même assimilation pour les 6 quadrants restants, on couvre sans problème un tour complet.
J'ai eu beaucoup de difficultés sans disposer de la bête pour lire les valeurs sur 12 bits ; mais maintenant que vous avez donné la méthode, ce n'est plus que de la trigo approximative (au sens noble du terme). Fo juste pas se gourer dans les 8 tests et dans les signes...
C'est pour ça que j'ai demandé des valeurs lues sur 360° de façon à valider "à priori" la méthode.

PS sur la précision:
Entre 0 et 50°, vous annoncez un écart ne dépassant pas 2°
Avec des sinus exprimés entre 0 et 1000, je trouve
1,9° à 20°
2.0° à 30°
0.25° à 45°
-1° à 50°

Pour info, ça passe à :
-5° à 60°
-17° à 80°

Mais avec des sinus exprimés entre 0 et 1024, je trouve
2.4° à 20°
2.8° à 30°

On peut faire un poil mieux en se limitant à l'intervalle 0<-> 45° et en ajustant la pente (8/125 actuellement)
Avec une pente de 0,0605, l'erreur ne dépasse pas 1,2° entre 0 et 45°
 
Last edited:

BESQUEUT

Senior Member
Bon, je pense que je vais abandonner ce projet car c'est trop complexe et sans vous je suis bon à rien.
N'exagérons rien : même si j'ai eu besoin d'un coup de pouce pour lire les valeurs sur 12 bits, et si il reste un peu de taf pour la trigo, il vous restera pas mal de choses à faire pour la réalisation mécanique, la transmission, etc...
A propos; quelle est la course effective du servo (en degrés) pour la plage de pilotage annoncée (entre 100 et 200)
 
Last edited:

BESQUEUT

Senior Member
Ne pourrait on pas créer une petite table de conversion très simpliste, à la place !
Pour les accélérations, la méthode proposée par PieM est la plus simple possible et donne une bonne précision.
Une table serait plus compliquée et moins précise !
Idem pour le magnétomètre sans compensation.
Quand à faire une table pour compenser le magnétomètre...
La formule tiens compte des 3 valeurs de l'accéléromètre et des 3 du magnétomètre, soit 6 entrées.
Ce n'est plus une table, mais un hypercube à 6 dimensions...
Même en simplifiant beaucoup, je pense que l'approche "par quadrants" telle que proposée par PieM est de très loin préférable.
 

PieM

Senior Member
@PieM : je n'ai pas essayez ton code, je suis certain qu'il fonctionnera. Je vais certainement posée une question qui va te paraître stupide , mais sommes nous obligé de calculer les angles. Ne pourrait on pas créer une petite table de conversion très simpliste, à la place !
Je ne sais pas s'il fonctionne. Je ne dispose pas du capteur !

Attention que les données lues sont dans un ordre particulier : le msByte en premier et dans l'ordre c'est X, Z, et Y.

donc lire peut être (b15,b14,b19,b18,b17,b16)
pour avoir w7, w8, w9 en X, Y, Z

Plutôt qu'une table, le plus précis sera effectivement d'utiliser le sinus par valeur approchée, en travaillant par demi quadrants (45°)
 

dje8269

Senior Member
Bonjour ,

Prêt pour les tests, je ne sais plus vraiment ce que je dois faire ! . Dites moi et je ferais .

La pour l'heure j'ai essayé le programme de PieM pour les valeurs du magnétomètre .

Voici le programme rentré :
Code:
#picaxe 20X2

'************  initialisation   *******************
setfreq m8              'fr?quence 
hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $20,($27)  'activation
hi2cout $23,($00)  'mode 2g
}
'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================

do
	hi2cin $03, (b14,b15,b16,b17,b18,b19)' lecture des valeurs magnet X , Z et Y
	
	sertxd ("b14=",#b14," ","b15=",#b15," ","b16=",#b16," ","b17=",#b17," ","b18=",#b18," ","b19=",#b19,13,10)
	
	pause 50
loop
Et voici le résultat obtenu :

b14=255 b15=42 b16=0 b17=220 b18=255 b19=184
j'ai essayé de tourner la plaque dans les sens , et aucune valeur ne bouge .

Par contre si je l'éteins et la rallume les valeurs bougent . comme si une MAJ était effectuée . Je précise que comme on est sur le magnétomètre je tourne la plaque a plat sur la table . Si je suis dans l'erreur n'hésitez pas a me le dire .
 

dje8269

Senior Member
Ok , je pense avoir trouvé , mais je suis sur de rien ; j'ai mis le registre 0x02 , a $0 , pour le passer en mode continu ; et les valeurs changent maintenant quand je tourne la plaque .

Voici les conditions de test :

La plaque a plat au bord de la table pour "a peu pret" pour pouvoir retrouver "a peu pret" la même orientation . Donc je tourne d'abord a droite de 180° ( demi -tour), puis je reviens a la position initiale . puis a gauche de 180° , puis je reviens en position .

View attachment test magnetometre.txt
 
Last edited:

PieM

Senior Member
Ok , je pense avoir trouvé , mais je suis sur de rien ; j'ai mis le registre 0x02 , a $0 , pour le passer en mode continu ; et les valeurs changent maintenant quand je tourne la plaque .
Exact, j'ai oublié de le préciser.

Attention à ne pas tout mélanger :
hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte signifie qu'on s'adresse au magnétomètre.
par contre ça :

hi2cout $20,($27) 'activation
hi2cout $23,($00) 'mode 2g

c'est pour les registres des accéléromètres

Donc écrire hi2cout $23,($00) à l'adresse des magnétos est interdit !!

Registres réservés à ne pas modifier !


Sinon vu de loin, les mesures relevées sembles correctes. Pas dépouillé encore.
 

PieM

Senior Member
Merci de faire les mesures ((b15,b14,b19,b18,b17,b16)
et ne pas mettre de bxx= dans le sertxd. pour n'avoir que les valeurs brutes.
 

dje8269

Senior Member
Voici ,

le programme :

Code:
#picaxe 20X2

'************  initialisation   *******************
setfreq m8              'fr?quence 
hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================

do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	
	sertxd (#b14," ",#b15," ",#b16," ",#b17," ",#b18," ",#b19,13,10)
	
	pause 50
loop
Le résultat dans les mêmes conditions de test ; 180° a droite puis a gauche en revenant au milieu entre les deux

View attachment test magnetometre2.txt
 

PieM

Senior Member
Beaucoup d'anomalies !

Les mesures sont bien faites loin de sources magnétiques, ordi, écran, ou de masses métalliques ?
 

dje8269

Senior Member
Non pas tres loin de l'ordi portable ! genre 30 cm . tu veux que je les refasse en tirant le plus possible sur le cordon ,je pense qu'il fait un metre grosso modo ?

Le module est sur cette plaque d'essai , crois tu que ca gene les piles sont en dessous de la plaque
 

PieM

Senior Member
C'est pas mieux ? Si il vous faut autre chose , pas de problème , n'hésitez surtout pas !
Le résultat donne un peu n'importe quoi.
je me demande si le fait d'avoir écrit dans un registre interdit n'a pas détruit le capteur !: voir #87

Registers marked as “reserved” must not be changed.
Writing to these registers may cause
permanent damage to the device.
 

dje8269

Senior Member
Ah ben , elle est pas mal celle la . fallait bien que ma poisse continue ! .

Aucun moyen, de réinitialisé le capteur ? , peut être tenté d"écrire $0 ?

Le résultat donne un peu n'importe quoi.
Que veux tu dire par un peu n'importe quoi ? J'avais cru que mes valeurs étaient pal mal , a part quelques erreurs effectivement. car elles bougeaient bien en tournant, mais je sais vraiment pas les interprétés . Je comprends meme pas ; par exemple pour un magnétomètre pour y aurait-il 3 valeurs ? la boussole ne travaille que sur un axe non ?

Au pire j'en ai un deuxième au travail !
 

PieM

Senior Member
Aucun moyen, de réinitialisé le capteur ? , peut être tenté d"écrire $0 ?
dommage permanent ça veut dire permanent.

car elles bougeaient bien en tournant
ben ça ne veut pas dire qu'elles sont valables.

par exemple pour un magnétomètre pour y aurait-il 3 valeurs
Le vecteur du champ magnétique terrestre n'est pas dans le plan horizontal du lieu.
Si ton aiguille de boussole était totalement libre elle plongerait vers le bas de 60° chez toi.
 

dje8269

Senior Member
Si ton aiguille de boussole était totalement libre elle plongerait vers le bas de 60° chez toi.
Ok merci pour cette précision ;

Je viens de faire des tests ;

les valeurs ont vraiment l'air "exploitable" . quand je tourne doucement la plaque ; les valeurs varient bien a droite et a gauche , quand elle dépasse 255 elle reviennent a zéro . Un peu comme avec l'accéléromètre au début de la recherche .

Je vais essaye de moyenner tout ca ! .

mes test étaient vite fait quand même ; peut être que j'ai fais des erreurs en bougeant la plaque ou autre.

Par exemple : w8 , la plus facile a comprendre pour moi donne 230 à 233 quand la plaque est dans une position "initial" . je bouge a droite et a gauche a plat , la valeur varie plutôt bien dans un sens comme dans l'autre . quand je remet ma plaque a sa position initiale, la valeur lue est bien de 230 à 233 .

Je continue mes tests
 
Last edited:

dje8269

Senior Member
J'y cru y etre parvenue mais , ca coince ;

en fait en fait je récupère la valeur w8 je lui ajoute 500 pour ne pas quelle passe le zéro ( et donc remonte a 65536) .

Quand je tourne la plaque a plat, nickel , mes valeurs varient bien . Je pourrais sortir une mise à l'échelle a partir de ca, sans trop de complication ; Mais , la ou le bas blesse c'est que quand j'incline la plaque sur un coté ( et non a plat) , la valeur varie aussi ! donc ce ne serait pas fiable .

J'y ai cru un moment .

Code:
#picaxe 20X2

'************  initialisation   *******************
être m8              'fr?quence 
hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	w6 = 0
	
	for b1 = 0 to 50
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	w6 = w6 + w8
	next

	w8 = w8 +500
	sertxd ("w8= ",#w8,13,10)

	pause 200
loop
Je sens bien que le capteur réagis bien , je doute qu'il soit HS . mais je peux me tromper . il y a vraiment une corrélation mais je suis pas équipe pour comprendre . , j'ai même une valeur plutôt fiable qui bouge avec le tilt . Mais c'est sur que par internet comprendre un capteur comme celui ci , c'est chaud ;
 
Last edited:

BESQUEUT

Senior Member
Je pourrais sortir une mise à l'échelle a partir de ca, sans trop de complication ; Mais , la ou le bas blesse c'est que quand j'incline la plaque sur un coté ( et non a plat) , la valeur varie aussi ! donc ce ne serait pas fiable .
Nan : vous lisez un SINUS : ce n'est pas possible de "mettre à l'échelle" au delà de 50°
Voir #73
Ce serait bien d'avoir les valeurs brutes sur un tour complet X, Y, Z et Xm, Ym, Zm
C'est plus simple de partir d'une position connue et de faire un tour toujours dans le même sens.

Pour l'inclinaison, même test, mais la platine est calée avec un angle connu.
Disons pas plus de 10° au début
et pourquoi pas d'autres tours à 20°, 30°, etc...
 

dje8269

Senior Member
Moi je fais tout les test que vous voulez , mais je comprends rien . c'est bien trop compliqué pour moi .

C'est plus simple de partir d'une position connue et de faire un tour toujours dans le même sens.
Un peu chaud niveau de faire un tour complet avec les deux câbles ( picaxe et alim) accrochés a la plaque ? est ce qu'un demi-tour pourrait suffire ?


Ce serait bien d'avoir les valeurs brutes sur un tour complet X, Y, Z et Xm, Ym, Zm
C'est a dire les valeurs "X, Y, Z et Xm, Ym, Zm" ?

Je comprends vite mais faut m'expliquer longtemps ! lol .

Oui mais j'ai pas compris grand chose . sauf le dessin avec le petit avion en page 5 . il me faut donc le heading ( quand on tourne la tête) et le pitch ( quand on hoche la tête) .

Ben oui mais j'ai pas compris grand chose , sauf le petit schéma avec l'avion Pour l'inclinaison, même test, mais la platine est calée avec un angle connu.
Je cale ma plaque sur un livre pour sur-elever un coté , et je fais touner sur 180° ? c'est ca qu'il vous faut ?
 

BESQUEUT

Senior Member
test magnetometre4.txt
Code:
							X	Y	Z		Angle
179	255	130	255	71	0		-77	-126	71		0,8
173	255	132	255	71	0		-83	-124	71		0,8
174	255	132	255	67	0		-82	-124	67		0,5
175	255	131	255	71	0		-81	-125	71	       -0,1
176	255	134	255	67	0		-80	-122	67		0,3
177	255	130	255	69	0		-79	-126	69		-0,9
177	255	129	255	70	0		-79	-127	70		-1,1
175	255	131	255	68	0		-81	-125	68		-0,1
176	255	131	255	68	0		-80	-125	68		-0,4
175	255	130	255	66	0		-81	-126	66		-0,3
174	255	132	255	66	0		-82	-124	66		0,5
174	255	131	255	68	0		-82	-125	68		0,3
176	255	130	255	69	0		-80	-126	69		-0,6
175	255	131	255	65	0		-81	-125	65		-0,1
178	255	130	255	68	0		-78	-126	68		-1,2
176	255	129	255	67	0		-80	-127	67		-0,8
174	255	129	255	68	0		-82	-127	68		-0,2
174	255	129	255	69	0		-82	-127	69		-0,2
181	255	127	255	68	0		-75	-129	68		-2,8
195	255	123	255	67	0		-61	-133	67		-8,4
223	255	114	255	64	0		-33	-142	64		-19,9
255	255	111	255	67	0		-1	-145	67		-32,6
31	0	109	255	65	0		31	-147	65		-44,9
84	0	114	255	66	0		84	-142	66		-63,6
146	0	133	255	64	0		146	-123	64		-82,9
197	0	164	255	60	0		197	-92	60		-98,0
250	0	212	255	60	0		250	-44	60		-113,0
11	1	239	255	59	0		267	-17	59		-119,4
15	1	247	255	63	0		271	-9	63		-121,1
30	1	22	0	63	0		286	22	63		-127,4
46	1	71	0	62	0		302	71	62		-136,2
51	1	91	0	59	0		307	91	59		-139,5
55	1	125	0	57	0		311	125	57		-144,9
55	1	149	0	59	0		311	149	59		-148,6
52	1	185	0	59	0		308	185	59		-154,0
46	1	225	0	58	0		302	225	58		-159,7
39	1	255	0	57	0		295	255	57		-163,8
24	1	32	1	61	0		280	288	61		-168,8
1	1	63	1	61	0		257	319	61		-174,1
218	0	107	1	62	0		218	363	62		-182,0
177	0	138	1	64	0		177	394	64		-188,8
155	0	149	1	61	0		155	405	61		-192,1
150	0	151	1	61	0		150	407	61		-192,8
137	0	159	1	63	0		137	415	63		-194,7
119	0	163	1	63	0		119	419	63		-197,1
109	0	167	1	63	0		109	423	63		-198,6
110	0	166	1	64	0		110	422	64		-198,4
121	0	163	1	63	0		121	419	63		-196,9
125	0	160	1	63	0		125	416	63		-196,3
123	0	160	1	63	0		123	416	63		-196,5
123	0	159	1	63	0		123	415	63		-196,5
123	0	159	1	64	0		123	415	64		-196,5
125	0	159	1	64	0		125	415	64		-196,2
123	0	162	1	63	0		123	418	63		-196,6
122	0	160	1	64	0		122	416	64		-196,7
131	0	156	1	63	0		131	412	63		-195,4
142	0	150	1	64	0		142	406	64		-193,7
166	0	139	1	64	0		166	395	64		-190,2
197	0	127	1	59	0		197	383	59		-185,8
226	0	98	1	58	0		226	354	58		-180,4
251	0	62	1	60	0		251	318	60		-174,7
19	1	22	1	62	0		275	278	62		-168,3
36	1	235	0	63	0		292	235	63		-161,8
51	1	175	0	65	0		307	175	65		-152,7
47	1	107	0	69	0		303	107	69		-142,4
34	1	48	0	67	0		290	48	67		-132,4
20	1	12	0	65	0		276	12	65		-125,5
3	1	240	255	67	0		259	-16	67		-119,5
232	0	201	255	63	0		232	-55	63		-109,7
189	0	161	255	65	0		189	-95	65		-96,3
172	0	148	255	63	0		172	-108	63		-90,9
137	0	129	255	64	0		137	-127	64		-80,2
121	0	126	255	63	0		121	-130	63		-75,9
124	0	127	255	66	0		124	-129	66		-76,9
117	0	125	255	62	0		117	-131	62		-74,8
119	0	125	255	64	0		119	-131	64		-75,3
112	0	127	255	62	0		112	-129	62		-74,0
88	0	119	255	65	0		88	-137	65		-65,7
40	0	114	255	68	0		40	-142	68		-48,7
235	255	116	255	65	0		-21	-140	65		-24,5
213	255	118	255	69	0		-43	-138	69		-15,7
204	255	123	255	66	0		-52	-133	66		-11,6
209	255	117	255	67	0		-47	-139	67		-14,3
206	255	120	255	66	0		-50	-136	66		-12,8
197	255	123	255	69	0		-59	-133	69		-9,1
189	255	124	255	67	0		-67	-132	67		-6,1
180	255	126	255	69	0		-76	-130	69		-2,7
170	255	136	255	66	0		-86	-120	66		2,6
160	255	138	255	66	0		-96	-118	66		6,1
152	255	138	255	65	0		-104	-118	65		8,4
160	255	134	255	67	0		-96	-122	67		5,2
169	255	130	255	66	0		-87	-126	66		1,6
173	255	127	255	69	0		-83	-129	69		-0,2
175	255	128	255	66	0		-81	-128	66		-0,7
171	255	125	255	65	0		-85	-131	65		0,0
180	255	130	255	70	0		-76	-126	70		-1,9
176	255	128	255	66	0		-80	-128	66		-1,0
165	255	132	255	69	0		-91	-124	69		3,3
152	255	139	255	64	0		-104	-117	64		8,6
124	255	152	255	66	0		-132	-104	66		18,8
108	255	163	255	65	0		-148	-93	65		24,9
71	255	202	255	64	0		-185	-54	64		40,7
27	255	236	255	57	0		-229	-20	57		52,0
255	254	27	0	56	0		-257	27	56		63,0
8	255	20	0	60	0		-248	20	60		61,6
12	255	16	0	62	0		-244	16	62		60,8
3	255	24	0	57	0		-253	24	57		62,4
240	254	84	0	56	0		-272	84	56		74,2
237	254	144	0	59	0		-275	144	59		84,6
240	254	184	0	59	0		-272	184	59		91,1
247	254	218	0	61	0		-265	218	61		96,4
15	255	26	1	60	0		-241	282	60		106,5
81	255	110	1	60	0		-175	366	60		121,4
153	255	154	1	59	0		-103	410	59		132,9
181	255	166	1	59	0		-75	422	59		136,9
219	255	178	1	62	0		-37	434	62		142,1
9	0	182	1	65	0		9	438	65		148,2
63	0	179	1	62	0		63	435	62		155,2
82	0	176	1	63	0		82	432	63		157,7
88	0	172	1	61	0		88	428	61		158,6
104	0	167	1	62	0		104	423	62		160,8
117	0	164	1	64	0		117	420	64		162,6
121	0	161	1	64	0		121	417	64		163,2
122	0	160	1	63	0		122	416	63		163,3
119	0	161	1	63	0		119	417	63		162,9
120	0	162	1	66	0		120	418	66		163,0
121	0	161	1	65	0		121	417	65		163,2
120	0	162	1	64	0		120	418	64		163,0
121	0	163	1	62	0		121	419	62		163,1
120	0	162	1	63	0		120	418	63		163,0
122	0	162	1	64	0		122	418	64		163,3
120	0	161	1	63	0		120	417	63		163,1
118	0	162	1	64	0		118	418	64		162,8
115	0	165	1	66	0		115	421	66		162,3
101	0	168	1	64	0		101	424	64		160,4
70	0	175	1	62	0		70	431	62		156,2
27	0	183	1	59	0		27	439	59		150,5
250	255	179	1	60	0		-6	435	60		146,2
221	255	176	1	58	0		-35	432	58		142,4
180	255	165	1	61	0		-76	421	61		136,8
105	255	127	1	59	0		-151	383	59		125,5
15	255	13	1	62	0		-241	269	62		105,1
243	254	178	0	64	0		-269	178	64		90,5
241	254	127	0	62	0		-271	127	62		82,1
245	254	85	0	63	0		-267	85	63		74,7
0	255	52	0	62	0		-256	52	62		68,5
12	255	21	0	62	0		-244	21	62		61,9
31	255	248	255	67	0		-225	-8	67		55,0
62	255	210	255	69	0		-194	-46	69		43,7
90	255	183	255	67	0		-166	-73	67		33,3
116	255	166	255	68	0		-140	-90	68		24,3
127	255	154	255	67	0		-129	-102	67		18,7
146	255	144	255	67	0		-110	-112	67		11,5
145	255	148	255	69	0		-111	-108	69		12,8
142	255	147	255	68	0		-114	-109	68		13,3
146	255	145	255	67	0		-110	-111	67		11,7
158	255	140	255	64	0		-98	-116	64		7,2
164	255	133	255	65	0		-92	-123	65		3,8
173	255	130	255	66	0		-83	-126	66		0,4
185	255	126	255	66	0		-71	-130	66		-4,4
181	255	125	255	68	0		-75	-131	68		-3,2
182	255	127	255	67	0		-74	-129	67		-3,2
179	255	127	255	66	0		-77	-129	66		-2,2
183	255	127	255	66	0		-73	-129	66		-3,5
183	255	128	255	66	0		-73	-128	66		-3,3
183	255	130	255	69	0		-73	-126	69		-2,9
182	255	129	255	68	0		-74	-127	68		-2,8
180	255	133	255	70	0		-76	-123	70		-1,3
175	255	132	255	70	0		-81	-124	70		0,2
176	255	133	255	70	0		-80	-123	70		0,0
173	255	133	255	67	0		-83	-123	67		1,0
Je trouve que ça colle assez bien.
 

BESQUEUT

Senior Member
Un peu chaud niveau de faire un tour complet avec les deux câbles ( picaxe et alim) accrochés a la plaque ? est ce qu'un demi-tour pourrait suffire ?
OK : on se contentera de 2 demi-tours, comme vous avez fait jusqu'à présent. Mais il faut vraiment toutes les orientations car on ne sait pas dans quelle direction sera l'opérateur au début !
C'est a dire les valeurs "X, Y, Z et Xm, Ym, Zm" ?
Ce serait l'idéal pour compenser l'inclinaison, mais ça obligerait à faire un hi2Cinit entre chaque lecture... pas commode...
On va essayer avec seulement les 3 valeurs du magnétomètre.
Maintenant que la lecture "à plat" semble bonne (#103) l'objectif serait de voir l'influence de l'inclinaison dans les différentes directions.
Je cale ma plaque sur un livre pour sur-elever un coté , et je fais tourner sur 180° ? c'est ca qu'il vous faut ?
Oui c'est ça (180° dans chaque sens). Et si vous trouvez un rapporteur (y compris sur Internet ==> imprimer) ça serait pas plus mal...
 

dje8269

Senior Member
Mon programme :

Code:
#picaxe 20X2

'************  initialisation   *******************
setfreq m8              'fr?quence 
hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y

	sertxd (#b15," ",#b14," ",#b19," ",#b18," ",#b17," ",#b16,13,10)
	
	pause 20
loop
Les conditions : a plat sur la table eloigné d'environ un metre de l'ordi et loin de toute source metalique et autres parasites .
La plauqe est placée au bord de la table , et je lui fais faire doucement , un tour complet vers la droite . le temps de me dépatouiller avec les cables il peut y avoir des petites coupures lors de la rotation .

VOici le résultat ;

View attachment test magnetometre5.txt

le même test en posant un coté de la plaque sur un petit livre pour lui donné une inclinaison . Pas evident de faire pivoter l'ensemble sur 360° et maintenant tout ca .

Voici le résultat

View attachment test magnetometre6.txt

Au plaisir de vous lire , pour effectuer de nouveau test , ou les refaire .... A vous de me dire, moi je suis perdu depuis belle lurette .

Je prefere repricser que j'ai vraiment pas besoin de valeur et /ou de précision . 5 palier d'un coté et de l'uatre suffiront je pense . il faut donc reussir a sortir 10 valeurs , avec des paliers aussi pour eviter les erreurs ;
 

dje8269

Senior Member
Code:
Code:
							X	Y	Z		Angle
179	255	130	255	71	0		-77	-126	71		0,8
173	255	132	255	71	0		-83	-124	71		0,8
174	255	132	255	67	0		-82	-124	67		0,5
175	255	131	255	71	0		-81	-125	71	       -0,1
176	255	134	255	67	0		-80	-122	67		0,3
177	255	130	255	69	0		-79	-126	69		-0,9
177	255	129	255	70	0		-79	-127	70		-1,1
175	255	131	255	68	0		-81	-125	68		-0,1
176	255	131	255	68	0		-80	-125	68		-0,4
175	255	130	255	66	0		-81	-126	66		-0,3
174	255	132	255	66	0		-82	-124	66		0,5
174	255	131	255	68	0		-82	-125	68		0,3
176	255	130	255	69	0		-80	-126	69		-0,6
175	255	131	255	65	0		-81	-125	65		-0,1
178	255	130	255	68	0		-78	-126	68		-1,2
176	255	129	255	67	0		-80	-127	67		-0,8
174	255	129	255	68	0		-82	-127	68		-0,2
174	255	129	255	69	0		-82	-127	69		-0,2
181	255	127	255	68	0		-75	-129	68		-2,8
195	255	123	255	67	0		-61	-133	67		-8,4
223	255	114	255	64	0		-33	-142	64		-19,9
255	255	111	255	67	0		-1	-145	67		-32,6
31	0	109	255	65	0		31	-147	65		-44,9
84	0	114	255	66	0		84	-142	66		-63,6
146	0	133	255	64	0		146	-123	64		-82,9
197	0	164	255	60	0		197	-92	60		-98,0
250	0	212	255	60	0		250	-44	60		-113,0
11	1	239	255	59	0		267	-17	59		-119,4
15	1	247	255	63	0		271	-9	63		-121,1
30	1	22	0	63	0		286	22	63		-127,4
46	1	71	0	62	0		302	71	62		-136,2
51	1	91	0	59	0		307	91	59		-139,5
55	1	125	0	57	0		311	125	57		-144,9
55	1	149	0	59	0		311	149	59		-148,6
52	1	185	0	59	0		308	185	59		-154,0
46	1	225	0	58	0		302	225	58		-159,7
39	1	255	0	57	0		295	255	57		-163,8
24	1	32	1	61	0		280	288	61		-168,8
1	1	63	1	61	0		257	319	61		-174,1
218	0	107	1	62	0		218	363	62		-182,0
177	0	138	1	64	0		177	394	64		-188,8
155	0	149	1	61	0		155	405	61		-192,1
150	0	151	1	61	0		150	407	61		-192,8
137	0	159	1	63	0		137	415	63		-194,7
119	0	163	1	63	0		119	419	63		-197,1
109	0	167	1	63	0		109	423	63		-198,6
110	0	166	1	64	0		110	422	64		-198,4
121	0	163	1	63	0		121	419	63		-196,9
125	0	160	1	63	0		125	416	63		-196,3
123	0	160	1	63	0		123	416	63		-196,5
123	0	159	1	63	0		123	415	63		-196,5
123	0	159	1	64	0		123	415	64		-196,5
125	0	159	1	64	0		125	415	64		-196,2
123	0	162	1	63	0		123	418	63		-196,6
122	0	160	1	64	0		122	416	64		-196,7
131	0	156	1	63	0		131	412	63		-195,4
142	0	150	1	64	0		142	406	64		-193,7
166	0	139	1	64	0		166	395	64		-190,2
197	0	127	1	59	0		197	383	59		-185,8
226	0	98	1	58	0		226	354	58		-180,4
251	0	62	1	60	0		251	318	60		-174,7
19	1	22	1	62	0		275	278	62		-168,3
36	1	235	0	63	0		292	235	63		-161,8
51	1	175	0	65	0		307	175	65		-152,7
47	1	107	0	69	0		303	107	69		-142,4
34	1	48	0	67	0		290	48	67		-132,4
20	1	12	0	65	0		276	12	65		-125,5
3	1	240	255	67	0		259	-16	67		-119,5
232	0	201	255	63	0		232	-55	63		-109,7
189	0	161	255	65	0		189	-95	65		-96,3
172	0	148	255	63	0		172	-108	63		-90,9
137	0	129	255	64	0		137	-127	64		-80,2
121	0	126	255	63	0		121	-130	63		-75,9
124	0	127	255	66	0		124	-129	66		-76,9
117	0	125	255	62	0		117	-131	62		-74,8
119	0	125	255	64	0		119	-131	64		-75,3
112	0	127	255	62	0		112	-129	62		-74,0
88	0	119	255	65	0		88	-137	65		-65,7
40	0	114	255	68	0		40	-142	68		-48,7
235	255	116	255	65	0		-21	-140	65		-24,5
213	255	118	255	69	0		-43	-138	69		-15,7
204	255	123	255	66	0		-52	-133	66		-11,6
209	255	117	255	67	0		-47	-139	67		-14,3
206	255	120	255	66	0		-50	-136	66		-12,8
197	255	123	255	69	0		-59	-133	69		-9,1
189	255	124	255	67	0		-67	-132	67		-6,1
180	255	126	255	69	0		-76	-130	69		-2,7
170	255	136	255	66	0		-86	-120	66		2,6
160	255	138	255	66	0		-96	-118	66		6,1
152	255	138	255	65	0		-104	-118	65		8,4
160	255	134	255	67	0		-96	-122	67		5,2
169	255	130	255	66	0		-87	-126	66		1,6
173	255	127	255	69	0		-83	-129	69		-0,2
175	255	128	255	66	0		-81	-128	66		-0,7
171	255	125	255	65	0		-85	-131	65		0,0
180	255	130	255	70	0		-76	-126	70		-1,9
176	255	128	255	66	0		-80	-128	66		-1,0
165	255	132	255	69	0		-91	-124	69		3,3
152	255	139	255	64	0		-104	-117	64		8,6
124	255	152	255	66	0		-132	-104	66		18,8
108	255	163	255	65	0		-148	-93	65		24,9
71	255	202	255	64	0		-185	-54	64		40,7
27	255	236	255	57	0		-229	-20	57		52,0
255	254	27	0	56	0		-257	27	56		63,0
8	255	20	0	60	0		-248	20	60		61,6
12	255	16	0	62	0		-244	16	62		60,8
3	255	24	0	57	0		-253	24	57		62,4
240	254	84	0	56	0		-272	84	56		74,2
237	254	144	0	59	0		-275	144	59		84,6
240	254	184	0	59	0		-272	184	59		91,1
247	254	218	0	61	0		-265	218	61		96,4
15	255	26	1	60	0		-241	282	60		106,5
81	255	110	1	60	0		-175	366	60		121,4
153	255	154	1	59	0		-103	410	59		132,9
181	255	166	1	59	0		-75	422	59		136,9
219	255	178	1	62	0		-37	434	62		142,1
9	0	182	1	65	0		9	438	65		148,2
63	0	179	1	62	0		63	435	62		155,2
82	0	176	1	63	0		82	432	63		157,7
88	0	172	1	61	0		88	428	61		158,6
104	0	167	1	62	0		104	423	62		160,8
117	0	164	1	64	0		117	420	64		162,6
121	0	161	1	64	0		121	417	64		163,2
122	0	160	1	63	0		122	416	63		163,3
119	0	161	1	63	0		119	417	63		162,9
120	0	162	1	66	0		120	418	66		163,0
121	0	161	1	65	0		121	417	65		163,2
120	0	162	1	64	0		120	418	64		163,0
121	0	163	1	62	0		121	419	62		163,1
120	0	162	1	63	0		120	418	63		163,0
122	0	162	1	64	0		122	418	64		163,3
120	0	161	1	63	0		120	417	63		163,1
118	0	162	1	64	0		118	418	64		162,8
115	0	165	1	66	0		115	421	66		162,3
101	0	168	1	64	0		101	424	64		160,4
70	0	175	1	62	0		70	431	62		156,2
27	0	183	1	59	0		27	439	59		150,5
250	255	179	1	60	0		-6	435	60		146,2
221	255	176	1	58	0		-35	432	58		142,4
180	255	165	1	61	0		-76	421	61		136,8
105	255	127	1	59	0		-151	383	59		125,5
15	255	13	1	62	0		-241	269	62		105,1
243	254	178	0	64	0		-269	178	64		90,5
241	254	127	0	62	0		-271	127	62		82,1
245	254	85	0	63	0		-267	85	63		74,7
0	255	52	0	62	0		-256	52	62		68,5
12	255	21	0	62	0		-244	21	62		61,9
31	255	248	255	67	0		-225	-8	67		55,0
62	255	210	255	69	0		-194	-46	69		43,7
90	255	183	255	67	0		-166	-73	67		33,3
116	255	166	255	68	0		-140	-90	68		24,3
127	255	154	255	67	0		-129	-102	67		18,7
146	255	144	255	67	0		-110	-112	67		11,5
145	255	148	255	69	0		-111	-108	69		12,8
142	255	147	255	68	0		-114	-109	68		13,3
146	255	145	255	67	0		-110	-111	67		11,7
158	255	140	255	64	0		-98	-116	64		7,2
164	255	133	255	65	0		-92	-123	65		3,8
173	255	130	255	66	0		-83	-126	66		0,4
185	255	126	255	66	0		-71	-130	66		-4,4
181	255	125	255	68	0		-75	-131	68		-3,2
182	255	127	255	67	0		-74	-129	67		-3,2
179	255	127	255	66	0		-77	-129	66		-2,2
183	255	127	255	66	0		-73	-129	66		-3,5
183	255	128	255	66	0		-73	-128	66		-3,3
183	255	130	255	69	0		-73	-126	69		-2,9
182	255	129	255	68	0		-74	-127	68		-2,8
180	255	133	255	70	0		-76	-123	70		-1,3
175	255	132	255	70	0		-81	-124	70		0,2
176	255	133	255	70	0		-80	-123	70		0,0
173	255	133	255	67	0		-83	-123	67		1,0
Je trouve que ça colle assez bien.
Moi aussi je trouve que ca colle bien .

Oui c'est ça (180° dans chaque sens). Et si vous trouvez un rapporteur (y compris sur Internet ==> imprimer) ça serait pas plus mal...
Aîe , j'ai fais dans un seul sens , celui des aiguilles d'une montre ; je refais
Pas d'imprimante a la maison ; mais si c'est primordial , je pourrais le faire au boulot ;

180° dans un sens et 180° dans l'autre pour revenir à la position initiale.

a plat
View attachment test magnetometre7.txt

Incliné legerement

View attachment test magnetometre8.txt
 

BESQUEUT

Senior Member
Je prefere repricser que j'ai vraiment pas besoin de valeur et /ou de précision . 5 palier d'un coté et de l'uatre suffiront je pense . il faut donc reussir a sortir 10 valeurs , avec des paliers aussi pour eviter les erreurs ;
Le calcul #103 a été fait avec Excel. C'est sur que le Picaxe sera moins précis (de l'ordre de 2° comme dit par PieM)
 

BESQUEUT

Senior Member
Aîe , j'ai fais dans un seul sens , celui des aiguilles d'une montre ; je refais
Pas d'imprimante a la maison ; mais si c'est primordial , je pourrais le faire au boulot ;.
Pas primordial, ça peut attendre.
Je viens de jeter un oeil au N°6...
C'est pas gagné :(
Essayez de tourner un peu plus doucement et bien régulièrement.
Si possible, donnez une estimation de l'inclinaison, ou les dimensions de la cale : largeur et hauteur.
important : toujours partir de la même direction : c'est utile de pouvoir comparer les valeurs avec et sans inclinaison.
 
Last edited:

dje8269

Senior Member
Impec : j'ai de quoi bosser, mais pas avant Lundi soir maintenant...
Ok Génial, merci beaucoup . Je vais travailler sur le typon en attendant , car le hard avance aussi, et j'ai enfin mes dimensions pour mon électronique embarqué . Je dois donc transformer ma plaque de test , en typon final pour l'integré dans le boitier prevu a cet effet !
 

BESQUEUT

Senior Member
Bon : je me lance
Pas facile car la simulation ne marche pas pour ATAN...
Code:
#picaxe 20X2
#no_table

symbol  Xmg=w1	' b2_b3
symbol  Ymg=w2	' b4_b5
symbol  Zmg=w3	' b6_b7

symbol Xm=w7	' b14_b15
symbol Ym=w8	' b16_b17
symbol Zm=w9	' b18_b19

symbol Alpha=w26
symbol Q=w27

' HeadTracker v01 2014_02_02 JYB (Non compensé)
'
'************  initialisation   *******************
setfreq m8              'fr?quence 

hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y

	gosub ATAN2
	sertxd (#Xm," ",#Ym,"  ",#Alpha,13,10)
loop





ATAN2:
	if Ym <32768 then				' Ym > 0
		
		if Xm<32768 then			' Xm > 0
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=90-Alpha
			endif
		
		else 					' Xm < 0
			Xm=-Xm
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
				Alpha=180-Alpha
			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=90+Alpha
			endif
		endif

	
	else 						' Ym < 0
		Ym=-Ym
		if Xm<32768 then			' Xm > 0
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
				Alpha=360-Alpha
			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=270+Alpha
			endif
		
		else 					' Xm < 0
			Xm=-Xm
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
				Alpha=180+Alpha

			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=270-Alpha
			endif
		endif
	endif
RETURN
 

dje8269

Senior Member
Rohhhhh la vache , je trouve ça vraiment très impressionnant . Du très très lourd la!

Je test ça tout de suite
 

BESQUEUT

Senior Member
Nouvelle version avec un meilleur debug, car je sens que ça va merder...
Code:
#picaxe 20X2
#no_table

symbol  Xmg=w1	' b2_b3
symbol  Ymg=w2	' b4_b5
symbol  Zmg=w3	' b6_b7

symbol X=w7	' b14_b15
symbol Y=w8	' b16_b17
symbol Z=w9	' b18_b19

symbol Xm=w10
symbol Ym=w11

symbol Alpha=w26
symbol Q=w27

' HeadTracker v02 2014_02_02 JYB (Non compensé)
'
'************  initialisation   *******************
setfreq m8              'fr?quence 

hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	Xm=X
	Ym=Y
	gosub ATAN2
	sertxd (#X," ",#Y,"  ",#Alpha,13,10)
loop





ATAN2:
	if Ym <32768 then				' Ym > 0
		
		if Xm<32768 then			' Xm > 0
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=90-Alpha
			endif
		
		else 					' Xm < 0
			Xm=-Xm
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
				Alpha=180-Alpha
			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=90+Alpha
			endif
		endif

	
	else 						' Ym < 0
		Ym=-Ym
		if Xm<32768 then			' Xm > 0
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
				Alpha=360-Alpha
			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=270+Alpha
			endif
		
		else 					' Xm < 0
			Xm=-Xm
			if Xm>Ym then
				Q=100*Ym/Xm
				Alpha=ATAN Q
				Alpha=180+Alpha

			else				' Xm < Ym
				Q=100*Xm/Ym
				Alpha=ATAN Q
				Alpha=270-Alpha
			endif
		endif
	endif
RETURN
Y a moyen de faire un peu plus compact...
 

BESQUEUT

Senior Member
Version plus compacte :
Code:
#picaxe 20X2
#no_table

symbol  Xmg=w1	' b2_b3
symbol  Ymg=w2	' b4_b5
symbol  Zmg=w3	' b6_b7

symbol X=w7	' b14_b15
symbol Y=w8	' b16_b17
symbol Z=w9	' b18_b19

symbol Xm=w10
symbol Ym=w11

symbol Alpha=w26
symbol Q=w27

' HeadTracker v02 2014_02_03 JYB (Non compensé)
'
'************  initialisation   *******************
setfreq m8              'fr?quence 

hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	Xm=X
	Ym=Y
	gosub ATAN2
	sertxd (#X," ",#Y,"  ",#Alpha,13,10)
loop





ATAN2:
	if Ym <32768 then				' Ym > 0
		
		if Xm<32768 then			' Xm > 0
			Q=0
			gosub Quadrant
		
	else 					' Xm < 0
			Xm=-Xm
			Q=90
			gosub Quadrant
		endif

	
	else 						' Ym < 0
		Ym=-Ym
		if Xm<32768 then			' Xm > 0
			Q=270
			gosub Quadrant
		
	else 					' Xm < 0
			Xm=-Xm
			Q=180
			gosub Quadrant
		endif
	endif
RETURN



Quadrant:
	if Xm>Ym then
		Alpha=100*Ym/Xm
		Alpha=ATAN Alpha
		Alpha=Q+Alpha
	else				' Xm < Ym
		Alpha=100*Xm/Ym
		Alpha=ATAN Alpha
		Alpha=90+Q-Alpha
	endif
return
 

dje8269

Senior Member
La honnêtement , vous êtes la tête et moi je fais que les tests . Je ne comprends pas la moindre ligne !

Voici le test . plaque posée sur la table a plat . j'effectue un 180° dans le sens horaire, puis je tourne dans l'autre sens pour revenir a la position initiale . J'attends vos futures instructions avec impatience

View attachment test BESQUEUT 1.txt
 

BESQUEUT

Senior Member
Version avec initialisation 100 ms après le démarrage du programme.
On pourrait aussi prévoir un bouton pour ça.
Ça sera plus facile pour voir les angles.
Vous pouvez tourner plus vite maintenant.
Par contre, il faudrait tester dans toutes les directions pour vérifier qu'il n'y a pas un bug dans un des quadrants.
Code:
#picaxe 20X2
#no_table

symbol I=b1
symbol  Xmg=w1	' b2_b3
symbol  Ymg=w2	' b4_b5
symbol  Zmg=w3	' b6_b7

symbol X=w7	' b14_b15
symbol Y=w8	' b16_b17
symbol Z=w9	' b18_b19

symbol Xm=w10
symbol Ym=w11

symbol A0=w25
symbol Alpha=w26
symbol Q=w27

' HeadTracker v02 2014_02_05 JYB (Non compensé)
'
'************  initialisation   *******************
setfreq m8              'fr?quence 

hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu

pause 100


	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y

	Xm=X
	Ym=Y
	gosub ATAN2
	A0=Alpha


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	Xm=X
	Ym=Y
	gosub ATAN2
	if Alpha>A0 then
		Alpha=Alpha-A0
	else
		Alpha=Alpha+360-A0
	endif

	sertxd (#X," ",#Y,"  ",#Alpha,13,10)
loop





ATAN2:
	if Ym <32768 then				' Ym > 0
		
		if Xm<32768 then			' Xm > 0
			Q=0
			gosub Quadrant
		
	else 					' Xm < 0
			Xm=-Xm
			Q=90
			gosub Quadrant
		endif

	
	else 						' Ym < 0
		Ym=-Ym
		if Xm<32768 then			' Xm > 0
			Q=270
			gosub Quadrant
		
	else 					' Xm < 0
			Xm=-Xm
			Q=180
			gosub Quadrant
		endif
	endif
RETURN



Quadrant:
	if Xm>Ym then
		Alpha=100*Ym/Xm
		Alpha=ATAN Alpha
		Alpha=Q+Alpha
	else				' Xm < Ym
		Alpha=100*Xm/Ym
		Alpha=ATAN Alpha
		Alpha=90+Q-Alpha
	endif
return


ATAN2_Function:
	if Ym <32768 then				' Ym > 0
		
		if Xm<32768 then			' Xm > 0
			Quadrant(0)	
	else 						' Xm < 0
			Xm=-Xm
			Quadrant(90)
		endif

	
	else 						' Ym < 0
		Ym=-Ym
		if Xm<32768 then			' Xm > 0
			Quadrant(270)
	else 						' Xm < 0
			Xm=-Xm
			Quadrant(180)
		endif
	endif
RETURN



Q_Function:
	if Xm>Ym then
		Alpha=100*Ym/Xm
		Alpha=ATAN Alpha
		Alpha=Q+Alpha
	else				' Xm < Ym
		Alpha=100*Xm/Ym
		Alpha=ATAN Alpha
		Alpha=90+Q-Alpha
	endif
return
Si vous voulez piloter un servo, il faudrait aussi savoir quelle est sa course en degrés, ainsi que les deux valeurs extrême pour les extrémités de la course.
 

dje8269

Senior Member
Erreur a la ligne 108

Quadrant(0)
^
Erreur de syntaxe sur la ligne 108 Positon précédente 3

Error: Duplicate label name - Quadrant
Je n'ai pas pus le teléverser
On pourrait aussi prévoir un bouton pour ça.
Oui i lest prévu pour activer ou non la camera , car je ne souhaite pas que la personne puisse rouler en tournant la camera .

Par contre, il faudrait tester dans toutes les directions pour vérifier qu'il n'y a pas un bug dans un des quadrants.
Qu'entendez vous par "toutes les direction" ? avec d'autres angles sur 360 ° ?

Si vous voulez piloter un servo, il faudrait aussi savoir quelle est sa course en degrés, ainsi que les deux valeurs extrême pour les extrémités de la course.
La tourelle de la camera est en cours de fabrication . je pense que les servo feront un angle de 180° au max . avec des valeurs genre 100 à 200 pour le pwm .
 

BESQUEUT

Senior Member
Oups :
J'étais en train de faire une version avec des macros pour que ce soit encore plus simple :
Code:
#picaxe 20X2
#no_table

symbol I=b1
symbol  Xmg=w1	' b2_b3
symbol  Ymg=w2	' b4_b5
symbol  Zmg=w3	' b6_b7

symbol X=w7	' b14_b15
symbol Y=w8	' b16_b17
symbol Z=w9	' b18_b19

symbol Xm=w10
symbol Ym=w11

symbol A0=w25
symbol Alpha=w26
symbol Q=w27

#MACRO ATAN2(dx,dy)	' r?sultat retourn? dans Alpha
	Xm=dx
	Ym=dy
	gosub ATAN2_Function
#ENDMACRO
' ATTENTION
' Ne pas mettre beaucoup de code dans une macro, (sauf optimisation draconi?ne)
' En effet, ce code est recopi? autant de fois que la macro est appel?e...
' ici, on ne recopie que le GOSUB, pas ATAN2_Function...

#MACRO Quadrant(Base)	' r?sultat retourn? dans Alpha
	Q=Base
	gosub Q_Function
#ENDMACRO




' HeadTracker v02 2014_02_06 JYB (Non compensé)
'
'************  initialisation   *******************
setfreq m8              'fr?quence 

hi2csetup i2cmaster ,%00111100, i2cfast_8, i2cbyte

hi2cout $02,($00)  'mode conversion continu

pause 100


	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	ATAN2(X,Y)
	A0=Alpha


'######################################################################
'|||||||||||||||||||||| Programme principal |||||||||||||||||||||||||||
'======================================================================
do
	hi2cin $03, (b15,b14,b19,b18,b17,b16)' lecture des valeurs magnet X , Z et Y
	ATAN2(X,Y)
	if Alpha>A0 then
		Alpha=Alpha-A0
	else
		Alpha=Alpha+360-A0
	endif

	sertxd (#Alpha,13,10)
loop

end



ATAN2_Function:
	if Ym <32768 then				' Ym > 0
		
		if Xm<32768 then			' Xm > 0
			Quadrant(0)	
	else 						' Xm < 0
			Xm=-Xm
			Quadrant(90)
		endif

	
	else 						' Ym < 0
		Ym=-Ym
		if Xm<32768 then			' Xm > 0
			Quadrant(270)
	else 						' Xm < 0
			Xm=-Xm
			Quadrant(180)
		endif
	endif
RETURN



Q_Function:
	if Xm>Ym then
		Alpha=100*Ym/Xm
		Alpha=ATAN Alpha
		Alpha=Q+Alpha
	else				' Xm < Ym
		Alpha=100*Xm/Ym
		Alpha=ATAN Alpha
		Alpha=90+Q-Alpha
	endif
return
Euhhh ???
A moins qu'il n'y ait un gros bug,
Vous avez fait un peu plus qu'un demi-tour, puis vous êtes revenu à la position initiale (très précisément d'ailleurs...)
Ça nous fait un demi-tour dans un sens, puis dans l'autre, mais pas un tour complet.
Il faudrait continuer jusqu'à faire un demi-tour dans l'autre sens.

Ou alors vous nous refaites le même test mais en partant exactement à l'opposé de votre position de départ actuelle.
(qui se trouve à 76° du Nord magnétique semble-t-il...)

PS : n'ayant pas l'habitude d'utiliser une horloge pour mesurer un angle, j'utilise le sens trigo, qui est l'inverse du "sens des aiguilles d'une montre vue de dessus"
Posez votre montre sur une table transparente et regardez là par dessous.
 
Last edited:

dje8269

Senior Member
Résultat avec le code en #119

View attachment test BESQUEUT 2.txt

Je crois que c'est bon ......... incroyable ;

Je vais tester en bougeant avec des inclinaisons ;

Vous avez fait un peu plus qu'un demi-tour, puis vous êtes revenu à la position initiale (très précisément d'ailleurs...)
Ça nous fait un demi-tour dans un sens, puis dans l'autre, mais pas un tour complet.
Oui je ne fais que des demi tour , car c'est chaud un 360° avec les cables , regulier et pas trop vite . voulez vous que j'essaye ?
 
Top