48 lines
3.1 KiB
Markdown
48 lines
3.1 KiB
Markdown
Détection de l'adversaire - 2023
|
|
================================
|
|
|
|
Le code présenté ici sert à la détection de l'adversaire pour les robots de l'équipe [Poivron Robotique](http://poivron-robotique.fr) qui participe à la coupe de France de Robotique. Ce code tourne sur un Raspberry Pi Pico et une carte personnalisé sur laquelle sont banchés 12 capteurs VL53L1X.
|
|
|
|
Principe de fonctionnement
|
|
--------------------------
|
|
|
|
Les capteurs VL53L1X sont des capteurs I2C dont l'adresse est configurable. Cependant, le capteur revient à son adresse par défaut dès qu'il est éteint ou désactivé par la broche `XSHUT`. Le Raspberry Pi Pico est relié à un 74HC4067, qui lui permet de désactiver un capteur à la fois.
|
|
|
|
Le code utilisé ici repose sur [VL53L1X_Raspberry_Pi_Pico](https://git.poivron-robotique.fr/Keuronde/Raspberry_Pi_Pico_VL53L1X) et l'exemple pour piloter les LED RGB ws2812 fourni avec le SDK du Raspberry Pi Pico.
|
|
|
|
Initialisation
|
|
--------------
|
|
|
|
La première étape de l'initialisation consiste à changer tous les capteurs d'adresses en une seule commande I2C.
|
|
|
|
La seconde étape consiste, pour chaque capteur, à le désactiver puis à le réactiver à l'aide du 74HC4067 et de la boche `XSHUT` du composant. Ce faisant, il reprend son adresse par défaut et il est le seul à cette adresse. Ainsi il est possible, via le bus I2C de lui attribuer une adresse unique.
|
|
|
|
Communication I2C
|
|
-----------------
|
|
|
|
Avec le reste du robot, la carte communique en I2C sur le bus i2c1, se comportant comme une EPROM en utilisant le code de Valentin Milea <valentin.milea@gmail.com>, [Pico_i2c_slave](https://github.com/vmilea/pico_i2c_slave).
|
|
|
|
Description de la mémoire d'échange:
|
|
------------------------------------
|
|
Les adresses 0 à 11 (0x0B) contiennent les distances des capteurs en centimètre. Cette distance est saturée à 200 cm.
|
|
Les adresses 16 (0x10) à 18 (0x12) contiennent les consignes d'éclairage des LEDs:
|
|
* 0x10 : Couleur sur 8 bits.
|
|
* 0x11 : octet de poids fort pour le masque sélectionnant les LEDs à commander.
|
|
* 0x12 : octet de poids faible pour le masque sélectionnant les LEDs à commander.
|
|
|
|
Couleur sur 8 bits structurée ainsi : 3-3-2 (Rouge - vert - bleu).
|
|
Le masque sur 16 bits, 1 : la led doit être piloter de la couleur indiquée, 0 la led affiche la distance.
|
|
Valeur spéciale pour le masque : 0x00. Dans ce cas, toutes les LEDs reprennent leur fonction par défaut (affichage de la distance).
|
|
|
|
|
|
Démo - Ne fonctionne plus
|
|
----
|
|
|
|
La démo ne fonctionne plus, la carte initialise automatiquement les capteurs et lit leurs valeurs en continu. Le code esclave I2C envoi ces valeurs qui sont stockée de l'adresse 0x0 à 0x0B de la "mémoire" I2C.
|
|
|
|
Le code I2C pour la partie esclave est repris de [pico_i2c_slave](https://github.com/vmilea/pico_i2c_slave).
|
|
|
|
Une fois branchée à un ordinateur, le Raspberry Pi Pico propose un menu par la liaison USB/série.
|
|
- La commande "i" initialise les capteurs et change d'état les LEDs en fonction du succès de l'initialisation.
|
|
- La commande "j" démarre une lecture continue et renvoie les données des capteurs dans un format compatible avec [Teleplot](https://github.com/nesnes/teleplot/).
|