Gant mécanique Open-source Arduino UNO

Sommaire

P.I.L.T - Le Gant Arduino pour Dompter vos Robots

Le Gant mécanique Arduino, affectueusement nommé P.I.L.T (Play It Like Thanos), incarne bien plus qu’un simple accessoire. Bien qu’il ne confère pas le pouvoir de remonter le temps ou de moduler l’univers, il vous offre le contrôle absolu sur vos robots.
 
Le Gant mécanique Arduino est conçu pour transformer votre expérience de robotique. En enfilant ce gant innovant, vous pouvez commander vos robots avec des gestes simples et intuitifs. Imaginez déplacer un bras robotique, diriger un robot à roues, ou même contrôler un drone, tout cela en bougeant simplement votre main.

Présentation

Le Gant mécanique Arduino est un gant révolutionnaire équipé d’un module accéléromètre gyroscope MPU6050 pour capturer les mouvements de la main et de cinq potentiomètres pour traduire les gestes des doigts. Le tout repose sur une carte Arduino UNO, rendant le dispositif aussi robuste que flexible. Son port USB facilite sa programmation via l’IDE Arduino, permettant aux utilisateurs de personnaliser ses fonctions en toute simplicité.

Ce gant high-tech est également doté d’une batterie rechargeable et d’un interrupteur ON/OFF, le rendant à la fois puissant et facile à utiliser. Que vous soyez un passionné de robotique ou un professionnel cherchant à optimiser le contrôle de vos robots, le P.I.L.T est l’outil parfait pour vous.

Fonctionnalités Clés

  • Communication Intuitive : Le Gant mécanique Arduino communique sans faille avec divers robots, que ce soit des châssis mobiles, des bras robotisés, des quadrupèdes ou des hexapodes.
  • Synchronisation Simplifiée : Livré avec un module HC-08 supplémentaire, la synchronisation est automatique dès la mise sous tension, facilitant ainsi son association avec d’autres modules HC-08.
  • Gestion Optimisée : Un bouton DEL permet de désenregistrer l’adresse du HC-08 secondaire, assurant une désynchronisation aisée pour une nouvelle association.
 

Avec ces fonctionnalités, le Gant mécanique Arduino offre une solution pratique et efficace pour le contrôle de vos robots, alliant simplicité d’utilisation et performance.

Programmation du Gant mécanique Arduino

Connectez le gant à votre PC via son port mini-USB et sélectionnez la carte Arduino UNO dans l’IDE Arduino. Programmez-le selon vos besoins : de la reconnaissance des positions des doigts à l’inclinaison souhaitée de la main. Grâce à l’interface conviviale de l’IDE Arduino, vous pouvez ajuster les paramètres et les fonctionnalités du gant pour répondre parfaitement à vos exigences en matière de contrôle robotique.
				
					/*Projet: PILT - PLAY IT LIKE THANOS
* Auteur: Christian Joseph
* Date:15.08.2019
* www.eagle-robotics.com
*/

#include "Wire.h"

#include "Servo.h" 

#include "SoftwareSerial.h"

#define BTH_RX 11

#define BTH_TX 12

const int MPU_addr=0x68;

int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

double x; double y; double z;

int minVal=265; int maxVal=402;

char a;

SoftwareSerial Bth(BTH_RX, BTH_TX);

void setup(){
// INIT POTENTIOMETRES DOIGTS
pinMode(A0, INPUT);

pinMode(A1, INPUT);

pinMode(A2, INPUT);

pinMode(A3, INPUT);

pinMode(A6, INPUT);

//INIT MPU6050
Wire.begin();

Wire.beginTransmission(MPU_addr);

Wire.write(0x6B); // PWR_MGMT_1 register

Wire.write(0); // set to zero (wakes up the MPU-6050)

Wire.endTransmission(true);

Serial.begin(9600);

//INIT MODULE HC08 EN MODE MAITRE
Bth.begin(9600);

Bth.print("AT+ROLE=M"); //

delay(100);

Bth.print("AT+RESET"); //

delay(250);

}

