ENIB 2022 - groupe D : Tirolaser
Sommaire
Photo de l'équipe
,-. __ ,' `---.___.---' `. ,' ,- `-._ ,' / \ ,\/ / \\ )`._)>) | \\ `>,' _ \ / |\ ) \ | | | |\\ . , / \ | `. | | )) \`. \`-' )-| `. | /(( \ `-` a` _/ ;\ _ )`-.___.--\ / `' `._ ,' \`j`.__/ \ `. \ http://www.ascii-fr.com/-Animaux-.html / , ,' _)\ /` _) ( \ / \__ / /nn_) ( /nn__\_) ( `--' /nn__\ /nn__\
Que fait ce projet ?
Comme son nom l'indique, il s'agit d'un stand de tir avec un pistolet laser.
Liste des composants
- 1 boite en bois
- 1 plaque à trouer (pour notre projet nous avons pris du carton)
- 2 LEDs RGB par cible
- Une Arduino Nano et son câble d'alimentation USB 5V
- Une diode laser
- 3 Piles AA + un rack de 3 piles
- Le boitier de pistolet fait par imprimante 3D
- Une Photorésistance par cible (5 donc)
- Des câbles
- Une plaque Labdec
Comment refaire ce projet?
Pour le pistolet : Utiliser ces deux fichiers d'impression 3D Média:pistolet.stl et Média:Couvercle pistolet.stl et imprimer en 3D. Suite à cela, il faut poncer les bords de la rainure du couvercle pour faire rentrer celui-ci dans le boitier puis placer le laser dans le canon et le coller tout en s'assurant que le laser soit bien aligné avec le canon sinon le laser et le point visé avec le pistolet ne seront pas coïncident. Placer le bouton poussoir dans le trou prévu à cet effet (au niveau de la gâchette) puis soudé toute les câbles entre eux. (ne pas oublier de mettre le rack de piles dans la poignée et de le souder avec le système) Refermer le boiter du pistolet avec son couvercle et tous les éléments dedans en faisant bien attention à ne pas coincer les fils entre les deux. Faire attention à modifier la taille du pistolet en fonction de votre rack de piles !
Pour le stand de tir : Prendre une boîte assez grande pour contenir l'arduino, la plaque labdec et les cibles. (la taille de cette boîte va surtout dépendre du nombre de cibles que vous voulez et de l'espace entre elles).
Pour faire les cibles : Prendre deux LEDs RGBs du papier cartonné, du scotch et un pistolet à colle chaude. Avec le papier et le scotch, faire un moule pour la cible. Pour ce faire il faut tracer un cercle de 4.5cm et en gardant le même centre tracer un cercle de 2cm, ceci fait découper le plus grand cercle et recouvrir de scotch sa face avec le cercle centrale tracé (le scotch permettra de retirer le papier de la cible de colle plus facilement). Puis faire des bandelettes de papier (pour la largeur prendre 1cm de plus que la largeur de la LED RGB) et de longueur égale au périmètre du cercle voulu (sachant que les deux cercles doivent avoir une bandelette chacune). Recouvrir les bandelettes de scotch (même raison que recouvrir le disque en papier de scotch). Faire des cylindres avec les bandelettes et les scotcher au cercle en papier pour faire le moule. Découper 2 fois la bandelette extérieur pour faire des trous pour y placer les LEDs (les trous doivent être chacun d'un côté du diamètre du cercle extérieur et il faut mettre un peu de scotch pour éviter que la colle chaude coule par ces trous)
Pour utiliser le moule, il faut mettre une première couche de colle entre les deux cercles SURTOUT PAS DANS LE PLUS PETIT CERCLE puis placer les LEDs et recouvrir celles-ci de colle TOUJOURS SANS METTRE DE COLLE DANS LE PETIT CERCLE. Laisser sécher en vérifiant que cela prend bien une forme de Donut. Enfin décoller le papier et le scotch de la colle et voila votre cible! Enfin pas tout à fait, il faut encore scotcher la photorésistance au milieu du Donut de colle, une fois cela fait ça y est vous avez enfin une cible prête à être branché!
Répéter l'opération autant de fois que vous voulez de cible (les moules ne sont pas réutilisables la colle est trop puissante)
Il ne vous reste plus qu'à câbler le tout ensemble et à placer les cibles dans la plaque du matériaux utilisé (en faisant des trous dedans avant), puis refermer le carton sur la boîte. (Si vous souhaitez décorer votre stand faites les dessins avant de tout câbler ou directement par découpeuse laser lors de la fabrication de la boîte par exemple, ce sera plus facile :))
Si vous avez un problème n'hésitez surtout pas à vous débrouiller comme vous le pouvez :) Profitez en !
(Le code permet un calcul de score mais il n'y a pas de mise en place d'un affichage sur un écran)
Photos des câblages
Code
#define LDR1 A1 // composante photorésistance sur la pin A1
#define LDR2 A2 // composante photorésistance sur la pin A1
#define LDR3 A3 // composante photorésistance sur la pin A1
#define LDR4 A4 // composante photorésistance sur la pin A1
#define LDR5 A5 // composante photorésistance sur la pin A1
int value_LDR1;
int value_LDR2;
int value_LDR3;
int value_LDR4;
int value_LDR5;
int target;
int new_target;
int score;
int miss;
long T;
unsigned long previousMicros_target;
unsigned long previousMillis_score;
int actual_score;
int previous_score;
int red_light_pin1 = 2;
int green_light_pin1 = 3;
int red_light_pin2 = 11;
int green_light_pin2 = 10;
int green_on;
int orange_on;
int red_on;
void setup() {
randomSeed(analogRead(7));
Serial.begin(9600);
pinMode(LDR1, INPUT);
pinMode(LDR2, INPUT);
pinMode(LDR3, INPUT);
pinMode(LDR4, INPUT);
pinMode(LDR5, INPUT);
pinMode(red_light_pin1, OUTPUT);
pinMode(green_light_pin1, OUTPUT);
pinMode(red_light_pin2, OUTPUT);
pinMode(green_light_pin2, OUTPUT);
value_LDR1 = 0;
green_on = 0;
orange_on = 0;
red_on = 0;
T = 1000;
previousMicros_target = 0;
previousMillis_score = 0;
score = 0;
}
void loop() {
if (target == 0 or new_target == 1){
target = random(1,3);
new_target = 0;
}
unsigned long currentMicros = millis(); //attribution du temps d'éxécution du programme à une variable
value_LDR1 = analogRead(LDR1);
value_LDR2 = analogRead(LDR2);
value_LDR3 = analogRead(LDR3);
value_LDR4 = analogRead(LDR4);
value_LDR5 = analogRead(LDR5);
if (new_target == 0){
if (currentMicros - previousMicros_target >= T and green_on == 0 and orange_on == 0 and red_on == 0){
if (target == 1){
RGB_color_1(255,0);
RGB_color_2(255,255);
}
else if (target == 2){
RGB_color_2(255,0);
RGB_color_1(255,255);
}
previousMicros_target = currentMicros;
green_on = 1;
}
if (currentMicros - previousMicros_target >= T and currentMicros - previousMicros_target <= 2*T and green_on == 1 and orange_on == 0 and red_on == 0){
if (target == 1){
RGB_color_1(0,100);
}
else if (target == 2){
RGB_color_2(0,100);
}
green_on = 0;
orange_on = 1;
}
if (currentMicros - previousMicros_target >= 2*T and currentMicros - previousMicros_target <= 3*T and green_on == 0 and orange_on == 1 and red_on == 0){
if (target == 1){
RGB_color_1(0,255);
}
else if (target == 2){
RGB_color_2(0,255);
}
orange_on = 0;
red_on = 1;
}
if (currentMicros - previousMicros_target >= 3*T and currentMicros - previousMicros_target <= 4*T and green_on == 0 and orange_on == 0 and red_on == 1){
if (target == 1){
RGB_color_1(255,255);
miss = miss + 1;
new_target = 1;
}
else if (target == 2){
RGB_color_2(255,255);
miss = miss + 1;
new_target = 1;
}
red_on = 0;
}
}
if (target == 1 and value_LDR1 > 950 and currentMicros - previousMillis_score >= 100){
RGB_color_1(255,255);
new_target = 1;
green_on = 0;
orange_on = 0;
red_on = 0;
score = score + 1;
previousMillis_score = currentMicros;
}
else if (target == 2 and value_LDR2 > 950 and currentMicros - previousMillis_score >= 100){
RGB_color_1(255,255);
new_target = 1;
green_on = 0;
orange_on = 0;
red_on = 0;
score = score + 1;
previousMillis_score = currentMicros;
}
}
void RGB_color_1(int red_light_value1, int green_light_value1)
{
analogWrite(red_light_pin1, red_light_value1);
analogWrite(green_light_pin1, green_light_value1);
}
void RGB_color_2(int red_light_value2, int green_light_value2)
{
analogWrite(red_light_pin2, red_light_value2);
analogWrite(green_light_pin2, green_light_value2);
}
//void RGB_color_3(int red_light_value3, int green_light_value3, int blue_light_value3)
// {
// analogWrite(red_light_pin3, red_light_value3);
// analogWrite(green_light_pin3, green_light_value3);
// analogWrite(blue_light_pin3, blue_light_value3);
//}
//void RGB_color_4(int red_light_value4, int green_light_value4, int blue_light_value4)
// {
// analogWrite(red_light_pin4, red_light_value4);
// analogWrite(green_light_pin4, green_light_value4);
// analogWrite(blue_light_pin4, blue_light_value4);
//}
//void RGB_color_5(int red_light_value5, int green_light_value5, int blue_light_value5)
// {
// analogWrite(red_light_pin5, red_light_value5);
// analogWrite(green_light_pin5, green_light_value5);
// analogWrite(blue_light_pin5, blue_light_value5);
//}