Skip to main content

Réalisation d'une burette automatique (Groupe A)

image.png

Figure 1 : Image du montage final de la burette automatique

Informations

  • Fatimat ABDULWAHAB, Shola ADENIYI, Aya BOUSSALEH, Hugo LUTZ et Raounaki SAID ABDALLAH

  • fatimat.abdulwahab@etu.sorbonne-universite.fr; shola.adeniyi@etu.sorbonne-universite.fr;  Aya.boussaleh@etu.sorbonne-universite.fr ; hugo.lutz@etu.sorbonne-universite.fr ; raounaki.said_abdallah@etu.sorbonne-universite.fr 

  • Projet IC 803 - Optimisation et contrôle de procédé 

  • Octobre 2024 - Janvier 2025

Contexte

Dans le cadre de l'UE Optimisation et contrôle de procédés, nous devons effectuer la régulation d'un système à l'aide d'une carte Arduino. Pour ce faire, nous devons déterminer le matériel nécessaire ainsi que les branchements et le code qui permettront l'automatisation de notre procédé.

Objectifs

Notre sujet porte sur la réalisation d'une burette automatique. Pour effectuer la régulation, nous utiliserons un capteur de couleur pour mesurer l'intensité de la couleur dans le liquide, une électrovanne pour contrôler le débit de liquide coloré. Nous utiliserons également un capteur de distance pour mesurer la volume du liquide versé et un moteur DC pour agiter le liquide. Le but est d'atteindre une couleur définie dans le récipient rempli d'eau.

Matériel

  • Arduino

  • Breadboard
  • Moteur DC
  • Electrovanne 
  • Capteur de couleur (TCS3200) 
  • Capteur de distance à ultrason (Grove-Ultrasonic ranger V2.0)
  • Agitateur (imprimé 3D)

  • Ecran LCD (Grove - 16 x 2 LCD (White on Blue))
  • Relais
  • Module Mosfet
  • Résistances 

  • Tuyaux

  • Fils

  • LED rouge
  • Bouteille 

  • Photorésistance (pas utilisé)

Construction

14/10/2024 

Lors de notre rencontre, nous avons déterminé nos besoins en termes de matériel et nous avons commencé à tester les différents composants à tour de rôle en commençant par la photorésistance.

21/10/2024 

Nous nous sommes réunis afin de mieux définir notre projet. Voici le procédé que nous souhaitons obtenir:

Dans une boîte opaque, nous aurons un récipient contenant de l’eau, la photorésistance et une lampe. La boîte opaque nous permet de contrôler la lumière qui sera détectée dans le milieu. Lorsqu'on appuie sur le bouton, un capteur à ultrason mesure le niveau du colorant/sirop à t=0, la LED rouge s’allume, l’agitateur se met en route et l’électrovanne s’ouvre. Tant que la photorésistance détecte plus de lumière qu’une valeur seuil, l'électrovanne reste ouverte donc on fait couler le sirop/colorant. Au fur et à mesure, la photorésistance détectera de moins en moins de lumière jusqu’à atteindre la couleur souhaitée. Une fois cette couleur atteinte, l’électrovanne se ferme, l’agitateur s’arrête et la LED s’éteint. On mesure le niveau du colorant à la fin afin de connaître la quantité qui a été versée pour atteindre la couleur définie; cette valeur sera ensuite affichée sur un écran LCD.



Figure 2 : Schéma 3D de la burette automatique

07/11/2024 

Nous nous sommes retrouvés dans une salle afin d'avancer sur le projet. L’objectif est de définir ce qu’il reste à faire et de se répartir les tâches afin que nous puissions véritablement commencer les tests en utilisant directement le matériel. 

Nous avons réussi à faire fonctionner l’électrovanne en faisant couler de l’eau d’une bouteille à l’autre. De plus, le capteur pour la mesure de la distance est à présent fonctionnelle.

image.png

Figure 3 : Fonctionnement de l'électrovanne

Pour l’agitateur, nous utiliserons ce modèle que nous allons imprimer en 3D: https://www.thingiverse.com/thing:4676097/files . Par la suite, on utilisera de la colle pour attacher l’agitateur au moteur. Nous avons utilisé le logiciel IdeaMaker pour dimensionner l'agitateur et nous avons lancé l'impression de notre agitateur de 10 cm. 

image.png

Figure 4 : Agitateur imprimé en 3D

25/11/2024 

Nous nous sommes retrouvés au Fablab, l'objectif de la séance est de bien vérifier le fonctionnement de chaque élément séparé de notre système, notamment, le moteur utilisé pour l'agitation. Il s'avère que nous avions un moteur pas-à-pas, alors qu'il nous faudrait un moteur DC pour pouvoir agiter à de vitesses suffisantes. Nous avons donc récupéré un moteur DC et par la même occasion un capteur de couleur. Nous avons pu tester le moteur DC et l'avons attaché d'une façon un peu précaire à l'agitateur imprimé en 3D. 

Lors de la prochaine séance nous allons tester le capteur de couleur et trouver la manière dont nous allons fixer l'agitateur au moteur. 

09/12/2024 

Nous nous sommes retrouvés dans une salle avec notre tuteur pour qu'il nous explique le fonctionnement de capteur de couleur ainsi que le code arduino correspondant pour la mise en marche. Ce capteur de couleur mesure l'intensité lumineuse avec différents filtres et renvoie une valeur en rouge, bleu et vert. Plus la couleur est rouge intense, plus la valeur mesurée est élevée.

image.png

Figure 5 : Image du serial moniteur d'Arduino avec un seuil à "red" = 175

18/12/2024 

Nous nous sommes retrouvés au Fablab dans le but d'avancer dans la partie fixation de notre matériels sur le support. Le support de la bouteille a été réalisé à l'aide d'une découpeuse laser, tandis que l'électrovanne a été fixée à l'aide d'une presseuse et de vis.

Fixation du support.jpeg

Figure 6 : Fixation électrovanne

19/12/2024 

Conception (par découpe laser) et fixation de la boite noire.

Conception de la boite noire.jpegFigure 7 : Fixation de la boite noire

09/01/2025

Nous nous sommes réunis au Fablab pour programmer le capteur de couleur, et tester son fonctionnement. En parallèle, nous avons poursuivi l’assemblage de notre matériels sur le support.

15/01/2025

Nous nous sommes réunis au FabLab pour avancer sur notre projet. Nous avons recouvert l'intérieur de notre boîte noire avec du papier adhésif, puis nous avons poursuivi l'installation de notre matériel sur le support. Nous avons également connecté la LED et le moteur. Cependant, nous avons rencontré un problème avec le moteur : bien qu'il s'allume correctement lorsque la broche est réglée sur HIGH, il ne s'éteint pas avec LOW. Pour résoudre ce problème, nous avons fixé un rendez-vous avec notre tuteur le 20/01.

image.pngFigure 8 : Montage Arduino avec LED et moteur sur breadboard

20/01/2025

Nous avons rencontré notre tuteur pour résoudre le problème lié au moteur. Il s'est avéré que l'Arduino ne pouvait pas fournir les 5 V nécessaires à tous les composants. Pour y remédier, nous avons connecté le moteur et l'électrovanne à une alimentation indépendante de 12 V, ce qui a permis à celui-ci de fonctionner correctement. Cependant, cette tension est trop élevée donc nous utilisons un potentiomètre pour régler le la tension qui arrive au moteur et donc la vitesse du moteur. 

Nous avons ensuite gravé au laser un QR code menant à notre Wiki, nos noms, ainsi que l'UE encadrant notre projet, sur une planche de peuplier de 6 mm.

ettckh0b.pngFigure 9 : Plaque d'identification du projet

22/01/2025

