Skip to main content

Régulation du procédé de l'élaboration du biodiesel

Régulation de Température et de débit d'alimentation en réactifs pour la Production de Biodiesel

Introduction

La production de biodiesel représente une avancée significative vers une économie durable, offrant une alternative éco-responsable aux carburants traditionnels, réduisant les émissions de gaz à effet de serre et contribuant ainsi à la transition vers une énergie plus propre.

Le procédé consiste à la transestérification des triglycérides pour la production de biodiesel intègre deux réservoirs, chacun contenant des triglycérides et du méthanol avec KOH. Les réactifs sont précisément régulés par des électrovannes, alimentant un réacteur chauffé à 60°C via un système de chauffage à effet Peltier. Cette approche assure des conditions de réaction optimales, favorisant une conversion efficace des triglycérides en biodiesel.

Notre projet se concentre sur la régulation précise des paramètres clés du procédé. Sous la supervision de M. Jérôme PULPYTEL, notre équipe composée de Samy BOUACEM, Sihem BOUHROUM, Imane DADA, Mohammed MEBAREK AZZEM et Mohamed Amir FACI, et  a développé ce projet dans le cadre de l'unité d'enseignement MU5Ci803 (Optimisation et contrôle des procédés) Parcours Ingénierie Chimique.

Matériel Utilisés

  • 1 Microcontrôleur Arduino
  • 1 Bread-board
  • 1 Capteur de température au niveau du réacteur
  • 1 Peltier
  • 1 Capteur de niveau
  • 3 Résistances
  • 2 Boutons poussoir (ON/OFF)
  • Câbles et fils de connexion
  • 4 Sources d'Alimentation de 9V
  • 1 Agitateur
  • 4 Relais
  • 4 Moteurs à courant continu
  • 2 Réservoirs
  • 2 électrovannes
  • 1 Récipient comme un Réacteur
  • Un Support
  • 3 Plaques en plexiglass

Produits Utilisés

  • Triglycéride
  • Méthanol
  • KOH

Description du Procédé

Notre procédé se déroule en plusieurs étapes soigneusement orchestrées :

  • Après avoir activé le bouton ON de la première vanne, elle s'ouvre, permettant au premier réactif d'alimenter le réacteur. Lorsque le niveau atteint X mm, le capteur envoie un signal pour que la vanne se ferme automatiquement.
  • Le dispositif Peltier est activé, initiant le chauffage du réacteur à une température de 60°C. Une fois la température atteinte, on active le bouton ON de la deuxième vanne pour qu'elle s'ouvre afin d'alimenter le deuxième réactif. Simultanément, l'agitation du réacteur débute, assurant une homogénéité optimale de la réaction tout en maintenant la température constante à 60°C.
  • Une fois le niveau Y mm atteint, le capteur de niveau envoie un signal pour que la deuxième vanne se ferme.

Ces étapes séquentielles garantissent un contrôle précis du processus de transestérification, assurant une production efficace et cohérente de biodiesel.

Protocole Expérimentale

  • L'étape initiale consiste à introduire 200 ml d'huile alimentaire dans le récipient tricol.
  • Ensuite, le milieu réactionnel est chauffé à 60 °C à l'aide d'un bain-marie.
  • Les pastilles d'hydroxyde de potassium sont dissoutes dans le méthanol,
  • La solution est introduite dans le ballon sous agitation
  • Le système est ramené à la température ambiante
  • Le milieu réactionnel est transféré dans une ampoule à décanter
  • On laisse le mélange décanter jusqu'à la séparation des phases
  • Entre temps, on fait l'analyse de l'huile, notamment en mesurant son indice d'iode et son indice d'acide.

Avancement

La progression de notre projet était par plusieurs séances de Travail :

Première séance : Lors de notre première réunion, nous avons entamé une séance de brainstorming préliminaire pour fixer notre thème en évaluant la faisabilité du projet tout en définissant la méthodologie de travail.
Au cours de cette séance, nous avons également élaboré un GRAPHSET détaillé de notre projet.

plan_initial_65°C ~~ fin.png

Deuxième séance : Nous avons initié une simulation de notre projet sur Tinkercad et entamé la mise en place des connexions sur la breadboard. En parallèle, nous avons développé le support physique de notre projet.

nmbphrah.png

Troisième séance : Au cours de cette séance, nous avons découpé des plaques de matière PMMA d'un diamètre de 6 mm à l'aide de la machine à découper au laser. Ces plaques servent de support pour les deux réservoirs et le réacteur. Nous avons également installé les électrovannes de manière à assurer la propreté et l'ordre dans notre projet.

Quatrième séance : Nous avons poursuivi en coupant une plaque pour intégrer les conduites des réactifs, le détecteur de température et le capteur de niveau dans le réacteur. En parallèle, le développement du code Arduino a commencé pour automatiser et réguler notre système.

6ndelob8.png

Cinquième séance : Au cours de cette séance, nous avons imprimé un agitateur à l'aide de l'imprimante en 3D. 
Nous avons également entamé la rédaction du rapport sur le Wiki tout en intégrant notre système d'automatisation derrière le support, garantissant ainsi une présentation soignée et bien structurée.

