Table des matières:

Piano Tiles jouant au bras de robot : 5 étapes
Piano Tiles jouant au bras de robot : 5 étapes

Vidéo: Piano Tiles jouant au bras de robot : 5 étapes

Vidéo: Piano Tiles jouant au bras de robot : 5 étapes
Vidéo: Домино Робот с Мировым Рекордом (100k домино за 24 часа) 2024, Juillet
Anonim
Piano, tuiles, jouer, robot, bras
Piano, tuiles, jouer, robot, bras

Le groupe est composé de 2 ingénieurs en automatisation de l'UCN, qui ont eu une idée brillante que nous sommes motivés à réaliser et à développer. L'idée est basée sur une carte Arduino contrôlant un bras robotique. La carte Arduino est le cerveau de l'opération, puis l'actionneur de l'opération, le bras robotique, fera ce dont il a besoin. L'explication plus approfondie viendra plus tard.

Étape 1: Équipement

Équipement
Équipement

Bras robotique:

Kit de bras robotique Phantomx Pincher Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Logiciel pour le robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Caméra de détection de couleur:

Caméra CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)

Logiciel - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Étape 2: configuration d'Arduino

Configuration Arduino
Configuration Arduino

Vous pouvez voir la configuration sur le tableau ici, ce qui est très simple.

Sur la gauche se trouve l'alimentation.

Celui du milieu est pour le premier servo, qui est ensuite connecté aux autres servos, servo par servo.

Celui du bas est l'endroit où nous contrôlons la carte à partir d'un PC ou d'un ordinateur portable, qui a une entrée USB à l'autre extrémité.

Étape 3: Programme final

||| PROGRAMME |||

#comprendre

#include #include "poses.h" #include //Bibliothèque Pixy #include

#define POSECOUNT 5

BioloidController bioloid = BioloidController(1000000);

const int SERVOCOUNT = 5; int id; position int; IDCheck booléen; booléen RunCheck;

