C'est l'hiver ! Hiver.gif

ENIB 2026 : sabliLED : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
 
(21 révisions intermédiaires par le même utilisateur non affichées)
Ligne 45 : Ligne 45 :
 
* logiciel Arduino
 
* logiciel Arduino
  
==fichiers à joindre==
+
 
[[Fichier:L'équipe SabliLED|200px|cadre|gauche]]
+
==Code Arduino==
===Mettre du code Arduino===
+
===Serveur===
 +
 
 
<syntaxhighlight lang="Arduino" line>  
 
<syntaxhighlight lang="Arduino" line>  
#define PIN 9
+
 
#include <Arduino_GFX_Library.h>
+
#include <WiFi.h>
 +
#include <WiFiUdp.h>
 +
 
 +
const char* ssid = "sabliLED";
 +
const char* password = "12345678";
 +
 
 +
int bp = 34;
 +
 
 +
WiFiUDP udp;
 +
const int udpPort = 12345;
 +
IPAddress broadcastIP(192, 168, 4, 255); // broadcast AP ESP32
 +
 
 +
bool lastState = false;
  
 
void setup() {
 
void setup() {
   // put your setup code here, to run once:
+
   Serial.begin(115200);
 +
  pinMode(bp, INPUT);
  
 +
  WiFi.mode(WIFI_AP);
 +
  WiFi.softAP(ssid, password);
 +
 +
  udp.begin(udpPort);
 +
 +
  Serial.println("AP lancé");
 +
  Serial.print("IP AP : ");
 +
  Serial.println(WiFi.softAPIP());
 
}
 
}
  
 
void loop() {
 
void loop() {
   // put your main code here, to run repeatedly:
+
  bool currentState = digitalRead(bp) == HIGH;
 +
 
 +
   // Envoie uniquement si changement d’état
 +
  if (currentState != lastState) {
 +
    udp.beginPacket(broadcastIP, udpPort);
 +
    udp.write(currentState ? '1' : '0');
 +
    udp.endPacket();
 +
 
 +
    Serial.print("BP envoyé : ");
 +
    Serial.println(currentState ? "HAUT" : "BAS");
 +
 
 +
    lastState = currentState;
 +
  }
  
 +
  delay(50);
 +
}
 +
</syntaxhighlight>
 +
 +
===Client===
 +
 +
<syntaxhighlight lang="Arduino" line>
 +
 +
#define FASTLED_ALLOW_INTERRUPTS 0 // Empêche le Wi-Fi de casser le signal LED
 +
#include <FastLED.h>
 +
#include <WiFi.h>
 +
#include <WiFiClient.h>
 +
#include <WiFiUdp.h>
 +
 +
 +
#define NUM_LEDS 30
 +
#define DATA_PIN 25
 +
 +
WiFiUDP udp;
 +
const int udpPort = 12345;
 +
 +
int BP_Pin = 34;
 +
int POT_Pin = 35;
 +
bool bpDistant = false;
 +
 +
CRGB leds[NUM_LEDS];
 +
 +
void setup() {
 +
  Serial.begin(115200);
 +
  delay(500);
 +
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
 +
 +
  pinMode(BP_Pin,INPUT);
 +
 +
  //partie WIFI
 +
 
 +
  WiFi.begin("sabliLED", "12345678");
 +
 +
  Serial.print("Connection en cours");
 +
  while (WiFi.status() != WL_CONNECTED) // tant que l'esp n'est pas connecté au réseau on attends
 +
  {
 +
    delay(500);
 +
    Serial.print(".");
 +
  }
 +
  Serial.println();
 +
  Serial.print("Connecté, adresse IP : ");
 +
  Serial.println(WiFi.localIP());
 +
  udp.begin(udpPort);
 +
 +
  for (int i = 0; i < NUM_LEDS; i++) {
 +
    leds[i] = CRGB::Black;
 +
  }
 +
  FastLED.show();
 +
 
 +
}
 +
void resetSablier(){
 +
    FastLED.clear();
 +
    FastLED.show();
 +
  }
 +
bool boutonAppuyer(){
 +
  if (digitalRead(BP_Pin)==HIGH){
 +
    delay(30);
 +
    return digitalRead(BP_Pin)==HIGH;
 +
  }
 +
  return false;
 +
}
 +
int lireVitesse(){
 +
  int valeur = analogRead(POT_Pin);
 +
  int vitesseMin=3000/NUM_LEDS; // à modifier pour changer le temps min
 +
  int vitesseMax=20000/NUM_LEDS; // à modifier pour changer le temps max
 +
 +
  return map(valeur,0,4095,vitesseMin,vitesseMax);
 +
}
 +
void loop() {
 +
  int packetSize = udp.parsePacket();
 +
  if (packetSize) {
 +
    char c = udp.read();
 +
    bpDistant = (c == '1');
 +
 +
    Serial.print("BP reçu : ");
 +
    Serial.println(bpDistant ? "HAUT" : "BAS");
 +
  }
 +
 +
  if (bpDistant) {
 +
  for(int y=0; y<=30;y++) {
 +
    for (int i=NUM_LEDS; i>y; i--){
 +
      uint8_t hue = map(i,0,NUM_LEDS-1,0,96);
 +
      leds[i]=CHSV(hue,255,255);
 +
      FastLED.show();
 +
      delay(lireVitesse());
 +
      leds[i]=CRGB::Black;
 +
      FastLED.show();
 +
    }
 +
    uint8_t hueBottom = map(y,0,NUM_LEDS-1,0,96);
 +
    leds[y]=CHSV(hueBottom,255,255);
 +
    FastLED.show();
 +
  }
 +
}
 
}
 
}
  
Ligne 82 : Ligne 214 :
 
Il fallait ensuite ajouter des fonctions suplémentaires : L'activation du minuteur grâce à un bouton poussoir (en local d'abord). Le changement de valeur du minuteur à l'aide d'un potentiométre.
 
Il fallait ensuite ajouter des fonctions suplémentaires : L'activation du minuteur grâce à un bouton poussoir (en local d'abord). Le changement de valeur du minuteur à l'aide d'un potentiométre.
  
 +
