C'est le printemps ! Fleur.gif

ENIB 2025 : Godzilla : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(étape 3 réaliser la tête de Godzilla)
(Mettre du code Arduino)
Ligne 27 : Ligne 27 :
 
==fichiers à joindre==
 
==fichiers à joindre==
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
===Mettre du code Arduino===
+
Servo monservo4;
<syntaxhighlight lang="Arduino" line>
 
#define PIN 9
 
#include <Arduino_GFX_Library.h>
 
  
void setup() {
+
WiFiServer server(80); // Initialise un serveur WiFi sur le port 80
  // put your setup code here, to run once:
 
  
 +
////////////////
 +
//  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> // Bibliothèque pour gérer le WiFi avec ESP8266
 +
 +
//////////////////////
 +
//Définition du Wifi//
 +
//////////////////////
 +
const char WiFiAPPSK[] = "1234567890"; // Mot de passe pour le point d'accès WiFi
 +
 +
//////////////////////////
 +
//Définition des broches//
 +
//////////////////////////
 +
 +
#include <Servo.h> // Bibliothèque pour contrôler les servos
 +
 +
Servo monservo1;
 +
Servo monservo2;
 +
Servo monservo3;
 +
 +
const int led1 = D3; // LED pour la bouche
 +
const int led2 = D4; // LED pour les yeux
 +
 +
void setup()
 +
{
 +
  initHardware(); // Initialise les configurations matérielles
 +
  setupWiFi(); // Configure le réseau WiFi
 +
  server.begin(); // Lance le serveur WiFi
 +
 
 +
  // Attache les servos aux broches
 +
  monservo1.attach(5);
 +
  monservo2.attach(4);
 +
  monservo3.attach(12);
 +
  monservo4.attach(15);
 +
 
 +
  // Position initiale des servos
 +
  monservo1.write(91);
 +
  monservo2.write(93);
 +
  monservo3.write(90);
 +
  monservo4.write(90);
 +
 
 +
  // Configure les broches des LEDs comme sorties
 +
  pinMode(led1, OUTPUT); 
 +
  pinMode(led2, OUTPUT);
 
}
 
}
  
void loop() {
+
void loop()
   // put your main code here, to run repeatedly:
+
{
 +
   // Vérifie si un client s'est connecté
 +
  WiFiClient client = server.available();
 +
  if (!client) {
 +
    return; // Sort de la boucle si aucun client
 +
  }
 +
 
 +
  // Lit la première ligne de la requête HTTP
 +
  String req = client.readStringUntil('\r');
 +
  client.flush(); // Efface les données en attente
  
 +
  int val = -1; // Variable pour stocker l'action demandée
 +
 +
  // Identifie l'instruction en fonction de l'URL demandée
 +
  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;   
 +
 +
  // Génère la réponse HTML
 +
  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 utilisateur pour contrôler le 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>";
 +
 +
  // Effectue l'action demandée en fonction de la commande
 +
  if (val == 2) { s += " avance "; monservo2.write(180); monservo1.write(0); }
 +
  if (val == 1) { s += " recule "; monservo2.write(0); monservo1.write(180); }
 +
  if (val == 0) { s += " stop "; monservo1.write(91); monservo2.write(93); }
 +
  if (val == 3) { s += " gauche "; monservo1.write(180); monservo2.write(180); }
 +
  if (val == 4) { s += " droite "; monservo1.write(0); monservo2.write(0); }
 +
  if (val == 5) { s += " bouche allumee"; digitalWrite(led1, HIGH); }
 +
  if (val == 6) { s += " bouche eteinte"; digitalWrite(led1, LOW); }
 +
  if (val == 7) { s += " yeux allume"; digitalWrite(led2, HIGH); }
 +
  if (val == 8) { s += " yeux eteint"; digitalWrite(led2, LOW); }
 +
  if (val == 9) { s += " bouche ouverte"; monservo3.write(180); monservo4.write(0); }
 +
  if (val == 12) { s += " arret bouche "; monservo3.write(90); monservo4.write(90); }
 +
  if (val == 11) { s += " bouche fermee"; monservo3.write(0); monservo4.write(180); }
 +
 
 +
  s += "</html>\n";
 +
 +
  // Envoie la réponse au client
 +
  client.print(s);
 +
  delay(1);
 +
  Serial.println("Client deconnecte ");
 +
  client.flush();
 
}
 
}
  
</syntaxhighlight>
+
void setupWiFi()
 +
{
 +
  WiFi.mode(WIFI_AP); // Configure le module en mode point d'accès
 +
  uint8_t mac[WL_MAC_ADDR_LENGTH];
 +
  WiFi.softAPmacAddress(mac); // Obtient l'adresse 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);
 +
 
 +
  for (int i = 0; i < AP_NameString.length(); i++)
 +
    AP_NameChar[i] = AP_NameString.charAt(i);
 +
 
 +
  WiFi.softAP(AP_NameChar, WiFiAPPSK, 7); // Configure le point d'accès avec un SSID et un mot de passe
 +
}
 +
 +
