ENIB 2026 : En route ! : Différence entre versions
(→Sources et documentation complémentaire) |
(→fichiers joint) |
||
| Ligne 42 : | Ligne 42 : | ||
const int IN1 = 22; | const int IN1 = 22; | ||
const int IN2 = 21; | const int IN2 = 21; | ||
| − | |||
| − | |||
| Ligne 146 : | Ligne 144 : | ||
Serial.println(v); | Serial.println(v); | ||
} | } | ||
| − | + | ||
| − | |||
} | } | ||
void loop(){ | void loop(){ | ||
| − | |||
} | } | ||
| − | |||
| − | |||
Version actuelle datée du 22 janvier 2026 à 16:10
Titre de la fiche expérience :
Sommaire
Introduction
Nous sommes quatre étudiantes de troisième année à l'ENIB : l'Ecole Nationale d'Ingénieur de Brest.
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.
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.
étape 2 : construction de la maquette
Construire la maquette suivant les photos ci-dessous.
étape 3 : branchement de la carte
Branchez la carte ESP30, le pont en H L295N et la batterie selon la photo ci-dessous.
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