Outils pour utilisateurs

Outils du site


wiki:projets:phmconduc:brouillon

BROUILLON

programe boitier difference () {

translate ([0,0,0]) cube ([50,20,15]); translate ([12.1,9.5,-1]) cylinder (r=7.9, h=30); translate ([37.9,9.5,-1]) cylinder (r=7.9, h=30); } code ph T et LCD :

//initializes/defines the output pin of the LM335 temperature sensor
int outputpin= 0;
#include "LiquidCrystal.h" //ajout de la librairie

LiquidCrystal lcd(11,10,5,4,3,2); 
int pin = A5; 
 
int valeur = 0; 
//this sets the ground pin to LOW and the input voltage pin to high
void setup()
{
Serial.begin(9600);
lcd.begin(8,2); 

}

//main loop
void loop()
{
int rawvoltage= analogRead(outputpin);
float millivolts= (rawvoltage/1024.0) * 5000;
float kelvin= (millivolts/10);
Serial.print(kelvin);
Serial.println(" degrees Kelvin");

float celsius= kelvin - 273.15;
Serial.print(celsius);
Serial.println(" degrees Celsius");

float fahrenheit= ((celsius * 9)/5 +32);
Serial.print(fahrenheit);
Serial.println(" degrees Fahrenheit");

valeur = analogRead(pin);

//Serial.print (valeur * (5.0 / 1023.0));
//Serial.print (';');

float U3 = 0 ;
float U2 = 0 ;

 U2 = (5 - (valeur * (5.0 / 1023.0)));
//Serial.print (U2);
//Serial.print (';');
 U3 = ((valeur * (5.0 / 1023.0)));

float I = 0;
float G = 0;
float C = 0;

 I = (180 * U3); // Intensité
 G = (U2 / I )*1000000; // Conductance en microsiemens
 C = G * 0.01; // Conductivité

//Serial.print (G); // 
//Serial.print (';');
Serial.print (C);
//Serial.print (";");

delay(3000);
lcd.print("T = ");
lcd.println(celsius); 
lcd.setCursor(0, 1); // saute une ligne
lcd.print("C = ");
lcd.println(C);

}

bouton long court :

int btn = 13;
int U4 = 0;
int U7 = 0;
float temps1 = 0;
float temps2 = 0;

void setup()
{ 
Serial.begin(9600); 
pinMode(btn, INPUT);
}

void loop()//la fonction appelée par l'interruption
{

if (digitalRead(btn) == LOW){ //si le bouton est encore appuyé
temps1=millis();
}
else{ // s'il est relaché, il est temps de regarder le temps qu'on l'a tenu appuyé
temps2=millis();}
if (temps2 - temps1 <= 3000){
U4 = 4; //metton l'allumage de ta led
}
else{
U7 = 7;//le reset, par exemple.
}
Serial.print(U4);
Serial.print(U7);
delay(1000);

}

- établir les valeurs extrêmes de résistance

- fixer la tension

- sonde température → faire des corrections (direct dans la programmation?)

- pour la sensibilité → il faut que les deux résistances soient du meme ordre de grandeur (une fixe et une variable)

- prendre un dico et avoir toutes les conductivités et ph utiles

  • Programme intéressant
//Fonctionnement: La valeur de la tension de sortie du capteur pH 
//         se convertit en pH et s'affiche ensuite sur le moniteur série.
#define Vref 4.95
void setup()
{ 
  Serial.begin(9600);
}
void loop()
{
  int sensorValue;
  int m;
  long sensorSum;
  for(m=0;m<50;m++)
  {
    sensorValue=analogRead(A0);//Connecter le capteur de pH au port A0
    sensorSum += sensorValue;
  }
   sensorValue =   sensorSum/50;
 Serial.print(" the PH value is"); 
 Serial.println(7-1000*(sensorValue-372)*Vref/59.16/1023);

} 

http://pdf.datasheetcatalog.com/datasheet/texasinstruments/tl081.pdf

  • Protocole pour l'étalonnage (dsl c'est en anglais mais il est plutot complet et sa provient d'un site qui represente une sorte de projet, comme nous)
Calibration
To calibrate a pH meter you need two buffer solutions. Select the buffer solutions depending on the pH range that you will work. This procedure considers that you pH sensor is linear in the working range: from 1 or 2 to 10 or 12 typically. Without this range the glass electrode has deviation.

