ENIB 2025 :Tassive Mits
Titre de la fiche expérience :
Sommaire
[masquer]Description
Tassive Mits Machine est un dispositif innovant qui permet de verser dans un verre deux liquides préalablement sélectionnés, avec des doses précisément ajustées selon les besoins. Grâce à son système de dosage automatisé, il garantit une précision optimale et une expérience utilisateur fluide.
Introduction
Base du projet
Nous sommes partis du matériel disponible pour le petit robot et avons imaginez un prototype présent sur le papier ci-dessus.
Prototype
Outil et matériel
**Quantité** | **Matériel/Outil** |
---|---|
2 | Servomoteur à rotation continue |
1 | ESP8266 |
1 | Shield pour servomoteur Petit débrouillard |
1 | Batterie externe pour l'alimentation |
1 | Câble USB-A vers USB-B mini |
3 | Bouteilles de taille similaire |
2 | Support à bouteilles |
1 ou plus | Grand tube (selon la taille requise) |
* | Clous |
* | Vis |
1 ou plus | Carton, bois, ... |
1 | Scotch |
1 | Pistolet à colle |
Fichiers à joindre
Code Arduino
1
2 ////////////////////////
3 //TASSIVE MITS MACHINE//
4 ////////////////////////
5
6 // programme écrit par Clément Liorzou, basé sur le programme du petit bot
7 // projet réalisé dans le câdre de l'intersemestre 2024-2025 de l'ENIB
8
9
10 // on appelle la bibliothèque qui gère le Wemos D1 mini
11 #include <ESP8266WiFi.h>
12
13 // Gestion du Wifi
14 #include <ESP8266WebServer.h>
15 #include <DNSServer.h>
16 #include <ESP8266mDNS.h>
17 #include <WiFiClient.h>
18
19 // Definition du WiFi
20 const char *nomDuReseau = "kill_me"; // Nom du réseau wifi du petit bot
21 const char *motDePasse = ""; // Mot de passe du réseau wifi du petit bot
22 // ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon
23 // La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !).
24 //création du monServeur
25 ESP8266WebServer monServeur(80); // Création de l'objet monServeur
26
27 //Gestion des servomoteurs
28 #include <Servo.h> //appel de la bibliothèque qui gère les servomoteurs
29
30 // création des servomoteurs
31 Servo servo1; // Nom du servo qui gère la première roue
32 Servo servo2; // Seconde roue
33
34 //déclaration des Variables
35 int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...).
36 int curseurValue = 20;
37
38 void setup(){
39 delay(1000);
40 Serial.begin(115200); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
41 Serial.println();
42 Serial.println();
43 configDuWifi();
44
45 servo1.detach(); // Place les servos hors tension
46 servo2.detach();
47 pinMode(LED_BUILTIN, OUTPUT); //met la led du Wemos en sortie
48 digitalWrite(LED_BUILTIN, LOW); //met la led du Wemos sur le niveau bas ce qui l'allume.
49
50 servo1.attach(D1);
51 servo2.attach(D2);
52 }
53
54 void loop(){
55 val = -1;
56 monServeur.handleClient();
57 }
58
59 ///////////////////////GESTION DES INSTRUCTIONS///////////////////////////
60 void GestionDesClics() {
61 // le bouton est appuyé
62 monServeur.on("/verser", HTTP_GET, []() {
63 val = 1;
64 Serial.println("verser");
65 redactionPageWeb();
66 });
67
68 //on reçoit une valeur de curseur
69 monServeur.on("/", HTTP_GET, []() {
70 val = -1;
71 if (monServeur.hasArg("curseur")) {
72 curseurValue = monServeur.arg("curseur").toInt();
73 Serial.println(curseurValue);
74 }
75 redactionPageWeb();
76 });
77
78 }
79
80 ///////////////////////////LA PAGE WEB DE CONROLE De la Tassive Mits Machine/////////////////////////////////////////
81 void redactionPageWeb(){
82 // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
83 String pageWeb = "<!DOCTYPE HTML>\r\n";
84 pageWeb += "<html>\r\n";
85 pageWeb += "<head>\r\n";
86 pageWeb += "<meta charset=\"utf-8\">\r\n";
87 pageWeb += "<title>Tassive Mits Machine</title>\r\n";
88 pageWeb += "</head>\r\n";
89 pageWeb += "<body>\r\n";
90 pageWeb += "<center>"; //On ouvre la balise qui va centrer les boutons
91 pageWeb += "<h1 style=\"font-size:300%;\"\> La Tassive Mits Machine ";
92 pageWeb += "<style type=\"text/css\"> body { color: #212121; background-color: #FFFFFF } </style>";
93
94 // On finalise l'écriture de la page Web et on donne les instructions aux servos
95 instruction(val, curseurValue); // pour cela on appelle la fonction "instruction"
96
97 // On termine l'écriture de la page Web
98 pageWeb += "</h1>";
99 pageWeb += "<br>"; //aller à la ligne
100 pageWeb += "<br>"; //aller à la ligne
101
102 //curseur
103 pageWeb += "<form action=\"/\" method=\"get\">\r\n"; // Formulaire pour envoyer la valeur
104 pageWeb += "rapport dilué/quantité totale en % : <input type=\"range\" name=\"curseur\" min=\"0\" max=\"100\" value=\"" + String(curseurValue) + "\">\r\n";
105 pageWeb += "<input type=\"submit\" value=\"Envoyer\">\r\n";
106 pageWeb += "</form>\r\n";
107
108 //button
109 pageWeb += "<br><br>";
110 pageWeb += "<a href=\"/verser\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Verser </button></a>\r\n"; // créer un bouton "Stop", qui envoie sur l'URL /stop
111 pageWeb += "</center>"; // tout est centré sur la page
112 pageWeb += "</body>\r\n";
113 pageWeb += "</html>\n"; //Fin de la page Web
114
115 // On envoie la page web
116 monServeur.send(200, "text/html", pageWeb);
117 delay(1);
118 }
119
120 ///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////
121 void instruction(int valeur, int curseurValue){ //Cette fonction traite les instructions qui sont reçues
122 // Si on appuie sur le bouton, on verse avec les proportions du curseur
123 if (valeur == 1){
124 Serial.println(curseurValue);
125 Serial.println(2000*curseurValue / 100);
126 Serial.println(2000*(100-curseurValue) / 100);
127 Serial.println("pouring...");
128 servo1.write(0);
129 delay(900);
130 servo1.write(90);
131 delay(2000*curseurValue / 100);
132 servo1.write(180);
133 delay(900);
134 servo1.write(90);
135 delay(1000);
136
137 servo2.write(0);
138 delay(900);
139 servo2.write(90);
140 delay(2000*(100-curseurValue) / 100);
141 servo2.write(180);
142 delay(900);
143 servo2.write(90);
144 delay(1000);
145 Serial.println("done pouring, enjoy ! \n");
146 }
147 }
148 ////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////
149 void configDuWifi(){ // Fonction de configuratio du Wifi
150 WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
151 WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
152 MDNS.begin(nomDuReseau); // gérer les DNS ce qui rendra votre petit bot accessible
153 MDNS.addService("http", "tcp", 80); // via http://nomDuReseau.local
154 IPAddress monIP = WiFi.softAPIP(); // on récupère l'adresse IP du petit Bot
155 Serial.print("Adresse IP de ce Point d'Accès : ");
156 Serial.println(monIP); // on l'écrit sur le moniteur série
157 GestionDesClics();
158 monServeur.begin(); //Démarrage du monServeur
159 Serial.println("Serveur HTTP démarré");
160 return; // on retourne à l'endroit ou la fonction a été appelée.
161 }
Étapes de fabrication
Cette section décrit les différentes étapes nécessaires pour assembler et faire fonctionner le dispositif. Chaque étape est illustrée par des images pour faciliter la compréhension.
Étape 1 : Préparation des matériaux
1. Rassemblez les éléments listés dans la section "Outil et matériel".
2. Vérifiez que tous les composants fonctionnent :
- Testez rapidement les servomoteurs pour vérifier qu’ils tournent. - Assurez-vous que l’ESP8266 s’allume et est détecté par votre ordinateur.
3. Préparez un espace de travail propre et dégagé :
- Éliminez tout ce qui pourrait gêner. - Assurez-vous d’avoir suffisamment de lumière et de place pour manipuler les outils.
Étape 2 : Assemblage de la structure
1. Assemblez les plaques en carton ou bois pour créer la base du dispositif.
2. Fixez les supports à bouteilles avec des clous ou des vis.
3. Placez les bouteilles sur leurs supports pour vérifier l’équilibre.
Étape 3 : Installation des servomoteurs
1. Fixez les servomoteurs sur la structure à l’aide de vis ou d’un adhésif solide ou de ficelle.
2. Reliez les servomoteurs au shield "Petit débrouillard".
3. Vérifiez que les servomoteurs peuvent tourner librement sans frottement.
Étape 4 : Branchement de l'ESP8266 et alimentation
1. Connectez l’ESP8266 au shield avec les câbles appropriés.
- Vérifiez que les connexions sont solides et qu’il n’y a pas de court-circuit.
2. Branchez la batterie externe pour alimenter le système.
- Assurez-vous que la batterie est chargée.
3. Effectuez un test d’alimentation pour vérifier que tout fonctionne correctement.
Étape 5 : Calibration et tests
1. Calibrez les servomoteurs :
- Testez leur vitesse de rotation et leur direction. - Ajustez dans le code si nécessaire pour qu’ils fonctionnent de manière synchronisée.
2. Ajoutez les tubes ou autres éléments mécaniques nécessaires.
- Assurez-vous qu’ils sont bien fixés et qu’ils ne bloquent pas les servomoteurs.
3. Testez le système complet pour valider son bon fonctionnement.
- Simulez un cycle complet pour repérer les éventuels problèmes.
Étape 6 : Sécurisation et finalisation (Optionnel)
1. Fixez tous les composants solidement pour éviter qu’ils ne se détachent.
- Ajoutez de la colle ou du ruban adhésif si nécessaire.
2. Nettoyez les câblages pour éviter tout problème.
- Utilisez des colliers de serrage ou des guides pour organiser les fils.
3. Ajoutez un boîtier ou une protection si possible.
- Cela protégera les composants et donnera un aspect plus professionnel.
Troubleshooting
Cette section fournit des solutions aux problèmes courants que vous pourriez rencontrer lors de l’assemblage ou de l’utilisation du dispositif.
- Problème : Le servomoteur ne tourne pas.
- Solution : Vérifiez les connexions entre le servomoteur, le shield et l’alimentation. Assurez-vous que l’ESP8266 est bien programmé.
- Problème : Les bouteilles tombent de leurs supports.
- Solution : Ajustez les supports pour mieux maintenir les bouteilles ou utilisez un adhésif léger pour les stabiliser.
- Problème : Le dispositif n’est pas stable.
- Solution : Ajoutez du poids à la base ou élargissez les supports pour améliorer l’équilibre.
- Problème : Problème d'étanchéité.
- Solution : Vérifier s'il n'y a pas de trou puis sinon même à grosse dose essayer avec scotch, colle ou autre jusqu'à que ça soit hermétique
- Astuce : Simplifiez le câblage.
- Truc : Utilisez des connecteurs rapides ou des guides pour éviter que les fils ne s’emmêlent.
Sources et documentation complémentaire
Vous devez avoir comme interface web ceci.