Programmation des pinces

Code et fonctionnement

Pour ce projet, nous avons utilisé un microcontrôleur supplémentaire pour relier tous nos servomoteurs, car l’ESP32 ne disposait pas d’un nombre suffisant de broches pour connecter directement tous les servomoteurs nécessaires. Pour gérer ces servomoteurs, nous avons utilisé la bibliothèque Adafruit PWM Servo Driver. La communication entre l’ESP32 et le microcontrôleur annexe s’est faite via le protocole de communication I2C, permettant une intégration efficace et une gestion simplifiée des servomoteurs.

Pour coder les mouvements de nos pinces, nous avons adopté une stratégie méthodique et bien structurée, en décomposant chaque action possible afin de garantir une précision et une flexibilité maximales. Notre approche s’est concentrée sur l’analyse détaillée des mouvements de nos deux pinces, en identifiant et en codifiant chaque mouvement de manière distincte. Voici une explication détaillée de cette stratégie.

Dans un premier temps, nous avons défini que le servomoteur fixé sur la base devait pouvoir faire sortir la pince ou la rétracter. Ensuite, un second servomoteur, positionné directement sur la pince, devait permettre de la serrer ou de la desserrer. Ainsi, nous avons identifié quatre mouvements distincts : la descente de la pince, le serrage, le desserrage et la remontée de la pince. Une fois ces quatre étapes bien décomposées et comprises, nous avons pu créer deux fonctions principales : grab et ungrab, dans lesquelles nous avons orchestré ces mouvements de manière séquentielle pour effectuer les actions de saisie et de relâchement des objets.

Pour la fonction Grab nous avions:

  Desserer la pince
  Sortie la pince
  Serrer la pince
  Rentrer la pince

Puis pour la fonction Ungrab:

  Sortir la pince
  Desserer la pince
  Rentrer la pince
  Serrer la pince

Notre robot étant équipé de deux pinces se trouvant sur deux côtés opposés, il fallait ensuite permettre de différencier les deux pinces. Nous avons donc simplement crée une variable Booléenne: lorsque la variable était à 0, c’est la pince de droite qui est actionnée, puis quand la variable est à 1, c’est la pince de gauche qui est actionnée.

Utilisation

Une fois la logique des pinces décrites dans chaque fonction, il fallait paramétrer chaque étape du processus. Pour se faire, nous avons paramétré chaque servomoteur grâce à de nombreux tests afin d’obtenir les pinces le plus precises possible.

En effet, chaque servomoteur possède sa propre valeur en fonction de la position demandée. Afin d’obtenir un code plus simple et moins lourd, nous aurions pu convertir ces valeurs brutes en pourcentages. Cette conversion aurait permis d’avoir un code plus clair et de déterminer les valeurs correctes de manière plus simple. De plus, pour réaliser deux actions opposées comme serrer et desserrer, nous aurions pu utiliser une seule fonction pour gérer les deux mouvements, rendant le code encore plus concis et efficace.