ENIB 2025 : Le Bot-eau

De Les Fabriques du Ponant
Révision datée du 21 janvier 2025 à 14:14 par Quentin5 (discussion | contributions) (Code Arduino Antony)
Aller à : navigation, rechercher

Titre de la fiche expérience :

description (résumé)

éventuelle photo de l'équipe

IMG 20250120 110627.jpg PXL 20250121 101656223.MP.jpg PXL 20250121 092138187.jpg

Introduction

Dans le cadre d'un hackaton, notre équipe à décidé de créer un bateau à partir d'éléments électroniques tirés d'un projet de robot (le papertoy). Le principal problème auquel nous nous sommes confrontés était la flottabilité et l'étanchéité du système.

Nous avons décidé d'utiliser deux bouteilles d'eau pour se rapprocher d'un catamaran, très stable donc cela nous permettrait de ne pas chavirer. De plus, les bouteilles rehaussent notre système électronique ce qui permet d'être d'autant plus hors de l'eau.

outil et matériel

fichiers à joindre

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

Mettre du code Arduino

 1  
 2 #define PIN 9
 3 #include <Arduino_GFX_Library.h>
 4 
 5 void setup() {
 6   // put your setup code here, to run once:
 7 
 8 }
 9 
10 void loop() {
11   // put your main code here, to run repeatedly:
12 
13 }

// on appelle la bibliothèque qui gère le Wemos D1 mini

  1. include <ESP8266WiFi.h>

// Gestion du Wifi

  1. include <ESP8266WebServer.h>
  2. include <DNSServer.h>
  3. include <ESP8266mDNS.h>
  4. include <WiFiClient.h>

// Definition du WiFi const char *nomDuReseau = "petitboto"; // Nom du réseau wifi du petit bot const char *motDePasse = ""; // Mot de passe du réseau wifi du petit bot


// ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon // La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !). //création du monServeur ESP8266WebServer monServeur(80); // Création de l'objet monServeur //Gestion des servomoteurs

  1. include <Servo.h> //appel de la bibliothèque qui gère les servomoteurs

// création des servomoteurs Servo servosafran; // Nom du servo qui gère la première roue //Servo servomoteur; // Seconde roue

// les broches de signal pour le sens de rotation

  1. define moteurA_1 1
  2. define m1A 3
  3. define m1B 4

//déclaration des Variables //int --- en cours int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...). void setup(){

 delay(1000);
 Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
 Serial.println();
 Serial.println();  
 configDuWifi();
// servomoteur.detach();  // Place les servos hors tension
 servosafran.detach(); 
 pinMode(moteurA_1, OUTPUT);

}

void loop(){

   val = -1;
   monServeur.handleClient();

}

///////////////////////GESTION DES INSTRUCTIONS/////////////////////////// void GestionDesClics() {

 monServeur.on("/avance", HTTP_GET, []() {
 val = 1;
 Serial.println("avance");  
 redactionPageWeb();
 });
 monServeur.on("/recule", HTTP_GET, []() {
 val = 2;
 Serial.println("recule");
 redactionPageWeb();
 });
 monServeur.on("/gauche", HTTP_GET, []() {
 val = 4;
 Serial.println("gauche");
 redactionPageWeb();
 });
 monServeur.on("/droite", HTTP_GET, []() {
 val = 3;
 Serial.println("droite");
 redactionPageWeb();
 });
 monServeur.on("/stop", HTTP_GET, []() {
 val = 0;
 Serial.println("stop");
 redactionPageWeb();
 });
 monServeur.on("/", HTTP_GET, []() {
 val = -1;
 redactionPageWeb();
 });

}

///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT/////////////////////////////////////////

void redactionPageWeb(){

 // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
 String pageWeb = "<!DOCTYPE HTML>\r\n";
 pageWeb += "\r\n";
  pageWeb += "\r\n";
  pageWeb += "\r\n";
  pageWeb += "Petit boto\r\n";
  pageWeb += "\r\n";
  pageWeb += "\r\n";
  pageWeb += "
"; //On ouvre la balise qui va centrer les boutons pageWeb += "

Le petit bot "; pageWeb += ""; // On finalise l'écriture de la page Web et on donne les instructions aux servos pageWeb += instruction(val); // pour cela on appelle la fonction "instruction" // On termine l'écriture de la page Web pageWeb += "

"; pageWeb += "
"; //aller à la ligne pageWeb += "
"; //aller à la ligne pageWeb += "\r\n"; // créer un bouton "Stop", qui envoie sur l'URL /stop pageWeb += "\r\n"; // créer un bouton "Avance"... pageWeb += "\r\n"; pageWeb += "\r\n"; pageWeb += "
\r\n"; pageWeb += "
"; // tout est centré sur la page pageWeb += "\r\n"; pageWeb += "\n"; //Fin de la page Web // On envoie la page web monServeur.send(200, "text/html", pageWeb); delay(1);

}

///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////

String instruction(int valeur){ //Cette fonction traite les instructions qui sont reçues

 int angle;
 int vitesse;
 String completePage;                  // Déclaration de la chaine de caractère qui sera renvoyée par cette fonction pour compléter la page web 
 switch(valeur){                       // En fonction de la variable valeur on va donner un ordre aux servos 
   case 0 :                            // et un texte à la chaine de caractère "completePage"
   completePage = " est a l'arrêt ";
   //vitesse = 90 ;
   angle = 90; 
   analogWrite(moteurA_1,0);
   analogWrite(m1A,0);
   analogWrite(m1B,0);
    
   break;
   case 1 :
   completePage = " avance ";
   //vitesse = 180 ;
   angle = 90;
   analogWrite(moteurA_1,255);
   analogWrite(m1A,255);
   analogWrite(m1B,0);
   break;
   case 2 :
   completePage = " recule ";
   angle = 90;
   analogWrite(moteurA_1,255);
   analogWrite(m1A,0);
   analogWrite(m1B,255);
   break;
   case 3 :
   completePage = " tourne a gauche ";
   angle = 0;
   analogWrite(moteurA_1,255);
   analogWrite(m1A,255);
   analogWrite(m1B,0);
   break;
   case 4 :
   completePage = " tourne a droite ";
   angle = 180;
   analogWrite(moteurA_1,255);
   analogWrite(m1A,255);
   analogWrite(m1B,0);
   break;
   // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
 }
 //servomoteur.attach(D1);     // Broche D1
 servosafran.attach(D2);      // Broche D2
 //servomoteur.write(vitesse); 
 servosafran.write(angle);
 return completePage;        // on renvoie la chaine de caractère pour compléter la page web

}

////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////

void configDuWifi(){ // Fonction de configuratio du Wifi

 WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
 WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
 MDNS.begin(nomDuReseau);                 // gérer les DNS ce qui rendra votre petit bot accessible
 MDNS.addService("http", "tcp", 80);      // via http://nomDuReseau.local
 IPAddress monIP = WiFi.softAPIP();       // on récupère l'adresse IP du petit Bot
 Serial.print("Adresse IP de ce Point d'Accès : ");
 Serial.println(monIP);                   // on l'écrit sur le moniteur série
 GestionDesClics();
 monServeur.begin();                          //Démarrage du monServeur
 Serial.println("Serveur HTTP démarré");
 return;                                  // on retourne à l'endroit ou la fonction a été appelée.

}

étapes de fabrication

indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)

étape 1

étape 2

étape ...

Troubleshouting

Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?

Sources et documentation complémentaire

https://www.wikidebrouillard.org/wiki/Rubans_de_led_ludiques

Elémlent de présentation

je met ici le document de présentation de mon projet

ne pas modifier sous cette ligne