ENIB 2025 : Reflex Box : Différence entre versions
Ligne 64 : | Ligne 64 : | ||
[[Fichier:photo_groupe_reflex_box2.jpg|400px]] | [[Fichier:photo_groupe_reflex_box2.jpg|400px]] | ||
===étape 4=== | ===étape 4=== | ||
− | [[Fichier: | + | [[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 :
Sommaire
[masquer]description (résumé)
Photo de l'équipe :
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.
étape 2
Après avoir dessiné la maquette, nous l'avons construite pour se faire une idée plus réelle.
é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.
étape 4
étape 5
Nous avons finalisé la boite finale et avons fait un flyer.
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|_______|
- /
- include <SoftwareSerial.h>
- include <DFRobotDFPlayerMini.h>
SoftwareSerial mySoftwareSerial(14, 12); // TX, RX DFRobotDFPlayerMini myDFPlayer;
- include <Adafruit_NeoPixel.h>
- define broche 5 //D1
- define nbpixels 20
Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800);
- 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