===étape 6===
 +
Nous avons du concevoir un support en carton en forme de sablier pour y mettre le bandeau LED dedans. Ensuite nous avons rajouter une feuille de papier blanc sur le bandeau pour avoir une lumière plus dispersée et donc un tout uniforme plutot que 30 LED indépendantes.
 +
 +
 +
[[Image:Patron.jpeg|150px]][[Image:Patronroman.jpeg|150px]]
 +
 +
longueur : 55,5 cm | largeur max : 19,5 cm
 +
 +
===étape 7===
 +
Connexon  du bouton à distance grâce a l'API
  
===Troubleshouting===
 
Quelles sont les difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
 
  
==Sources et documentation complémentaire==
 
  
* Rédаctiоn et illustratiоn : <br>
+
===Troubleshouting===
Pоur tоus vоs trаvauх, qu'ils sоient écrits оu visuels, l'utilisatiоn de l'intеlligеnce artificiеllе générativе, que сe sоit pоur le teхte оu les images, n'еst pas conseillé.
+
(Quelles sont les difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?)
  
* Prоgrammаtiоn : <br>
+
Nous avons rencontré des difficultés pour connecter la carte avec nos logiciels Arduino car il fallait bien interpréter certaines indications du wiki. De plus la carte était bien connectée mais il fallait appuyer sur le bouton "BOOT" de la ESP32 pour lancer notre code à chaque fois (difficile d'avancer sans se rendre compte de cela).
En сe qui cоncernе la prоgrаmmatiоn, il est еssentiеl de ne pаs faire dе l'IA vоtrе prеmier rеcоurs. Cоncеntrеz-vоus d'abоrd sur vоtre prоpre lоgiquе, votre experience еt lеs ressоurcеs disponibles.
 
  
* Transpаrence et dосumеntatiоn : <br>
+
Pour le support, il fallait trouver un moyen de bien fixer le bandeau tout en prenant en compte que les cables  de ce dernier sont relativement courts.
Si vоus utilisеz l'IA pоur déblоquer оu améliоrеr une pаrtiе de vоtre cоdе, il est cruciаl de l'indiquеr сlairеmеnt dans vоtre dосumentatiоn tеchniquе.
 
  
* Traçabilité : <br>
+
Nous avons également rencontré des difficultés pour connecter les 2 cartes éléctroniques entre elles.
Chаque ехtrait de cоde généré avес l'аidе de l'IA dоit êtrе accоmpagné de la sоurce, ainsi que du prоmpt eхact qui a été utilisé pоur sа créatiоn, afin d'аssurеr une évaluatiоn clаire dе vоtre prоcessus.
 
  
 
==Elément de présentation==
 
==Elément de présentation==
je met ici le document de présentation de mon projet
 
  
 
==ne pas modifier sous cette ligne==
 
==ne pas modifier sous cette ligne==
 
[[Catégorie:Enib2026]]
 
[[Catégorie:Enib2026]]

Version actuelle datée du 22 janvier 2026 à 16:36

Titre de la fiche expérience :

présentation temporaire

Diapo








Introduction (résumé)

Voilà c'est enfin le début du projet Hackaton. TROP BIEN !!! ;) Pour ce projet nous avons décidé de créer le SabliLED pour vous permettre de cuire des pattes de manière stylé. Avec son design parfait pour décorer l'intérieur de votre cuisine, vous ne serez jamais en manque de chronomètre.

l'équipe SabliLED

Descrition

Dans ce projet nous avons décidé de réaliser un sablier avec des LED. Pour cela il nous a fallut créer le cicuit électronique avec les bon composants bien cablés. Par la suite, nous avons créé un code pour faire en sorte que l'allumage des LED s'accumule en fonction du temps passé. Afin de pouvoir régler le temps du minuteur, nous avons décidé de rajouter un potentiomètre tout en adaptant le code Arduino. Pour notre API nous avons décider de réaliser une télécommande d'allumage a distance qui fonctionne en wifi. Après avoir finis l'aspect technique et pour finir le projet, nous avons réalisé l'esthétique du SabliLED qui est épuré et design.




outil et matériel

  • des cables
  • une plaque labdec
  • 2 cartes Arduino ESP 32
  • un Bandeau de LED
  • un bouton poussoir
  • votre ordinateur
  • un cable USB
  • logiciel Arduino


Code Arduino

Serveur

 1  
 2 
 3 #include <WiFi.h>
 4 #include <WiFiUdp.h>
 5 
 6 const char* ssid = "sabliLED";
 7 const char* password = "12345678";
 8 
 9 int bp = 34;
10 
11 WiFiUDP udp;
12 const int udpPort = 12345;
13 IPAddress broadcastIP(192, 168, 4, 255); // broadcast AP ESP32
14 
15 bool lastState = false;
16 
17 void setup() {
18   Serial.begin(115200);
19   pinMode(bp, INPUT);
20 
21   WiFi.mode(WIFI_AP);
22   WiFi.softAP(ssid, password);
23 
24   udp.begin(udpPort);
25 
26   Serial.println("AP lancé");
27   Serial.print("IP AP : ");
28   Serial.println(WiFi.softAPIP());
29 }
30 
31 void loop() {
32   bool currentState = digitalRead(bp) == HIGH;
33 
34   // Envoie uniquement si changement d’état
35   if (currentState != lastState) {
36     udp.beginPacket(broadcastIP, udpPort);
37     udp.write(currentState ? '1' : '0');
38     udp.endPacket();
39 
40     Serial.print("BP envoyé : ");
41     Serial.println(currentState ? "HAUT" : "BAS");
42 
43     lastState = currentState;
44   }
45 
46   delay(50);
47 }

Client

 1  
 2 
 3 #define FASTLED_ALLOW_INTERRUPTS 0 // Empêche le Wi-Fi de casser le signal LED
 4 #include <FastLED.h>
 5 #include <WiFi.h>
 6 #include <WiFiClient.h>
 7 #include <WiFiUdp.h>
 8 
 9 
10 #define NUM_LEDS 30
11 #define DATA_PIN 25
12 
13 WiFiUDP udp;
14 const int udpPort = 12345;
15 
16 int BP_Pin = 34;
17 int POT_Pin = 35;
18 bool bpDistant = false;
19 
20 CRGB leds[NUM_LEDS];
21 
22 void setup() {
23   Serial.begin(115200);
24   delay(500);
25   FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
26 
27   pinMode(BP_Pin,INPUT);
28 
29   //partie WIFI
30   
31   WiFi.begin("sabliLED", "12345678");
32 
33   Serial.print("Connection en cours");
34   while (WiFi.status() != WL_CONNECTED) // tant que l'esp n'est pas connecté au réseau on attends
35   {
36     delay(500);
37     Serial.print(".");
38   }
39   Serial.println();
40   Serial.print("Connecté, adresse IP : ");
41   Serial.println(WiFi.localIP());
42   udp.begin(udpPort);
43 
44   for (int i = 0; i < NUM_LEDS; i++) {
45     leds[i] = CRGB::Black;
46   }
47   FastLED.show();
48   
49 }
50 void resetSablier(){
51     FastLED.clear();
52     FastLED.show();
53   }
54 bool boutonAppuyer(){
55   if (digitalRead(BP_Pin)==HIGH){
56     delay(30);
57     return digitalRead(BP_Pin)==HIGH;
58   }
59   return false;
60 }
61 int lireVitesse(){
62   int valeur = analogRead(POT_Pin);
63   int vitesseMin=3000/NUM_LEDS; // à modifier pour changer le temps min
64   int vitesseMax=20000/NUM_LEDS; // à modifier pour changer le temps max
65 
66   return map(valeur,0,4095,vitesseMin,vitesseMax);
67 }
68 void loop() {
69   int packetSize = udp.parsePacket();
70   if (packetSize) {
71     char c = udp.read();
72     bpDistant = (c == '1');
73 
74     Serial.print("BP reçu : ");
75     Serial.println(bpDistant ? "HAUT" : "BAS");
76   }
77 
78   if (bpDistant) {
79   for(int y=0; y<=30;y++) {
80     for (int i=NUM_LEDS; i>y; i--){
81       uint8_t hue = map(i,0,NUM_LEDS-1,0,96);
82       leds[i]=CHSV(hue,255,255);
83       FastLED.show();
84       delay(lireVitesse());
85       leds[i]=CRGB::Black;
86       FastLED.show();
87     }
88     uint8_t hueBottom = map(y,0,NUM_LEDS-1,0,96);
89     leds[y]=CHSV(hueBottom,255,255);
90     FastLED.show();
91   }
92 }
93 }

étapes de fabrication

Présentation détaillé du projet avec tout les aspects technique

étape 1

La première étape a été d'imaginer le projet et de bien définir son aspect ludique. Nous avons dans un premier temps voulus imaginer une horloge pour jouer aux échec mais cela n'était pas en accord avec les objectifs du projet. Nous avons décider de repenser le projet de base pour fabriquer un sablier électronique.

étape 2

Avant de commencer le projet il nous fallait définir son intêret ludique. Nous avons trouvez un intéret pour les classes de maternelle et primaire notamment, pour que lors d'un exercice ou d'une évalution chronometré, tous les élèves puissent suivre l'avancée du chrono grâce au bandeau de LED accroché dans la classe. L'enseignant pourra également lancer le minuteur à distance.

étape 3

Pour passer à la conception du produit, il fallu se renseigner sur le fonctionnement de la carte ESP 32, que ce soit pour la connecter au logiciel Arduino ou pour la cabler correctement. Il a fallu aussi cabler corretement le bandeau de LED, tout cela à l'aide de la plaque labdec.

étape 4

Nous sommes ensuite passé au codage du bandeau de LED. Au départ, juste parvenir à afficher toutes les leds puis à les afficher en cascade pour symboliser le temps qui s'écoule. Après ça, il fallait ajouter l'accumluation de LED symbolisant le temps deja écoulé. La difficulté était d'avoir cette fonctionnalité tout en gradant l'écoulement du temps avec les LED. Pour finir cette étape il ne restait plus qu'à faire un dégradé de couleur du vert au rouge pour avoir un rendu plus esthétique.

étape 5

Il fallait ensuite ajouter des fonctions suplémentaires : L'activation du minuteur grâce à un bouton poussoir (en local d'abord). Le changement de valeur du minuteur à l'aide d'un potentiométre.

étape 6

Nous avons du concevoir un support en carton en forme de sablier pour y mettre le bandeau LED dedans. Ensuite nous avons rajouter une feuille de papier blanc sur le bandeau pour avoir une lumière plus dispersée et donc un tout uniforme plutot que 30 LED indépendantes.


Patron.jpegPatronroman.jpeg

longueur : 55,5 cm | largeur max : 19,5 cm

étape 7

Connexon du bouton à distance grâce a l'API


Troubleshouting

(Quelles sont les difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?)

Nous avons rencontré des difficultés pour connecter la carte avec nos logiciels Arduino car il fallait bien interpréter certaines indications du wiki. De plus la carte était bien connectée mais il fallait appuyer sur le bouton "BOOT" de la ESP32 pour lancer notre code à chaque fois (difficile d'avancer sans se rendre compte de cela).

Pour le support, il fallait trouver un moyen de bien fixer le bandeau tout en prenant en compte que les cables de ce dernier sont relativement courts.

Nous avons également rencontré des difficultés pour connecter les 2 cartes éléctroniques entre elles.

Elément de présentation

ne pas modifier sous cette ligne