C'est le printemps ! Fleur.gif

ENIB 2025 : Godzilla : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Troubleshouting)
(code Godzilla)
 
(22 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 9 : Ligne 9 :
 
*  Kénan
 
*  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 !
 
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 !
 +
  
 
[[Fichier:Photo Godzilla.jpg|500px]]
 
[[Fichier:Photo Godzilla.jpg|500px]]
  
==Matériaux==
+
tout ça à partir du [[Petit bot]] de la fabrique du petit ponant
 +
 
  
 +
==Outils et matériaux==
 
* 4 servomoteurs
 
* 4 servomoteurs
* 2 roues imprimées en 3D
+
* 2 roues imprimées en 3D à partir du [[Petit bot]]
 
* 1 microprocesseur ESP8266
 
* 1 microprocesseur ESP8266
 
* 1 module wifi
 
* 1 module wifi
 
* 2 grandes LED rouges
 
* 2 grandes LED rouges
* 1 bille avec son support imprimé en 3D
+
* 1 bille avec son support imprimé en 3D à partir du [[Petit bot]]
 
* des fils électriques
 
* des fils électriques
 
* des morceaux de carton
 
* des morceaux de carton
 
* du papier canson
 
* du papier canson
  
[[Fichier:Emprunts roue et moteur.jpg|300px]]
+
==code Godzilla==
 +
 
 +
<syntaxhighlight lang="Arduino" line>
 +
 
 +
////////////////
 +
//  Godzilla  //
 +
////////////////
 +
/* un programme conçu par Mattéo Le Guen à partir de celui de Julien Rat sous licence CC-By-Sa.
 +
Ce programme sert à piloter le "Godzilla".
 +
C'est un robot pédagogique, très peu cher, utilisé par les petits débrouillards*/
 +
 
 +
 
 +
#include <ESP8266WiFi.h>
 +
 
 +
 
 +
//////////////////////
 +
//Définition du Wifi//
 +
//////////////////////
 +
const char WiFiAPPSK[] = "1234567890"; //mot de passe
 +
 
 +
 
 +
//////////////////////////
 +
//Définition des broches//
 +
//////////////////////////
 +
 
 +
 
 +
#include <Servo.h>
 +
 
 +
 
 +
Servo monservo1;
 +
Servo monservo2;
 +
Servo monservo3;
 +
Servo monservo4;
 +
 
 +
 
 +
WiFiServer server(80);
 +
 
 +
 
 +
const int led1 = D3;
 +
const int led2 = D4;
 +
 
 +
 
 +
void setup()
 +
{
 +
  initHardware();
 +
  setupWiFi();
 +
  server.begin();
 +
  monservo1.attach(5);
 +
  monservo2.attach(4);
 +
  monservo3.attach(12);
 +
  monservo4.attach(15);
 +
  monservo1.write(91);
 +
  monservo2.write(93);
 +
  monservo3.write(90);
 +
  monservo4.write(90);
 +
  pinMode(led1, OUTPUT); 
 +
  pinMode(led2, OUTPUT);
 +
 
 +
 
 +
}
 +
 
 +
 
 +
void loop()
 +
{
 +
  // Regarder si un client s'est connecté
 +
  WiFiClient client = server.available();
 +
  if (!client) {
 +
    return;
 +
  }
 +
 
 +
 
 +
  // Lire la première ligne de la requête
 +
  String req = client.readStringUntil('\r');
 +
 +
  client.flush();
 +
 
 +
 
 +
  // Tester la requête pour identifier la consigne
 +
  int val = -1;
 +
 
 +
 
 +
  if (req.indexOf("/stop") != -1)
 +
    val = 0;
 +
  else if (req.indexOf("/avance") != -1)
 +
    val = 2;
 +
  else if (req.indexOf("/recule") != -1)
 +
    val = 1;
 +
  else if (req.indexOf("/gauche") != -1)
 +
    val = 3;
 +
  else if (req.indexOf("/droite") != -1)
 +
    val = 4;
 +
  else if (req.indexOf("/allume1") != -1)
 +
    val = 5;
 +
  else if (req.indexOf("/eteint1") != -1)
 +
    val = 6;
 +
  else if (req.indexOf("/allume2") != -1)
 +
    val = 7;
 +
  else if (req.indexOf("/eteint2") != -1)
 +
    val = 8;
 +
  else if (req.indexOf("/ouvrir") != -1)
 +
    val = 9;
 +
  else if (req.indexOf("/arret") != -1)
 +
    val = 12;     
 +
  else if (req.indexOf("/fermer") != -1)
 +
    val = 11;   
 +
 
 +
 
 +
// Prépare la page web de réponse
 +
String s = "HTTP/1.1 200 OK\r\n";
 +
s += "Content-Type: text/html\r\n\r\n";
 +
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
 +
 
 +
 
 +
// Interface web du contrôle du robot
 +
s += "<h1>Controle de Godzilla</h1>";
 +
s += "<button onclick=\"location.href='/avance';\">Avancer</button>";
 +
s += "<button onclick=\"location.href='/recule';\">Reculer</button>";
 +
s += "<button onclick=\"location.href='/gauche';\">Gauche</button>";
 +
s += "<button onclick=\"location.href='/droite';\">Droite</button>";
 +
s += "<button onclick=\"location.href='/stop';\">Stop</button>";
 +
s += "<h2>Controle des LEDs bouche</h2>";
 +
s += "<button onclick=\"location.href='/allume1';\">Allumer Feu </button>";
 +
s += "<button onclick=\"location.href='/eteint1';\">Eteindre Feu </button>";
 +
s += "<h3>Controle des LEDs yeux</h3>";
 +
s += "<button onclick=\"location.href='/allume2';\">Allumer yeux </button>";
 +
s += "<button onclick=\"location.href='/eteint2';\">Eteindre yeux </button>";
 +
s += "<h4>Controle de la bouche </h4>";
 +
s += "<button onclick=\"location.href='/ouvrir';\">ouvrir bouche </button>";
 +
s += "<button onclick=\"location.href='/arret';\">arret bouche </button>";
 +
s += "<button onclick=\"location.href='/fermer';\">fermer bouche </button>";
 +
s += "<style>";
 +
s += "button { padding: 20px; margin: 15px; font-size: 18px; width: 150px; }";
 +
s += "body { text-align: center; font-family: Arial; }";
 +
s += "@media (max-width: 600px) { button { width: 100%; margin: 5px 0; } }";
 +
s += "</style>";
  
[[Fichier:IMG 5491.jpg|300px]]
 
  
==Introduction==
+
  // Si on a reçu l’instruction, il faut la l’appliquer au robot
Il nous faut en premier lieu créer la base du godzilla, ce sera le bas de sa bouche qui tiendra les roues. On emprunte pour cela du carton et 2 roues
+
  if (val == 2 )
 +
  {
 +
    s += " avance ";
 +
    monservo2.write(180);  //avance
 +
    monservo1.write(0);  //avance
 +
  }
 +
  if (val == 1)//recule
 +
  {
 +
    s += " recule ";
 +
    monservo2.write(0);  //recule
 +
    monservo1.write(180);  //recule
 +
  }
 +
  if (val == 0)
 +
  {
 +
    s += " stop ";
 +
    monservo1.write(91);  //stop
 +
    monservo2.write(93);  //stop
 +
  }
 +
  if (val == 3)
 +
  {
 +
    s += " gauche ";
 +
    monservo1.write(180);  //gauche
 +
    monservo2.write(180);  //gauche
 +
  }
 +
  if (val == 4)
 +
  {
 +
    s += " droite ";
 +
    monservo1.write(0);  //droite
 +
    monservo2.write(0);  //recule
 +
  }
 +
  if (val == 5)
 +
  {
 +
      s+= " bouche allumee";
 +
      digitalWrite(led1,HIGH); //led bouche allumee
 +
  }
 +
  if (val == 6)
 +
  {
 +
      s+= " bouche eteinte";
 +
      digitalWrite(led1,LOW); //led bouche eteinte
 +
  }
 +
  if (val == 7)
 +
  {
 +
      s+= " yeux allume";
 +
      digitalWrite(led2,HIGH); //led yeux allumee
 +
  }
 +
  if (val == 8)
 +
  {
 +
      s+= " yeux eteint";
 +
      digitalWrite(led2,LOW); //led yeux eteinte
 +
  }
 +
  if (val == 9 )
 +
  {
 +
      s+= " bouche ouverte";
 +
      monservo3.write(0);
 +
      monservo4.write(180);   
 +
  }
 +
  if (val == 12)
 +
  {
 +
    s+= " arret bouche  ";
 +
    monservo3.write(90);
 +
    monservo4.write(90);
 +
  }
 +
  if  (val==11)
 +
  {
 +
      s+= " bouche fermee";
 +
      monservo3.write(180);
 +
      monservo4.write(0);   
 +
  }   
 +
  s += "</html>\n";
  
  
éventuelle vidéo
+
  // Envoie la réponse au client
==fichiers à joindre==
+
  client.print(s);
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
+
  delay(1);
===Mettre du code Arduino===
+
  Serial.println("Client deconnecte ");
<syntaxhighlight lang="Arduino" line>
+
  client.flush();
#define PIN 9
 
#include <Arduino_GFX_Library.h>
 
  
void setup() {
 
  // put your setup code here, to run once:
 
  
 
}
 
}
  
void loop() {
 
  // put your main code here, to run repeatedly:
 
  
 +
void setupWiFi()
 +
{
 +
  WiFi.mode(WIFI_AP);
 +
  uint8_t mac[WL_MAC_ADDR_LENGTH];
 +
  WiFi.softAPmacAddress(mac);
 +
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
 +
                String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
 +
  macID.toUpperCase();
 +
  String AP_NameString = "Godzilla";
 +
 +
  char AP_NameChar[AP_NameString.length() + 1];
 +
  memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar
 +
 +
 +
  for (int i = 0; i < AP_NameString.length(); i++)
 +
    AP_NameChar[i] = AP_NameString.charAt(i);
 +
 +
 +
  WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
 
}
 
}
 +
 +
void initHardware()
 +
{
 +
  Serial.begin(115200);//ouvre le moniteur série
 +
} //Ce programme est inspiré de celui-ci : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
  
 
</syntaxhighlight>
 
</syntaxhighlight>
Ligne 70 : Ligne 293 :
 
===étape 3 réaliser la tête de Godzilla===
 
===étape 3 réaliser la tête de Godzilla===
  
[[Fichier:Isaac galère sur la base.jpg|200px|thumb|center|Réaliser la découpe de la base]]
+
[[Fichier:Isaac galère sur la base.jpg|300px|thumb|center|Réaliser la découpe de la base]]
[[Fichier:1737455184221.jpg|200px|thumb|center|Coller la tête]]
+
[[Fichier:1737455184221.jpg|300px|thumb|center|Réaliser la tête]]
[[Fichier:IMG 20250121 120622.jpg|200px|thumb|center|Assembler les roues avec les moteurs et les coller]]
+
[[Fichier:IMG 20250121 103752.jpg|300px|thumb|center|Couper la base pour les roues selon vos dimensions]]
 +
[[Fichier:IMG 20250121 120622.jpg|300px|thumb|center|Assembler les roues avec les moteurs et les coller]]
 +
[[Fichier:IMG 20250121 145601 591.jpg|300px|thumb|center|Assembler les deux corps]]
 +
[[Fichier:IMG 5498.jpg|300px|thumb|center|Rendu final]]
  
 
===étape 4 coder l'ouverture de la bouche de Godzilla===
 
===étape 4 coder l'ouverture de la bouche de Godzilla===
  
 
[[Fichier:IMG 20250121 102040.jpg|600px]]
 
[[Fichier:IMG 20250121 102040.jpg|600px]]
 
===étape 5 faire les découpes pour les roues selon les dimensions===
 
 
[[Fichier:IMG 20250121 103752.jpg|600px]]
 
 
===étape 6 Assembler le montage de la base et de la tête===
 
  
 
===Troubleshouting===
 
===Troubleshouting===

Version actuelle datée du 21 janvier 2025 à 16:42

Titre de la fiche expérience :

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 !


Photo Godzilla.jpg

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é

Zilla dessin.jpg

é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

Réaliser la découpe de la base
Réaliser la tête
Couper la base pour les roues selon vos dimensions
Assembler les roues avec les moteurs et les coller
Assembler les deux corps
Rendu final

étape 4 coder l'ouverture de la bouche de Godzilla

IMG 20250121 102040.jpg

Troubleshouting

Difficultés :

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

ne pas modifier sous cette ligne