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
Domaines


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



Articles qui pourraient vous intéresser...

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

Magazine
Marque
Hackable
Numéro
29
Mois de parution
avril 2019
Domaines
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.

Étude d’un traqueur solaire

Magazine
Marque
Hackable
Numéro
27
Mois de parution
novembre 2018
Domaines
Résumé
Dans un article précédent, nous avons vu la technologie des capteurs photovoltaïques. Connaître la théorie c’est bien, mais rien ne vaut un peu de pratique. On va s’intéresser au gain apporté par un traqueur solaire. Est-il rentable (énergétiquement parlant) d’ajouter des moteurs pour conserver la meilleure orientation ?

Graphing, logging et monitoring 2.0 : vos alertes avec Sensu

Magazine
Marque
GNU/Linux Magazine
Numéro
170
Mois de parution
avril 2014
Domaines
Résumé
De plus en plus décrié, nombre d'administrateurs système se détournent de Nagios, après de nombreuses années de bons et loyaux services. Dans ces colonnes, vous avez déjà pu apprendre à connaître Icinga, le fork de Nagios, et surtout Shinken, qui essayent de combler certaines lacunes de Nagios. Nous allons dans cet article regarder ce qui se passe du côté de Sensu, un projet qui a pris le parti de développer de zéro une solution de monitoring.

Communication Mini2440 / Arduino pour le pilotage à distance d’un robot gyropode

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
64
Mois de parution
janvier 2013
Domaines
Résumé
L'utilisation conjointe d'un microcontrôleur et d'un CPU plus puissant apporte de nombreux avantages, que ce soit dans le domaine de l'Internet des objets ou de la robotique. Cet article détaille, dans le cadre du projet de gyropode Geeros (robot pour l'enseignement et les hackers), la mise en œuvre d'une communication série entre une carte Arduino, gérant le cœur des asservissements, et une carte Mini2440 dont le but est de s'occuper de la communication WiFi avec le monde extérieur (gestion des consignes de pilotage, télémétrie, transmission vidéo en temps réel). Nous verrons que les efforts de programmation à déployer sont assez minimes en comparaison des avantages (et du plaisir !) obtenus.