ENIB 2025 : Godzilla
Titre de la fiche expérience :
Sommaire
description (résumé)
Auteurs
- Isaac
- Matteo
- Mathieu
- Kénan
Introduction
Nous créons un robot Godzilla époustouflant avec des LED dans les yeux et la bouche, capable d'ouvrir sa mâchoire pour un effet spectaculaire !
tout ça à partir du Petit bot de la fabrique du petit ponant
Outils et matériaux
- 4 servomoteurs
- 2 roues imprimées en 3D à partir du Petit bot
- 1 microprocesseur ESP8266
- 1 module wifi
- 2 grandes LED rouges
- 1 bille avec son support imprimé en 3D à partir du Petit bot
- des fils électriques
- des morceaux de carton
- du papier canson
code Godzilla
1 ////////////////
2 // Godzilla //
3 ////////////////
4 /* un programme conçu par Mattéo Le Guen à partir de celui de Julien Rat sous licence CC-By-Sa.
5 Ce programme sert à piloter le "Godzilla".
6 C'est un robot pédagogique, très peu cher, utilisé par les petits débrouillards*/
7
8
9 #include <ESP8266WiFi.h>
10
11
12 //////////////////////
13 //Définition du Wifi//
14 //////////////////////
15 const char WiFiAPPSK[] = "1234567890"; //mot de passe
16
17
18 //////////////////////////
19 //Définition des broches//
20 //////////////////////////
21
22
23 #include <Servo.h>
24
25
26 Servo monservo1;
27 Servo monservo2;
28 Servo monservo3;
29 Servo monservo4;
30
31
32 WiFiServer server(80);
33
34
35 const int led1 = D3;
36 const int led2 = D4;
37
38
39 void setup()
40 {
41 initHardware();
42 setupWiFi();
43 server.begin();
44 monservo1.attach(5);
45 monservo2.attach(4);
46 monservo3.attach(12);
47 monservo4.attach(15);
48 monservo1.write(91);
49 monservo2.write(93);
50 monservo3.write(90);
51 monservo4.write(90);
52 pinMode(led1, OUTPUT);
53 pinMode(led2, OUTPUT);
54
55
56 }
57
58
59 void loop()
60 {
61 // Regarder si un client s'est connecté
62 WiFiClient client = server.available();
63 if (!client) {
64 return;
65 }
66
67
68 // Lire la première ligne de la requête
69 String req = client.readStringUntil('\r');
70
71 client.flush();
72
73
74 // Tester la requête pour identifier la consigne
75 int val = -1;
76
77
78 if (req.indexOf("/stop") != -1)
79 val = 0;
80 else if (req.indexOf("/avance") != -1)
81 val = 2;
82 else if (req.indexOf("/recule") != -1)
83 val = 1;
84 else if (req.indexOf("/gauche") != -1)
85 val = 3;
86 else if (req.indexOf("/droite") != -1)
87 val = 4;
88 else if (req.indexOf("/allume1") != -1)
89 val = 5;
90 else if (req.indexOf("/eteint1") != -1)
91 val = 6;
92 else if (req.indexOf("/allume2") != -1)
93 val = 7;
94 else if (req.indexOf("/eteint2") != -1)
95 val = 8;
96 else if (req.indexOf("/ouvrir") != -1)
97 val = 9;
98 else if (req.indexOf("/arret") != -1)
99 val = 12;
100 else if (req.indexOf("/fermer") != -1)
101 val = 11;
102
103
104 // Prépare la page web de réponse
105 String s = "HTTP/1.1 200 OK\r\n";
106 s += "Content-Type: text/html\r\n\r\n";
107 s += "<!DOCTYPE HTML>\r\n<html>\r\n";
108
109
110 // Interface web du contrôle du robot
111 s += "<h1>Controle de Godzilla</h1>";
112 s += "<button onclick=\"location.href='/avance';\">Avancer</button>";
113 s += "<button onclick=\"location.href='/recule';\">Reculer</button>";
114 s += "<button onclick=\"location.href='/gauche';\">Gauche</button>";
115 s += "<button onclick=\"location.href='/droite';\">Droite</button>";
116 s += "<button onclick=\"location.href='/stop';\">Stop</button>";
117 s += "<h2>Controle des LEDs bouche</h2>";
118 s += "<button onclick=\"location.href='/allume1';\">Allumer Feu </button>";
119 s += "<button onclick=\"location.href='/eteint1';\">Eteindre Feu </button>";
120 s += "<h3>Controle des LEDs yeux</h3>";
121 s += "<button onclick=\"location.href='/allume2';\">Allumer yeux </button>";
122 s += "<button onclick=\"location.href='/eteint2';\">Eteindre yeux </button>";
123 s += "<h4>Controle de la bouche </h4>";
124 s += "<button onclick=\"location.href='/ouvrir';\">ouvrir bouche </button>";
125 s += "<button onclick=\"location.href='/arret';\">arret bouche </button>";
126 s += "<button onclick=\"location.href='/fermer';\">fermer bouche </button>";
127 s += "<style>";
128 s += "button { padding: 20px; margin: 15px; font-size: 18px; width: 150px; }";
129 s += "body { text-align: center; font-family: Arial; }";
130 s += "@media (max-width: 600px) { button { width: 100%; margin: 5px 0; } }";
131 s += "</style>";
132
133
134 // Si on a reçu l’instruction, il faut la l’appliquer au robot
135 if (val == 2 )
136 {
137 s += " avance ";
138 monservo2.write(180); //avance
139 monservo1.write(0); //avance
140 }
141 if (val == 1)//recule
142 {
143 s += " recule ";
144 monservo2.write(0); //recule
145 monservo1.write(180); //recule
146 }
147 if (val == 0)
148 {
149 s += " stop ";
150 monservo1.write(91); //stop
151 monservo2.write(93); //stop
152 }
153 if (val == 3)
154 {
155 s += " gauche ";
156 monservo1.write(180); //gauche
157 monservo2.write(180); //gauche
158 }
159 if (val == 4)
160 {
161 s += " droite ";
162 monservo1.write(0); //droite
163 monservo2.write(0); //recule
164 }
165 if (val == 5)
166 {
167 s+= " bouche allumee";
168 digitalWrite(led1,HIGH); //led bouche allumee
169 }
170 if (val == 6)
171 {
172 s+= " bouche eteinte";
173 digitalWrite(led1,LOW); //led bouche eteinte
174 }
175 if (val == 7)
176 {
177 s+= " yeux allume";
178 digitalWrite(led2,HIGH); //led yeux allumee
179 }
180 if (val == 8)
181 {
182 s+= " yeux eteint";
183 digitalWrite(led2,LOW); //led yeux eteinte
184 }
185 if (val == 9 )
186 {
187 s+= " bouche ouverte";
188 monservo3.write(0);
189 monservo4.write(180);
190 }
191 if (val == 12)
192 {
193 s+= " arret bouche ";
194 monservo3.write(90);
195 monservo4.write(90);
196 }
197 if (val==11)
198 {
199 s+= " bouche fermee";
200 monservo3.write(180);
201 monservo4.write(0);
202 }
203 s += "</html>\n";
204
205
206 // Envoie la réponse au client
207 client.print(s);
208 delay(1);
209 Serial.println("Client deconnecte ");
210 client.flush();
211
212
213 }
214
215
216 void setupWiFi()
217 {
218 WiFi.mode(WIFI_AP);
219 uint8_t mac[WL_MAC_ADDR_LENGTH];
220 WiFi.softAPmacAddress(mac);
221 String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
222 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
223 macID.toUpperCase();
224 String AP_NameString = "Godzilla";
225
226 char AP_NameChar[AP_NameString.length() + 1];
227 memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar
228
229
230 for (int i = 0; i < AP_NameString.length(); i++)
231 AP_NameChar[i] = AP_NameString.charAt(i);
232
233
234 WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
235 }
236
237 void initHardware()
238 {
239 Serial.begin(115200);//ouvre le moniteur série
240 } //Ce programme est inspiré de celui-ci : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
étapes de fabrication
étape 1 On dessine un schéma du rendu souhaité
étape 2 On vérifie le fonctionnement de la carte Wi-Fi
Pour vérifier le bon fonctionnement de la carte Wi-Fi, commencez par la connecter à l’aide de l’adaptateur USB vers Micro-USB. Ensuite, accédez au menu "Outils" dans votre logiciel Arduino, sélectionnez l’option "Carte", puis choisissez "LOLIN (WEMOS) D1 R2 & mini". Assurez-vous également que le port USB correct est bien sélectionné dans la section "Port" du menu "Outils".
Pour tester la carte, utilisez le code Arduino fourni. Avant de téléverser le code, modifiez le nom du réseau Wi-Fi directement dans le script selon vos besoins. Une fois cette étape effectuée, téléversez le code. Si tout est correctement configuré, vous devriez voir apparaître le nouveau nom de réseau Wi-Fi lorsque vous recherchez les réseaux disponibles à proximité. Le mot de passe par défaut est "1234567890".
Si le réseau est visible, cela confirme que la carte fonctionne correctement.
Remarque importante : Veillez à bien téléverser le code sur la carte, et non simplement le compiler.
étape 3 réaliser la tête de Godzilla
étape 4 coder l'ouverture de la bouche de Godzilla
Troubleshouting
Difficultés :
- il faut être très minutieux et précis pour la découpe
- faire attention à quelle broche on utilise : https://www.wikidebrouillard.org/wiki/Item:D1_mini
Solutions :
- patience
- persévérance
- ne pas s'énerver
- précision
- concentration
Sources et documentation complémentaire
sources et ressources utiles
Et dans la vie de tous les jours ?
Vous pouvez profiter du robot Godzilla pour vous amuser en faisant peur aux gens !! Ce projet permet de s'approprier l'environnement de développement Arduino