4kvxayg1.png

Sixième séance : Nous avons procédé au branchement du câblage tout en finalisant le code qui automatisera et régulera notre système, qui est comme suite : 

#include <math.h> // Inclusion de la bibliothèque mathématique
#include <OneWire.h> // Inclusion de la bibliothèque OneWire
#include "Ultrasonic.h" // Inclusion de la bibliothèque Ultrasonic lié au capteur ultrasonic
#include <DallasTemperature.h> // Inclusion de la bibliothèque DallasTemperature lié au capteur de température

// Définition des broches pour les composants
#define PELTIER 6
#define VANNE_A 4
#define VANNE_B 5
#define AGITATEUR 3
#define ONE_WIRE_BUS 13 // Broche utilisée pour la communication avec le capteur de température

OneWire oneWire(ONE_WIRE_BUS);	// Initialisation du bus OneWire
DallasTemperature sensors(&oneWire); // Initialisation de la communication avec les capteurs de température

Ultrasonic ultrasonic(11); // Initialisation du capteur ultrasonique sur la broche 11

void setup() {
  pinMode(PELTIER, OUTPUT); // Configuration de la broche du Peltier en sortie
  pinMode(VANNE_A, OUTPUT); // Configuration de la broche de la vanne A en sortie
  pinMode(VANNE_B, OUTPUT); // Configuration de la broche de la vanne B en sortie
  pinMode(AGITATEUR, OUTPUT); // Configuration de la broche de l'agitateur en sortie
  Serial.begin(9600);  // Initialisation de la communication série à une vitesse de 9600 bauds
  sensors.begin(); // Initialisation des capteurs de température
}

