Contrôler vos modèles LEGO Powered Up au Nunchuk à l'aide de votre Arduino

Magazine
Marque
Hackable
Numéro
33
Mois de parution
avril 2020
Spécialité(s)


Résumé

Dans cet article, nous allons voir comment piloter un robot LEGO Powered Up à l’aide d’un Nintendo Nunchuk, grâce à un Arduino. Nous allons installer les librairies nécessaires pour pouvoir piloter notre modèle Powered Up et accéder aux informations du Nunchuk. Nous développerons ensuite notre programme de contrôle en C.


Body

v-photo

Dans l’article « Contrôler vos modèles LEGO au joypad à l'aide de BrickPi » de Hackable n°29, nous avons vu comment piloter des moteurs LEGO Mindstorms à l’aide de la carte d’extension BrickPi. Dans l’article « Contrôler vos modèles LEGO Powered Up au joypad à l'aide votre Raspberry Pi » de Hackable n°30, nous avons vu comment piloter des moteurs LEGO Powered Up à l’aide d’un Raspberry Pi. Nous allons maintenant remplacer notre Raspberry Pi par un Arduino, pour des raisons de simplicité, nous remplacerons aussi notre joypad par un Nintendo Nunchuk. Bien sûr, le langage de programmation va lui aussi changer, après le python, le NodeJS, nous allons coder en C.

1. Powered Up LEGO

LEGO propose depuis peu des moteurs et senseurs pilotables par Bluetooth. Toute l’intelligence est donc déportée sur la tablette ou le téléphone mobile. Le composant central est appelé Hub. Ce composant est à la fois le boîtier contenant les piles ainsi que le récepteur Bluetooth 4.1.

v-poweredup

Le but de cet article est donc de remplacer l’application LEGO Powered Up [1] par du code C que nous exécuterons sur Arduino.

2. Le matériel

La liste du matériel est assez simple, car LEGO nous propose déjà un modèle contenant pratiquement tout ce qui nous intéresse :

  • 1 Arduino supportant le Bluetooth et I2C. Dans notre exemple, nous utiliserons M5Stick-C.
  • 1 LEGO «Le train de passagers télécommandé» modèle 60197. Ce modèle fonctionne avec LEGO Powered Up [2].
  • 1 Nintendo Nunchuk.
  • 1 adaptateur Nunchuk / I2C.
  • 1 câble Grove.

3. Construction du Robot LEGO

v-modele

LEGO propose un modèle contenant tout ce qui nous intéresse, il s’agit de « Le train de passagers télécommandé » modèle numéro 60197. On trouve la notice de montage sur le site LEGO :

https://www.lego.com/fr-fr/service/buildinginstructions/search#?search&text=60197

Vous trouverez ce modèle sur le site MecaBricks :

https://www.mecabricks.com/fr/models/bJ2b65LK2yB

4. Montage électronique

v-cordon

Le montage électronique est très simple, il s’agit de connecter le Wii Nunchuk au M5Stick-C en utilisant la connexion I2C. Le plus simple est de connecter un cordon Grove vers l’adaptateur Wii Nunchuk. Voici comment créer votre cordon :

  • Noir : - (masse)
  • Rouge : + (+5 V)
  • Blanc : d (SDA)
  • Jaune : c (SCL)

5. Configuration logicielle

Nous allons utiliser le logiciel Arduino pour développer sur notre M5Stick-C. Un tutoriel en anglais est disponible sur le site M5Stack [3], voici un résumé des actions à effectuer :

  • Installer l’IDE Arduino à partir du site officiel [4].
  • Installer le kit de développement ESP32 [5].
  • Installer la bibliothèque M5StickC.

De plus pour notre projet, nous allons ajouter :

  • NintendoExtensionCtrl : pour pouvoir récupérer les informations du Nintendo Nunchuk.
  • Legoino : pour nous permettre de connecter le Hub LEGO via Bluetooth, puis de piloter le moteur du train LEGO. Attention, cette librairie est à télécharger sous forme de fichier ZIP [6].

Nous utiliserons aussi une librairie installée par défaut :

  • Wire : pour nous permettre de spécifier quelles GPIO vont nous permettre de communiquer en I2C.

6. Principe et Fonctionnement

v-nunchuck

Le but du programme que nous allons écrire est très simple: pouvoir piloter notre train LEGO à l’aide d’un Nintendo Nunchuk.

