En plus d’être utilisé comme un système de suivi GPS, le module HMC5883L peut également être utilisé pour construire une boussole Raspberry Pi. Celui-ci indique l’angle auquel il se trouve actuellement. Le module boussole HMC5883L peut être adressé via I2C, à l’instar de nombreux autres capteurs. Le capteur de rotation permet de construire des systèmes complets de position et de positionnement.
Dans ce tutoriel, nous voulons configurer notre propre boussole électronique Raspberry Pi afin qu’elle indique toujours la déviation (en degrés) par rapport au nord.
Composants de la Boussole
Dans ce tutoriel, j’ai utilisé les composants suivants :
Pour la visualisation, on peut par exemple utiliser un servomoteur qui pointe dans la direction correspondante et réajuste ainsi l’aiguille de la boussole. J’ai déjà construit quelque chose de similaire avec une manette de Xbox 360, ce qui pourrait servir d’inspiration.
Connecteur boussole pour Raspberry Pi
Le module HMC5883L possède généralement cinq connexions, dont nous n’avons besoin que de quatre. La terminaison « DRDY » ou « RDY » reste libre.
Les quatre broches restantes du capteur sont connectées au Pi comme suit : VCC -> 3,3V (Broche 1), GND -> GND (Broche 6), SCL -> GPIO3 (Broche 5), SDA -> GPIO2 (Broche 3).
Certains capteurs ont six broches. Si vous en avez un (avec 3vo et VIN), les deux sont connectés à la broche 3.3V du Pi.
Vous pouvez trouver un aperçu de l’affectation des broches sur le Raspberry Pi ici. La connexion au Raspberry Pi ressemble à ceci :
Remarque : comme cette question est revenue plusieurs fois, je tiens à préciser que vous pouvez également faire fonctionner plusieurs périphériques I²C sur le Raspberry Pi en même temps. Pour ce faire, les connexions (SDA, SCL) sont mises en parallèle. Le module est reconnu via l’adresse matérielle fixe (plus d’informations à ce sujet ci-dessous). Seuls deux appareils ayant la même adresse I2C ne peuvent pas être exploités. Cependant, avec de nombreux capteurs, l’adresse peut être modifiée à l’aide de câbles jumper sur la carte de circuit imprimé. Si vous avez besoin de quelque chose de ce genre, je vous recommande de jeter un coup d’œil à la fiche technique.
Préparation de la boussole Raspberry Pi
Avant de pouvoir utiliser la boussole, certains logiciels sont nécessaires. Entre autres, le git client, les outils I2C et Python3 doivent être installés. Pour ce faire, nous ouvrons le terminal SSH et entrons ce qui suit :
sudo apt-get install git i2c-tools python-smbus python3 python-pip python-virtualenv python3-setuptools
Après une installation réussie, il faut encore activer l’I2C, si ce n’est pas encore fait. Pour ce faire, entrez dans la ligne de commande :
sudo raspi-config
Activez-la sous « Options avancées »> « I2C ».
Si le module boussole est déjà connecté, nous pouvons déjà voir s’il est reconnu. Pour ce faire, entrez sudo i2cdetect -y 1
. Le résultat devrait ressembler à ceci :
pi@raspberrypi:~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Si rien n’a été détecté, vous devez vérifier la connexion du capteur.
Normalement, les root rights doivent être disponibles pour lire le bus I²C. Cependant, comme la bibliothèque qui sera utilisée plus tard n’en dispose pas, nous devons d’abord l’activer. Pour cela, nous créons un fichier
sudo nano /etc/udev/rules.d/99-i2c.rules
avec le contenu suivant :
SUBSYSTEM=="i2c-dev", MODE="0666"
Avec CTRL + O, nous sauvegardons cette opération et avec CTRL + X, nous quittons l’éditeur et retournons au terminal.
Configurer la bibliothèque de la boussole de Raspberry Pi (HMC5883L)
Pour pouvoir utiliser le module boussole, nous avons besoin de deux bibliothèques Python 3, que nous allons maintenant installer :
git clone https://github.com/quick2wire/quick2wire-python-api cd quick2wire-python-api
Pour pouvoir utiliser le module boussole, nous avons besoin de deux bibliothèques Python 3, que nous allons maintenant installer pwd
pour montrer dans quel dossier vous vous trouvez. Pour mettre à jour le chemin Python, éditons le fichier Profiles :
sudo nano /etc/profile
En haut, ajoutez ces deux lignes (ajustez le circuit si nécessaire) :
export QUICK2WIRE_API_HOME=/home/pi/quick2wire-python-api export PYTHONPATH=$PYTHONPATH:$QUICK2WIRE_API_HOME
Après avoir enregistré le fichier, nous redémarrons le Pi.
sudo reboot
Après nous être reconnectés via SSH, nous vérifions rapidement si le chemin d’accès est maintenant défini :
echo $PYTHONPATH
Celui-ci devrait maintenant contenir notre chemin spécifié. De plus, un périphérique I2C devrait être reconnu (le module de la boussole doit être connecté) :
ls /dev/i2c-*
Vous devez vous souvenir du numéro affiché car vous en aurez bientôt besoin (pour moi, c’est 1).
De retour dans le répertoire de la bibliothèque, nous pouvons maintenant commencer l’installation :
cd quick2wire-python-api sudo python3 setup.py install
Maintenant, nous pouvons enfin installer la bibliothèque actuelle, qui peut lire la boussole HMC5883L.
git clone https://bitbucket.org/thinkbowl/i2clibraries.git
Il existe également d’autres bibliothèques I2C, comme celles disponibles pour l’ITG-3205, l’ADXL345 et les écrans LCD.
Si vous le souhaitez, vous pouvez également ajouter le circuit des bibliothèques à la variable Python path (analogue à celle présentée ci-dessus).
Test de la boussole du Raspberry Pi
Il est maintenant temps de tester la boussole électrique. Pour ce faire, nous appelons la console Python3:
sudo python3
Voici quelques exemples de codes qui décrivent les fonctions. Si votre périphérique I2C n’a pas le numéro 1 (comme le mien), vous devez l’ajuster à la ligne 3.
1 2 3 4 5 6 7 8 |
from i2clibraries import i2c_hmc5883l hmc5883l = i2c_hmc5883l.i2c_hmc5883l(1) hmc5883l.setContinuousMode() hmc5883l.setDeclination(2, 15) print(hmc5883l) |
Vous devez régler la déclinaison avec la plus grande précision possible (ligne 6). Pour moi, c’est 2 ° et 15 ‘(minutes d’arc). La « Déclinaison magnétique » est différente dans chaque endroit et peut par exemple être trouvée via cette page.
Dans l’exemple, nous sommes intéressés par la dernière valeur, qui peut aussi être lue via hmc5883l.getHeadingString()
. Une valeur de 0 signifie que le capteur est dirigé vers le nord.
Lecture des axes
En plus de l’angle, il est également possible de lire la rotation des axes :
1 2 3 4 5 6 7 8 |
from i2clibraries import i2c_hmc5883l hmc5883l = i2c_hmc5883l.i2c_hmc5883l(1) hmc5883l.setContinuousMode() # Vers les axes mis à l'échelle (x, y, z) = hmc5883l.getAxes() |
Malheureusement, le site web contenant la documentation complète est maintenant hors ligne, mais heureusement, il est toujours accessible via la Wayback Machine.