EEZY Arms

Une fois la base créer, collé et peinte, une petite programmation pour la gestion de deux bras, deux joysticks et le mini jeu était fini.

Le câblage propre à prit plus de temps. Mais dans notre binôme sur ce mini jeux, j'ai la chance de travailler avec quelqu'un de très malin, réactif et rigoureux (Tof).


Ajout d'un buzzer, on définie les parties sur trois minutes et c'est des heures d'amusement avec un jeu "débile".

Quand on en à eu marre de ramasser les jetons par terre. On à monté des barrières sur les cotées.




EEZY Arms

Projet qui n'étais est pas s'un.

Thingiverse : https://www.thingiverse.com/thing:1015238


Imprimé et câbler à la base pour un entrainement à la programmation d'un bras robotique (Mouvement linéaire d'un bras en gérant tout les axes). Bref, ça m'as occupé 1 soirée.


Mais en le montrant à un copain, on à pas mal jouer avec et nous avons eu l'idée d'en faire un mini jeu de manipulation.

Pas plus tard que 4h plus tard. Nous étions sur le découpage et la création du caisson en MDF.





Note :

-Pour une utilisation sur une longue période : monter des servos SG90 en métal. Les engrenages plastique ne tiennent pas 8h en continu.

-Le plexi Lumineux à été fait par Tof un soir, sur son idée : Les lettres ont été formés avec du fils rigide et gravé à chaud avec un fer à repassé.


Photos sur des salons :

Mon code mit à disposition : Les mouvements des bras sur le plan vertical son gérer celon deux axes X et Y qui bouge les deux servos afin de garder une trajectoire droite.

#include <Servo.h>Servo Arm_Horizontal;Servo Arm_Vertical;Servo Arm_Base;Servo Pince;
int X_Analog = A0;int Y_Analog = A1;int Z_Analog = A2;int Switch_Pince = 7;int START = 8;
int BUZZ = 13;int PosHorizontal = 90;int PosVertical = 90;int PosBase = 90; int X_Pos = 90;int Y_Pos = 90;int Z_Pos = 90;int Pince_Pos = 90;
void setup() { Serial.begin(9600); Arm_Horizontal.attach(9); Arm_Vertical.attach(10); Arm_Base.attach(11); Pince.attach(6);
//Position de départ Arm_Horizontal.write(90); Arm_Vertical.write(90); Arm_Base.write(90); Pince.write(90);
//Déclaration des pins pinMode(X_Analog, INPUT); pinMode(Y_Analog, INPUT); pinMode(Z_Analog, INPUT); pinMode(Switch_Pince,INPUT); pinMode(START,INPUT); pinMode(BUZZ, OUTPUT); Serial.println("##Robot BLANC##");
}
void loop() {
delay(5000); int Started = 0; while (Started == 0) { Started = digitalRead(START) * digitalRead(Switch_Pince); delay(200); } //Son au Démarage digitalWrite(BUZZ, HIGH); delay(200); digitalWrite(BUZZ, LOW); delay(800); digitalWrite(BUZZ, HIGH); delay(200); digitalWrite(BUZZ, LOW); delay(800); digitalWrite(BUZZ, HIGH); delay(200); digitalWrite(BUZZ, LOW); delay(800); digitalWrite(BUZZ, HIGH); delay(800); digitalWrite(BUZZ, LOW); //Timer for(long minute = 0; minute <= 2; minute++) { for(unsigned long duree = 0; duree <= 6000; duree++)//100 = 1 seconde { //Lecture des trois potentiométre int X = analogRead(X_Analog); int Y = analogRead(Y_Analog); int Z = analogRead(Z_Analog);
//Modification des positions en fonctions des lectures potentiométre if(X >= 600 && X_Pos <= 120){X_Pos++;} else if (X <= 440 && X_Pos >= 40){X_Pos--;} if(Y >= 600 && Y_Pos <= 120){Y_Pos++;} else if (Y <= 440 && Y_Pos >= 5){Y_Pos--;} if(Z >= 600 && Z_Pos >= 1){Z_Pos--;} else if (Z <= 440 && Z_Pos <= 179){Z_Pos++;}
//On appuis sur le bouton => Modification de la pince while(digitalRead(Switch_Pince) == HIGH) { Y = analogRead(Y_Analog); if(Y >= 600){Pince_Pos++;} else if (Y <= 440){Pince_Pos--;} //Bridage logiciel de la position pince if(Pince_Pos >= 180){Pince_Pos = 180;} if(Pince_Pos <= 90) {Pince_Pos = 90;} Pince.write(Pince_Pos); duree++; delay(10); } //Sous programme de placement PlacementXYZ(X_Pos, Y_Pos, Z_Pos,0);
delay(10); } //1/3 de la parti écoulé-Repére temporel digitalWrite(BUZZ, HIGH); delay(200); digitalWrite(BUZZ, LOW); delay(100); digitalWrite(BUZZ, HIGH); delay(200); digitalWrite(BUZZ, LOW); delay(100); } //Fin du jeu, son de FIN for(int j = 0; j < 5; j++) { digitalWrite(BUZZ, HIGH); delay(200); digitalWrite(BUZZ, LOW); delay(100); } digitalWrite(BUZZ, HIGH); delay(1000); digitalWrite(BUZZ, LOW); delay(100);}
//Sous Programme de calcul du placementvoid PlacementXYZ(float X, float Y, float Z, int Vitesse){ //Calcul de CA : float CA; CA = sqrt(X*X + Y*Y); float BAC; float Temp; Temp = (CA/2); Temp = Temp/80; BAC = acos(Temp); BAC = BAC*57.2958; float CACx; Temp = X/CA; CACx = acos(Temp); CACx = CACx*57.2658; float PosHorizontal; PosHorizontal = 90-(CACx+BAC); Temp = BAC - CACx; Placement(90+PosHorizontal,90-Temp,Z,Vitesse); }
//SousProgramme de placement bêtevoid Placement(int Horizontal, int Vertical, int Base, int Vit){ for(int i = 0;i<=2;i++) { if(Horizontal >= PosHorizontal) { PosHorizontal++; } else { PosHorizontal--; } Arm_Horizontal.write(PosHorizontal);
if(Vertical >= PosVertical) { PosVertical++; } else { PosVertical--; } Arm_Vertical.write(PosVertical);
if(Base >= PosBase) { PosBase++; } else { PosBase--; } Arm_Base.write(PosBase); delay(Vit); }}