Utilisation de l’application Lego® Powered Up
Article écrit par Rémi Bourré
Dans l’article suivant, je vais vous présenter les fonctionnalités de programmation de l’application dédiée à l’écosystème Powered Up de Lego®.
Cet article à été réalisé grâce à mon expérience personnelle, mais aussi grâce à la documentation trouvée sur ce site : https://racingbrick.com/powered-up-code-block-guide/
Introduction : l’écosystème Powered Up
L’écosystème Powered Up est présent sur les gammes City (train), Créator expert, Batman, Boost, Technic… Le principe reste le même sur toutes les gammes, même si la brique programmable (le hub) est différente : pouvoir mettre en mouvement des sets via des moteurs et des capteurs et via un panel de contrôle (smartphone ou tablette) ou via la télécommande. Le sujet de la télécommande ne sera pas traité ici.
La liaison entre le hub et le panel de contrôle se fait via une liaison Bluetooth 4.0.
La liaison entre les hub et les autres composant est de type filaire sur 6 fils. Pour plus d’information, je vous conseil ce site.
Les hubs
Le Hub n’est pas réellement une brique programmable au sens 1er du terme : le programme est contenu dans le panel de contrôle qui envoie les directives. Le hub est juste l’interface qui contient une alimentation, le récepteur Bluetooth, un nombre de ports et éventuellement des moteurs.
Il existe 3 types de hub :
- Le hub LEGO® train : alimenté par 6 piles AAA, ce hub possède 2 ports. C’est le plus compact. (88009)
- Le hub LEGO® boost : alimenté par 6 piles AAA, ce hub possède 2 ports extérieurs,2 ports internes reliés à 2 moteurs sur le même axe (droit/gauche) et un capteur de mouvement interne. (88006)
- Le hub LEGO® Technic : alimenté par 6 piles AA, ce hub possède 4 ports et un capteur de mouvement interne. (88012)
hub LEGO® train
hub LEGO® boost
hub LEGO® Technic
Ces 3 hub peuvent être connectés à des moteurs, des capteurs, des leds…
Les autres composants de l’écosystème
Les moteurs
L’écosystème Powered Up utilise 2 types de moteurs :
- les moteurs simples : sur les moteurs simples, la vitesse de rotation est par une fréquence envoyée par le hub. il n’y a pas de contrôle interne de vitesse ou position – exemple le moteur M 45303)
- les moteurs tachymétriques : sur le moteur tachymétrique, un encodeur et des capteurs de positions interne permettent de piloter finement la rotation du moteur (en vitesse angulaire ou en degré) – exemple les moteur L/XL et le moteur 88008
Il existe également un moteur spécifique pour les trains (88011)
les capteurs
Il existe une multitude de capteurs (position, mouvement, proximité, couleur, luminosité…). La plus part des capteurs est dans la gamme WeDo. Il existe un capteur dans la gamme Power Up, le capteur couleur et distance (lego boost 88007). Il est également possible d’utiliser des capteur non officiel LEGO ou des adaptateur pour le PowerFonction ou autre, la toile en dispose
L’application Powered Up
Installation/lancement
L’application est disponible dans tous les bons stores pour tablette et smartphone. Une fois l’application téléchargée et installée, il n’y a plus qu’à la lancer.
Avant de lancer l’application, veillez à bien activer le Bluetooth et la géolocalisation de votre panel de contrôle.
Lord du lancement de l’application, vous arrivez par défaut sur la partie « jouer ».
Quelle que soit la partie (jouer ou créer), l’application va vous demander d’allumer le hub pour initialiser le dialogue. La 1e chose que va faire l’application, c’est de contrôler la version du hub et le mettre à jour s’il n’est pas à la dernière version. Tout se passe automatiquement !
Ensuite l’application va afficher le menu choisi.
Partie jouer
Cette partie est destinée à faire fonctionner les sets du commerce. Il n’y a pas de paramétrage, l’interface est figée selon le set sélectionné. Elle permet également au panel de contrôle d’émettre certains sons pour augmenter le l’immersion.
Partie créer
Sélection nouveau programme / programme enregistrée
La 1e page permet de lancer soit la conception d’un nouveau programme (le + dans le rond rouge à gauche), soit d’un programme enregistré (sur la droite).
Présentation de la page
Sur le haut de l’écran :
- La flèche vers la gauche permet de sortir de ce mode
- L’icône Bluetooth permet de paramétrer la connexion et lancer le dialogue
- L’icône « play » (triangle vert vers la droite) permet de lancer le programme
Sur le bas de l’écran :
- 6 onglets qui contiennent plusieurs blocs. Ces onglets vont etre détaillés par la suite
- Le rond blanc avec 3 points : affiche plusieurs boutons (dupliquer le bloc, annuler/rétablir l’action, recentrer l’écran, paramétrage de l’affichage des blocs en attente et l’aide en ligne)
- liste de blocs de l’onglet sélectionné
Liste des onglets
Sur le bas de l’écran, se présente 6 onglets. Chaque onglet contient un type de commande
Couleur de l’onglet | Type de commande |
Jaune | Début et fin de programme, boucle, temps d’attente et question simple |
Orange | Acquisition des capteurs (interne, externe et du mouvement du panel de contrôle) |
Vert | Contrôle des moteurs (sens de rotation, vitesse et pas) |
Violet | Sons émit par le panel de contrôle et lumières émit par le capteur |
Blanc | Opérations logiques et mathématiques et paramétrages |
Gris Bleu | Création de modules personnalisés |
L’onglet jaune / bloc d’écoulement
Bloc
Nom du bloc
Commande
Start
Début de programme simple
Démarre l’exécution de la séquence attachée lorsque vous cliquez sur le bloc ou lorsque le programme démarre.
EventStart
Démarre l’exécution de la séquence jointe lorsque le drapeau portant le numéro configuré est levé.
IfSwitch
Si la condition est vraie, exécutez la séquence supérieure, sinon exécutez la séquence inférieure.
ForkJoin
InterruptOthers Fin
Exécutez les deux séquences en même temps et attendez qu’elles se terminent avant d’exécuter le bloc suivant.
InterruptOthers
Arrête toutes les autres séquences de programme et poursuit l’exécution de la séquence attachée
End
Arrête l’exécution de toutes les séquences en cours d’exécution sur le canevas actuel.
S’il est utilisé dans le programme le plus haut, cela mettra fin au programme. S’il est utilisé dans un bloc de modèle, le bloc de modèle est terminé, mais le programme contenant le bloc de modèle continuera son exécution.
L’onglet orange / bloc capteur
Bloc
Nom du bloc
Commande
TriggerOnColor
Se déclenche lorsque la couleur mesurée par le capteur est égale à la couleur configurée. Capteur Boost uniquement
WaitForColor
Attendez que la couleur mesurée par le capteur soit égale à la couleur configurée. Capteur Boost uniquement
TriggerOnDistancelessThan
Se déclenche lorsque la distance mesurée par le capteur est inférieure à la distance configurée. Capteur Boost uniquement
WaitForDistancelessThan
Attendez que la distance mesurée par le capteur soit inférieure à la distance configurée.
Capteur Boost uniquement.
VisionProximitySensor AddressablePor
Obtenez la distance actuelle mesurée par le capteur. Capteur Boost uniquement
VisionReflectionSensor AddressablePor
Obtenez le niveau de lumière ambiante actuel mesuré par le capteur. Capteur Boost uniquement
TriggerOnOrientation
Se déclenche lorsque l’orientation du hub est égale à l’orientation du hub configuré. Hub Boost uniquement
WaitForOrientation
Attendez que l’orientation du hub soit égale à l’orientation du hub configuré. Hub Boost uniquement
DriveBaseTiltGetOrientation AddressablePort
Obtenez l’orientation actuelle du hub. Hub Boost uniquement
DriverbaseTiltGetAngleX AddressablePort
Obtenez l’angle d’inclinaison actuel du hub sur l’axe X (-90 .90).
Hub Boost uniquement
DriverbaseTiltGetAngleY AddressablePort
Obtenez l’angle d’inclinaison actuel du hub sur l’axe Y (-90 .90).
Hub Boost uniquement
OrientationAngle
Capture également des données avec le hub Boost et le hub Technic. Le concentrateur Boost fournit uniquement des données X et Y, le concentrateur Technic fournit des données X, Y et Z
DrivebaseTiltConfigure OrientationAddressablePort
Supposé définir l’orientation de l’inclinaison du hub Boost, mais il ne remplace pas la valeur détectée – davantage de tests sont nécessaires.
Accéléromètre
Capture également les données avec le hub Boost et le hub Technic, les informations exactes ne sont pas confirmées
Accéléromètre X
Utilise la position d’inclinaison de l’axe X du panel de contrôle (gauche-droite). 0 est la position centrale.
Accéléromètre Y
Utilise la position d’inclinaison de l’axe y du panel de contrôle (avant-arrière). 0 est d’environ 30 degrés avec l’écran de l’appareil face à vous.
L’onglet vert / bloc moteur
L’écosystème Powered Up utilise 2 type de moteurs :
- les moteurs simples : sur les moteurs simples, la vitesse de rotation est par une fréquence envoyée par le hub. il n’y a pas de contrôle interne de vitesse ou position – exemple le moteur M 45303)
- les moteurs tachymétriques : sur le moteur tachymétrique, un encodeur et des capteurs de positions interne permettent de piloter finement la rotation du moteur (en vitesse angulaire ou en degré) – exemple les moteur L/XL et le moteur 88008
Bloc
Nom du bloc
Commande
Puissance du moteur
Règle la vitesse du moteur – Les nombres positifs tournent dans le sens horaire et le négatif tourne dans le sens anti-horaire – La valeur de puissance peut être comprise entre -100 et 100
ContinuousMedium MotorControl
Règle l’alimentation du moteur connecté au port sélectionné et s’exécute jusqu’à ce que le programme s’exécute sans avoir besoin d’une boucle – Les nombres positifs tournent dans le sens horaire et le négatif tourne dans le sens antihoraire (entre -100 et 100)
ContinuousMediumMotor ControlSpeedSteering
Règle l’alimentation des moteurs connectés aux ports sélectionnés et s’exécute jusqu’à ce que le programme s’exécute sans avoir besoin d’une boucle. La première valeur définit la vitesse, la deuxième valeur définit la direction (modification de la vitesse des moteurs pour diriger le véhicule), la troisième valeur définit si les deux moteurs tournent dans la même direction ou dans des directions opposées.
TachoMotorSpeed
Faire tourner le moteur tachymétrique sur un port défini avec une vitesse (-100..100)
TachoMotorSpeedDuration
Faire tourner le moteur tachymétrique sur un port défini avec une vitesse (-100..100) pendant la durée (en secondes)
TachoMotorGetPosition
Lit la position du moteur tachymétrique. La position est relative, 0 est la position où le moteur a été mis en marche.
TachoMotorSpeedDegrees
Met le moteur tachymétrique sur le port défini avec une vitesse définie (-100..100) avec la quantité définie (-9999..9999 en degrés). Dans la version 3.1.1, la valeur négative des degrés n’affecte pas le sens de rotation, seule la valeur de vitesse négative
TachoMotorSpeedPosition
Met le moteur tachymétrique sur le port défini avec une vitesse définie (-100..100) à la position définie (-9999..9999 en degrés)
TachoMotorPresetPosition
Règle la position actuelle du moteur tachymétrique sur le port défini à la valeur définie (-9999..9999 en degrés)
TachoMotorAccelerationTime
Définit la durée d’accélération (en secondes) du moteur tachymétrique sur le port défini
TachoMotorDecelerationTime
Définit la durée de décélération (en secondes) du moteur tachymétrique sur le port défini
SynchroMotorPower
Règle indépendamment la puissance (-100..100) d’une paire de moteurs sur les ports définis (AB ou CD)
SynchroTachoMotorSpeed
Règle indépendamment la vitesse (-100..100) d’une paire de moteurs tachymétriques sur les ports définis (AB ou CD)
SynchroTachoMotor SpeedDuration
Définit indépendamment la vitesse (-100..100) d’une paire de moteurs tachymétriques sur les ports définis (AB ou CD) pour la durée (en secondes)
SynchroTachoMotor SpeedPosition
Définit la position (-9999..9999) d’une paire de moteurs tachymétriques sur les ports définis (AB ou CD) avec une vitesse réglée indépendamment (-100..100)
SynchroTachoMotor SpeedSteering
Définit la vitesse (-100..100) d’une paire de moteurs tachymétriques sur les ports définis (AB ou CD), la commande de direction (-100..100) est de type type char d’assaut. 0 définit une puissance égale pour les deux sorties, 50 alimente uniquement un moteur et 100 alimente les moteurs dans des directions opposées. Une valeur positive-négative pour la commande de direction définit le sens de direction.
SynchroTachoMotor SpeedSteeringDuration
Définit la vitesse (-100..100) d’une paire de moteurs tachymétriques sur les ports définis (AB ou CD), la commande de direction (-100..100) est de type type char d’assaut. Les moteurs tournent pendant la durée définie (en secondes). 0 définit une puissance égale pour les deux sorties, 50 alimente uniquement un moteur et 100 alimente les moteurs dans des directions opposées. Une valeur positive-négative pour la commande de direction définit le sens de direction.
SynchroTachoMotor SpeedSteeringPosition
Définit la vitesse (-100..100) d’une paire de moteurs tachymétriques sur les ports définis (AB ou CD), la commande de direction (-100..100) est de type type char d’assaut. Les moteurs tournent jusqu’à ce que le degré de rotation défini soit atteint (-9999..9999 en degrés). 0 définit une puissance égale pour les deux sorties, 50 alimente uniquement un moteur et 100 alimente les moteurs dans des directions opposées. Une valeur positive-négative pour la commande de direction définit le sens de direction.
L’onglet violet / bloc son et lumière
Bloc
Nom du bloc
Commande
SetHubLightIndexColor AddressablePort
Règle la LED du Hub pour afficher une couleur. Fonctionne sur les hubs Boost / City / Technic
VisionSensorSetColor AddressablePort
Règle la LED du Hub pour afficher la couleur en fonction de l’intensité RVB définie (valeur Rouge, Vert et Bleu en%). Fonctionne sur les hubs Boost / City / Technic
VisionSensorSetColor AddressablePort
Définit la couleur de la LED du capteur. Capteur Boost uniquement
SendIRMessage
Envoie des commandes IR au récepteur IR Power Functions avec le capteur de couleur et de distance connecté au port défini. Le premier paramètre est le port auquel le capteur est connecté. Le second est le canal IR utilisé de 0 à 3 correspondant au port IR 1 à 4. Le troisième définit plusieurs choses, mais pour une utilisation de base, réglez 4 pour contrôler le port rouge, 5 pour contrôler le port bleu. Le quatrième définit la vitesse, 0 est flottant (pas de vitesse), 1 à 7 augmente la vitesse vers l’avant, 8 est arrêté, 9 à F diminue la vitesse vers l’arrière.
SetColorAndDistanceSensorMode
Définit le mode du capteur de couleur et de distance connecté au port défini. Le mode 7 doit être utilisé pour contrôler le récepteur IR Power Functions
L’onglet blanc / bloc opération sur les données
Bloc
Nom du bloc
Commande
LEGODeviceAddress AndPortSelector
Définit le périphérique et le port à utiliser. Le numéro de périphérique (1..4) est défini sur l’écran de connexion (icône Bluetooth dans le coin supérieur gauche). Le port peut être interne (icône du connecteur) ou externe.
LocalVariableFetch
Lit le nombre stocké dans la variable locale. Les variables locales ne sont pas partagées entre le programme principal et les blocs composites.
LocalVariableStore
Met à jour la variable locale pour stocker le numéro. Les variables locales ne sont pas partagées entre le programme principal et les blocs composites.
GlobalVariableFetch
Lit le nombre stocké dans la variable globale – Les variables globales sont partagées entre le programme principal et les blocs composites..
GlobalVariableStore
Met à jour la variable globale pour stocker le numéro – Les variables globales sont partagées entre le programme principal et les blocs composites.
RandomOperator
Renvoie un nombre aléatoire entre nombre gauche et nombre droit (les deux nombres inclus dans la plage).
AdvancedMath
Si la position du curseur est inférieure à 50 dans les deux sens (+/-), la LED sur le moyeu est rouge, plus de 50, elle devient verte. L’opérateur avancé « Valeur absolue » est utilisé pour avoir la plage rouge entre -50 et 50. Enfermé dans une boucle pour une surveillance constante de la position du curseur.
Exposant
Renvoie le résultat de l’augmentation du nombre (première valeur) à la puissance de l’exposant (deuxième valeur).
Modulo
Renvoie le reste après la division du nombre (première valeur) par le nombre (deuxième valeur).
L’onglet gris-bleu / bloc Composite
Bloc
Nom du bloc
Commande
CreateCompositeBlock
Crée un bloc composite qui agit comme un programme à l’intérieur de notre programme et peut être exécuté par son icône personnalisée.
L’onglet bleu-vert / bloc personnalisé
Bloc
Nom du bloc
Commande
widget-reporter-block-39
Démarre l’exécution de la bande de programmation lorsque le bouton de la molette est enfoncé.
widget-reporter-block-40
Démarre l’exécution de la bande de programmation lorsque le bouton feu de circulation est enfoncé.
widget-reporter-block-41
Démarre l’exécution de la bande de programmation lorsque le bouton route est enfoncé.
widget-reporter-block-42
Renvoie la valeur actuelle du widget SpeedoMeter 1
Habituellement utilisée pour déclencher l’exécution d’autres bandes de programmation en fonction de sa valeur
.
widget-reporter-block-43
Renvoie la valeur actuelle du SpeedoMeter Widget 2
Habituellement utilisée pour déclencher l’exécution d’autres bandes de programmation en fonction de sa valeur
.
widget-instruction-block-40
Widget booléen qui peut déclencher le bloc StartOnWheelChange – Déclenche le widget lorsque la condition est vraie.
widget-instruction-block-41
Widget booléen pouvant déclencher le bloc StartOnTrafficlightChange – Déclenche le widget lorsque la condition est vraie.
widget-instruction-block-42
Widget booléen qui peut déclencher le bloc tartOnRoadChange – Déclenche le widget lorsque la condition est vraie.
widget-instruction-block-43
Widget pouvant afficher une valeur numérique sur l’écran du contrôleur (gauche).
widget-instruction-block-44
Widget pouvant afficher une valeur numérique sur l’écran du contrôleur (à droite).
widget-reporter-block-55
Démarre l’exécution de la bande de programmation lorsque le bouton de la molette est enfoncé.
widget-reporter-block-56
Démarre l’exécution de la bande de programmation lorsque le bouton d’outils est enfoncé.
widget-reporter-block-57
Démarre l’exécution de la bande de programmation lorsque le bouton des drapeaux est enfoncé.
widget-reporter-block-58
Démarre l’exécution de la bande de programmation lorsque le bouton rouge est enfoncé
widget-reporter-block-59c
Renvoie la distance relative du joystick de 0, la valeur positive / négative dépend de la direction avant / arrière (-100..100).
widget-reporter-block-60
Hypothèse – devrait renvoyer la valeur du widget de compteur de vitesse (-100..100) mais reste toujours 0.
widget-instruction-block-59c
Joystick Widget des axes X (horizontal) et Y (vertical) pouvant aller de -100 à 100
Exemple simple
Le programme suivant analyse des coupleurs via le capteur de proximité/couleur et agit sur le sens de rotation du moteur selon la couleur visualisée.
Ce type de programme a été réalisé pour un train qui fait des aller-retour sur une voie unique avec un repère bleu à chaque bout (gare) et patiente en gare quelques secondes avant de repartir dans l’autre sens.