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

Par le(s) même(s) auteur(s)

Contrôler vos modèles Lego PoweredUp au Joypad à l'aide de votre Raspberry Pi

Magazine
Marque
Hackable
Numéro
30
Mois de parution
juillet 2019
Spécialité(s)
Résumé

Dans cet article, nous allons voir comment piloter un robot Lego PoweredUp à l’aide d’un JoyPad, grâce à un Raspberry Pi. Nous allons installer tout le nécessaire sur notre Raspberry Pi pour pouvoir piloter notre modèle Lego PoweredUp. Nous utiliserons NodeJS, donc le langage JavaScript, pour piloter notre modèle Lego.

Contrôler vos modèles Lego au joypad à l'aide de BrickPi

Magazine
Marque
Hackable
Numéro
29
Mois de parution
avril 2019
Spécialité(s)
Résumé

Dexter Industries propose des cartes d’extension pour Raspberry Pi. Dans cet article, nous allons nous intéresser à la carte BrickPi permettant de piloter les moteurs et senseurs Lego MindStorms. Nous verrons comment piloter notre robot Lego à l’aide d’un joypad. Nous développerons notre programme grâce au langage Python.

Les derniers articles Premiums

Les derniers articles Premium

Du graphisme dans un terminal ? Oui, avec sixel

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

On le voit de plus en plus, les outils en ligne de commandes s'étoffent peu à peu d'éléments graphiques sous la forme d'émojis UTF8. Plus qu'une simple décoration, cette pointe de « graphisme » dans un monde de texte apporte réellement un plus en termes d'expérience utilisateur et véhicule, de façon condensée, des informations utiles. Pour autant, cette façon de sortir du cadre purement textuel d'un terminal n'est en rien une nouveauté. Pour preuve, fin des années 80 DEC introduisait le VT340 supportant des graphismes en couleurs, et cette compatibilité existe toujours...

Game & Watch : utilisons judicieusement la mémoire

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Au terme de l'article précédent [1] concernant la transformation de la console Nintendo Game & Watch en plateforme de développement, nous nous sommes heurtés à un problème : les 128 Ko de flash intégrés au microcontrôleur STM32 sont une ressource précieuse, car en quantité réduite. Mais heureusement pour nous, le STM32H7B0 dispose d'une mémoire vive de taille conséquente (~ 1,2 Mo) et se trouve être connecté à une flash externe QSPI offrant autant d'espace. Pour pouvoir développer des codes plus étoffés, nous devons apprendre à utiliser ces deux ressources.

Les listes de lecture

7 article(s) - ajoutée le 01/07/2020
La SDR permet désormais de toucher du doigt un domaine qui était jusqu'alors inaccessible : la réception et l'interprétation de signaux venus de l'espace. Découvrez ici différentes techniques utilisables, de la plus simple à la plus avancée...
8 article(s) - ajoutée le 01/07/2020
Au-delà de l'aspect nostalgique, le rétrocomputing est l'opportunité unique de renouer avec les concepts de base dans leur plus simple expression. Vous trouverez ici quelques-unes des technologies qui ont fait de l'informatique ce qu'elle est aujourd'hui.
9 article(s) - ajoutée le 01/07/2020
S'initier à la SDR est une activité financièrement très accessible, mais devant l'offre matérielle il est parfois difficile de faire ses premiers pas. Découvrez ici les options à votre disposition et les bases pour aborder cette thématique sereinement.
Voir les 23 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous