C'est l'hiver ! Hiver.gif

ENIB 2026 : En route ! : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(étape 4 :)
(fichiers joint)
 
(25 révisions intermédiaires par le même utilisateur non affichées)
Ligne 3 : Ligne 3 :
 
Nous sommes quatre étudiantes de troisième année à l'ENIB : l'Ecole Nationale d'Ingénieur de Brest.
 
Nous sommes quatre étudiantes de troisième année à l'ENIB : l'Ecole Nationale d'Ingénieur de Brest.
  
[[Fichier:EnRouteMaquette.jpeg|200px]]
+
[[Fichier:EnRouteEquipe.jpeg|200px]]
 +
Notre équipe de droite à gauche : Jûna, Fanny, Julie, Albane
  
 
Dans le cadre du hackathon « Hack the POCL », organisé par Les Petits Débrouillards et Les Fabriques du Ponant, nous devons rendre des données tangibles en inventant un POCL : un Petit Objet Connecté Ludique.
 
Dans le cadre du hackathon « Hack the POCL », organisé par Les Petits Débrouillards et Les Fabriques du Ponant, nous devons rendre des données tangibles en inventant un POCL : un Petit Objet Connecté Ludique.
Ligne 9 : Ligne 10 :
 
Nous avons conçus une maquette qui permet de voir en temps réel le trafic dans la métropole de Rennes. Si la voiture bouge rapidement, cela signifie que le trafic est fluide et inversement si la voiture bouge lentement.
 
Nous avons conçus une maquette qui permet de voir en temps réel le trafic dans la métropole de Rennes. Si la voiture bouge rapidement, cela signifie que le trafic est fluide et inversement si la voiture bouge lentement.
  
[[Fichier:EnRouteMaquette.jpeg|200px]]
+
[[Fichier:EnRouteMaquette2.jpeg|200px]]
  
 
==outil et matériel==
 
==outil et matériel==
Ligne 17 : Ligne 18 :
 
* un moteur continu
 
* un moteur continu
 
* un L298N Dual H-Bridge
 
* un L298N Dual H-Bridge
 +
* une batterie
 
* des câbles
 
* des câbles
  
Ligne 24 : Ligne 26 :
 
* un pistolet à colle
 
* un pistolet à colle
  
==fichiers à joindre==
+
==fichiers joint==
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
+
 
===Mettre du code Arduino===
+
===Code Arduino===
 
<syntaxhighlight lang="Arduino" line>  
 
<syntaxhighlight lang="Arduino" line>  
const int motorPin = 22; // Broche connectée à la base du transistor (via résistance)
+
#include <WiFi.h>
int i = 0;  
+
#include <WiFiClientSecure.h>
void setup() {
+
#include <HTTPClient.h>
   pinMode(motorPin, OUTPUT); // Définit la broche comme sortie
+
// Librairies additionnelles :
 +
#include <ArduinoJson.h>
 +
#include <Stepper.h>
 +
 
 +
 
 +
// ici on initialise les broches pour le moteur
 +
const int ENA = 23; 
 +
const int IN1 = 22;  
 +
const int IN2 = 21; 
 +
 
 +
 
 +
 
 +
// Fonction pour contrôler le moteur
 +
// sens = true -> horaire, false -> antihoraire
 +
// vitesse = 0 à 255
 +
void setMotor(bool sens, int vitesse) {
 +
  vitesse = constrain(vitesse, 0, 255); // Sécurité
 +
 
 +
  if (sens) {
 +
    digitalWrite(IN1, HIGH);
 +
    digitalWrite(IN2, LOW);
 +
  } else {
 +
    digitalWrite(IN1, LOW);
 +
    digitalWrite(IN2, HIGH);
 +
  }
 +
 
 +
  analogWrite(ENA, vitesse); // PWM pour vitesse
 +
}
 +
 
 +
const char* SSID = "Formation";
 +
const char* PSWD = "Apdgo29200!";
 +
 
 +
 
 +
StaticJsonDocument<200> json_parse(String json) {
 +
   StaticJsonDocument<200> doc;
 +
 
 +
  // Deserialize the JSON document
 +
  DeserializationError error = deserializeJson(doc, json);
 +
 
 +
  // Test if parsing succeeds.
 +
  if (error) {
 +
    Serial.print(F("deserializeJson() failed: "));
 +
    Serial.println(error.f_str());
 +
  }
 +
 
 +
  return doc;
 
}
 
}
  