void loop(){
//VARIABLE DE LECTURE ETAT POTENTIOMETRES
int val = analogRead(A0);
int val1 = analogRead(A1);
int val2 = analogRead(A2);
int val3 = analogRead(A3);
int val4 = analogRead(A6);

//LECTURE POTENTIOMETRES ; les paramètres 2500 et 500 sont à modifier selon le gant

//de sorte à avoir les données val à val4 autour de 2000

//Si valeur < 2000 = doigt plié et si valeur > 2000 = doigt tendu


val = map(analogRead(A0), 0, 150, 2500, 500);

val1 = map(analogRead(A1), 0, 150, 2500, 500);

val2 = map(analogRead(A2), 0, 150, 2500, 500);

val3 = map(analogRead(A3), 0, 150, 2500, 500);

val4 = map(analogRead(A6), 0, 100, 2500, 500);


Serial.println(val);
Serial.println(val1);
Serial.println(val2);
Serial.println(val3);
Serial.println(val4);
Serial.println(" ");

if (val1 < 2000 && val2 < 2000 && val3 < 2000 && val4 < 2000){ //Tous les doigts repliés, poing fermé
Serial.println("mode g/d active"); // activation mode tourner à gauche ou à droite
if (y > 260 && y < 320){
Serial.println("gauche"); // Main penchée à gauche - Le robot tourne à gauche
Bth.write('d');
while(y > 260 && y < 320){
delay(1);
pos();
}
Serial.println("exit de gauche");
Bth.write('s');
}
else if (y > 40 && y < 130){
Serial.println("droite"); // Main penchée à droite - Le robot tourne à droite
Bth.write('c');
while(y > 40 && y < 130){
delay(1);
pos();
}
Serial.println("exit de droite");
Bth.write('s');
}
}
else if (val1 > 2000 && val2 > 2000 && val3 < 2000 && val4 < 2000){ //index et majeur tendus, autres doigts pliés
Serial.println("mode m/a active"); // activation mode marche avant et arrière
if (x > 0 && x < 80){
Serial.println("avant"); // Main penchée en avant - Le robot avance
Bth.write('f');
while(x > 0 && x < 80){
delay(1);
pos();
}
Serial.println("exit de avant");
Bth.write('s');
}
else if (x > 270 && x < 315){
Serial.println("arriere"); // Main penchée en arrière - Le robot fait marche arrière
Bth.write('b');
while(x > 270 && x < 315){
delay(1);
pos();
}
Serial.println("exit de arriere");
Bth.write('s');
}

}
else if (val1 > 2000 && val2 > 2000 && val3 > 2000 && val4 > 2000){
Serial.println("mode stop active");
Bth.write('x');
}

Wire.beginTransmission(MPU_addr);

Wire.write(0x3B);

Wire.endTransmission(false);

Wire.requestFrom(MPU_addr,14,true);

AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)

AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)

AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)

Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)

GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)

GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)

GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

int xAng = map(AcX,minVal,maxVal,-90,90); int yAng = map(AcY,minVal,maxVal,-90,90); int zAng = map(AcZ,minVal,maxVal,-90,90);

x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);

Serial.print("AngleX= "); Serial.println(x);

Serial.print("AngleY= "); Serial.println(y);

Serial.print("AngleZ= "); Serial.println(z); Serial.println("-----------------------------------------");

}


void pos(){

Wire.beginTransmission(MPU_addr);

Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)

Wire.endTransmission(false);

Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers

AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)

AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)

AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)

Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)

GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)

GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)

GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

/*Serial.print("AcX = "); Serial.print(AcX); //Accéléromètre X

Serial.print(" | AcY = "); Serial.print(AcY); //Accéléromètre Y

Serial.print(" | AcZ = "); Serial.print(AcZ); //Accéléromètre Z

Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53); //Température

Serial.print(" | GyX = "); Serial.print(GyX); // Gyroscope X

Serial.print(" | GyY = "); Serial.print(GyY); // Gyroscope Y

Serial.print(" | GyZ = "); Serial.println(GyZ); // Gyroscope Z
*/

int xAng = map(AcX,minVal,maxVal,-90,90); int yAng = map(AcY,minVal,maxVal,-90,90); int zAng = map(AcZ,minVal,maxVal,-90,90);

x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);

}  //Fin du programme
				
			
				
					#Côté Récepteur

#include "SoftwareSerial.h"

SoftwareSerial BT (2,3);

char a;
void setup()
{ Serial.begin(9600);
  BT.begin(9600);

}

void loop()
{
 
  if (BT.available())
 
  {
    a=(BT.read());
    if (a=='f')
    {
      while(a != 's'){
      a = (BT.read());  
     Serial.println("Robot en avant");
     }
    }

  else if (a=='b')
    {
      while(a != 's'){
      a = (Serial.read());
      Serial.println("Robot en arrière");
      }
    }
     else if (a=='c')
    {
      while(a != 's'){
      a = (Serial.read());
     Serial.println("Robot à droite");
      }
    }
     else if (a=='d')
    {
      while(a != 's'){
      a = (Serial.read());
      Serial.println("Robot à gauche");
      }
    }
				
			

Conclusion

Le Gant mécanique Arduino pour Dompter vos Robots est bien plus qu’un simple accessoire. Il représente une avancée significative dans le domaine de la robotique, offrant un contrôle intuitif et puissant sur une variété de robots. Que vous soyez un passionné de robotique ou un professionnel cherchant à optimiser vos projets, le Gant mécanique Arduino est l’outil parfait pour vous.

Ne manquez pas l’opportunité de transformer votre expérience de robotique. Adoptez le Gant mécanique Arduino dès aujourd’hui et prenez le contrôle total de vos robots. Commandez maintenant et commencez à explorer les possibilités infinies que ce gant révolutionnaire a à offrir !

Bonjour ! 🌟 Rejoignez notre newsletter pour ne rien manquer.

Recevez nos offres spéciales et les derniers articles directement dans votre boîte de réception

Nous ne faisons pas de spam, promis ! Consultez notre politique de confidentialité pour en savoir plus.

Retour en haut

Projet sur mesure