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

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Sources et documentation complémentaire)
(fichiers à joindre)
Ligne 25 : Ligne 25 :
 
   // put your main code here, to run repeatedly:
 
   // put your main code here, to run repeatedly:
  
 +
}
 +
 +
</syntaxhighlight>
 +
 +
===Code Arduino Antony===
 +
<syntaxhighlight lang="Arduino" line>
 +
///////////////
 +
// Petit Bot //
 +
///////////////
 +
// Un programme pédagogique des petits débrouillards ?=+ pour gérer le robot "Petit Bot"
 +
// Voir sur http://ancien.wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
 +
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
 +
// Sous licence CC-By-Sa
 +
// Par des gens bien
 +
 +
/* Schéma
 +
Lolin (Wemos) D1 mini
 +
                                   
 +
                                _________________
 +
                              /    D1 mini    \
 +
                              |[ ]RST        TX[ ]|
 +
                              |[ ]A0  -GPIO  RX[ ]|
 +
                              |[ ]D0-16    5-D1[X]|----\
 +
                              |[ ]D5-14    4-D2[X]|--\  \
 +
                              |[ ]D6-12    0-D3[ ]|  |  |
 +
                              |[ ]D7-13    2-D4[ ]|  |  |
 +
                              |[ ]D8-15    GND[X]|  |  |
 +
                              |[ ]3V3        5V[ ]|  |  |
 +
_                            |      +---+      |  |  |
 +
| |                          |_______|USB|_______|  |  /                          _
 +
| |      _                                        /  /                  _        | |
 +
| |    _| |_________                        _____/  /        _________| |_      | |
 +
| |    |    ______  |_data D1______________/        |_data D2_|  ______    |    | |
 +
| |  __|  | SG90 |  |_______________GND_______________________|  | SG90 |  |___  | |
 +
| |_|      |Servo |  |_______________Vin_______________________|  |Servo |      |_| |
 +
| |_|      |Gauche|  |                                        |  |Droit |      |_| |
 +
| | |__    |______|  |                                        |  |______|    ___| | |
 +
| |    |__  ________|                                        |_________  __|    | |
 +
| |      |_|                                                            |_|      | |
 +
| |                                                                                | |
 +
|_|                                                                                |_|
 +
                                                                   
 +
    ___
 +
  / ___ \
 +
|_|  | |
 +
      /_/
 +
      _  ___  _
 +
    |_| |___|_| |_
 +
          ___|_  _|
 +
        |___| |_|
 +
  Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
 +
  Antony Le Goïc-Auffret janvier 2025
 +
*/
 +
 +
// on appelle la bibliothèque qui gère le Wemos D1 mini
 +
#include <ESP8266WiFi.h>
 +
 +
// Gestion du Wifi
 +
#include <ESP8266WebServer.h>
 +
#include <DNSServer.h>
 +
#include <ESP8266mDNS.h>
 +
#include <WiFiClient.h>
 +
 +
//  Definition du WiFi
 +
const char *nomDuReseau = "petitbota";    // 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
 +
#include <Servo.h>  //appel de la bibliothèque qui gère les servomoteurs
 +
// création des servomoteurs
 +
Servo servogauche;  // Nom du servo qui gère la première roue
 +
Servo servodroit;    // Seconde roue
 +
 +
//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();
 +
  servodroit.detach();  // Place les servos hors tension
 +
  servogauche.detach();
 +
  pinMode(LED_BUILTIN, OUTPUT);    //met la led du Wemos en sortie
 +
  digitalWrite(LED_BUILTIN, LOW);  //met la led du Wemos sur le niveau bas ce qui l'allume.
 +
}
 +
 +
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 += "<html>\r\n";
 +
  pageWeb += "<head>\r\n";
 +
  pageWeb += "<meta charset=\"utf-8\">\r\n";
 +
  pageWeb += "<title>Petit bot</title>\r\n";
 +
  pageWeb += "</head>\r\n";
 +
  pageWeb += "<body>\r\n";
 +
  pageWeb += "<center>";    //On ouvre la balise qui va centrer les boutons
 +
  pageWeb += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
 +
  pageWeb += "<style type=\"text/css\">  body { color: #212121; background-color: #CC0C59 } </style>";
 +
 +
  // 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 += "</h1>";
 +
  pageWeb += "<br>"; //aller à la ligne
 +
  pageWeb += "<br>"; //aller à la ligne
 +
  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
 +
  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"...
 +
  pageWeb += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Recule </button></a>\r\n";
 +
  pageWeb += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Droite </button></a>\r\n";
 +
  pageWeb += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Gauche </button></a><br />\r\n";
 +
  pageWeb += "</center>"; // tout est centré sur la page
 +
  pageWeb += "</body>\r\n";
 +
  pageWeb += "</html>\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 gauche;                          // Variable dont la valeur 180 ou 0 fera tourner le servo gauche dans un sens ou l'autre
 +
  int droite;                          // Idem pour le servo droit
 +
  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 ";
 +
    droite = 90;
 +
    gauche = 90;
 +
    break;
 +
    case 1 :
 +
    completePage = " avance ";
 +
    droite = 180;
 +
    gauche = 0;
 +
    break;
 +
    case 2 :
 +
    completePage = " recule ";
 +
    droite = 0;
 +
    gauche = 180;
 +
    break;
 +
    case 3 :
 +
    completePage = " tourne a gauche ";
 +
    droite = 180;
 +
    gauche = 180;
 +
    break;
 +
    case 4 :
 +
    completePage = " tourne a droite ";
 +
    droite = 0;
 +
    gauche = 0;
 +
    break;
 +
    // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
 +
  }
 +
  servogauche.attach(D1);    // Broche D1
 +
  servodroit.attach(D2);      // Broche D2
 +
  servogauche.write(gauche);
 +
  servodroit.write(droite);
 +
  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.
 
}
 
}
  

Version du 20 janvier 2025 à 15:32

Titre de la fiche expérience :

description (résumé)

éventuelle photo de l'équipe

IMG 20250120 110627.jpg

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

ne pas modifier sous cette ligne