Skip to main content

Dosage Colorimétrique Arduino

Le dosage est une technique permettant de déterminer la quantité de matière ou la concentration d'une entité chimique dans une solution connue. Les réactions de dosage sont des réactions rapide, totale et ou le réactif de la solution titrante (solution de concentration connue) doit réagir avec une unique espèce d'un solution titrée (solution de concentration inconnue). Le dosage colorimétrique est une technique permettant de repérer l'équivalence par un changement de couleur du milieu réactionnel. Le changement de couleur de la solution également que les réactifs ont été introduits dans les proportions stœchiométriques. 

L'objectif du projet est de réguler et d'automatiser un dosage colorimétrique acido-basique par Arduino. Il s'agira de titré de l'acide chlorydrique (HCl), par une solution de soude (NaOH) solution titrante de concentration connue. L'indicateur colorée utilisé est la phénolphtaléine. Pour réaliser le projet, le matériel suivant est utilisé:

  • Burette
  • Béchers
  • Servomoteur
  • Une photorésistance (pour mesurer l'intensité lumineuse)
  • une LED pour mettre en évidence le changement de couleur
  • 2 Résistances
  • Microcontrôleur Arduino 
  • BreadBoard

I. Matériel

  1. Arduino

La première partie du projet consiste à réaliser les branchements le moteur pas à pas, la LED, la photorésistance et les résistances sur le microcontrôleur Arduino. Après avoir réalisé un schéma de câblage sur Tinkercad, nous avons branché nos différents équipements sur Arduino.

Schéma de cablage Tinkercad.jpg

Figure 1: Schéma de câblage sur Tinkercad

Après avoir branché nos appareils sur Arduino, différents langage informatique ont été mis sur Arduino afin de montrer que les différents équipements pouvait fonctionner indépendamment des autres. Il a donc été démontré que les appareils fonctionnait indépendamment des autres, cependant certains dysfonctionnement ont pu être mis en avant.:

  • Le moteur pas à pas qui se bloque après avoir atteint une valeur seuil.

LED allumé.jpg

Nous avons trouvé un servo moteur mieux adapté à la plaque Arduino ainsi qu'aux pièces que nous possédons qui relient le moteur à la clé de robinet de la burette. Ainsi, voici notre montage:

Montage Arduino.jpg

Après avoir rentré un langage informatique sur Arduino pour nous assurer que le servomoteur  fonctionnait. Le code que nous avons rentré consistait à faire tourner les pales du servomoteur en fonction de la valeur de l'angle (variables que nous rentrons dans le langage informatique). Après plusieurs essais, nous avons pu constater que le servomoteur fonctionnait et qu'il était apte à faire tourner le robinet de la burette.

Enfin, nous avons vérifier l'état de fonctionnement de la photorésistance. Pour cela nous avons utiliser le code suivant pour la faire fonctionner :

int photo = A0; // Déclaration de la photorésistance sur Arduino
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(photo, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int lecture = analogRead(photo); // Lecture de la valeur enregistré par la photorésistance en fonction de l'intensité lumineuse
  Serial.println(lecture); // Enregistrement la valeur sur Arduino (Les valeurs sont enregistrés en ligne
}

Ce code nous à permis de calibrer la photorésistance en fonction de l'intensité lumineuse. Ainsi, nous avons pu établir une corrélation entre les valeurs enregistrés par Arduino, et l'intensité lumineuse.

Conditions dans laquelle se trouve la photorésistance Valeur enregistré par Arduino Conclusion
-Boite en carton fermé Valeur aux alentours de 10 La photorésistance ne capte aucune lumière 
-Boite en carton en fermé troué pour faire passer un faisceau lumineux  Valeur aux alentours de 170
-Photorésistance éclairé par une lampe torche de téléphone à une distance d'environ 3 à 5 cm Valeurs aux alentours de 975
-Lampe torche du téléphone collé à la photorésistance Valeurs supérieur à 1013 On est presque au maximum de l'intensité lumineuse pouvant être capté par la photorésistance
-Photorésistance éclairée par la lumière ambiante du FabLab à 17h13 Valeurs aux alentours de 866

    2.Impression 3D et Construction d'une boîte opaque

Pour pouvoir tourner le robinet de la burette, un servomoteur n'est pas suffisant. En effet, nous avons du adapter une clé de robinet sur la burette. Cette clé sera scotché aux pales du servomoteur afin de pouvoir faire tourner le robinet de la burette, et de verser la solution titrante dans la solution titrée. La clé de robinet à été réalisé à l'aide de l'impression 3D en utilisant du PFA.

Clé de robinet .jpg

Dans le cadre du dosage il est nécessaire de mettre le bécher dans une boîte opaque pour que les valeurs affichés par la photorésistance ait du "sens". Autrement dit, il faut que la photorésistance capte uniquement la lumière issu de la source lumineuse (dans notre cas il s'agit d'une lampe de poche), et pas la lumière produit par les lumière de la salle ou de la hotte. 

Boîte opaque.jpg

    3.Code Arduino 

En ce qui concerne le code Arduino, nous avons trouvé des codes séparés pour la LED (Fig ), la photorésistance (Fig ) et le servomoteur (Fig ), que nous avons testé afin de vérifier le bon fonctionnement du matériel. Le montage est installé, nous avons ensuite écris un code adapté à faire tourner notre système en prenant compte des trois unités simultanément.

#include <Servo.h>  // on inclut la bibliothèque servo

Servo servoMoteur;   // on crée un objet servo appelé servoMoteur

//set pin numbers
//const won't change
const int ledPin = 5;   //Déclaration de la LED sur ARDUINO
const int ldrPin = A0;  //Déclaration de la photorésistance


void setup() {

  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);  //iLED en sortie
  pinMode(ldrPin, INPUT);   //Photorésitance en entrée
  servoMoteur.attach(6); // Servo moteur en position 9
}