void loop() {
+
 
    
+
void wifi_setup() {
   if (i!= 20){
+
   WiFi.begin(SSID, PSWD);
     digitalWrite(motorPin, HIGH); // Allume le moteur
+
   Serial.print("\nConnecting");
     delay(2000);                   // Attend 2 secondes
+
 
    digitalWrite(motorPin, LOW);
+
  while(WiFi.status() != WL_CONNECTED) {
    i+=1;}   // Éteint le moteur           
+
     Serial.print(".");
 +
     delay(500);
 +
  }
 +
 
 +
  Serial.println("\nConnected to the WiFi network");
 +
  Serial.print("Local ESP32 IP: ");
 +
   Serial.println(WiFi.localIP());
 
}
 
}
 +
 +
String get_http_string(String url) {
 +
  WiFiClientSecure client;
 +
  client.setInsecure();  // ignore SSL certificate (OK for APIs)
 +
 +
  HTTPClient https;
 +
  https.begin(client, url);
 +
 +
  String payload = "{}";
 +
  int httpCode = https.GET();
 +
 +
  if (httpCode > 0) {
 +
      payload = https.getString();
 +
  } else {
 +
    Serial.println("HTTP ERROR");
 +
  }
 +
 +
  https.end();
 +
  return payload;
 +
}
 +
 +
void setup(){
 +
 +
  //moteur
 +
  pinMode(ENA, OUTPUT);
 +
  pinMode(IN1, OUTPUT);
 +
  pinMode(IN2, OUTPUT);
 +
 +
  Serial.begin(9600);
 +
  int vitesse = 1;
 +
  Serial.println("on alume le moteur");
 +
  setMotor(true, vitesse); // on commence avec une vitesse faible tant qu'on a pas encore les données
 +
  wifi_setup();
 +
  char * url = "https://data.rennesmetropole.fr/api/explore/v2.1/catalog/datasets/etat-du-trafic-en-temps-reel/records?limit=20";
 +
  String json = get_http_string(url);
 +
  StaticJsonDocument doc = json_parse(json);
 +
  for (int i = 0; i < 15; i++) {
 +
      float averagevehiclespeed = doc["results"][i]["averagevehiclespeed"];
 +
      Serial.print("averagevehiclespeed ");
 +
      Serial.print(averagevehiclespeed);
 +
      Serial.print(i);
 +
      Serial.print(" : ");
 +
 +
      float v = (averagevehiclespeed*255)/130;
 +
      setMotor(true, v); // sens horaire et vitesse v
 +
      delay(10000);
 +
      Serial.print("v");
 +
      Serial.println(v);
 +
  }
 +
 +
  }
 +
 +
void loop(){
 +
 +
}
 +
  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
==étapes de fabrication==
 
==étapes de fabrication==
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
 
  
 
===étape 1 : conception de l'objet===
 
===étape 1 : conception de l'objet===
 
Faire un schéma papier aux dimensions souhaitées de la maquette.
 
Faire un schéma papier aux dimensions souhaitées de la maquette.
  
[[Fichier:En route schema.jpeg|200px]]
+
[[Fichier:EnRouteSchema.jpg|200px]]
  
 
===étape 2 : construction de la maquette===
 
===étape 2 : construction de la maquette===
Ligne 58 : Ligne 166 :
 
[[Fichier:EnRouteDecoupe.jpeg|200px]]
 
[[Fichier:EnRouteDecoupe.jpeg|200px]]
 
[[Fichier:EnRouteConstr.jpeg|200px]]
 
[[Fichier:EnRouteConstr.jpeg|200px]]
 +
[[Fichier:EnRouteMaquette2.jpeg|200px]]
  
 
===étape 3 : branchement de la carte===
 
===étape 3 : branchement de la carte===
 
Branchez la carte ESP30, le pont en H L295N et la batterie selon la photo ci-dessous.
 
Branchez la carte ESP30, le pont en H L295N et la batterie selon la photo ci-dessous.
  
[[Fichier:EnRouteDecoupe.jpeg|200px]]
+
[[Fichier:EnRoutBranchement3.JPG|300px]]
 +
[[Fichier:EnRouteL295N.png|400px]]
 +
 
 +
Il faut brancher la Pin 23 de la carte à A Enable du L295N, la Pin 22 à IN1, la Pin 21 à IN2.
 +
 
 +
Il faut branche les deux câbles du moteur à Output A.
 +
 
 +
Il faut brancher les fils rouge de la batterie à +5V Power.
  
Il faut brancher la Pin 23, 22, 21 et les masses.
+
Le reste des câbles doivent être branché à la masse.
  
 
===étape 4 : connexion ordinateur-carte===
 