void loop() {
  // Affichage de la température
  sensors.requestTemperatures(); 
  Serial.print("Temperature: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print("C  |  ");
  
  // Affichage de la distance
  long RangeInMillimeters;
  RangeInMillimeters = ultrasonic.MeasureInMillimeters();  
  Serial.print("Distance : ");
  Serial.print(RangeInMillimeters); 
  Serial.println(" mm");

  digitalWrite(VANNE_A, HIGH); // Ouverture de la vanne A

  // Contrôle de la température avec le Peltier
  while (sensors.getTempCByIndex(0) <= 60) {
    digitalWrite(PELTIER, HIGH); // Démarrage du Peltier
  }

  // Contrôle des actions en fonction de la distance mesurée
  if (RangeInMillimeters <= 50) {
    digitalWrite(VANNE_A, LOW); // Fermeture de la vanne A
    digitalWrite(VANNE_B, HIGH); // Ouverture de la vanne B
    delay(2000); // Attente de 2 secondes (en millisecondes)
    digitalWrite(AGITATEUR, HIGH); // Démarrage de l'agitateur
    
    // Affichage de la température après ouverture de la vanne B
    sensors.requestTemperatures(); 
    Serial.print("Temperature: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.print("C  |  ");
    
    // Contrôle de la température avec le Peltier après ouverture de la vanne B
    while (sensors.getTempCByIndex(0) <= 60) {
      digitalWrite(PELTIER, HIGH); // Démarrage du Peltier
    }
    
    // Mesure de la distance après ouverture de la vanne B
    RangeInMillimeters = ultrasonic.MeasureInMillimeters();  
    Serial.print("Distance : ");
    Serial.print(RangeInMillimeters); 
    Serial.println(" mm"); 
  }

  // Contrôle des actions si la distance est inférieure à 35 mm
  if (RangeInMillimeters <= 35) {
    digitalWrite(VANNE_B, LOW); // Fermeture de la vanne B
    
    // Affichage de la température avant l'attente de 45 minutes
    sensors.requestTemperatures(); 
    Serial.print("Temperature: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.print("C  |  ");
    
    // Contrôle de la température avec le Peltier après fermeture de la vanne B
    while (sensors.getTempCByIndex(0) <= 60) {
      digitalWrite(PELTIER, HIGH); // Démarrage du Peltier
    }
    
    delay(2700000);  // Attente de 45 minutes (en millisecondes)
    digitalWrite(AGITATEUR, LOW); // Arrêt de l'agitateur
    digitalWrite(PELTIER, LOW); // Arrêt du Peltier
  }
   
  delay(1000); // Attente de 1 seconde (en millisecondes)
}

draawnzu.png

Septième séance : Lors de cette séance, notre objectif principal était pour tester le bon fonctionnement de notre système. Nous avons identifié plusieurs problèmes, notamment :

  • Une des vannes était initialement dans la position NO (Normally Open), mais nous l'avons rapidement remplacée par une autre.
  • Nous avons également détecté des fuites dans les réservoirs et les vannes, et avons entrepris des ajustements pour les résoudre.

Parallèlement, nous avons débuté la conception de la plaque de présentation de notre projet. Un code QR a été intégré, dirigeant vers notre projet sur le wiki, et les noms des membres de l'équipe ont été ajoutés, accompagnés du logo de notre faculté, en utilisant le software Adobe Illustrator.

Huitième Séance : Lors de cette séance de test supplémentaire, nous avons rencontré des problèmes de code et de branchement. Nous avons pris le temps d'analyser ces problèmes afin d'apporter les ajustements nécessaires.

Nous avons également utilisé la machine laser pour fabriquer notre plaque de présentation.

skyhedgr.pnghnkw3vfm.png

Neuvième séance : Lors de cette séance, nous avons résolu avec succès les problèmes de branchement et de code, permettant ainsi au système de fonctionner correctement.

Cependant, nous avons rencontré un obstacle lié au capteur de température que nous avons tenté de résoudre, mais malheureusement sans succès. En conséquence, nous avons modifié notre plan d'automatisation du projet. Désormais, nous avons programmé l'agitation et l'ouverture de la deuxième vanne lorsque le niveau atteint la marque L1

De même, pour le capteur de niveau, nous avons constaté qu'après le début de l'agitation,  il est difficile de mesurer le niveau des réactifs en raison de la perturbation causée par l'agitation. Par conséquent, il n'est pas possible de conditionner la fermeture de la deuxième vanne avec un niveau L2 comme prévu initialement. Nous avons donc décidé de programmer la fermeture de la deuxième vanne avec un temps d'attente de 30 secondes après l'ouverture de la deuxième vanne.

Ces modifications sont illustrées dans le grafcet ci-dessous. 

après_65°C ~~ fin.png

A cet effet, le code a subi des modifications comme illustré ci-dessous. Il est à noter que le temps d'attente de 45 minutes a été réduit jusqu'à 30 secondes afin de permettre une visualisation et une représentation plus rapides de tout le travail.

#include <math.h> // Inclusion de la bibliothèque mathématique
#include <OneWire.h> // Inclusion de la bibliothèque OneWire
#include "Ultrasonic.h" // Inclusion de la bibliothèque Ultrasonic lié au capteur ultrasonic
#include <DallasTemperature.h> // Inclusion de la bibliothèque DallasTemperature lié au capteur de température

// Définition des broches pour les composants
#define PELTIER 6
#define VANNE_A 4
#define VANNE_B 5
#define AGITATEUR 3
#define ONE_WIRE_BUS 13 // Broche utilisée pour la communication avec le capteur de température

OneWire oneWire(ONE_WIRE_BUS);    // Initialisation du bus OneWire
DallasTemperature sensors(&oneWire); // Initialisation de la communication avec les capteurs de température

// Initialisation du capteur ultrasonique sur la broche 11
Ultrasonic ultrasonic(11); 

void setup() {
  pinMode(PELTIER, OUTPUT); // Configuration de la broche du Peltier en sortie
  pinMode(VANNE_A, OUTPUT); // Configuration de la broche de la vanne A en sortie
  pinMode(VANNE_B, OUTPUT); // Configuration de la broche de la vanne B en sortie
  pinMode(AGITATEUR, OUTPUT); // Configuration de la broche de l'agitateur en sortie
  Serial.begin(9600);  // Initialisation de la communication série à une vitesse de 9600 bauds
  sensors.begin(); // Initialisation du capteur de température
}

void loop() {
  
  // Affichage de la température
    sensors.requestTemperatures(); 
    Serial.print("Temperature: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.print("C  |  ");

  // Affichage de la distance
    long RangeInMillimeters;
    RangeInMillimeters = ultrasonic.MeasureInMillimeters();  
    Serial.print("Distance : ");
    Serial.print(RangeInMillimeters);//0~10000mm
    Serial.println(" mm");
  
  
  digitalWrite(VANNE_A, HIGH); // Ouverture de la vanne A
  digitalWrite(PELTIER, HIGH); // Démarrage du Peltier
    
  // Contrôle des actions en fonction de la distance mesurée
  if (RangeInMillimeters <= 50) {
    digitalWrite(VANNE_A, LOW); // Fermeture de la vanne A
    digitalWrite(VANNE_B, HIGH); // Ouverture de la vanne B
    delay(2000); // Attente de 2 secondes (en millisecondes)
    digitalWrite(AGITATEUR, HIGH); // Démarrage de l'agitateur
    delay(30000);  // Attente de 30 secondes (en millisecondes)
    digitalWrite(VANNE_B, LOW); // Fermeture de la vanne B
    delay(30000);  // Attente de 30 secondes (en millisecondes)
    digitalWrite(AGITATEUR, LOW); // Arrêt de l'agitateur
    digitalWrite(PELTIER, LOW); // Arrêt du Peltier
  }
  delay(1000);
}

Dixième séance : Lors de cette séance, nous avons testé notre projet d'automatisation, qui a fonctionné correctement à l'exception d'un problème avec l'intensité de l'agitation. En effet, celle-ci était excessive avec une alimentation de 12 V. Par conséquent, nous avons opté pour une solution en remplaçant cette alimentation par deux piles de 1,5 V chacune, ce qui fournit un voltage plus adapté et suffisant pour contrôler l'agitation.

1707680644397.jpg