Nous travaillons avec Lego Mindstorms EV3 de .NET. Connexion de deux briques EV3 ou plus Connexion via Wi-Fi

Connexion USB

LEGO Mindstorms EV3 peut se connecter à un PC ou à un autre EV3 via une connexion USB. La vitesse et la stabilité de la connexion dans ce cas sont meilleures qu'avec toute autre méthode, y compris Bluetooth.

LEGO Mindstorms EV3 dispose de deux ports USB.

Communication entre LEGO EV3 et d'autres blocs LEGO EV3 en mode guirlande.

Le mode Daisy Chain est utilisé pour connecter deux ou plusieurs blocs LEGO EV3.

Ce mode :

  • conçu pour connecter plusieurs LEGO Mindstorms EV3 ;
  • sert à connecter plus de capteurs, moteurs et autres appareils ;
  • permet la communication entre plusieurs LEGO Mindstorms EV3 (jusqu'à 4), ce qui nous donne jusqu'à 16 ports externes et le même nombre de ports internes ;
  • permet de contrôler toute la chaîne depuis le principal LEGO Mindstorms EV3 ;
  • ne peut pas fonctionner lorsque le Wi-Fi ou le Bluetooth sont actifs.

Pour activer le mode de connexion en guirlande, accédez à la fenêtre des paramètres du projet et cochez la case.

Lorsque ce mode est sélectionné, pour n'importe quel moteur, nous pouvons sélectionner le bloc EV3 qui sera utilisé et les capteurs nécessaires.

Le tableau montre les options d'utilisation des blocs EV3 :

Action

Moteur moyen

Gros moteur

Pilotage

Gestion indépendante

Gyroscopique

Infrarouge

Ultrasonique

Rotation du moteur

Températures

Compteur d'énergie

Son

Connexion via Bluetooth

Bluetooth permet à LEGO Mindstorms EV3 de se connecter à un PC, à d'autres LEGO Mindstorms EV3, à des smartphones et à d'autres appareils Bluetooth. La portée de communication via Bluetooth peut atteindre 25 m.

Vous pouvez connecter jusqu'à 7 blocs à un LEGO Mindstorms EV3. La brique maître EV3 vous permet d'envoyer et de recevoir des messages à chaque esclave EV3. Les esclaves EV3 ne peuvent envoyer des messages qu'à la brique maître EV3, pas entre eux.

Séquence de connexion EV3 via Bluetooth

Afin de connecter deux ou plusieurs blocs EV3 entre eux via Bluetooth, vous devez effectuer les étapes suivantes :

1. Ouvrez un onglet Paramètres.

2. Sélectionnez Bluetooth et appuyez sur le bouton central.

3. Nous mettons Case à cocher visibilité Bluetooth.

4. Vérifiez que le signe Bluetooth ("<") виден на верхней левой стороне.

5. Effectuez la procédure ci-dessus pour le nombre requis de briques EV3.

6. Accédez à l'onglet Connexion :

7. Cliquez sur le bouton Rechercher :

8. Sélectionnez l'EV3 auquel vous souhaitez vous connecter (ou auquel vous souhaitez vous connecter) et appuyez sur le bouton central.

9. Nous connectons les premier et deuxième blocs avec la clé d'accès.

Si vous faites tout correctement, l'icône " apparaîtra dans le coin supérieur gauche<>", connectez les autres blocs EV3 de la même manière s'il y en a plus de deux.

Si vous éteignez LEGO EV3, la connexion sera perdue et vous devrez répéter toutes les étapes.

Important : chaque bloc doit avoir son propre programme écrit.

Exemple de programme :

Premier bloc : lorsque le capteur tactile est enfoncé, le premier bloc EV3 transmet le texte au deuxième bloc avec un délai de 3 secondes (bloc principal).

Exemple de programme pour le bloc 2 :

Le deuxième bloc attend de recevoir le texte du premier bloc, et une fois qu'il l'a reçu, il affichera un mot (dans notre exemple, le mot "Bonjour") pendant 10 secondes (le bloc esclave).

Connectez-vous via Wi-Fi

Une communication à plus longue portée est possible en connectant le dongle Wi-Fi au port USB de l'EV3.

Pour utiliser le Wi-Fi, vous devez installer un module spécial sur le bloc EV3 à l'aide d'un connecteur USB (adaptateur Wi-Fi (adaptateur sans fil Netgear N150 (WNA1100), ou vous pouvez connecter un dongle Wi-Fi.

Sélectionner le mode écran

Sélection de mode
Bloquer le champ de texte
Contributions
Bouton Aperçu

Sélectionnez le type de texte ou de graphiques que vous souhaitez voir à l'aide du sélecteur de mode. Après avoir sélectionné le mode, vous pouvez sélectionner les valeurs d'entrée. Les entrées disponibles varient en fonction du mode. Les modes et les entrées sont décrits ci-dessous.

Vous pouvez cliquer sur le bouton Aperçu pour prévisualiser ce que le bloc d'affichage affichera sur l'écran EV3. Vous pouvez laisser la vue ouverte tout en sélectionnant les valeurs d'entrée pour le bloc.

Coordonnées de l'écran

De nombreux modes de bloc d'écran utilisent les coordonnées X et Y pour déterminer l'emplacement de l'élément. Les coordonnées déterminent la position des pixels sur l'écran EV3 Brick. La position (0, 0) se trouve dans le coin supérieur gauche de l'écran, comme indiqué dans l'image ci-dessous.

Dimensions de l'écran : 178 pixels de large et 128 pixels de haut. La plage des valeurs des coordonnées X va de 0 sur l'écran de gauche à 177 à droite. La plage des valeurs des coordonnées Y va de 0 en haut à 127 en bas.

Trucs et astuces

Vous pouvez utiliser le bouton Aperçu dans le coin supérieur gauche du bloc Écran pour vous aider à trouver les coordonnées d'écran correctes.

Texte - Pixels

Texte - Le mode Pixels vous permet d'afficher du texte n'importe où sur l'écran EV3 Brick.

Fenêtre de réinitialisation

Le mode Réinitialiser la fenêtre ramène l’écran de la brique EV3 à l’écran d’informations standard affiché pendant l’exécution du programme. Cet écran affiche le nom du programme et d'autres informations de retour. Lorsque vous exécutez un programme sur la brique EV3, cet écran apparaît avant l'exécution du premier bloc d'écran du programme.

Assurer la visibilité des éléments affichés

Une fois le programme EV3 terminé, l'écran EV3 Brick s'efface et revient à l'écran EV3 Brick Menu. Tout texte ou graphique affiché par le programme sera effacé. Si, par exemple, votre programme a un bloc « Écran » et rien d'autre, alors l'écran sera effacé si rapidement immédiatement après la fin du programme que vous ne verrez pas les résultats du bloc « Écran ».

Si vous souhaitez que l'écran reste visible une fois le programme terminé, vous devez ajouter un bloc à la fin du programme pour empêcher le programme de se terminer immédiatement, comme le montrent les exemples suivants.

Afficher plusieurs éléments

Si vous souhaitez afficher plusieurs éléments de texte ou graphiques sur l'écran en même temps, il est important de ne pas effacer l'écran EV3 Brick entre les éléments. Chaque mode du bloc Screen possède une entrée Clear Screen. Si Clear Screen est vrai, tout l’écran sera effacé avant que l’élément ne soit affiché. Cela signifie que pour afficher plusieurs éléments, vous devez définir Clear Screen sur False pour chaque bloc Screen sauf le premier.

Affichage des chiffres

Pour afficher une valeur numérique dans votre programme, connectez un bus de données à l'entrée Texte du bloc Affichage texte. Le bus de données numériques sera automatiquement converti en texte à l'aide de la conversion du type de bus de données (voir la section

L’idée de remplacer le micro-ordinateur du designer par un Beaglebone, ou un autre, n’est pas nouvelle. Mais avec la sortie d'EV3, il est devenu possible non seulement d'obtenir un analogique à 100 %, mais aussi d'augmenter les performances de votre legorobot.

Vidéo de présentation du projet :

E VB prend entièrement en charge le système Lego Mindstorms Ev3 tant au niveau matériel que logiciel, 100 % compatible avec tous les capteurs et moteurs Lego. Le bloc fonctionne de la même manière que le bloc Lego Mindstorms EV3 :

BeagleBone Noir- ordinateur Linux monocarte. C'est un concurrent du Raspberry Pi. Possède un puissant processeur AM335x 720 MHz ARM®, grand nombre d'entrées/sorties, les capacités peuvent être étendues avec des cartes supplémentaires.

Lego Mindstorms EV3 dispose d'un processeur ARM9 (TI Sitara AM180x) 300 MHz, donc passage à un processeur ARM Cortex-A8 (TI Sitara AM335x) 1 GHz BeagleBone Black augmente la productivité, en plus il devient possible de connecter des cartes d'extension supplémentaires !

La chose la plus importante est que Lego Mindstorms EV3 a une description ouverte de tous les logiciels et matériels !

Par exemple, le célèbre robot de résolution du Rubik's cube a été assemblé et démontré. Ce n'est qu'au lieu d'EV3 qu'ils ont installé l'EVB développé. Nous vous invitons à regarder la vidéo :

Les auteurs du projet produisent et vendent déjà des EVB. Ils prévoient d'augmenter considérablement leur production d'ici fin avril 2015. En outre, ils ont développé et produisent plusieurs capteurs compatibles.

Traditionnellement, les robots construits sur une plateforme LEGO Mindstorms EV3, sont programmés à l'aide de l'environnement graphique LabVIEW. Dans ce cas, les programmes s'exécutent sur le contrôleur EV3 et le robot fonctionne de manière autonome. Ici, je vais parler d'une manière alternative de contrôler le robot : en utilisant la plate-forme .NET exécutée sur un ordinateur.

Mais avant de nous lancer dans la programmation, examinons quelques cas où cela pourrait être utile :

  • Nécessite le contrôle à distance du robot depuis un ordinateur portable (par exemple, en appuyant sur des boutons)
  • Il est nécessaire de collecter les données du contrôleur EV3 et de les traiter sur un système externe (par exemple, pour les systèmes IoT)
  • Toute autre situation dans laquelle vous souhaitez écrire un algorithme de contrôle en .NET et l'exécuter à partir d'un ordinateur connecté au contrôleur EV3

API LEGO MINDSTORMS EV3 pour .NET

Le contrôleur EV3 est contrôlé depuis un système externe en envoyant des commandes au port série. Le format de commande lui-même est décrit dans le Communication Developer Kit.

Mais implémenter ce protocole manuellement est ennuyeux. Par conséquent, vous pouvez utiliser le wrapper .NET prêt à l'emploi, que Brian Peek a soigneusement écrit. Le code source de cette bibliothèque est hébergé sur Github et le package prêt à l'emploi peut être trouvé sur Nuget.

Connexion à un contrôleur EV3

La classe Brick est utilisée pour communiquer avec le contrôleur EV3. Lors de la création de cet objet, vous devez transmettre une implémentation de l'interface ICommunication au constructeur - un objet qui décrit comment se connecter au contrôleur EV3. Des implémentations UsbCommunication, BluetoothCommunication et NetworkCommunication (connexion WiFi) sont disponibles.

La méthode de connexion la plus populaire est via Bluetooth. Examinons de plus près cette méthode de connexion.

Avant de pouvoir nous connecter par programmation au contrôleur via Bluetooth, le contrôleur doit être connecté à l'ordinateur à l'aide des paramètres du système d'exploitation.

Une fois le contrôleur connecté, accédez aux paramètres Bluetooth et sélectionnez l'onglet Ports COM. On trouve notre contrôleur, il nous faut sortant port. Nous le préciserons lors de la création de l'objet BluetoothCommunication.

Le code pour se connecter au contrôleur ressemblera à ceci :

Tâche asynchrone publique Connect (communication ICommunication) ( var communication = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); wait _brick.ConnectAsync(); )

Facultativement, vous pouvez spécifier un délai d'expiration de connexion au contrôleur :

Attendez _brick.ConnectAsync(TimeSpan.FromSeconds(5));

La connexion à l'appareil via USB ou WiFi s'effectue de la même manière, à l'exception de l'utilisation des objets UsbCommunication et NetworkCommunication.

Toutes les autres actions effectuées sur le contrôleur sont effectuées via l'objet Brick.

Faisons tourner les moteurs

Pour exécuter des commandes sur le contrôleur EV3, on accède à la propriété DirectCommand de l'objet Brick. Commençons par essayer de démarrer les moteurs.

Supposons que notre moteur soit connecté au port A du contrôleur, alors faire fonctionner ce moteur à 50 % de sa puissance ressemblera à ceci :

Attendez _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

Il existe d'autres méthodes pour contrôler le moteur. Par exemple, vous pouvez faire pivoter un moteur selon un angle spécifié à l'aide des méthodes StepMotorAtPowerAsync() et StepMotorAtSpeedAsync(). Il existe plusieurs méthodes disponibles, qui sont des variations des modes de mise en marche des moteurs - en fonction du temps, de la vitesse, de la puissance, etc.

L'arrêt forcé s'effectue à l'aide de la méthode StopMotorAsync() :

Attendez _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

Le deuxième paramètre indique l'utilisation du frein. Si vous le réglez sur faux, le moteur s'arrêtera en roue libre.

Lecture des valeurs des capteurs

Le contrôleur EV3 dispose de quatre ports pour connecter des capteurs. En plus de cela, les moteurs disposent également d'encodeurs intégrés, ce qui leur permet d'être utilisés comme capteurs. En conséquence, nous disposons de 8 ports à partir desquels les valeurs peuvent être lues.

Les ports de lecture des valeurs sont accessibles via la propriété Ports de l'objet Brick. Les ports sont une collection de ports disponibles sur le contrôleur. Par conséquent, pour travailler avec un port spécifique, vous devez le sélectionner. InputPort.One ... InputPort.Four sont les ports de capteur et InputPort.A ... InputPort.D sont les encodeurs de moteur.

Var port1 = _brick.Ports ;

Les capteurs de l'EV3 peuvent fonctionner dans différents modes. Par exemple, le capteur de couleur EV3 peut être utilisé pour mesurer la lumière ambiante, mesurer la lumière réfléchie ou détecter la couleur. Par conséquent, afin de « dire » au capteur exactement comment nous voulons l’utiliser, nous devons définir son mode :

Brick.Ports.SetMode(ColorMode.Reflective);

Maintenant que le capteur est connecté et que son mode de fonctionnement est défini, vous pouvez en lire les données. Vous pouvez obtenir des données « brutes », une valeur traitée et une valeur en pourcentage.

Float si = _brick.Ports.SIValue ; int brut = _brick.Ports.RawValue; octet pour cent = _brick.Ports.PercentValue ;

La propriété SIValue renvoie les données traitées. Tout dépend du capteur utilisé et dans quel mode. Par exemple, lors de la mesure de la lumière réfléchie, nous obtiendrons des valeurs de 0 à 100 en fonction de l'intensité de la lumière réfléchie (noir/blanc).

La propriété RawValue renvoie la valeur brute obtenue à partir de l'ADC. Parfois, il est plus pratique de l'utiliser pour un traitement et une utilisation ultérieurs. À propos, dans l'environnement de développement EV3, il est également possible d'obtenir des valeurs « brutes » - pour cela, vous devez utiliser le bloc du panneau bleu.

Si le capteur que vous utilisez s'attend à recevoir des valeurs en pourcentage, vous pouvez également utiliser la propriété PercentValue.

Exécuter des commandes par lots

Disons que nous avons un chariot robot à deux roues et que nous voulons le déployer sur place. Dans ce cas, les deux roues doivent tourner dans le sens opposé. Si nous utilisons DirectCommand et envoyons deux commandes séquentiellement au contrôleur, un certain temps peut s'écouler entre leur exécution :

Attendez _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); attendre _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

Dans cet exemple, nous envoyons une commande pour faire tourner le moteur A à une vitesse de 50, après avoir envoyé cette commande avec succès, nous répétons la même chose avec le moteur connecté au port B. Le problème est que l'envoi des commandes ne se fait pas instantanément, donc les moteurs peut commencer à tourner à différents moments - pendant que la commande est transmise pour le port B, le moteur A déjà commencera à tourner.

S'il est essentiel pour nous de faire tourner les moteurs en même temps, nous pouvons envoyer des commandes au contrôleur dans un « bundle ». Dans ce cas, vous devez utiliser la propriété BatchCommand au lieu de DirectCommand :

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); attendre _brick.BatchCommand.SendCommandAsync();

Désormais, deux commandes sont préparées en même temps, après quoi elles sont envoyées au contrôleur dans un seul paquet. Le contrôleur, ayant reçu ces commandes, commencera à faire tourner les moteurs simultanément.

Que pouvez vous faire d'autre

En plus de faire tourner les moteurs et de lire les valeurs des capteurs, vous pouvez effectuer un certain nombre d'autres actions sur le contrôleur EV3. Je n'entrerai pas dans les détails de chacun d'eux, je me contenterai d'énumérer une liste de ce qui peut être fait :

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync(), etc. - manipulation de l'écran intégré du contrôleur EV3
  • PlayToneAsync() et PlaySoundAsync() - utilisez le haut-parleur intégré pour jouer des sons
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (depuis SystemCommand) - travailler avec des fichiers

Conclusion

L’utilisation de .NET pour contrôler les robots Mindstorms EV3 démontre bien comment les technologies de « mondes différents » peuvent fonctionner ensemble. À la suite de recherches sur l'API EV3 pour .NET, une petite application a été créée qui vous permet de contrôler le robot EV3 depuis un ordinateur. Malheureusement, des applications similaires existent pour NXT, mais EV3 les a contournées. En même temps, ils sont utiles dans les compétitions de robots contrôlés, comme le football robotisé.

L'application peut être téléchargée et installée à partir de ce lien :