Pour piloter notre train LEGO, nous allons nous servir du Nintendo Nunchuk de la façon suivante :

  • Si le bouton Z est relâché, le train sera à l’arrêt.
  • Si le bouton Z est pressé, la vitesse du train sera calculée par rapport à l’inclinaison droite/gauche du Nunchuk. Inclinaison à droite le train avancera, inclinaison à gauche, le train reculera. La vitesse du train sera proportionnelle à l’inclinaison.

Les valeurs de l’inclinaison se situent dans l’intervalle 290 à 760 avec une position verticale à 510.

Les valeurs d’entrée du moteur se situent entre -100 et +100 avec un moteur à l’arrêt à 0.

Nous allons donc devoir convertir les valeurs d’entrée récupérées du Nunchuk pour obtenir les bonnes valeurs de sortie à transmettre au moteur.

La vitesse à transmettre au moteur sera donc calculée avec la formule suivante :

round((nchuk.accelX()-510)/2.5)

7. Programmation

Ci-dessous, le code que nous détaillerons par la suite.

  1 #include <NintendoExtensionCtrl.h>
  2 #include <PoweredUpHub.h>
  3 #include <Wire.h>
  4
  5 #define SDA       32
  6 #define SCL       33
  7
  8 PoweredUpHub myHub;
  9 PoweredUpHub::Port _portA = PoweredUpHub::Port::A;
10
11 Nunchuk nchuk;
12
13 void setup() {
14   Wire.begin(SDA,SCL,1000);
15   nchuk.begin();
16   myHub.init();
17 }
18
19 void loop() {
20   boolean nunchuk_ok = nchuk.update();
21   boolean powerup_ok = myHub.isConnected();
22
23   if (!nunchuk_ok) {
24     while (!nchuk.connect()) {
25       delay(100);
26     }
27   }
28   else {
29     if (!powerup_ok)
30     {
31       if (myHub.isConnecting()) {
32         myHub.connectHub();
33       }
34     }
35     else
36     {
37       if (nchuk.buttonZ() == true) {
38           myHub.setLedColor(GREEN);
39           myHub.setMotorSpeed(_portA, round((nchuk.accelX()-510)/2.5));
40       }
41       else {
42           myHub.stopMotor(_portA);
43           myHub.setLedColor(WHITE);
44       }
45     }
46     delay(100);
47   }
48 }

Voici une description du fonctionnement de notre programme.

Des lignes 1 à 3, nous commençons par déclarer les bibliothèques que nous allons utiliser.

En lignes 5 et 6, nous déclarons sur quelles GPIO nous voulons utiliser l’I2C, il s’agit du seul connecteur Grove disponible sur le M5Stick-C.

Les lignes 8 et 9 nous permettent de déclarer notre Hub LEGO ainsi que le moteur qui sera attaché sur le port A.

En ligne 11, on déclare notre Nunchuk.

Des lignes 13 à 17, il s’agit de l’initialisation du programme. Nous initialisons le port I2C, le Nunchuk et le Hub LEGO.

Attaquons-nous maintenant au programme principal, à partir de la ligne 19.

Des lignes 23 à 27, nous attendons que le Nunchuk soit reconnu.

De même, des lignes 29 à 34, nous attendons que le Hub soit reconnu.

Si le bouton Z du Nunchuk est pressé, nous passons la LED du Hub à vert et on transmet la vitesse à l’aide de la formule calculée précédemment (lignes 37 à 40).

Si le bouton Z du Nunchuk est relâché, nous arrêtons le moteur et nous passons la LED du Hub à blanc (lignes 41 à 44).

Conclusion

Nous voici maintenant capables de piloter nos modèles LEGO à l’aide de composants compatibles Arduino. Vous n’avez plus qu’à imaginer vos propres montages, les réaliser et bien sûr, les partager avec la communauté.

Références

[1] Powered Up sur le site LEGO : https://www.lego.com/en-us/service/device-guide/powered-up

[2] Le train de passagers télécommandé sur le site LEGO : https://www.lego.com/fr-fr/product/passenger-train-60197

[3] Arduino IDE pour M5Stick-C : https://docs.m5stack.com/#/en/arduino/arduino_development

[4] Téléchargement de l’IDE Arduino  : https://www.arduino.cc/en/Main/Software

[5] Kit de développement esp32 pour Arduino  : https://dl.espressif.com/dl/package_esp32_index.json

[6] Librairie Legoino : https://github.com/corneliusmunz/legoino



Article rédigé par

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous