ENIB 2026 : Giroupète : Différence entre versions
(→Sources et documentation complémentaire) |
|||
| (23 révisions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 11 : | Ligne 11 : | ||
==Description du projet== | ==Description du projet== | ||
| − | La giroupète est un POCL conçu lors du hackaton ENIB de 2026. Il consiste en un jeu en "un contre un | + | La giroupète est un POCL conçu lors du hackaton ENIB de 2026. Il consiste en un jeu en "un contre un" dont l'objectif est de percer le ballon adversaire (d'où "pète"). Il faut manoeuvrer un baton pour défendre son ballon et attaquer celui de l'adversaire. Un bouton enclenche le moteur qui fait un mouvement de 180°. Si le ballon est dans la trajectoire du bras du moteur : il sera percé. En effet, le bras est directement relié à une pointe visant à percer. |
Spécificité supplémentaire : la vitesse du moteur est contrôlé par la vitesse du vent à Brest. Ainsi, plus les rafales sont grandes, plus le bras sera rapide. | Spécificité supplémentaire : la vitesse du moteur est contrôlé par la vitesse du vent à Brest. Ainsi, plus les rafales sont grandes, plus le bras sera rapide. | ||
| − | [[Fichier:Giroupete maquette.jpg| | + | [[Fichier:Giroupete maquette.jpg|300px]] |
| − | == | + | ==Outils et matériel== |
| + | * Carton | ||
| + | * Colle | ||
| + | * Cutter | ||
| + | * 2 boutons poussoirs | ||
| + | * 1 ESP32 | ||
| + | * 2 moteurs SG90 | ||
| − | == | + | ==Fichiers== |
| − | + | ===Code Arduino=== | |
| − | === | ||
<syntaxhighlight lang="Arduino" line> | <syntaxhighlight lang="Arduino" line> | ||
#define PIN 9 | #define PIN 9 | ||
#include <Arduino_GFX_Library.h> | #include <Arduino_GFX_Library.h> | ||
| + | #include <WiFi.h> | ||
| + | #include <HTTPClient.h> | ||
| + | #include <ArduinoJson.h> | ||
| + | #include <ESP32Servo.h> | ||
| − | + | const char* ssid = "FABLAB 2.4"; | |
| − | + | const char* password = "MonPetitPonant"; | |
| + | const char* ville = "Paris,FR"; | ||
| + | const char* apiKey = "06661f569132eb326f940c96da9e0d84"; | ||
| + | |||
| + | Servo monServo; | ||
| + | int servoPin = 27; | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | monServo.attach(servoPin); | ||
| + | monServo.write(0); | ||
| + | |||
| + | WiFi.begin(ssid, password); | ||
| + | Serial.print("Connexion WiFi"); | ||
| + | while(WiFi.status() != WL_CONNECTED){ | ||
| + | delay(500); | ||
| + | Serial.print("."); | ||
| + | } | ||
| + | Serial.println("Connecté !"); | ||
} | } | ||
void loop() { | void loop() { | ||
| − | // | + | if(WiFi.status() == WL_CONNECTED){ |
| + | HTTPClient http; | ||
| + | String url = "http://api.openweathermap.org/data/2.5/weather?q=" + String(ville) + "&appid=" + apiKey + "&units=metric"; | ||
| + | http.begin(url); | ||
| + | int httpCode = http.GET(); | ||
| + | |||
| + | if(httpCode == 200){ | ||
| + | String payload = http.getString(); | ||
| + | StaticJsonDocument<1024> doc; | ||
| + | deserializeJson(doc, payload); | ||
| + | float vent = doc["wind"]["speed"]; // vitesse du vent en m/s | ||
| + | Serial.print("Vent actuel (m/s): "); | ||
| + | Serial.println(vent); | ||
| + | |||
| + | // Mapping vent → angle servo | ||
| + | int angle = map((int)(vent*10), 0, 200, 0, 180); | ||
| + | angle = constrain(angle, 0, 180); | ||
| + | monServo.write(angle); | ||
| + | } else { | ||
| + | Serial.println("Erreur HTTP"); | ||
| + | } | ||
| − | } | + | http.end(); |
| + | } | ||
| + | delay(5000); // update toutes les 5s | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | == | + | ==Etapes de fabrication== |
| − | + | ===Construction du plateau=== | |
| + | * Faire une base en carton pour le plateau de 25x25cm | ||
| + | * Ajouter des lignes en carton de 3x25cm sur les deux bords opposés de la base | ||
| + | * Ajouter des lignes en carton de 3x25cm sur les autres bords de façon à les superposer en partie aux autres | ||
| + | Résultats attendus : Base avec bordure, il y a de deux des côtés (face à face) un espace dans lequel pourront s'insérer les batons | ||
| + | <br> | ||
| + | [[Fichier:Giroupete plateau.jpg|200px]] | ||
| + | |||
| + | ===Construction des bras=== | ||
| + | * Faire deux lignes de carton de 2.5x20cm (qui serviront de bras) | ||
| + | * Ajouter un morceau de carton de 2.5x2.5cm à environ 6cm d'une des extrémités de chaque ligne de carton | ||
| + | Résultats attendus : Bras avec poignée et qui peut s'insérer dans le plateau | ||
| + | <br> | ||
| + | [[Fichier:Giroupete bras.jpg|200px]] | ||
| + | |||
| + | ===Assemblage final=== | ||
| + | * Insérer les bras dans l'espace prévu dans le plateau (on a la partie la plus petite du bras qui en dépasse) | ||
| + | * Accrocher les moteurs au bout du bras (sur la partie intérieure) | ||
| + | * Accrocher un fil de fer de 6-8cm au bras du moteur | ||
| + | Résultats attendus : Plateau avec les bras, prêts pour le combat | ||
| + | <br> | ||
| + | [[Fichier:Giroupete assemblage final.jpg|200px]] | ||
| − | === | + | ===Cablage=== |
| − | + | [[Fichier:Giroupete cablage.jpg|400px]] | |
| − | |||
| − | |||
| − | |||
==Sources et documentation complémentaire== | ==Sources et documentation complémentaire== | ||
| Ligne 61 : | Ligne 128 : | ||
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. | 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==< |
| + | Diapo de la première présentation : | ||
| + | <br> | ||
[[Fichier:Giroupete diapo.jpg|200px]] | [[Fichier:Giroupete diapo.jpg|200px]] | ||
| + | <br> | ||
| + | Diapo pour la deuxième présentation | ||
| + | <br> | ||
| + | [[Fichier:Giroupete diapo1.jpg|200px]] | ||
| + | [[Fichier:Giroupete diapo2.jpg|200px]] | ||
| + | [[Fichier:Giroupete diapo3.jpg|200px]] | ||
==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 à 15:57
vignette Titre de la fiche expérience :
Sommaire
Notre équipe
Nous avons conçu ce projet à quatre lors du hackaton ENIB-Les petits débrouillards de 2026 :
- Gueguen Samuel
- Gruson Malo
- Gobichon Raphaël
- Benard Théo
Description du projet
La giroupète est un POCL conçu lors du hackaton ENIB de 2026. Il consiste en un jeu en "un contre un" dont l'objectif est de percer le ballon adversaire (d'où "pète"). Il faut manoeuvrer un baton pour défendre son ballon et attaquer celui de l'adversaire. Un bouton enclenche le moteur qui fait un mouvement de 180°. Si le ballon est dans la trajectoire du bras du moteur : il sera percé. En effet, le bras est directement relié à une pointe visant à percer.
Spécificité supplémentaire : la vitesse du moteur est contrôlé par la vitesse du vent à Brest. Ainsi, plus les rafales sont grandes, plus le bras sera rapide.
Outils et matériel
- Carton
- Colle
- Cutter
- 2 boutons poussoirs
- 1 ESP32
- 2 moteurs SG90
Fichiers
Code Arduino
1
2 #define PIN 9
3 #include <Arduino_GFX_Library.h>
4 #include <WiFi.h>
5 #include <HTTPClient.h>
6 #include <ArduinoJson.h>
7 #include <ESP32Servo.h>
8
9 const char* ssid = "FABLAB 2.4";
10 const char* password = "MonPetitPonant";
11
12 const char* ville = "Paris,FR";
13 const char* apiKey = "06661f569132eb326f940c96da9e0d84";
14
15 Servo monServo;
16 int servoPin = 27;
17
18 void setup() {
19 Serial.begin(115200);
20 monServo.attach(servoPin);
21 monServo.write(0);
22
23 WiFi.begin(ssid, password);
24 Serial.print("Connexion WiFi");
25 while(WiFi.status() != WL_CONNECTED){
26 delay(500);
27 Serial.print(".");
28 }
29 Serial.println("Connecté !");
30 }
31
32 void loop() {
33 if(WiFi.status() == WL_CONNECTED){
34 HTTPClient http;
35 String url = "http://api.openweathermap.org/data/2.5/weather?q=" + String(ville) + "&appid=" + apiKey + "&units=metric";
36 http.begin(url);
37 int httpCode = http.GET();
38
39 if(httpCode == 200){
40 String payload = http.getString();
41 StaticJsonDocument<1024> doc;
42 deserializeJson(doc, payload);
43 float vent = doc["wind"]["speed"]; // vitesse du vent en m/s
44 Serial.print("Vent actuel (m/s): ");
45 Serial.println(vent);
46
47 // Mapping vent → angle servo
48 int angle = map((int)(vent*10), 0, 200, 0, 180);
49 angle = constrain(angle, 0, 180);
50 monServo.write(angle);
51 } else {
52 Serial.println("Erreur HTTP");
53 }
54
55 http.end();
56 }
57 delay(5000); // update toutes les 5s
Etapes de fabrication
Construction du plateau
- Faire une base en carton pour le plateau de 25x25cm
- Ajouter des lignes en carton de 3x25cm sur les deux bords opposés de la base
- Ajouter des lignes en carton de 3x25cm sur les autres bords de façon à les superposer en partie aux autres
Résultats attendus : Base avec bordure, il y a de deux des côtés (face à face) un espace dans lequel pourront s'insérer les batons
Construction des bras
- Faire deux lignes de carton de 2.5x20cm (qui serviront de bras)
- Ajouter un morceau de carton de 2.5x2.5cm à environ 6cm d'une des extrémités de chaque ligne de carton
Résultats attendus : Bras avec poignée et qui peut s'insérer dans le plateau
Assemblage final
- Insérer les bras dans l'espace prévu dans le plateau (on a la partie la plus petite du bras qui en dépasse)
- Accrocher les moteurs au bout du bras (sur la partie intérieure)
- Accrocher un fil de fer de 6-8cm au bras du moteur
Résultats attendus : Plateau avec les bras, prêts pour le combat
Cablage
Sources et documentation complémentaire
- Rédаctiоn et illustratiоn :
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é.
- Prоgrammаtiоn :
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 :
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é :
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==<
Diapo de la première présentation :
Diapo pour la deuxième présentation