Accueil » Piloter 2 moteurs avec un Joystick

Piloter 2 moteurs avec un Joystick

Pilotage de 2 moteurs DC avec un Joystick virtuel en JAVA

Dans le but de créer un robot thermique, nous souhaitons piloter le Raspberry en direct au travers d’une interface développée en Java Swing. Pour cela, la partie la plus importante concerne le pilotage de 2 moteurs DC avec le GPIO du Raspberry. Après avoir fait le nécessaire au niveau des installations de Pi4J sur le Raspberry (voir page) et sur le PC Windows (voir page), nous pouvons maintenant développer une application en nous appuyant sur le précédent test réalisé avec le contrôle d’une LED (voir page précédente).

Le robot que nous utilisons est un robot conçu par Anthony pour son TPE de Première S. Une page résume la construction de ce dernier (voir onglet Matériel). Pour ce projet, le Raspberry était programmé en Python (projet Raspi Car) et c’est donc ici l’occasion de faire le code équivalent en Java.

Branchement des moteurs avec la puce L293D

Le L293D est un composant indispensable pour piloter 2 moteurs à courant continu. Il permet de contrôler le sens et la vitesse de rotation d’un ou deux moteurs en inversant la polarité du câblage. Les moteurs sont en effet branchés sur le L293D, qui lui est connecté au GPIO du Raspberry. Le plan de câblage de la puce avec les 2 moteurs est le suivant :

Les ports GPIO utilisés pour le branchement de la L293D sont listés ci-dessous, avec leur correspondance en librairie WiringPi :

  • Enable 1 : SCLK 11 du GPIO, WiringPi 14
  • Input 1 : MISO 9 du GPIO, WiringPi 13
  • Output 1 : moteur B (câble noir)
  • Ground : masse du Raspberry
  • Ground : masse du Raspberry
  • Output 2 : moteur B (câble rouge)
  • Input 2 : MOSI 10 du GPIO, WiringPi 12
  • Vs : alimentation en 5 Volt de la batterie externe
  • Vss : alimentation en 5 Volt du Raspberry Pi
  • Input 4 : MOSI 20 du GPIO, WiringPi 28
  • Output 4 : moteur A (câble noir)
  • Ground : masse du Raspberry
  • Ground : masse du Raspberry
  • Output 3 : moteur A (câble rouge)
  • Input 3 : 16 du GPIO, WiringPi 27
  • Enable 2 : SCLK 21 du GPIO, WiringPi 29

Branchement du support amovible Pan Tilt

Le support Pan/Tilt est un support amovible que nous utiliserons pour faire pivoter le module thermique et ainsi connaître la chaleur à différents endroits. Le support se compose en 2 parties :

  • en bas : le Pan qui pivote de gauche à droite, branché sur la pin 5 du GPIO, WiringPi 21
  • en haut : le Tilt qui pivote de haut en bas, branché sur la pin 6 du GPIO, WiringPi 22

Le plan de cablâge du support Pan/Tilt est celui ci-dessous. Le + 5 Volt provient de la batterie externe.

Plan de câblage du support Pan Tilt

Conception de l’interface Java Swing avec Joystick virtuel

Pour le codage, nous avons créé un projet « RaspiThermoCam » sur Eclipse. Nous travaillons dans le package par défaut. Ensuite, nous créons 5 classes selon la méthode MVC et nous ajoutons les librairies Pi4J au projet. De plus, nous prenons soin de compiler le code en version Java 11, comme expliqué sur la page Développement sur Eclipse pour Raspberry (voir ici). Les 5 classes sont les suivantes :

  • AppJoystick.java
  • Controller.java
  • Joystick.java
  • Robot.java
  • View.java

Le projet est téléchargeable avec le lien ci-dessous. L’archive contient les fichiers binaires, les fichiers sources au format Java et les données de l’application.

Projet Java - Raspi Thermo Cam

17 files     144 KB     06/05/2021

Nous commençons le développement par la création de l’interface : 

Interface Java Swing pour le pilotage du robot

Java

Java

Ensuite, nous passons au code de la classe Robot. Les missions principales de cette classe sont la création des fonctions de déplacement des moteurs et de rotation du support amovible.

Java

Il s’en suit la création de la classe Controller qui ordonne les actions du Raspberry en fonction des événements sur l’interface.

Java

Enfin, le main permet de coordonner toutes les classes, toujours selon la méthode MVC.

Java

Compilation et exécution du pilotage des moteurs avec le Joystick virtuel Java

Pour compiler, nous exécutons le main sur Eclipse, toujours sur le PC Windows. Evidemment, des erreurs apparaissent puisque ce fichier ne peut pas s’exécuter sur Windows sans les ports GPIO. Mais les fichiers compilés apparaissent cette-fois dans le répertoire /bin du projet. En effet, les fichiers « .class » compilés sont ajoutés dans ce répertoire. Avec WinSCP, nous transférons le dossier du projet sur le Raspberry. Il ne nous reste plus qu’à lancer le programme avec la commande suivante :

Terminal

Le résultat du pilotage des moteurs du Raspberry avec un joystick est visible sur la vidéo ci-dessous : 

L’utilisation de ce robot en tant que robot thermique est en ligne sur une page en cliquant ici.