===étape 4 : connexion ordinateur-carte===
Copiez le code qui est donné avant, dans la partie "fichers joints", sur le logiciel Arduino. Puis lancez le code Arduino de manière classique et appuyiez sur le bouton Boot de la carte ESP32 en même temps.
+
Copiez le code qui est donné avant, dans la partie "fichers joint", sur le logiciel Arduino. Puis lancez le code Arduino de manière classique et appuyiez sur le bouton Boot de la carte ESP32 en même temps.
 
 
===étape 5 : ===
 
  
 
===Troubleshouting===
 
===Troubleshouting===
Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
 
  
On a eu du mal à trouver des données en temps réel qui avaient un rapport avec la circulation routière.
+
On a eu du mal à trouver des données en temps réel qui avaient un rapport avec la circulation routière. Nous avons fini par en trouver non pas sur la ville de Brest mais sur la ville de Rennes.
  
On a eu beaucoup de mal à la configuration de la carte et lors de l'installation des configurations de ESP32.
+
On a eu beaucoup de mal à la configuration du logiciel Arduino pour qu'il détecte la carte. Une des solutions  que nous avons trouvé est qu'il faut appuyer sur le bouton Boot pour que le programme se lance.
  
 
==Sources et documentation complémentaire==
 
==Sources et documentation complémentaire==
  
* Rédаctiоn et illustratiоn : <br>
+
* Pour l'API : <br>
 +
https://data.rennesmetropole.fr/explore/dataset/etat-du-trafic-en-temps-reel/api/
 +
 
 
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é.  
 
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 : <br>
+
* Pour la prоgrammаtiоn : <br>
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.
+
https://shinyu.org/fr/arduino/data-formats-and-serialization/working-with-json/#google_vignette
 
 
* Transpаrence et dосumеntatiоn : <br>
 
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 aussi utilisé ChatGPT avec le prompt suivant : "Aide moi à comprendre l'erreur dans mon code au niveau du déchifrage du fihier JSON"
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==

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

Titre de la fiche expérience :

Introduction

Nous sommes quatre étudiantes de troisième année à l'ENIB : l'Ecole Nationale d'Ingénieur de Brest.

EnRouteEquipe.jpeg Notre équipe de droite à gauche : Jûna, Fanny, Julie, Albane

Dans le cadre du hackathon « Hack the POCL », organisé par Les Petits Débrouillards et Les Fabriques du Ponant, nous devons rendre des données tangibles en inventant un POCL : un Petit Objet Connecté Ludique.

Nous avons conçus une maquette qui permet de voir en temps réel le trafic dans la métropole de Rennes. Si la voiture bouge rapidement, cela signifie que le trafic est fluide et inversement si la voiture bouge lentement.

EnRouteMaquette2.jpeg

outil et matériel

le matériel

  • une carte ESP32
  • une plaque labdec
  • un moteur continu
  • un L298N Dual H-Bridge
  • une batterie
  • des câbles

les outils

  • du carton
  • un cutter
  • un pistolet à colle

fichiers joint