Notre objectif étant de détecter un changement de couleur avec du sirop rouge, il s'avère être problématique d'avoir un agitateur rouge. De ce fait, nous avons fait une autre impression 3D d'un agitateur noir qui ne sera pas détecté par le capteur de couleur. Nous avons fait un trou au niveau de l'agitateur afin de pouvoir le fixer au moteur. Par la suite, nous avons tester notre système d'électrovanne et de capteur de distance. Les deux fonctionnent. Cependant, nous  avons détecté des fuites au niveau de l'électrovanne. Néanmoins, nous avons essayé de tester l'écran LCD après un essai, ce dernier ne nous affichait plus le bon message. Par ailleurs, nous avons solidifié notre montage.

image.png WhatsApp Image 2025-01-28 at 14.59.24.jpeg
Figure 10: Montage fixé avec LCD Figure 11 : Nouvel agitateur noir
23/01/2025

Lors de notre rencontre avec notre tuteur, il nous a aidé à régler les problèmes de fuites en nous fournissant du ruban teflon à coller sur l'électrovanne. Nous avons pu trouver la source du problème pour l'écran LCD qui ne fonctionnait pas car l'adresse utilisée n'était pas la bonne. En effet, il faut utiliser 0X3E et pas 0X27. 

image.png WhatsApp Image 2025-01-23 at 17.55.17 (1).jpeg
Figure 12: Dos du montage avec tous les branchements Figure 13 : Ecran LCD affichant le volume versé

En modifiant le code, nous pouvons à présent afficher le volume versé dans notre gobelet. Cependant, la précision de notre capteur de distance est de 1 cm ce qui n'est pas assez précis car nous allons verser une petite quantité de sirop. Le problème qui se pose actuellement est que lorsque nous arrêtons totalement l'électrovanne l'eau continue de couler au goutte-à-goutte. De plus, le potentiomètre dégage une odeur de brûlé quand nous actionnons le moteur. 

27/01/2025

Nous sommes allés voir notre tuteur pour des problèmes liés au moteur et à l'électrovanne. En effet, le liquide continuait de couler  après avoir éteint l'électrovanne. En ce qui concerne le moteur, les potentiomètres ne nous permettaient pas de réguler la tension au borne du moteur, et donc sa vitesse de rotation. A l'issu de cette rencontre, nous avons utilisé un relais pour contrôler l'électrovanne et un module mosfet pour le moteur.  Nous sommes ensuite allé au Fablab pour tester ces nouveaux composants. Le relay fonctionne, mais pas le mosfet.  Nous ne pouvons toujours pas contrôler la tension au borne du moteur avec précision. 

28/01/2025

Nous sommes allé voir notre tuteur pour résoudre nos problèmes de moteur. Finalement, nous avons remarqué que nous n'avons pas besoin de mélanger. En effet, le mélange se fait naturellement par diffusion et nous obtenons une solution bien homogène. Nous avons donc retiré le moteur et l'agitateur, qui ne sommes donc plus nécessaires. 

Description du fonctionnement final de notre système :

Au départ, un verre d'eau est introduit dans notre boite noire, et l'agitateur est positionné dans le verre. Le système commence par faire une mesure de la distance du liquide. Ensuite le capteur de couleur mesure l'intensité du rouge dans le verre en boucle. Tant que la valeur est au dessus du seuil défini, l'électrovanne est alimentée (le liquide coloré coule) et la LED rouge est allumée. Dès que la valeur seuil est atteinte, l'électrovanne n'est plus alimenté, la LED s'éteint, et le capteur de couleur mesure une deuxième fois la distance. A l'aide de ces deux valeurs de distance, le volume de liquide ajouté est calculé et affiché sur l'écran LCD. 

Conclusion

A l'issue de ce projet, nous avons pu atteindre notre objectif qui est de réguler la couleur finale dans un récipient d'eau. Malgré les complications avec le moteur DC, nous avons su réagir rapidement et adapter notre système avec le matériel à notre disposition. Ce projet nous a permis d'élargir nos connaissances en dehors de notre formation initiale. En effet, nous avons pu utiliser différentes machines tels que Raise3D pour l'impression 3D et la découpeuse laser pour la plaque d'identification du projet. Nous avons aussi appris à coder et à utiliser des composants électroniques divers et variés. 