void initHardware()
 +
{
 +
  Serial.begin(115200); // Initialise la communication série pour débogage
 +
}
  
 
==étapes de fabrication==
 
==étapes de fabrication==

Version du 21 janvier 2025 à 16:01

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

Outils et matériaux

  • 4 servomoteurs
  • 2 roues imprimées en 3D
  • 1 microprocesseur ESP8266
  • 1 module wifi
  • 2 grandes LED rouges
  • 1 bille avec son support imprimé en 3D
  • des fils électriques
  • des morceaux de carton
  • du papier canson

fichiers à joindre

code, ficher d'impression 3D, de découpe laser ou vinyle, ... Servo monservo4;

WiFiServer server(80); // Initialise un serveur WiFi sur le port 80

//////////////// // 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 */

  1. include <ESP8266WiFi.h> // Bibliothèque pour gérer le WiFi avec ESP8266

////////////////////// //Définition du Wifi// ////////////////////// const char WiFiAPPSK[] = "1234567890"; // Mot de passe pour le point d'accès WiFi

////////////////////////// //Définition des broches// //////////////////////////

  1. include <Servo.h> // Bibliothèque pour contrôler les servos

Servo monservo1; Servo monservo2; Servo monservo3;

const int led1 = D3; // LED pour la bouche const int led2 = D4; // LED pour les yeux

void setup() {

 initHardware(); // Initialise les configurations matérielles
 setupWiFi(); // Configure le réseau WiFi
 server.begin(); // Lance le serveur WiFi
 
 // Attache les servos aux broches
 monservo1.attach(5); 
 monservo2.attach(4); 
 monservo3.attach(12);
 monservo4.attach(15);
 
 // Position initiale des servos
 monservo1.write(91);
 monservo2.write(93);
 monservo3.write(90);
 monservo4.write(90);
 
 // Configure les broches des LEDs comme sorties
 pinMode(led1, OUTPUT);  
 pinMode(led2, OUTPUT);

}

void loop() {

 // Vérifie si un client s'est connecté
 WiFiClient client = server.available();
 if (!client) {
   return; // Sort de la boucle si aucun client
 }
 // Lit la première ligne de la requête HTTP
 String req = client.readStringUntil('\r');
 client.flush(); // Efface les données en attente
 int val = -1; // Variable pour stocker l'action demandée
 // Identifie l'instruction en fonction de l'URL demandée
 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;    
 // Génère la réponse HTML
 String s = "HTTP/1.1 200 OK\r\n";
 s += "Content-Type: text/html\r\n\r\n";
 s += "<!DOCTYPE HTML>\r\n\r\n";

  // Interface utilisateur pour contrôler le robot
  s += "

Controle de Godzilla

"; s += ""; s += ""; s += ""; s += ""; s += ""; s += "

Controle des LEDs bouche

"; s += ""; s += ""; s += "

Controle des LEDs yeux

"; s += ""; s += ""; s += "

Controle de la bouche

"; s += ""; s += ""; s += ""; s += ""; // Effectue l'action demandée en fonction de la commande if (val == 2) { s += " avance "; monservo2.write(180); monservo1.write(0); } if (val == 1) { s += " recule "; monservo2.write(0); monservo1.write(180); } if (val == 0) { s += " stop "; monservo1.write(91); monservo2.write(93); } if (val == 3) { s += " gauche "; monservo1.write(180); monservo2.write(180); } if (val == 4) { s += " droite "; monservo1.write(0); monservo2.write(0); } if (val == 5) { s += " bouche allumee"; digitalWrite(led1, HIGH); } if (val == 6) { s += " bouche eteinte"; digitalWrite(led1, LOW); } if (val == 7) { s += " yeux allume"; digitalWrite(led2, HIGH); } if (val == 8) { s += " yeux eteint"; digitalWrite(led2, LOW); } if (val == 9) { s += " bouche ouverte"; monservo3.write(180); monservo4.write(0); } if (val == 12) { s += " arret bouche "; monservo3.write(90); monservo4.write(90); } if (val == 11) { s += " bouche fermee"; monservo3.write(0); monservo4.write(180); } s += "\n";
 // Envoie la réponse au client
 client.print(s);
 delay(1);
 Serial.println("Client deconnecte ");
 client.flush();

}

void setupWiFi() {

 WiFi.mode(WIFI_AP); // Configure le module en mode point d'accès
 uint8_t mac[WL_MAC_ADDR_LENGTH];
 WiFi.softAPmacAddress(mac); // Obtient l'adresse 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);
 for (int i = 0; i < AP_NameString.length(); i++)
   AP_NameChar[i] = AP_NameString.charAt(i);
 WiFi.softAP(AP_NameChar, WiFiAPPSK, 7); // Configure le point d'accès avec un SSID et un mot de passe

}

void initHardware() {

 Serial.begin(115200); // Initialise la communication série pour débogage

}

é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