Connecter une boussole électronique CMPS03 à un NXT, via I2C.

mardi 25 août 2009
par  Benoit PARSY
popularité : 5%

Cette boussole a été spécialement développée pour les besoins d’aide à la navigation des robots, le but étant de renvoyer un nombre unique représentant l’angle du robot par rapport au Nord Magnétique.

But : se bricoler un capteur de type boussole pour le NXT, à partir d’un module "tout en un", facilement disponible dans le commerce.

Introduction

JPEG - 13.1 ko
Module CMPS03

Pour renvoyer l’azimut, ce module CMPS03 utilise le capteur de champ magnétique KMZ51 de Phillips, qui est suffisamment sensible pour détecter le champ magnétique terrestre. Deux capteurs, disposés orthogonalement, sont utilisés pour retrouver la composante horizontale du champ magnétique terrestre.

La consommation nominale du module est 15mA. Il y a deux manières de récupérer l’angle du module avec le nord magnétique, par interface I2C et par un signal PWM.

PDF - 1.1 Mo
Doc CMPS03
toute la doc du capteur en 1 pdf

Avertissement : Enfant, ne faites pas cette manipulation. Demandez à un adulte de vous aider. A tous, les auteurs ne sauraient être tenus responsables de blessure éventuelle et/ou de dommage provoqué par de mauvais branchements électriques.

Connexion via I2C

Le protocole de communication I2C implémenté dans le CMPS03 est le même que celui utilisé pour accéder à la très populaire EEPROM 24C04.

GIF - 4.1 ko
Chronogramme I2C

Premièrement, envoyer un bit de start, ensuite l’adresse du module(0xC0 par défaut) avec le bit de lecture/écriture au niveau bas, puis le numéro du registre que l’on veut lire.

JPEG - 3.1 ko
Attention

Deuxièmement, répéter le bit de start, ensuite l’adresse du module avec le bit de lecture/écriture au niveau haut (0xC1 par défaut). Attention, la documentation est fausse, il n’y a pas besoin de cette étape, j’ai passé une soirée complète à chercher, avant de remettre en cause la documentation, et de supprimer ce bout de code...

Enfin il ne vous reste plus qu’à lire 1 ou 2 octets représentant les valeurs des registres (8 ou 16 bits) à l’instant de la demande. Les registres de 16 bits sont lus octet de poids fort en premier.

Registre Fonction
0 Numéro de version logicielle
1 Direction du nord magnétique codée sur 1 octet, Lecture [0..255] pour un tour complet (0-360°)
2,3 Direction du nord magnétique codée sur 16 bits, Lecture[0..3599] pour un tour complet (0-359.9°)
15 Calibration, Écriture de l’octet "255" pour initier la procédure de calibration.

Le module CMPS03 est conçu sans résistances de tirage pré-cablées, afin de permettre une meilleure gestion du bus au niveau du maître I2C. Le bus I2C nécessite des résistances de tirage sur les deux lignes, une seule fois pour tout le bus. Les valeurs de résistance recommandées par Devantech sont 10K pour 100KHz, 1,8K jusqu’à 400Khz, et 1,2K (ou même 1K) jusqu’à 1,3 Mhz. Au delà de 160Khz, ils préconisent d’ajouter un délai de 50µs de chaque coté de l’écriture de l’adresse du registre, par précaution. J’ai câblé des résistances de tirage de 82K, comme préconisé par LEGO.

JPEG - 52.8 ko
Résistances de tirage I2C

Calibration

Avant de calibrer le module, repérez les points cardinaux précisément. Rappelez vous que ce sont les pôles magnétiques, pas géographiques. Trouvez une boussole à aiguille, et vérifiez. Posez le module CMPS03 à l’horizontal, composants au dessus. Dégagez l’espace autour du module de tous éléments magnétiques, électriques ou ferreux, et pensez à enlever votre montre. Il y a deux méthodes, l’une logicielle, l’autre mécanique.

