ENIB 2025 : Le Bot-eau : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Introduction)
(Introduction)
Ligne 8 : Ligne 8 :
  
 
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).
 
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é était la flottabilité et l'étanchéité du système.
+
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.
 
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 d'eau.
  
 
==outil et matériel==
 
==outil et matériel==

Version du 21 janvier 2025 à 11:36

Titre de la fiche expérience :

description (résumé)

éventuelle photo de l'équipe

IMG 20250120 110627.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 d'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 }

Code Arduino Antony

  1 ///////////////
  2 // Petit Bot //
  3 ///////////////
  4 // Un programme pédagogique des petits débrouillards ?=+ pour gérer le robot "Petit Bot" 
  5 // Voir sur http://ancien.wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
  6 // Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
  7 // Sous licence CC-By-Sa
  8 // Par des gens bien
  9 
 10 /* Schéma
 11 Lolin (Wemos) D1 mini
 12                                      
 13                                 _________________
 14                                /     D1 mini     \
 15                               |[ ]RST        TX[ ]|
 16                               |[ ]A0  -GPIO  RX[ ]|
 17                               |[ ]D0-16    5-D1[X]|----\
 18                               |[ ]D5-14    4-D2[X]|--\  \
 19                               |[ ]D6-12    0-D3[ ]|  |   |
 20                               |[ ]D7-13    2-D4[ ]|  |   |
 21                               |[ ]D8-15     GND[X]|  |   |
 22                               |[ ]3V3        5V[ ]|  |   |
 23  _                            |       +---+       |  |   |
 24 | |                           |_______|USB|_______|  |  /                           _
 25 | |       _                                         /  /                  _        | |
 26 | |     _| |_________                         _____/  /         _________| |_      | |
 27 | |    |    ______   |_data D1______________/        |_data D2_|   ______    |     | |
 28 | |  __|   | SG90 |  |_______________GND_______________________|  | SG90 |   |___  | |
 29 | |_|      |Servo |  |_______________Vin_______________________|  |Servo |       |_| |
 30 | |_|      |Gauche|  |                                         |  |Droit |       |_| |
 31 | | |__    |______|  |                                         |  |______|    ___| | |
 32 | |    |__   ________|                                         |_________   __|    | |
 33 | |       |_|                                                            |_|       | |
 34 | |                                                                                | |
 35 |_|                                                                                |_|
 36                                                                      
 37     ___
 38   / ___ \
 39  |_|   | | 
 40       /_/
 41       _   ___   _
 42      |_| |___|_| |_
 43           ___|_   _|
 44          |___| |_|
 45   Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
 46   Antony Le Goïc-Auffret janvier 2025
 47  */
 48 
 49 // on appelle la bibliothèque qui gère le Wemos D1 mini
 50 #include <ESP8266WiFi.h> 
 51 
 52 // Gestion du Wifi
 53 #include <ESP8266WebServer.h>
 54 #include <DNSServer.h>
 55 #include <ESP8266mDNS.h>
 56 #include <WiFiClient.h> 
 57 
 58 //  Definition du WiFi 
 59 const char *nomDuReseau = "petitbota";     // Nom du réseau wifi du petit bot
 60 const char *motDePasse = "";    // Mot de passe du réseau wifi du petit bot
 61 // ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon
 62 // La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !).
 63 //création du monServeur
 64 ESP8266WebServer monServeur(80);               // Création de l'objet monServeur
 65 
 66 //Gestion des servomoteurs
 67 #include <Servo.h>   //appel de la bibliothèque qui gère les servomoteurs
 68 // création des servomoteurs 
 69 Servo servogauche;   // Nom du servo qui gère la première roue
 70 Servo servodroit;    // Seconde roue
 71 
 72 //déclaration des Variables
 73 //int --- en cours 
 74 int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...).
 75 
 76 void setup(){
 77   delay(1000);
 78   Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
 79   Serial.println();
 80   Serial.println();  
 81   configDuWifi();
 82   servodroit.detach();  // Place les servos hors tension
 83   servogauche.detach(); 
 84   pinMode(LED_BUILTIN, OUTPUT);    //met la led du Wemos en sortie
 85   digitalWrite(LED_BUILTIN, LOW);  //met la led du Wemos sur le niveau bas ce qui l'allume.
 86 }
 87 
 88 void loop(){
 89     val = -1;
 90     monServeur.handleClient();
 91 }
 92 
 93 ///////////////////////GESTION DES INSTRUCTIONS///////////////////////////
 94 void GestionDesClics() {
 95   monServeur.on("/avance", HTTP_GET, []() {
 96   val = 1;
 97   Serial.println("avance");    
 98   redactionPageWeb();
 99   });
100 
101   monServeur.on("/recule", HTTP_GET, []() {
102   val = 2;
103   Serial.println("recule");
104   redactionPageWeb();
105   });
106 
107   monServeur.on("/gauche", HTTP_GET, []() {
108   val = 4;
109   Serial.println("gauche");
110   redactionPageWeb();
111   });
112   
113   monServeur.on("/droite", HTTP_GET, []() {
114   val = 3;
115   Serial.println("droite");
116   redactionPageWeb();
117   });
118 
119   monServeur.on("/stop", HTTP_GET, []() {
120   val = 0;
121   Serial.println("stop");
122   redactionPageWeb();
123   });
124   
125   monServeur.on("/", HTTP_GET, []() {
126   val = -1;
127   redactionPageWeb();
128   });
129 
130 }
131 
132 ///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT/////////////////////////////////////////
133 void redactionPageWeb(){
134   // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
135   String pageWeb = "<!DOCTYPE HTML>\r\n";
136   pageWeb += "<html>\r\n";
137   pageWeb += "<head>\r\n";
138   pageWeb += "<meta charset=\"utf-8\">\r\n";
139   pageWeb += "<title>Petit bot</title>\r\n";
140   pageWeb += "</head>\r\n";
141   pageWeb += "<body>\r\n";
142   pageWeb += "<center>";    //On ouvre la balise qui va centrer les boutons
143   pageWeb += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
144   pageWeb += "<style type=\"text/css\">  body { color: #212121; background-color: #CC0C59 } </style>";
145 
146   // On finalise l'écriture de la page Web et on donne les instructions aux servos
147   pageWeb += instruction(val); // pour cela on appelle la fonction "instruction"
148 
149   // On termine l'écriture de la page Web
150   pageWeb += "</h1>";
151   pageWeb += "<br>"; //aller à la ligne
152   pageWeb += "<br>"; //aller à la ligne
153   pageWeb += "<a href=\"/stop\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Stop </button></a>\r\n";      // créer un bouton "Stop", qui envoie sur l'URL /stop
154   pageWeb += "<a href=\"/avance\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Avance </button></a>\r\n";  // créer un bouton "Avance"...
155   pageWeb += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Recule </button></a>\r\n";
156   pageWeb += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Droite </button></a>\r\n";
157   pageWeb += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Gauche </button></a><br />\r\n";
158   pageWeb += "</center>"; // tout est centré sur la page
159   pageWeb += "</body>\r\n";
160   pageWeb += "</html>\n"; //Fin de la page Web
161 
162   // On envoie la page web
163   monServeur.send(200, "text/html", pageWeb);
164   delay(1);
165 }
166 
167 ///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////
168 String instruction(int valeur){ //Cette fonction traite les instructions qui sont reçues
169   int gauche;                           // Variable dont la valeur 180 ou 0 fera tourner le servo gauche dans un sens ou l'autre
170   int droite;                           // Idem pour le servo droit
171   String completePage;                  // Déclaration de la chaine de caractère qui sera renvoyée par cette fonction pour compléter la page web 
172   switch(valeur){                       // En fonction de la variable valeur on va donner un ordre aux servos 
173     case 0 :                            // et un texte à la chaine de caractère "completePage"
174     completePage = " est a l'arrêt ";
175     droite = 90;
176     gauche = 90;
177     break;
178     case 1 :
179     completePage = " avance ";
180     droite = 180;
181     gauche = 0;
182     break;
183     case 2 :
184     completePage = " recule ";
185     droite = 0;
186     gauche = 180;
187     break;
188     case 3 :
189     completePage = " tourne a gauche ";
190     droite = 180;
191     gauche = 180;
192     break;
193     case 4 :
194     completePage = " tourne a droite ";
195     droite = 0;
196     gauche = 0;
197     break;
198     // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
199   }
200   servogauche.attach(D1);     // Broche D1
201   servodroit.attach(D2);      // Broche D2
202   servogauche.write(gauche); 
203   servodroit.write(droite);
204   return completePage;        // on renvoie la chaine de caractère pour compléter la page web
205 }
206 ////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////
207 void configDuWifi(){  // Fonction de configuratio du Wifi
208   WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
209   WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
210   MDNS.begin(nomDuReseau);                 // gérer les DNS ce qui rendra votre petit bot accessible
211   MDNS.addService("http", "tcp", 80);      // via http://nomDuReseau.local
212   IPAddress monIP = WiFi.softAPIP();       // on récupère l'adresse IP du petit Bot
213   Serial.print("Adresse IP de ce Point d'Accès : ");
214   Serial.println(monIP);                   // on l'écrit sur le moniteur série
215   GestionDesClics();
216   monServeur.begin();                          //Démarrage du monServeur
217   Serial.println("Serveur HTTP démarré");
218   return;                                  // on retourne à l'endroit ou la fonction a été appelée.
219 }

é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