Acid or neutral solutions: pH 4 and 7 buffers.
Alkaline solutions: pH 7 and 9 or 10 buffers.
Pay attention that you can find buffer solutions with values a little bit different. Example of buffer values for pH meter calibration are 4.01, 6,86, 7.01, 9.18, 10.01, and etc. What is important is to know the correct buffer value.

You can buy bottles or sachets of ready to use buffer solutions or buy sachets of poured buffer to mix with distillated water. Buffer solutions must be maintained in a refrigerator (don´t mix with food!) and they have a life time (they can develop fungus or bacterias).

Calibration Procedure
WARNING: Take care with the glass bubble. It is fragile.

Calibration for acid or neutral range
Adjust the gain trimpot to an intermediate value.
Remove the glass electrode protection.
Wash the electrode with distillated water and dry it using a soft paper carefully.
Put the pH sensor inside of pH 7 solution (remember that can be the pH 6.86 o 7.01).
Wait for the stabilization of the signal.
Adjust the offset trimpot to the nominal buffer value.
Wash the electrode with distillated water and dry it using a soft paper carefully.
Put the pH sensor inside of pH 4 solution (remember that can be the pH 4.01).
Wait for the stabilization of the signal.
Adjust the gain trimpot to the nominal buffer value.
Wash the electrode with distillated water and dry it using a soft paper carefully.
Calibration for alkaline range
Adjust the gain trimpot to an intermediate value.
Remove the glass electrode protection.
Wash the electrode with distillated water and dry it using a soft paper carefully.
Put the pH sensor inside of pH 7 solution (remember that can be the pH 6.86 o 7.01).
Wait for the stabilization of the signal.
Adjust the offset trimpot to the nominal buffer value.
Wash the electrode with distillated water and dry it using a soft paper carefully.
Put the pH sensor inside of pH 9 solution (remember that can be the pH 9.18 or 10.01).
Wait for the stabilization of the signal.
Adjust the gain trimpot to the nominal buffer value.
Wash the electrode with distillated water and dry it using a soft paper carefully.
The pH sensor is ready to use. To read the pH of your sample, put it inside of the sample and wait for stabilization of the signal. Always wash it and dry it carefully to avoid contamination when you change the samples.

After the use, wash it and dry it with a piece of soft paper carefully, and keep it in water solution to avoid dehydration of the glass bubble and the reference electrode porous ions channel.

http://pdf.datasheetcatalog.com/datasheet/texasinstruments/tl081.pdf

int btn = 13; int U4 = 0; int U7 = 0; float temps1 = 0; float temps2 = 0; int pin = A0;

void setup() { Serial.begin(9600); pinMode(btn, INPUT); }

void loop()la fonction appelée par l'interruption { if (digitalRead(btn) == LOW){ temps1=millis(); } else{ s'il est relaché, il est temps de regarder le temps qu'on l'a tenu appuyé

temps2=millis();}

