ENIB 2025 : Le Bot-eau
Révision datée du 20 janvier 2025 à 15:32 par Antonydbzh (discussion | contributions) (→fichiers à joindre)
Titre de la fiche expérience :
Sommaire
description (résumé)
éventuelle photo de l'équipe
Introduction
éventuelle vidéo
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