void loop() {

  int ldrStatus = analogRead(ldrPin);   //Lecture de la valeur de la photorésistance
  //Regarder si la valeur de la photorésistance est inferieur ou égale à <= x
  //Si c'est le cas, la LED est éteinte le titrage commence

   if (ldrStatus <=x) {

    digitalWrite(ledPin, LOW);              //LED est eteinte
    Serial.println();                       //Les valeurs de la photorésitance sont enrgistrés en ligne
    servoMoteur.write(0);                   //Le servomoteur passe de l'angle 0 à un angle de 90°
    delay(1000);

   servoMoteur.write(90);
   delay(1000);
   digitalWrite(ledPin, LOW);
    
   }
  else {

    digitalWrite(ledPin, HIGH);          //LED allumé au changement de couleur 
    Serial.println();
    servoMoteur.write(0);                 // Le servomoteur repasse en position 0
    delay(1000);
  
  }
}

4.Test d'ouvertures du robinet et photorésistance  sur dosage

Les premiers tests d'ouvertures du robinets se sont montrés fructueux. On aurait pu craindre que les pales du servomoteur n'ait pas suffisamment de puissance pour faire tourner la clé de robinet, mais ce ne fut pas le cas.

Nous avons aussi réaliser un test pour calibrer la photorésistance lors du changement de couleur dans la boîte opaque. Après de multiples tests, nous avons remarqué que plusieurs paramètres pouvait influencer la valeur analogique de la photorésistance comme par exemple l'agitation, la position du bécher par rapport à la source lumineuse. De plus, nous avons remarqué que les gammes des valeurs ne sont pas stables entre deux expériences. Nous en avons conclu qu'avant chaque expérience, il était important de calibrer la solution d'HCl seul avant de commencer le titrage. Cependant lors du titrage, nous n'avons pas remarqué de différences significatives entre la solution d'HCl, et la solution de couleur rose à l'équivalence après ajout de la soude. Ces résultats peuvent être expliqués par la position de la photorésistance, du bécher et de la source lumineuse.