Par bouton poussoir (le truc vert sur le module) : -* mettre le module à plat, pointez le nord, appuyer ; -* recommencer pour l’est, le sud et l’ouest.

Par I2C (non implémenté dans mon code) : -* mettre le module à plat, pointez le nord, écrire 255 (0xff) dans le registre 15 ; -* recommencer pour l’est, le sud et l’ouest.

Vous pouvez câbler une LED entre la patte 5 et le 5V (avec résistance de limitation de courant de 390ohm), comme indicateur de calibration. En effet, cette patte passe à l’état bas pendant la calibration, et haut le reste du temps (non testé).

JPEG - 49.9 ko
Réalisation cablage bus I2C et poussoir de calibration

Code

Un PC avec Brixcc, NBC/NXC, et un NXT avec le « enhanced firmware by John Hansen »

Tests grandeur nature

Pensez à éloigner la boussole au maximum de vos moteurs, 20 cm minimum. En deçà, la boussole se transforme en un grand détecteur de fonctionnement des moteurs. Dans le cas où les mesures seraient trop perturbées par les moteurs, et que vous ne puissiez pas éloigner plus la boussole, pensez à effectuer vos mesures à l’arrêt !

La précision de la mesure est de l’ordre de 2/3° en mode précis, et de 3/5° en mode rapide, ce qui est déjà pas si mal, et permet bien des "rattrapages".


Voilà, une boussole pour votre robot, n’oubliez pas de laisser des commentaires et des retours d’expériences/Bouts de code. En espérant que cet article vous sera utile.


Commentaires  (fermé)

Logo de Bernard
lundi 2 avril 2012 à 11h11 - par  Bernard

Bonjour,
J’ai la boussole CMPS03 pour commander mon robot (navigation) mais je n’arrive pas à le programmer. Pouvez vous m’expliquer comment faire ??? et me donner un exemple de programme... SVP urgent
Merci

Logo de christian
mercredi 6 janvier 2010 à 15h02 - par  christian

Bonjour,

Nous souhaitons en savoir plus sur les caractéristiques de la boussole CMPS03.
Peut-on l’utiliser pour mesurer le champ magnétique d’un aimant ?
N’y a t’il pas de risques de saturations ?
Merci !

Logo de Philo
dimanche 30 août 2009 à 14h02 - par  Philo

Concernant les résistances de tirage I2C, LEGO préconise une valeur de 82k. Cette valeur élevée est justifiée par les résistances de protection à l’intérieur du NXT qui interfèrent avec la résistance de tirage. 82k est le meilleur compromis entre la vitesse de l’i2c (celui du NXT fonctionne à 10 kbits/s) et les niveaux logiques.

Et à part ça.... excellent article !

Agenda

<<

2016

 

<<

Septembre

>>

Aujourd'hui

LuMaMeJeVeSaDi
2930311234
567891011
12131415161718
19202122232425
262728293012

Brèves

29 juillet 2011 - Mise à jour des pièces LDraw 2011-01

La première mise à jour des pièces LDraw pour 2011 est désormais disponible ! Au sommaire, 486 (...)

28 mars 2011 - Reportage sur la chaine de fabrication LEGO

Un reportage de National Geographic sur la compagnie LEGO, et plus particulièrement sur la (...)

23 février 2011 - Pierre Normandin présente le nouveau train LEGO Maersk 10219 en vidéo

Notre ami Pierre Normandin, designer LEGO CITY, présente dans cette vidéo le nouveau train LEGO (...)

31 décembre 2010 - Mise à jour des pièces LDraw 2010-03

Une nouvelle mise à jour des pièces officielles LDraw est disponible ! Au sommaire, 456 nouveaux (...)

21 juillet 2010 - Nouveau magazine LEGO dans les kiosques

Nouveauté dans les kiosques, le magazine LEGO n°01 vient de sortir. Au sommaire, pas grand (...)