void setup(){ pinMode(0, OUTPUT); ax12SetRegister2(1, 32, 50);//définir le registre de joint numéro 1 32 à la vitesse 50. ax12SetRegister2(2, 32, 50);//définir le registre de joint numéro 2 32 à la vitesse 50. ax12SetRegister2(3, 32, 50);//définir le registre de joint numéro 3 32 à la vitesse 50. ax12SetRegister2(4, 32, 50);//définir le registre de joint numéro 4 32 à la vitesse 50. ax12SetRegister2(5, 32, 100);//définir le registre de joint numéro 5 32 à la vitesse 100. //initialiser les variables id = 1; pos = 0; IDCheck = 1; ExécuterVérifier = 0; // ouvrir le port série Serial.begin(9600); retard (500); Serial.println("############################"); Serial.println("Communication série établie.");

//Vérifier la tension de la batterie Lipo CheckVoltage ();

//Scan Servos, position de retour MoveTest(); MoveHome(); Options de menu(); Exécuter la vérification = 1; }

void loop(){ // lit le capteur: int inByte = Serial.read();

commutateur (inByte) {

cas '1': MovePose1(); Pause;

cas '2': MovePose2(); Pause; cas '3': MovePose3(); Pause;

cas '4': MovePose4(); Pause;

case '5': MoveHome(); Pause; cas '6': Grab(); Pause;

cas '7': LEDTest(); Pause;

cas '8': RelaxServos(); Pause; } }

void CheckVoltage(){ // attendre, puis vérifier la tension (sécurité LiPO) float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println("############################"); Serial.print ("Tension du système: "); Serial.print (tension); Serial.println (" volts. "); if (tension 10.0){ Serial.println("Niveaux de tension nominaux."); } if (RunCheck == 1){ MenuOptions(); } Serial.println("############################"); }

void MoveHome(){ delay(100); // pause recommandée bioloid.loadPose(Home); // charge la pose depuis FLASH, dans le tampon nextPose bioloid.readPose(); // lit les positions actuelles des servos dans le tampon curPose Serial.println("############################"); Serial.println("Déplacement des servos vers la position d'origine"); Serial.println("############################"); retard(1000); bioloid.interpolateSetup(1000); // configuration pour l'interpolation de courant-> suivant plus d'une demi-seconde while(bioloid.interpolating > 0){ // faire cela tant que nous n'avons pas atteint notre nouvelle pose bioloid.interpolateStep(); // déplacer les servos, si nécessaire. retard(3); } if (RunCheck == 1){ MenuOptions(); } }

void MovePose1(){ delay(100); // pause recommandée bioloid.loadPose(Pose1); // charge la pose depuis FLASH, dans le tampon nextPose bioloid.readPose(); // lit les positions actuelles des servos dans le tampon curPose Serial.println("############################"); Serial.println("Déplacement des servos en 1ère position"); Serial.println("############################"); retard(1000); bioloid.interpolateSetup(1000); // configuration pour l'interpolation à partir du courant-> suivant plus d'une demi-seconde while(bioloid.interpolating > 0){ // faire cela tant que nous n'avons pas atteint notre nouvelle pose bioloid.interpolateStep(); // déplacer les servos, si nécessaire. retard(3); } DéfinirPosition(3, 291); //définir la position du joint 3 sur '0' delay(100); // attendre que le joint bouge if (RunCheck == 1){ MenuOptions(); } }

void MovePose2(){ delay(100); // pause recommandée bioloid.loadPose(Pose2); // charge la pose depuis FLASH, dans le tampon nextPose bioloid.readPose(); // lit les positions actuelles des servos dans le tampon curPose Serial.println("############################"); Serial.println("Déplacement des servos en 2ème position"); Serial.println("############################"); retard(1000); bioloid.interpolateSetup(1000); // configuration pour l'interpolation de courant-> suivant plus d'une demi-seconde while(bioloid.interpolating > 0){ // faire cela tant que nous n'avons pas atteint notre nouvelle pose bioloid.interpolateStep(); // déplacer les servos, si nécessaire. retard(3); } DéfinirPosition(3, 291); //définir la position du joint 3 sur '0' delay(100); // attendre que le joint bouge if (RunCheck == 1){ MenuOptions(); } } void MovePose3(){ delay(100); // pause recommandée bioloid.loadPose(Pose3); // charge la pose depuis FLASH, dans le tampon nextPose bioloid.readPose(); // lit les positions actuelles des servos dans le tampon curPose Serial.println("############################"); Serial.println("Déplacement des servos en 3ème position"); Serial.println("############################"); retard(1000); bioloid.interpolateSetup(1000); // configuration pour l'interpolation de courant-> suivant plus d'une demi-seconde while(bioloid.interpolating > 0){ // faire cela tant que nous n'avons pas atteint notre nouvelle pose bioloid.interpolateStep(); // déplacer les servos, si nécessaire. retard(3); } DéfinirPosition(3, 291); //définit la position du joint 3 sur '0' delay(100); // attend que le joint bouge if (RunCheck == 1){ MenuOptions(); } }

void MovePose4(){ delay(100); // pause recommandée bioloid.loadPose(Pose4); // charge la pose depuis FLASH, dans le tampon nextPose bioloid.readPose(); // lit les positions actuelles des servos dans le tampon curPose Serial.println("############################"); Serial.println("Déplacement des servos en 4ème position"); Serial.println("############################"); retard(1000); bioloid.interpolateSetup(1000); // configuration pour l'interpolation de courant-> suivant plus d'une demi-seconde while(bioloid.interpolating > 0){ // faire cela tant que nous n'avons pas atteint notre nouvelle pose bioloid.interpolateStep(); // déplacer les servos, si nécessaire. retard(3); } DéfinirPosition(3, 291); //définit la position du joint 3 sur '0' delay(100); // attend que le joint bouge if (RunCheck == 1){ MenuOptions(); } }

void MoveTest(){ Serial.println("############################"); Serial.println("Initialisation du test de signe de mouvement"); Serial.println("############################"); retard (500); identifiant = 1; pos = 512; while(id <= SERVOCOUNT){ Serial.print("Moving Servo ID: "); Serial.println(id);

while(pos >= 312){ SetPosition(id, pos); pos = pos--; retard(10); }

while(pos <= 512){ SetPosition(id, pos); pos = pos++; retard(10); }

// itérer jusqu'à l'ID de servo suivant id = id++;

} if (RunCheck == 1){ MenuOptions(); } }

void MenuOptions(){ Serial.println("############################"); Serial.println("Veuillez entrer l'option 1-5 pour exécuter à nouveau des tests individuels."); Serial.println("1) 1ère position"); Serial.println("2) 2ème position"); Serial.println("3) 3ème position"); Serial.println("4) 4ème position"); Serial.println("5) Position d'origine"); Serial.println("6) Vérifier la tension du système"); Serial.println("7) Effectuer un test LED"); Serial.println("8) Relax Servos"); Serial.println("############################"); }

void RelaxServos(){ id = 1; Serial.println("############################"); Serial.println("Servos relaxants."); Serial.println("############################"); while(id <= SERVOCOUNT){ Relax(id); id = (id++)%SERVOCOUNT; retard (50); } if (RunCheck == 1){ MenuOptions(); } }

void LEDTest(){ id = 1; Serial.println("############################"); Serial.println ("Exécution du test LED"); Serial.println("############################"); while(id <= SERVOCOUNT){ ax12SetRegister(id, 25, 1); Serial.print("LED allumée - ID servo: "); Serial.println(id); retard(3000); ax12SetRegister(id, 25, 0); Serial.print("LED OFF - Servo ID: "); Serial.println(id); retard(3000); identifiant = identifiant++; } if (RunCheck == 1){ MenuOptions(); } }

void Grab(){ SetPosition(5, 800); //définir la position du joint 1 à '0' delay(100); // attendre que le joint bouge

}

Nous avons basé notre programme sur le programme PincherTest du fabricant avec quelques ajustements majeurs dans le cas du positionnement. Nous avons utilisé poses.h pour que le robot ait les positions dans la mémoire. Tout d'abord, nous avons essayé de créer notre bras de jeu avec Pixycam pour qu'il soit automatique, mais en raison de problèmes de lumière et de petit écran, cela n'a pas pu arriver. Le robot a une position d'origine de base, après avoir téléchargé le programme, il testera tous les servos trouvés dans le robot. Nous avons défini les poses pour les boutons 1-4, il sera donc facile de s'en souvenir. N'hésitez pas à utiliser le programme.

Étape 4: Guide vidéo

Étape 5: Conclusion

En conclusion, le robot est un petit projet amusant pour nous et un truc amusant à jouer et à expérimenter. Je vous encourage à l'essayer et à le personnaliser également.

Conseillé: