C'est l'hiver ! Hiver.gif

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

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(étape 1 : conception de l'objet)
(Sources et documentation complémentaire)
Ligne 199 : Ligne 199 :
 
==Sources et documentation complémentaire==
 
==Sources et documentation complémentaire==
  
* Pour l'API :
+
* Pour l'API : <br>
  
 
https://data.rennesmetropole.fr/explore/dataset/etat-du-trafic-en-temps-reel/api/
 
https://data.rennesmetropole.fr/explore/dataset/etat-du-trafic-en-temps-reel/api/

Version du 22 janvier 2026 à 15:56

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

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

  • 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

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

ne pas modifier sous cette ligne