C'est le printemps ! Fleur.gif

ENIB 2025 : Reflex Box : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
Ligne 64 : Ligne 64 :
 
[[Fichier:photo_groupe_reflex_box2.jpg|400px]]
 
[[Fichier:photo_groupe_reflex_box2.jpg|400px]]
 
===étape 4===
 
===étape 4===
[[Fichier:photo_groupe_reflex_box2.jpg|400px]]
+
[[Fichier:Decoupagecarton.png|400px]]
 
===étape 5===
 
===étape 5===
 
Nous avons finalisé la boite finale et avons fait un flyer.
 
Nous avons finalisé la boite finale et avons fait un flyer.

Version du 23 janvier 2025 à 17:20

Titre de la fiche expérience :

description (résumé)

Photo de l'équipe :

Photo groupe reflex box2.jpg

Introduction

éventuelle vidéo

outil et matériel

Lors de la construction de notre Reflexe Box, nous avons utilisé plusieurs composants :

   - 5 boutons
   - Une batterie externe
   - Une plaque Labdec
   - Un D1 Mini pour contrôler l'ensemble des composants de notre projet
   - Un DF Player MP3 pour lire la carte SD
   - Un ruban de 20 LED permettant d'afficher les scores
   - Des câbles
   - Des planches de cartons servant à confectionner l'armature

Nous avons également eu besoin de plusieurs outils :

   - Un fer à souder
   - Une découpeuse laser
   - Une pince à dénuder

fichiers à joindre

code, ficher d'impression 3D, de découpe laser ou vinyle, ...

Mettre du code Arduino

 1  
 2 #define PIN 9
 3 #include <Arduino_GFX_Library.h>
 4 
 5 void setup() {
 6   // put your setup code here, to run once:
 7 
 8 }
 9 
10 void loop() {
11   // put your main code here, to run repeatedly:
12 
13 }

étapes de fabrication

indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)

étape 1

Nous avons réfléchi à une idée puis fais un dessin de la future maquette.

Dessin maquette.png

étape 2

Après avoir dessiné la maquette, nous l'avons construite pour se faire une idée plus réelle.


Photo maquette1.jpg Photo maquette2.jpg

étape 3

Nous avons effectuer plusieurs tests afin de nous familiariser avec les composants, de les tester et de verifier quelles utilisations nous pourrons en faire. Photo groupe reflex box2.jpg

étape 4

Decoupagecarton.png

étape 5

Nous avons finalisé la boite finale et avons fait un flyer.

Logo.png Photo jules.png Flyer.png

Troubleshouting

Quelles sont les difficultés, les problèmes, les solutions, les trucs et astuces pour que ça marche ? Nous avons rencontré de nombreuses difficultés concernant l'écriture du code. De plus, il reste encore de nombreux bugs qui permettent d'ajouter beaucoup de points. Nous avons également rencontré des problèmes liés à la taille de la boîte. Celle-ci, étant assez volumineuse (50 x 30 x 10 cm), n’a pas pu être fabriquée en bois. Nous avons donc dû nous résoudre à la réaliser en carton, ce qui a malheureusement diminué sa solidité.

