MainQuiPointeDroite.png Bonne année 2025 ! Meilleursvoeux.gif

ENIB 2025 :Tassive Mits

De Les Fabriques du Ponant
Aller à : navigation, rechercher

Titre de la fiche expérience :

Description

TMMLogo.png

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

Brouillon du prototype

Nous sommes partis du matériel disponible pour le petit robot et avons imaginez un prototype présent sur le papier ci-dessus.

Prototype

Système de distribution d'un liquide
Prototype vue du dessus
Goulot de sortie.

Outil et matériel

Liste des outils et du matériel nécessaires
**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

Fixez les plaques de support et positionnez les bouteilles.

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

Testez les servomoteurs pour qu’ils actionnent les tubes.

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

Câblage.

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

Vue intérieur résultat final.
Vue extérieur résultat final.

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

HTMLTMM.png

Vous devez avoir comme interface web ceci.

Elément de présentation

Affiche de vente