ENIB 2025 : Le Bot-eau : Différence entre versions
(→description (résumé)) |
(→Introduction) |
||
Ligne 13 : | Ligne 13 : | ||
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 | + | 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== | ==outil et matériel== |
Version du 21 janvier 2025 à 12:09
Titre de la fiche expérience :
Sommaire
description (résumé)
éventuelle photo de l'équipe
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 }
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