/*

                                    BROCHAGE                            
                               _________________                        
                              /     D1 mini     \                       
                             |[ ]RST        TX[ ]|                   
                             |[ ]A0  -GPIO  RX[ ]|                    
                             |[ ]D0-16    5-D1[X]| - data du ruban de led                    
                             |[ ]D5-14    4-D2[ ]|                     
                             |[ ]D6-12    0-D3[ ]|               
                             |[ ]D7-13    2-D4[ ]| LED_BUILTIN          
                             |[ ]D8-15     GND[X]| - masse du ruban         
                             |[ ]3V3 .      5V[X]| - Alim du ruban         
                             |       +---+       |                     
                             |_______|USB|_______|     
  • /
  1. include <SoftwareSerial.h>
  2. include <DFRobotDFPlayerMini.h>

SoftwareSerial mySoftwareSerial(14, 12); // TX, RX DFRobotDFPlayerMini myDFPlayer;

  1. include <Adafruit_NeoPixel.h>
  1. define broche 5 //D1
  2. define nbpixels 20

Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800);

  1. define delai 30

const int BPstart = 2; //D4 const int BPred1 = 15; //D8 const int BPblue1 = 4; //D2 const int BPred2 = 13; //D7 const int BPblue2 = 0; //D3

int v_compteur1 = -1; int v_compteur2 = 20; volatile int son = 0; // Utilisez volatile pour indiquer que cette variable peut être modifiée par une ISR

ICACHE_RAM_ATTR void red1() {

 if (son == 3 || son == 6) {
   v_compteur1 += 2;
   score(v_compteur1);
 } else {
   v_compteur2 -= 2;
   score(v_compteur2);
 }

}

ICACHE_RAM_ATTR void blue1() {

 if (son == 5 || son == 4) {
   v_compteur1 += 1;
   score(v_compteur1);
 } else {
   v_compteur2 -= 1;
   score(v_compteur2);
 }

}

ICACHE_RAM_ATTR void red2() {

 if (son == 3 || son == 6) {
   v_compteur2 -=2;
   score(v_compteur2);
 } else {
   v_compteur1 += 2;
   score(v_compteur1);
 }

}

ICACHE_RAM_ATTR void blue2() {

 if (son == 5 || son == 4) {
   v_compteur2 -= 1;
   score(v_compteur2);
 } else {
   v_compteur1 += 1;
   score(v_compteur1);
 }

}


void victory1() {

 for (int i = 0; i < 20; i++) {
   pixels.setPixelColor(i, pixels.Color(255, 0, 100));
 }
 pixels.show();
 delay(10000);

}

void victory2() {

 for (int i = 0; i < 20; i++) {
   pixels.setPixelColor(i, pixels.Color(255, 65, 0));
 }
 pixels.show();
 delay(10000);

}

void resetLeds() {

 v_compteur1 = -1;
 v_compteur2 = 20;
 for (int i = 0; i < 20; i++) {
   pixels.setPixelColor(i, pixels.Color(0, 0, 0));
 }
 pixels.show();

}

void score(int compteur) {

 if (compteur < 10) { // Gestion pour compteur1
   for (int i = 0; i <= compteur; i++) {
     pixels.setPixelColor(i, pixels.Color(0, 255, 0));
   }
   pixels.show();
   if (compteur == 9) {
     victory1(); // Appelle victory1() pour compteur1
     resetLeds();
   }
 } else if (compteur >= 10) { // Gestion pour compteur2
   for (int j = 19; j >= compteur; j--) {
     pixels.setPixelColor(j, pixels.Color(0, 255, 0));
   }
   pixels.show();
   if (compteur == 10) {
     victory2(); // Appelle victory2() pour compteur2
     resetLeds();
   }
 }

}


void setup() {

 pinMode(BPred1, INPUT);
 attachInterrupt(digitalPinToInterrupt(BPred1), red1, RISING);
 pinMode(BPblue1, INPUT);
 attachInterrupt(digitalPinToInterrupt(BPblue1), blue1, RISING);
 pinMode(BPred2, INPUT);
 attachInterrupt(digitalPinToInterrupt(BPred2), red2, RISING);
 pinMode(BPblue2, INPUT);
 attachInterrupt(digitalPinToInterrupt(BPblue2), blue2, RISING);
 pixels.begin();           // INITIALISE l'objet ruban NeoPixel
 pixels.show();            // Éteint tous les pixels aussi vite que possible.
 pixels.setBrightness(50); // Gère la luminosité (max = 255)
 mySoftwareSerial.begin(9600);
 myDFPlayer.begin(mySoftwareSerial);

}

void loop() {

 bool posBPred1 = digitalRead(BPred1);
 bool posBPblue1 = digitalRead(BPblue1);
 bool posBPred2 = digitalRead(BPred2);
 bool posBPblue2 = digitalRead(BPblue2);
 son = random(1, 7); // Génère un nombre aléatoire entre 1 et 6
 int attente = random(2000, 5000);
 myDFPlayer.setTimeOut(500);
 myDFPlayer.volume(30); // Fixe le volume à 30 (maximum)
 myDFPlayer.play(son);         // Joue le fichier son correspondant
 delay(attente);

}

Elément de présentation

je met ici le document de présentation de mon projet

ne pas modifier sous cette ligne