Code Arduino

  1  
  2 #include <WiFi.h>
  3 #include <WiFiClientSecure.h>
  4 #include <HTTPClient.h>
  5 // Librairies additionnelles :
  6 #include <ArduinoJson.h>
  7 #include <Stepper.h>
  8 
  9 
 10 // ici on initialise les broches pour le moteur
 11 const int ENA = 23;   
 12 const int IN1 = 22;   
 13 const int IN2 = 21;   
 14 
 15 
 16 
 17 // Fonction pour contrôler le moteur
 18 // sens = true -> horaire, false -> antihoraire
 19 // vitesse = 0 à 255
 20 void setMotor(bool sens, int vitesse) {
 21   vitesse = constrain(vitesse, 0, 255); // Sécurité
 22 
 23   if (sens) {
 24     digitalWrite(IN1, HIGH);
 25     digitalWrite(IN2, LOW);
 26   } else {
 27     digitalWrite(IN1, LOW);
 28     digitalWrite(IN2, HIGH);
 29   }
 30 
 31   analogWrite(ENA, vitesse); // PWM pour vitesse
 32 }
 33 
 34 const char* SSID = "Formation";
 35 const char* PSWD = "Apdgo29200!";
 36 
 37 
 38 StaticJsonDocument<200> json_parse(String json) {
 39   StaticJsonDocument<200> doc;
 40 
 41   // Deserialize the JSON document
 42   DeserializationError error = deserializeJson(doc, json);
 43 
 44   // Test if parsing succeeds.
 45   if (error) {
 46     Serial.print(F("deserializeJson() failed: "));
 47     Serial.println(error.f_str());
 48   }
 49 
 50   return doc;
 51 }
 52 
 53 
 54 void wifi_setup() {
 55   WiFi.begin(SSID, PSWD);
 56   Serial.print("\nConnecting");
 57 
 58   while(WiFi.status() != WL_CONNECTED) {
 59     Serial.print(".");
 60     delay(500);
 61   }
 62 
 63   Serial.println("\nConnected to the WiFi network");
 64   Serial.print("Local ESP32 IP: ");
 65   Serial.println(WiFi.localIP());
 66 }
 67 
 68 String get_http_string(String url) {
 69   WiFiClientSecure client;
 70   client.setInsecure();   // ignore SSL certificate (OK for APIs)
 71 
 72   HTTPClient https;
 73   https.begin(client, url);
 74 
 75   String payload = "{}";
 76   int httpCode = https.GET();
 77 
 78   if (httpCode > 0) {
 79       payload = https.getString();
 80   } else {
 81     Serial.println("HTTP ERROR");
 82   }
 83 
 84   https.end();
 85   return payload;
 86 }
 87 
 88 void setup(){
 89 
 90   //moteur
 91   pinMode(ENA, OUTPUT);
 92   pinMode(IN1, OUTPUT);
 93   pinMode(IN2, OUTPUT);
 94 
 95   Serial.begin(9600);
 96   int vitesse = 1;
 97   Serial.println("on alume le moteur");
 98   setMotor(true, vitesse); // on commence avec une vitesse faible tant qu'on a pas encore les données
 99   wifi_setup();
100   char * url = "https://data.rennesmetropole.fr/api/explore/v2.1/catalog/datasets/etat-du-trafic-en-temps-reel/records?limit=20";
101   String json = get_http_string(url);
102   StaticJsonDocument doc = json_parse(json);
103   for (int i = 0; i < 15; i++) {
104       float averagevehiclespeed = doc["results"][i]["averagevehiclespeed"];
105       Serial.print("averagevehiclespeed ");
106       Serial.print(averagevehiclespeed);
107       Serial.print(i);
108       Serial.print(" : ");
109 
110       float v = (averagevehiclespeed*255)/130;
111       setMotor(true, v); // sens horaire et vitesse v
112       delay(10000);
113       Serial.print("v");
114       Serial.println(v);
115   } 
116  
117   }
118 
119 void loop(){
120 
121 }

étapes de fabrication

étape 1 : conception de l'objet

Faire un schéma papier aux dimensions souhaitées de la maquette.

EnRouteSchema.jpg

étape 2 : construction de la maquette

Construire la maquette suivant les photos ci-dessous.

EnRouteDecoupe.jpeg EnRouteConstr.jpeg EnRouteMaquette2.jpeg

étape 3 : branchement de la carte

Branchez la carte ESP30, le pont en H L295N et la batterie selon la photo ci-dessous.

EnRoutBranchement3.JPG EnRouteL295N.png

Il faut brancher la Pin 23 de la carte à A Enable du L295N, la Pin 22 à IN1, la Pin 21 à IN2.

Il faut branche les deux câbles du moteur à Output A.

Il faut brancher les fils rouge de la batterie à +5V Power.

Le reste des câbles doivent être branché à la masse.

étape 4 : connexion ordinateur-carte

Copiez le code qui est donné avant, dans la partie "fichers joint", sur le logiciel Arduino. Puis lancez le code Arduino de manière classique et appuyiez sur le bouton Boot de la carte ESP32 en même temps.

Troubleshouting

On a eu du mal à trouver des données en temps réel qui avaient un rapport avec la circulation routière. Nous avons fini par en trouver non pas sur la ville de Brest mais sur la ville de Rennes.

On a eu beaucoup de mal à la configuration du logiciel Arduino pour qu'il détecte la carte. Une des solutions que nous avons trouvé est qu'il faut appuyer sur le bouton Boot pour que le programme se lance.

Sources et documentation complémentaire

  • Pour l'API :

https://data.rennesmetropole.fr/explore/dataset/etat-du-trafic-en-temps-reel/api/

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é.

  • Pour la prоgrammаtiоn :

https://shinyu.org/fr/arduino/data-formats-and-serialization/working-with-json/#google_vignette

Nous avons aussi utilisé ChatGPT avec le prompt suivant : "Aide moi à comprendre l'erreur dans mon code au niveau du déchifrage du fihier JSON"

Elément de présentation

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

ne pas modifier sous cette ligne