Vidéo : Fonctionnement de la burette automatique

Voici le code final utilisé pour la réalisation de notre burette automatique:

#include <Wire.h>        //bibliothèque pour communiquer avec I2C
#include <Ultrasonic.h>  //bibliothèque du capteur à ultrason
#include "rgb_lcd.h"     //bibliothèque de l'écran LCD

#define led 2
#define S0 3    //S0 S1 frequence
#define S1 4
#define S2 5    //S2 S3 filtre de couleur
#define S3 6
#define value 9             //valeur que renvoit le capteur de couleur
#define valvepin 8          //Pin de contrôle pour relais de l'électrovanne
Ultrasonic ultrasonic(11);  //Pin de contrôle du capteur à ultrason

//Création de nos différentes variables
float DistIni = 0.0;
float DistFin = 0.0;
float Volume = 0.0;
float RayonVerre = 3.4;  //Valeur du rayon en cm
double rouge = 0.0;
double rougetot = 0.0;
double rougemoy = 0.0;
double rougemoy1 = 0.0;
double rougemoy2 = 0.0;
int i = 0;
int seuil = 175;   //valeur de seuil

//Définition de l'écran LCD
rgb_lcd lcd;
const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

void setup() {

  //Définition du mode de nos pins
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(value, INPUT);
  pinMode(valvepin, OUTPUT);
  pinMode(led, OUTPUT);

  Serial.begin(9600);

  //Choix de l'échelle de fréquence à 20%
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);

  //Initialisation de l'écran LCD
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
  //lcd.print("Wait...");
}

void loop() {

  //Mesure initiale de la distance
  if (DistIni == 0) {
    DistIni = ultrasonic.MeasureInCentimeters();
    Serial.print("Distance initiale = ");
    Serial.print(DistIni);
    Serial.println(" cm");
  }

  // Mesure de l'intensité en rouge
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);

//Nous réalisons une boucle for pour calculer une moyenne des valeur de couleur (20 valeurs sur 1 seconde)
  for (int i=0; i<20; i++){
  rouge = pulseIn(value, HIGH);
  rougetot = rougetot + rouge;
  delay(50);
  }

  rougemoy = rougetot/20;
  Serial.print("red :");
  Serial.println(rougemoy);
  rougetot = 0.0;

  if (rougemoy < seuil) {          //Seuil de couleur rouge pas encore atteint
    digitalWrite(valvepin, HIGH);  //Vanne ouverte
    digitalWrite(led, HIGH);       //LED allumée
    lcd.clear();
    lcd.print(rougemoy);
  }

// Nous gardons en mémoire les trois dernières valeurs de rouge, lorsque les trois sont supérieures au seuil, le système s'arrête.
// En effet nous avons souvent une oscillation autour du seuil qui arrête et redemarre l'électrovanne toutes les secondes.
// Attendre trois valeurs au dessus du seuil permet d'éviter ce problème
  else if (rougemoy >= seuil  and rougemoy1 >= seuil and rougemoy2 >= seuil) {
    DistFin = ultrasonic.MeasureInCentimeters();                  //Mesure de la distance finale
    Volume = (DistIni - DistFin) * PI * RayonVerre * RayonVerre;  //Calcul du volume
    Serial.print("Distance Finale = ");
    Serial.print(DistFin);
    Serial.println(" cm");
    lcd.clear();
    lcd.print("Ready !");
    lcd.setCursor(0, 1);
    lcd.print("V = ");
    lcd.print(Volume);
    lcd.print(" mL");
    digitalWrite(valvepin, LOW);  //Vanne fermée
    digitalWrite(led, LOW);       //LED éteinte
    delay(1000000);
  }

//Nous gardons en mémoire les valeurs de rouge des deux étapes précédentes
  rougemoy2 = rougemoy1;
  rougemoy1 = rougemoy;
}