Communication entre Arduino et T’REX par I²C
Le contrôleur T’REX dispose d’une interface I²C avec régulation automatique de tension pour les tensions de 1.8V à 5V. Cela lui permet d’être asservi par un large éventail de contrôleurs externes, dont le Raspberry Pi. Le code par défaut permet de prendre le contrôle total des moteurs et servos ainsi que la lecture de la tension, d’intensité et des capteurs d’accélération sur 3 axes.
L’adresse de l’esclave I²C par défaut est 0x07 mais peut être modifiée. La nouvelle adresse étant stockée dans l’EEPROM, elle ne sera pas perdu lorsque l’alimentation sera déconnectée.
La vitesse d’horloge par défaut est de 100kHz mais est sélectionnable entre 100kHz et 400kHz.
Câblage
La communication par I²C entre l’Arduino et le T’REX nécessite 4 câbles :
- GND (Brun) : Masse commune
- SCL – Serial Clock Line (Jaune) : Horloge de synchronisation
- SDA – Serial Data Line (Orange) : Données
- +VI (Rouge) : Tension du contrôleur externe, ici +3.3V
Comme le T’REX intègre une résistance de pullup de 10K, il n’y a pas besoin d’ajouter de résistance.
Source :
https://www.arduino.cc/en/Reference/Wire
Détection des périphériques I²C
Avant d’intéragir avec le contrôleur T’REX, on va d’abord verifier qu’il est bien detectable par l’Arduino. Pour cela, on va utiliser un bout de code qui va scanner toutes les adresses I²C et indiquer si un périphérique répond.
Le code peut être télécharger ici : i2c-scanner
En inspectant le moniteur de l’Arduino, on va voir le T’REX apparaître à l’addresse 0x07
Source :
https://playground.arduino.cc/Main/I2cScanner
Code d’exemple pour Arduino
Il existe un code d’exemple pour Arduino qui permet de tester l’ensemble des fonctionnalités du contrôleur de moteur. Il actionne les servomoteurs et les moteurs dans les 2 sens à différentes vitesse, et fournit des informations de tension et d’intensité des moteurs. Il permet également d’avoir un exemple concret d’une communication I²C avec un Arduino, mais comme je préfère utiliser un Raspberry Pi par la suite, cela ne m’interesse pas.
Le code d’exemple peut être téléchargé ici : T_REX_I2C_tester
Avant de tester, vérifiez toutefois que le robot sous surélevé et que les roues ne touchent pas le sol. Un arrêt de l’Arduino ou un arrachage des câbles n’interrompt pas les moteurs et les bloque à la vitesse de la dernière commande reçue. Qui a dit que ça sent le vécu ?