ENIB 2026 : Not a Clock : Différence entre versions
(→Troubleshouting) |
(→Sources et documentation complémentaire) |
||
| (12 révisions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 39 : | Ligne 39 : | ||
==fichiers à joindre== | ==fichiers à joindre== | ||
| − | |||
| − | |||
<syntaxhighlight lang="Arduino" line> | <syntaxhighlight lang="Arduino" line> | ||
| − | # | + | #include <WiFi.h> |
| − | #include < | + | #include <HTTPClient.h> |
| + | #include <ArduinoJson.h> | ||
| + | const int nbBoutons = 5; | ||
| + | |||
| + | // ===== WIFI ===== | ||
| + | const char* ssid = "MiMi mathis"; | ||
| + | const char* password = "12345678"; | ||
| + | |||
| + | // ===== API ===== | ||
| + | const char* apiKey = "8bcc1435ae4d44bda0290441262201"; | ||
| + | |||
| + | // ===== BOUTONS ===== | ||
| + | int boutons[nbBoutons] = {13, 12, 14, 27, 26}; | ||
| + | |||
| + | // ===== LEDS ROUGES (VILLES) ===== | ||
| + | int ledsVille[nbBoutons] = {32, 33, 16, 17, 18}; | ||
| + | |||
| + | // ===== LEDS JOUR / NUIT ===== | ||
| + | int ledJour = 19; | ||
| + | int ledNuit = 21; | ||
| + | |||
| + | // ===== VILLES ===== | ||
| + | String villes[nbBoutons] = {"Paris", "Los Angeles", "Tokyo", "Dubai", "Moscow"}; | ||
| + | |||
| + | bool etatBoutonAvant[nbBoutons]; | ||
| + | int villeActive = -1; | ||
| + | |||
| + | // ================= MOTEUR =================== | ||
| + | // Pins moteur | ||
| + | #define IN1 15 | ||
| + | #define IN2 2 | ||
| + | #define IN3 0 | ||
| + | #define IN4 4 | ||
| + | |||
| + | int Steps = 0; | ||
| + | |||
| + | // Angles pour les villes | ||
| + | int anglesVilles[nbBoutons] = {0, -120, 140, 60, 30}; // Paris, LA, Tokyo, Dubai, Moscow | ||
| + | int pasParTour = 2048; // 28BYJ-48 | ||
| + | int pasParDegre = pasParTour / 360; | ||
| + | |||
| + | // Fonction qui convertit l'index de ville en mouvement moteur | ||
| + | void allerVille(int index) { | ||
| + | int angleCible = anglesVilles[index]; | ||
| + | int deltaAngle = angleCible - Steps; // on réutilise Steps comme position | ||
| + | int nbPas = deltaAngle * pasParDegre; | ||
| + | |||
| + | stepper(nbPas); // ta fonction stepper existante | ||
| + | Steps = angleCible; // mettre à jour la position | ||
| + | } | ||
| + | |||
| + | // Fonction stepper existante | ||
| + | void stepper(double nbStep){ | ||
| + | int Direction; | ||
| + | if(nbStep>=0){ Direction=1; } | ||
| + | else { Direction=0; nbStep=-nbStep; } | ||
| + | |||
| + | for (int x=0; x<nbStep*8; x++){ | ||
| + | switch(Steps){ | ||
| + | case 0: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; | ||
| + | case 1: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); break; | ||
| + | case 2: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; | ||
| + | case 3: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; | ||
| + | case 4: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; | ||
| + | case 5: digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; | ||
| + | case 6: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; | ||
| + | case 7: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; | ||
| + | } | ||
| + | delayMicroseconds(1000); | ||
| + | if(Direction==1){ Steps++; } | ||
| + | if(Direction==0){ Steps--; } | ||
| + | if(Steps>7){ Steps=0; } | ||
| + | if(Steps<0){ Steps=7; } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // ================= SETUP ================= | ||
void setup() { | void setup() { | ||
| − | // | + | Serial.begin(115200); |
| + | |||
| + | for (int i = 0; i < nbBoutons; i++) { | ||
| + | pinMode(boutons[i], INPUT_PULLUP); | ||
| + | pinMode(ledsVille[i], OUTPUT); | ||
| + | digitalWrite(ledsVille[i], LOW); | ||
| + | etatBoutonAvant[i] = HIGH; | ||
| + | } | ||
| + | |||
| + | pinMode(ledJour, OUTPUT); | ||
| + | pinMode(ledNuit, OUTPUT); | ||
| + | digitalWrite(ledJour, LOW); | ||
| + | digitalWrite(ledNuit, LOW); | ||
| + | |||
| + | pinMode(IN1, OUTPUT); | ||
| + | pinMode(IN2, OUTPUT); | ||
| + | pinMode(IN3, OUTPUT); | ||
| + | pinMode(IN4, OUTPUT); | ||
| + | |||
| + | WiFi.begin(ssid, password); | ||
| + | Serial.print("Connexion WiFi"); | ||
| + | while (WiFi.status() != WL_CONNECTED) { | ||
| + | delay(500); | ||
| + | Serial.print("."); | ||
| + | } | ||
| + | Serial.println("\nWiFi connecté !"); | ||
| + | } | ||
| + | |||
| + | // =============== LEDS ROUGES =============== | ||
| + | void allumerVille(int index) { | ||
| + | // Éteindre toutes les LEDs rouges | ||
| + | for (int i = 0; i < nbBoutons; i++) { | ||
| + | digitalWrite(ledsVille[i], LOW); | ||
| + | } | ||
| + | |||
| + | // Allumer la bonne LED | ||
| + | digitalWrite(ledsVille[index], HIGH); | ||
| + | villeActive = index; | ||
| + | Serial.println("LED ville allumée : " + villes[index]); | ||
| + | // → Tourner le globe | ||
| + | allerVille(index); | ||
} | } | ||
| + | // =============== API JOUR / NUIT =========== | ||
| + | bool estJour(String ville) { | ||
| + | HTTPClient http; | ||
| + | String url = "http://api.weatherapi.com/v1/current.json?key=" + | ||
| + | String(apiKey) + "&q=" + ville; | ||
| + | |||
| + | http.begin(url); | ||
| + | int httpCode = http.GET(); | ||
| + | |||
| + | if (httpCode == 200) { | ||
| + | DynamicJsonDocument doc(2048); | ||
| + | deserializeJson(doc, http.getString()); | ||
| + | http.end(); | ||
| + | return doc["current"]["is_day"] == 1; | ||
| + | } | ||
| + | |||
| + | http.end(); | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | void gererJourNuit(int index) { | ||
| + | digitalWrite(ledJour, LOW); | ||
| + | digitalWrite(ledNuit, LOW); | ||
| + | |||
| + | bool jour = estJour(villes[index]); | ||
| + | |||
| + | if (jour) { | ||
| + | digitalWrite(ledJour, HIGH); | ||
| + | Serial.println("→ JOUR"); | ||
| + | } else { | ||
| + | digitalWrite(ledNuit, HIGH); | ||
| + | Serial.println("→ NUIT"); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // =============== BOUTONS =================== | ||
| + | void gererBoutons() { | ||
| + | for (int i = 0; i < nbBoutons; i++) { | ||
| + | bool etatBouton = digitalRead(boutons[i]); | ||
| + | |||
| + | if (etatBouton == LOW && etatBoutonAvant[i] == HIGH) { | ||
| + | |||
| + | // Même bouton → tout éteindre | ||
| + | if (villeActive == i) { | ||
| + | digitalWrite(ledsVille[i], LOW); | ||
| + | digitalWrite(ledJour, LOW); | ||
| + | digitalWrite(ledNuit, LOW); | ||
| + | villeActive = -1; | ||
| + | Serial.println("Extinction"); | ||
| + | } | ||
| + | else { | ||
| + | allumerVille(i); | ||
| + | gererJourNuit(i); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | etatBoutonAvant[i] = etatBouton; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // ================= LOOP ==================== | ||
void loop() { | void loop() { | ||
| − | + | gererBoutons(); | |
| + | delay(50); | ||
| + | } | ||
| − | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==étapes de fabrication== | ==étapes de fabrication== | ||
| − | + | ||
===étape 1 : Définition du concept=== | ===étape 1 : Définition du concept=== | ||
| Ligne 85 : | Ligne 261 : | ||
===Troubleshouting=== | ===Troubleshouting=== | ||
| − | + | '''1. Le système ne réagit pas à l’appui sur le bouton''' | |
Problème : aucune action visible (globe, LED). | Problème : aucune action visible (globe, LED). | ||
| Ligne 95 : | Ligne 271 : | ||
Astuce : afficher en debug la ville sélectionnée après chaque appui. | Astuce : afficher en debug la ville sélectionnée après chaque appui. | ||
| − | + | '''2. Le globe ne tourne pas ou mal''' | |
Problème : rotation bloquée, imprécise ou saccadée. | Problème : rotation bloquée, imprécise ou saccadée. | ||
| Ligne 104 : | Ligne 280 : | ||
Astuce : tester la rotation sans charge avant montage final. | Astuce : tester la rotation sans charge avant montage final. | ||
| + | |||
| + | '''3. Retard entre l’action et la réponse du système''' | ||
| + | |||
| + | Problème : temps d’attente après appui sur le bouton. | ||
| + | |||
| + | Causes possibles : latence de l’API ou traitement bloquant dans le code. | ||
| + | |||
| + | Solutions : structurer le programme en étapes (attente, requête, affichage). | ||
| + | |||
| + | Astuce : conserver la dernière donnée valide si l’API met trop de temps à répondre. | ||
| + | |||
| + | '''4. Erreurs aléatoires ou comportement incohérent''' | ||
| + | |||
| + | Problème : résultats différents pour la même ville. | ||
| + | |||
| + | Causes possibles : données API non gérées en cas d’erreur ou réponse incomplète. | ||
| + | |||
| + | Solutions : sécuriser le traitement des données reçues. | ||
| + | |||
| + | Astuce : toujours prévoir un cas « erreur API ». | ||
| + | |||
| + | '''5. Problèmes à l’intégration finale''' | ||
| + | |||
| + | Problème : tout fonctionne séparément mais pas ensemble. | ||
| + | |||
| + | Causes possibles : interférences, manque de place, câbles mal positionnés. | ||
| + | |||
| + | Solutions : revoir l’organisation interne de la boîte. | ||
| + | |||
| + | Astuce : intégrer progressivement et tester après chaque étape. | ||
==Sources et documentation complémentaire== | ==Sources et documentation complémentaire== | ||
| + | '''Pour construire le Globe en papier :''' | ||
| − | + | [[Media:Le-paper-globe-A4-fr.pdf|Télécharger Globe en papier]] | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | '''Prompt Chatgpt pour relier le code qui fais tourner le moteur et celui qui allume les leds :''' | |
| − | |||
| − | + | Relie ce code afin que lorsqu'on presse un bouton poussoir le moteur tourne de X degrés | |
| − | |||
==Elément de présentation== | ==Elément de présentation== | ||
| − | + | '''Vue de face''' | |
| + | [[Fichier:Vuedeface.jpg|200px]] | ||
| + | '''Vue de face papier''' | ||
| + | [[Fichier:Vuedefacepapier.jpg|200px]] | ||
| + | '''Vue de haut''' | ||
| + | [[Fichier:Vuedehaut.jpg|200px]] | ||
| + | '''Vue de haut papier''' | ||
| + | [[Fichier:Vuedehautpapier.jpg|200px]] | ||
| + | <br />'''Premier Brouillon''' | ||
| + | [[Fichier:Premierbrouillon.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:41
Titre de la fiche expérience :
Sommaire
- 1 description
- 2 Introduction
- 3 outil et matériel
- 4 fichiers à joindre
- 5 étapes de fabrication
- 5.1 étape 1 : Définition du concept
- 5.2 étape 2 : Répartition des rôles
- 5.3 étape 3 : Conception du système
- 5.4 étape 4 : Choix des composants
- 5.5 étape 5 : Fabrication de la structure
- 5.6 étape 6 : Programmation
- 5.7 étape 7 : Intégration et câblage
- 5.8 étape 8 : Tests et ajustements
- 5.9 Troubleshouting
- 6 Sources et documentation complémentaire
- 7 Elément de présentation
- 8 ne pas modifier sous cette ligne
description
Nous sommes quatre étudiants de l’ENIB travaillant ensemble sur un projet commun. Nous avons conçu un objet interactif mêlant électronique, mécanique et programmation. Le projet repose sur un travail d’équipe et une répartition claire des tâches. Il nous permet de mettre en pratique nos compétences techniques acquises en formation.
Titouan Le Bot, Mathis Laurent,
Malou Le Goff, Mathis Mouellic
Introduction
Notre projet consiste à concevoir une boîte interactive permettant de découvrir l’état du jour et de la nuit dans différentes villes du monde de manière ludique et visuelle.
Le dispositif propose le choix entre cinq villes prédéfinies. À l’aide d’un bouton de sélection, l’utilisateur choisit une ville. Une fois la sélection effectuée, un globe terrestre en papier se met en rotation afin de pointer visuellement la ville correspondante sur le globe, renforçant ainsi la dimension pédagogique et géographique du projet.
En parallèle, un système de LED informe l’utilisateur sur la situation temporelle de la ville choisie :
une LED s’allume pour indiquer s’il fait jour,
une autre signale s’il fait nuit.
outil et matériel
-7 LEDs
-Cartons
-Feuilles bris
tols
-Scotch
-Cutter
-Compas
-Ordinateur
-Stylo
-Règle
-Bouton
-résistance
-Jumper
-Cable
-Moteur pas à pas
fichiers à joindre
1
2 #include <WiFi.h>
3 #include <HTTPClient.h>
4 #include <ArduinoJson.h>
5
6 const int nbBoutons = 5;
7
8 // ===== WIFI =====
9 const char* ssid = "MiMi mathis";
10 const char* password = "12345678";
11
12 // ===== API =====
13 const char* apiKey = "8bcc1435ae4d44bda0290441262201";
14
15 // ===== BOUTONS =====
16 int boutons[nbBoutons] = {13, 12, 14, 27, 26};
17
18 // ===== LEDS ROUGES (VILLES) =====
19 int ledsVille[nbBoutons] = {32, 33, 16, 17, 18};
20
21 // ===== LEDS JOUR / NUIT =====
22 int ledJour = 19;
23 int ledNuit = 21;
24
25 // ===== VILLES =====
26 String villes[nbBoutons] = {"Paris", "Los Angeles", "Tokyo", "Dubai", "Moscow"};
27
28 bool etatBoutonAvant[nbBoutons];
29 int villeActive = -1;
30
31 // ================= MOTEUR ===================
32 // Pins moteur
33 #define IN1 15
34 #define IN2 2
35 #define IN3 0
36 #define IN4 4
37
38 int Steps = 0;
39
40 // Angles pour les villes
41 int anglesVilles[nbBoutons] = {0, -120, 140, 60, 30}; // Paris, LA, Tokyo, Dubai, Moscow
42 int pasParTour = 2048; // 28BYJ-48
43 int pasParDegre = pasParTour / 360;
44
45 // Fonction qui convertit l'index de ville en mouvement moteur
46 void allerVille(int index) {
47 int angleCible = anglesVilles[index];
48 int deltaAngle = angleCible - Steps; // on réutilise Steps comme position
49 int nbPas = deltaAngle * pasParDegre;
50
51 stepper(nbPas); // ta fonction stepper existante
52 Steps = angleCible; // mettre à jour la position
53 }
54
55 // Fonction stepper existante
56 void stepper(double nbStep){
57 int Direction;
58 if(nbStep>=0){ Direction=1; }
59 else { Direction=0; nbStep=-nbStep; }
60
61 for (int x=0; x<nbStep*8; x++){
62 switch(Steps){
63 case 0: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break;
64 case 1: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); break;
65 case 2: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break;
66 case 3: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break;
67 case 4: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break;
68 case 5: digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break;
69 case 6: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break;
70 case 7: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break;
71 }
72 delayMicroseconds(1000);
73 if(Direction==1){ Steps++; }
74 if(Direction==0){ Steps--; }
75 if(Steps>7){ Steps=0; }
76 if(Steps<0){ Steps=7; }
77 }
78 }
79
80 // ================= SETUP =================
81 void setup() {
82 Serial.begin(115200);
83
84 for (int i = 0; i < nbBoutons; i++) {
85 pinMode(boutons[i], INPUT_PULLUP);
86 pinMode(ledsVille[i], OUTPUT);
87 digitalWrite(ledsVille[i], LOW);
88 etatBoutonAvant[i] = HIGH;
89 }
90
91 pinMode(ledJour, OUTPUT);
92 pinMode(ledNuit, OUTPUT);
93 digitalWrite(ledJour, LOW);
94 digitalWrite(ledNuit, LOW);
95
96 pinMode(IN1, OUTPUT);
97 pinMode(IN2, OUTPUT);
98 pinMode(IN3, OUTPUT);
99 pinMode(IN4, OUTPUT);
100
101 WiFi.begin(ssid, password);
102 Serial.print("Connexion WiFi");
103 while (WiFi.status() != WL_CONNECTED) {
104 delay(500);
105 Serial.print(".");
106 }
107 Serial.println("\nWiFi connecté !");
108 }
109
110 // =============== LEDS ROUGES ===============
111 void allumerVille(int index) {
112 // Éteindre toutes les LEDs rouges
113 for (int i = 0; i < nbBoutons; i++) {
114 digitalWrite(ledsVille[i], LOW);
115 }
116
117 // Allumer la bonne LED
118 digitalWrite(ledsVille[index], HIGH);
119 villeActive = index;
120 Serial.println("LED ville allumée : " + villes[index]);
121
122 // → Tourner le globe
123 allerVille(index);
124 }
125
126 // =============== API JOUR / NUIT ===========
127 bool estJour(String ville) {
128 HTTPClient http;
129 String url = "http://api.weatherapi.com/v1/current.json?key=" +
130 String(apiKey) + "&q=" + ville;
131
132 http.begin(url);
133 int httpCode = http.GET();
134
135 if (httpCode == 200) {
136 DynamicJsonDocument doc(2048);
137 deserializeJson(doc, http.getString());
138 http.end();
139 return doc["current"]["is_day"] == 1;
140 }
141
142 http.end();
143 return false;
144 }
145
146 void gererJourNuit(int index) {
147 digitalWrite(ledJour, LOW);
148 digitalWrite(ledNuit, LOW);
149
150 bool jour = estJour(villes[index]);
151
152 if (jour) {
153 digitalWrite(ledJour, HIGH);
154 Serial.println("→ JOUR");
155 } else {
156 digitalWrite(ledNuit, HIGH);
157 Serial.println("→ NUIT");
158 }
159 }
160
161 // =============== BOUTONS ===================
162 void gererBoutons() {
163 for (int i = 0; i < nbBoutons; i++) {
164 bool etatBouton = digitalRead(boutons[i]);
165
166 if (etatBouton == LOW && etatBoutonAvant[i] == HIGH) {
167
168 // Même bouton → tout éteindre
169 if (villeActive == i) {
170 digitalWrite(ledsVille[i], LOW);
171 digitalWrite(ledJour, LOW);
172 digitalWrite(ledNuit, LOW);
173 villeActive = -1;
174 Serial.println("Extinction");
175 }
176 else {
177 allumerVille(i);
178 gererJourNuit(i);
179 }
180 }
181
182 etatBoutonAvant[i] = etatBouton;
183 }
184 }
185
186 // ================= LOOP ====================
187 void loop() {
188 gererBoutons();
189 delay(50);
190 }
étapes de fabrication
étape 1 : Définition du concept
Choix de l’idée du projet, des fonctionnalités principales et des contraintes (nombre de villes, interaction utilisateur).
étape 2 : Répartition des rôles
Attribution des tâches au sein du groupe : électronique, programmation, mécanique, conception globale.
étape 3 : Conception du système
Réalisation des schémas fonctionnels : bouton de sélection, moteur du globe, LED jour/nuit.
étape 4 : Choix des composants
Sélection des composants électroniques (microcontrôleur, LED, moteur, alimentation).
étape 5 : Fabrication de la structure
Conception et assemblage de la boîte et du globe en papier.
étape 6 : Programmation
Développement du code permettant la sélection des villes, la rotation du globe et l’indication jour/nuit.
étape 7 : Intégration et câblage
Montage des composants dans la boîte et raccordement de l’ensemble.
étape 8 : Tests et ajustements
Vérification du bon fonctionnement, correction des erreurs et optimisation du système.
Troubleshouting
1. Le système ne réagit pas à l’appui sur le bouton
Problème : aucune action visible (globe, LED).
Causes possibles : bouton mal câblé, anti-rebond absent, erreur logique dans le code.
Solutions : vérifier le câblage et l’état lu par le microcontrôleur.
Astuce : afficher en debug la ville sélectionnée après chaque appui.
2. Le globe ne tourne pas ou mal
Problème : rotation bloquée, imprécise ou saccadée.
Causes possibles : moteur sous-dimensionné, frottements mécaniques, alimentation insuffisante.
Solutions : alléger le globe, améliorer l’axe, adapter la vitesse moteur.
Astuce : tester la rotation sans charge avant montage final.
3. Retard entre l’action et la réponse du système
Problème : temps d’attente après appui sur le bouton.
Causes possibles : latence de l’API ou traitement bloquant dans le code.
Solutions : structurer le programme en étapes (attente, requête, affichage).
Astuce : conserver la dernière donnée valide si l’API met trop de temps à répondre.
4. Erreurs aléatoires ou comportement incohérent
Problème : résultats différents pour la même ville.
Causes possibles : données API non gérées en cas d’erreur ou réponse incomplète.
Solutions : sécuriser le traitement des données reçues.
Astuce : toujours prévoir un cas « erreur API ».
5. Problèmes à l’intégration finale
Problème : tout fonctionne séparément mais pas ensemble.
Causes possibles : interférences, manque de place, câbles mal positionnés.
Solutions : revoir l’organisation interne de la boîte.
Astuce : intégrer progressivement et tester après chaque étape.
Sources et documentation complémentaire
Pour construire le Globe en papier :
Prompt Chatgpt pour relier le code qui fais tourner le moteur et celui qui allume les leds :
Relie ce code afin que lorsqu'on presse un bouton poussoir le moteur tourne de X degrés
Elément de présentation
Vue de face
Vue de face papier
Vue de haut
Vue de haut papier
Premier Brouillon