# Projet : Automatisation et régulation du pH

[![Capture d'écran 2026-01-28 132536.png](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/scaled-1680-/capture-decran-2026-01-28-132536.png)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/capture-decran-2026-01-28-132536.png)


### **UE MU5CI823-Optimisation, contrôle et digitalisation des procédés**

**Groupe 8**

**Noms et Prénoms:**

SELMANI Abderrahmane (abderrahmane.selmani@etu.sorbonne-université.fr) 21518618

DOGHRI Adam (adam.doghri@etu.sorbonne-universite.fr) 21518599

Si Tayeb Fares (fares.si-tayebetu.sorbonne-universite.fr) 21519164

Djebrouni Rayan (rayan.djebrouni@etu.sorbonne-universite.fr) 21519173

<div id="bkmrk-cursus%3A-master-2-de-">**Cursus scolaire: Master 2 de Chimie - Parcours Ingénierie Chimique</div><div id="bkmrk--2">  
</div><div id="bkmrk--3"></div><div id="bkmrk--4"></div><div id="bkmrk-date-de-d%C3%A9but%3A%C2%A0">**Date de commencement des projets:** octobre 2023</div><div id="bkmrk--5">  
</div><div aria-label="Page Section Options" class="pointer-container" id="bkmrk-%C2%A0-3" refs="pointer@pointer" tabindex="-1"><div class="pointer flex-container-row items-center justify-space-between p-s anim is-page-editable"><div class="flex-container-row items-center gap-s" refs="pointer@mode-section"><button class="text-button icon px-xs" title="Permalink mode, Press to show include tag"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="input-group"> <button class="button outline icon" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div><div id="bkmrk-date-de-fin%3A%C2%A0-1-f%C3%A9vr">**Date de fin des projets:** janvier 2026</div><div id="bkmrk--6"></div>### <span style="color: rgb(186, 55, 42);">**I.Introduction:**</span>

Selon la qualité de l’eau prélevée, la production d’eau potable nécessite la mise en œuvre de différentes étapes faisant appel à quatre types de procédés : physiques, chimiques, physico-chimiques et biologiques.

Une station de production d’eau potable destinée au traitement des eaux de surface repose généralement sur une filière comprenant les étapes suivantes :  
dégrillage, tamisage, floculation–décantation, filtration sur sable, ozonation, filtration sur charbon actif et chloration.

Dans le cadre de notre projet, l’attention a été portée sur l’étape de neutralisation

#### **Objectif du projet:** 

L’objectif du projet est de concevoir et réaliser un système automatisé de régulation du pH d’une solution aqueuse (acide ou basique), piloté par une carte Arduino. Ce projet s’inspire des problématiques industrielles liées à la neutralisation des rejets liquides, étape clé dans le traitement des eaux industrielles avant rejet ou réutilisation.

### <span style="color: rgb(186, 55, 42);">**II.Le matériel utilisé**</span>

- 3 bouteilles en plastique (2 réservoirs pour l’acide et la base, un réacteur, et un tank).
- 3 électrovannes associées à des relais.
- Une sonde de pH
- Une Tige d’agitation associé à un moteur
- Un afficheur
- Un indicateur de niveau
- Un Arduino avec une plaque d’essai
- Des files et des tuyaux en plastique
- Interrupteur
- Un support en bois

#### **Les appareils utilisés**

- Découpeuse Laser.
- Perceuse à colonne.
- Scie électrique.
- Imprimante 3D.
- Des outils manuels ( pistolet à colle, perceuse, visseuse à main,…)

### <span style="color: rgb(186, 55, 42);">**III.Les étapes de construction**</span>

- **Étape 1 :** Construction du support Nous avons utilisé 2 plaques.

- **Étape 2 :** Mise en place des réservoirs

Nous avons fixé d’abord les 2 réservoirs des solutions acide et base. Ensuite, nous avons fixé le réacteur. Enfin, nous avons fait des trous pour faire passer les tuyaux.

- **Étape 3 :** Mise en place des électrovannes

Nous avons placé les électrovannes à la sortie des deux réservoirs ainsi que le réacteur. Nous avons associé à ces dernières des relais.

- **Étape 4 :** Impression de la tige

 Nous avons fait le design de la tige en utilisant le logiciel Tinkercad, et ensuite nous avons utilisé l'imprimante 3D. Enfin, nous avons relié la tige au moteur.

- **Étape 5 :** Montage finale

Nous avons fait le montage total, nous avons relié les électrovannes, la sonde de pH, l’indicateur de niveau avec la plaque d’essai et cette dernière avec Arduino auquel nous avons associé le programme de régulation de pH.

### <span style="color: rgb(186, 55, 42);">**VI.Principe de fonctionnement**</span>

-L’électrovanne liée au réservoir de l’acide s'ouvre quand l’interrupteur est ON, et donc l’acide se verse le réacteur.

-La valeur de pH est mesurée par la sonde de pH.

-L’agitation commence .

-Après 3 secondes de l’agitation, l’électrovanne liée au réservoir de la base s’ouvre automatiquement et la valeur de pH s’affiche au fur et à mesure dans l’afficheur.

-Dès que la valeur de pH atteint 7, les deux électrovannes se ferment automatiquement et l’électrovanne liée au réacteur s’ouvre pour la vidange dans le tank.

-Le niveau de remplissage de tank est indiqué par un capteur de niveau.

-Une fois le niveau seuil atteint, toutes les électrovannes s’arrêtent.

Pour bien illustrer l’idée du projet, nous avons réalisé ce schéma explicatif par :

[![Capture (5).PNG](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/scaled-1680-/7qKcapture-5.PNG)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/7qKcapture-5.PNG)

 Figure 1 : schéma de fonctionnement de procédé de régulation

L’eau du robinet est introduite dans la cuve principale, où un agitateur assure une homogénéisation continue du milieu. Le pH de la solution est mesuré en temps réel à l’aide d’un pH-mètre, qui transmet l’information au système de commande. En fonction de la valeur mesurée et de la consigne de pH, une solution acide ou une solution basique est injectée dans la cuve à partir de réservoirs dédiés, via des électrovannes. Lorsque le pH est trop élevé, la solution acide est ajoutée, tandis qu’en cas de pH trop faible, la solution basique est injectée. L’agitation permet une répartition rapide des réactifs, garantissant ainsi une correction efficace et continue du pH jusqu’à l’obtention de la valeur souhaitée.

[![WhatsApp Image 2026-01-28dad at 14.53.15.jpeg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/scaled-1680-/whatsapp-image-2026-01-28dad-at-14-53-15.jpeg) ](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/whatsapp-image-2026-01-28dad-at-14-53-15.jpeg)

 Figure 2 : Impression 3D des pales d'agitation

![whatsapp-image-2026-01-28-at-14-53-15.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-02/scaled-1680-/whatsapp-image-2026-01-28-at-14-53-15.jpg)

 Figure 3 : Pales d'agitation

![whatsapp-image-2026-01-2lkjm8-at-14-53-15.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-01/scaled-1680-/whatsapp-image-2026-01-2lkjm8-at-14-53-15.jpg)

 Figure 4 : Montage Arduino

### <span style="color: rgb(186, 55, 42);">**V.Code Arduino** </span>

<span style="color: rgb(0, 0, 0);">**Le code Arduino a été réalisé à l'aide de l'outil Ai ChatGpt5 :** </span>

> <div>\#include "DFRobot_PH.h"</div><div>\#include &lt;EEPROM.h&gt;</div><div>\#include &lt;Wire.h&gt;</div><div>\#include "rgb_lcd.h"</div><div>  
> </div><div>\#define PH_PIN A0</div><div>  
> </div><div>// Relais (déjà branchés chez vous)</div><div>\#define VALVE_BASE 7</div><div>\#define VALVE_ACID 8</div><div>  
> </div><div>// Consigne pH</div><div>const float PH_SET = 7.00;</div><div>  
> </div><div>// Petite hystérésis pour éviter ON/OFF permanent</div><div>const float HYS = 0.02;</div><div>  
> </div><div>DFRobot_PH phSensor;</div><div>rgb_lcd lcd;</div><div>  
> </div><div>float temperature = 25.0;</div><div>  
> </div><div>void setup() {</div><div> Serial.begin(115200);</div><div>  
> </div><div> pinMode(VALVE_BASE, OUTPUT);</div><div> pinMode(VALVE_ACID, OUTPUT);</div><div>  
> </div><div> // Relais actifs LOW → HIGH = vanne fermée</div><div> digitalWrite(VALVE_BASE, HIGH);</div><div> digitalWrite(VALVE_ACID, HIGH);</div><div>  
> </div><div> phSensor.begin();</div><div>  
> </div><div> lcd.begin(16, 2);</div><div> lcd.clear();</div><div> lcd.setCursor(0, 0);</div><div> lcd.print("Regulation pH");</div><div> delay(800);</div><div> lcd.clear();</div><div>}</div><div>void loop() {</div><div> // Lecture du pH</div><div> float voltage = analogRead(PH_PIN) * (5000.0 / 1024.0);</div><div> float pH = phSensor.readPH(voltage, temperature);</div><div>  
> </div><div> bool openBase = false;</div><div> bool openAcid = false;</div><div>  
> </div><div> // Logique de régulation</div><div> if (pH &lt; (PH_SET - HYS)) {</div><div> openBase = true;</div><div> }</div><div> else if (pH &gt; (PH_SET + HYS)) {</div><div> openAcid = true;</div><div> }</div><div>  
> </div><div> // Sécurité : jamais les deux en même temps</div><div> if (openBase &amp;&amp; openAcid) {</div><div> openBase = false;</div><div> openAcid = false;</div><div> } </div><div>  
> </div><div> // Commande des relais (actifs LOW)</div><div> digitalWrite(VALVE_BASE, openBase ? LOW : HIGH);</div><div> digitalWrite(VALVE_ACID, openAcid ? LOW : HIGH);</div><div>  
> </div><div> // Affichage LCD</div><div> lcd.setCursor(0, 0);</div><div> lcd.print("pH:");</div><div> lcd.print(pH, 2);</div><div> lcd.print(" ");</div><div>  
> </div><div> lcd.setCursor(0, 1);</div><div> lcd.print("BASE:");</div><div> lcd.print(openBase ? "ON " : "OFF");</div><div> lcd.print(" AC:");</div><div> lcd.print(openAcid ? "ON " : "OFF");</div><div>  
> </div><div> // Debug série</div><div> Serial.print("pH=");</div><div> Serial.print(pH, 2);</div><div> Serial.print(" | BASE=");</div><div> Serial.print(openBase ? "ON" : "OFF");</div><div> Serial.print(" | ACIDE=");</div><div> Serial.println(openAcid ? "ON" : "OFF");</div><div>  
> </div><div> delay(200);</div>

#### **Explication du code :**

Ce programme Arduino réalise une régulation automatique du pH d’une solution autour d’une valeur cible fixée à pH = 7. Il utilise un capteur de pH DFRobot, deux électrovannes commandées par relais (une pour ajouter une base et une pour ajouter un acide) et un écran LCD RGB pour l’affichage.

L’Arduino commence par initialiser la communication série (pour le débogage), configurer les broches des relais en sortie et les mettre à l’état HIGH car les relais sont actifs à l’état bas (LOW = vanne ouverte, HIGH = vanne fermée). Le capteur de pH est ensuite initialisé, ainsi que l’écran LCD qui affiche brièvement un message de démarrage.

Dans la boucle principale, l’Arduino lit en continu la tension issue du capteur de pH via l’entrée analogique A0. Cette valeur analogique (0–1023) est convertie en tension en millivolts, puis transformée en valeur de pH réelle grâce à la fonction `readPH()` de la bibliothèque DFRobot, en tenant compte d’une température supposée constante de 25 °C. Cette température est importante car la mesure du pH dépend légèrement de la température.

La valeur de pH mesurée est ensuite comparée à la consigne (pH = 7.00) avec une hystérésis de ±0,02. Cette hystérésis permet d’éviter des commutations trop fréquentes des relais lorsque le pH oscille autour de la consigne. Si le pH est inférieur à 6,98, cela signifie que la solution est trop acide : l’électrovanne de base est alors ouverte pour corriger le pH. À l’inverse, si le pH est supérieur à 7,02, la solution est trop basique : l’électrovanne d’acide est ouverte. Si le pH est dans la zone acceptable autour de la consigne, aucune vanne n’est activée.

Une sécurité logicielle empêche explicitement l’ouverture simultanée des deux vannes, ce qui éviterait une injection d’acide et de base en même temps (situation dangereuse et inefficace). Une fois la décision prise, l’Arduino commande les relais en appliquant un niveau LOW pour ouvrir la vanne concernée et HIGH pour la fermer.

En parallèle, l’écran LCD affiche en temps réel la valeur du pH mesuré sur la première ligne, et sur la deuxième ligne l’état des vannes (ON/OFF pour la base et l’acide). Les mêmes informations sont envoyées sur le moniteur série afin de permettre le suivi du fonctionnement et le diagnostic du système. La boucle se répète toutes les 200 ms, assurant une régulation réactive mais stable.

### **<span style="color: rgb(224, 62, 45);">VI. Schéma du montage : Plaque d’essai-Arduino</span>**

<span style="color: rgb(0, 0, 0);">Tinkercad est un programme de modélisation 3D en ligne qui s'exécute dans un navigateur web, connu pour sa simplicité et sa facilité d’utilisation. </span>

<span style="color: rgb(0, 0, 0);">Voici le schéma détaillé de notre montage : </span>

[![Capture d'écran 2026-02-04 115840.png](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-02/scaled-1680-/capture-decran-2026-02-04-115840.png)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-02/capture-decran-2026-02-04-115840.png)

Figure 5 : schéma du montage

Une vidéo explicative a été ajoutée afin d’illustrer le fonctionnement du système :

<span style="text-decoration: underline; color: rgb(53, 152, 219);">https://drive.google.com/drive/folders/1TZQ5oi3JKfVTSi8YBwyKRysVEG\_OjWrw?usp=sharing</span>