if 1){ U4 = 4; metton l'allumage de ta led } else{ U7 = 7;le reset, par exemple. } Serial.print(U4); Serial.print(';'); Serial.print(U7); Serial.print(';'); delay(1000);

Quelques pistes pour la construction…

Il faudrait :

- une sonde de ph, une sonde conductimétrique et une sonde de température ;

- peut être un chauffage afin de conserver une température constante ;

- un générateur qui alimente l'Arduino ;

- une source de courant (en effet, l'Arduino est uniquement capable d'envoyer une tension), plusieurs possibilités avec pour chacune des avantages et certaines limites :

  • Arduino permet au générateur d'envoyer du courant sur l’électrode ;
  • Mettre un relais (plus simple et plus puissant que la première solution), c'est un interrupteur qui reste ouvert ou non selon le signal qu'Arduino lui envoie ;
  • Utiliser un optocoupleur (plus élégant), c'est un composé qui réagit avec la lumière, c'est donc un interrupteur optique (demander a Arduino d'allumer une LED par exemple). Cependant, il ne laisse pas passer toutes les tensions.
  • Utiliser un transistor, on lui envoie le courant et c'est à Arduino de le bloquer ou non selon les besoins. Cependant, on ne sait pas toujours comment les transistors réagissent, il peut y avoir certains problèmes donc si nous choisissons d'utiliser cette méthode, il en faudra un bien adapté à notre projet.

Afin de pouvoir décider laquelle de ces idées nous allons choisir, il faut que nous répondions aux questions suivantes : Quel sera l'ordre de grandeur de la résistance ? Quelle sera l'intensité du courant ? A quelles tensions s'attend-on ?

int sortie1 = 13;on déclare notre sortie int entree1 = 12; on déclare l'entrée

int sortie2 = 11; int entree2 =10;

void setup()

{

pinMode(entree1, INPUT); on déclare notre entrée pinMode(entree2, INPUT); } void loop() { if(digitalRead(entree1) == HIGH) on regarde si notre entrée capte du courant

{ digitalWrite(sortie1, HIGH); } on allume la DEL elsesinon

{ digitalWrite (sortie1, LOW); } on éteint la DEL { if(digitalRead(entree2) == HIGH) on regarde si notre entrée capte du courant

{ digitalWrite(sortie2, HIGH); } on allume la DEL elsesinon

{ digitalWrite (sortie2, LOW); } on éteint la DEL } } code final <code> float ph = 0; float U4 = 0; float U7=0; float b=0; float a= 0; float U=0; #include “LiquidCrystal.h” ajout de la librairie

LiquidCrystal lcd(13,11,5,4,3,2);

void setup()

{

pinMode(12, INPUT); on déc0lare notre entrée pinMode(10, INPUT); Serial.begin(9600); lcd.begin(8,2); } void loop() { if(digitalRead(12) == HIGH) { on regarde si notre entrée capte du courant

  ph=4;
  Serial.print (ph);
  Serial.print (';');
  U4 = analogRead(A0); 
  Serial.print (U4*5/1023);
  Serial.print (';');
  }
if(digitalRead(10) == HIGH) { // on regarde si notre entrée capte du courant
  ph=7;
  Serial.print (ph);
  Serial.print (';');
  U7 = analogRead(A1);
  Serial.print (U7*5/1023);
  Serial.print (';');
}
b = (-U7+U4)/3;
a=(-4*U7+7*U4)/3;
Serial.print(b);
Serial.print (';');
Serial.print(a);
Serial.print(';');
delay(1000);
if (a!=0){
  if (b!=0){
  //U=a-b*ph;
  ph = -(analogRead(A0)-a)/b;
  Serial.print(ph);
  Serial.print(';');}}

Serial.print (analogRead(A0) * (5.0 / 1023.0)); Serial.print (';');

float U3 = 0 ; float U2 = 0 ;

U2 = (5 - (analogRead(A0) * (5.0 / 1023.0))); Serial.print (U2); Serial.print (';'); U3 = 2));

float I = 0; float G = 0;

I = (180 * U3); Intensité G = (U2 / I )*1000000; Conductance en siemens

Serial.print (G); Valeur de la conductance en microsiemens Serial.print (';'); lcd.setCursor(0,0); lcd.print(“pH = ”); lcd.println(ph); lcd.setCursor(0,1); lcd.print(“G = ”); lcd.println(G); lcd.println(“ ms ”); } </code> Lien entre conductivité et température Dans nombre d’applications il est fixe à 2%/°C. ça serait le plus simple D'après le tableau presque à la fin du lien : Si on a la conductivité à 25°C, on doit la multiplier par 0,901 pour trouver celle à 20°C. Et donc : Si on a la conductivité à 20°C, on doit la multiplier par 1/0,901 = 1,11 pour trouver celle à 25°C. en faisant un produit en croix on pourrait pas fixer un coefficient? Pour s’affranchir de l’impact de la température sur la conductivité électrique, plusieurs modèles de correction ont été développés. Ils permettent aux conductivités électriques mesurées à diverses températures d’être ajustées pour une température de référence, généralement 25°C (Besson, 2007). (regarde dans le doc conductivité 3 que je t'ai envoyé) * lien ph- température pH1 = 7 + (pH-7)*T/285, avec pH1 le pH à 25 degrés celcius et donc ta référénce et T la tempréature en Kelvin de ta solution. Loi de Nernst

1)
temps2 - temps1 ⇐ 3000) && (digitalRead(btn) == LOW
2)
analogRead(A0) * (5.0 / 1023.0
wiki/projets/phmconduc/brouillon.txt · Dernière modification: 2020/10/05 16:39 (modification externe)