Cette page énumère tous les programmes utilisés pour la réalisation du projet (Description; Schéma du montage; Programmation Arduino)
Ce programme permet d'afficher les valeurs de pH et de la conductance sur l'écran LCD (ici valeur de la conductance sur la première ligne et valeur du pH sur la deuxième).
#include "LiquidCrystal.h" //ajout de la librairie LiquidCrystal lcd(11,10,5,4,3,2); void setup(){ lcd.begin(8,2); } void loop() { lcd.print("pH = "); lcd.println(ph); // pH lcd.println("T = "); lcd.println(T); // Température lcd.setCursor(0, 1); // saute une ligne lcd.print("C = "); lcd.println(C); // Conductivité }
Pour l'instant ce programme se contente juste d'allumer et éteindre une LED. Le but final étant de pouvoir allumer et éteindre l'ensemble conductimètre ph-mètre à l'aide d'un commutateur.
const int APPUI=0; const int PAS_APPUI=1; const int BP=2; const int LED=3; int ETAT_BP; void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entré } void loop(){ ETAT_BP=digitalRead(BP); if (ETAT_BP==APPUI){ digitalWrite(LED,1); // allume la LED } else { digitalWrite(LED,0); // éteint la LED } }
Ce programme nous permet de lire une tension en Volt à différents endroit du circuit. Une première tension lié a la résistance ⇒ cela nous permettra de calculer l'intensité du courant avec la formule suivante : R = I/U(3) Et un deuxième tension lié a la sonde conductimètre ⇒ cela nous permettra de calculer la conductance avec la formule suivante G = U(2)/I (Ici la sonde conductimètrique est représentée par une LED)
int pin = A0; int valeur = 0; void setup() { Serial.begin(9600); } void loop() { valeur = analogRead(pin); // on lit la tension entre la pin A0 et la masse (résistance) Serial.print (valeur * (5.0 / 1023.0)); // conversion en Volt Serial.print (';'); float U3 = 0 ; float U2 = 0 ; U2 = (5 - (valeur * (5.0 / 1023.0))); // tension de la sonde Serial.print (U2); Serial.print (';'); U3 = ((valeur * (5.0 / 1023.0))); //tension de la resistance float I = 0; // Intensité float G = 0; // Conductance float C = 0; // Conductivité I = (180 * U3); G = (U2 / I )*1000000; // Conductance en microsiemens C = G*2.696; // Conductivité Serial.print (G); Serial.print (';'); Serial.print (C); Serial.print (";"); delay(1000); }
Ce programme nous permet de mesurer la température grâce à un thermocouple (avec amplificateur max 31855).N'ayant pas reçu à temps l'amplificateur nous avons au final utiliser un simple capteur de température (programme et montage du capteur présent plus bas).
Voici un exemple pour l'amplificateur Thermocouple MAX31855 d'AdaFruit avec un thermocouple Type K Conçu spécificque pour fonctionner avec le senseur thermocouple disponible ----> http://shop.mchobby.be/product.php?id_product=301 (MCHobby Belgique/France) ----> https://www.adafruit.com/products/269 (AdaFruit USA) Ce programme utilise SPI pour communiquer, 3 broches sont nécessaire pour l'interface. Adafruit Investit du temps et des ressource pour fournir du code open source, s'il vous plait, supportez AdaFruit et l'Open Hardware en achetant des produit Adafruit! MCHobby investit du temps et des ressource pour traduire les documentations d'AdaFruit en Français. C'est une tâche longue et fastidieuse. Aidez nous à produire plus de documentation en achetant vos produits AdaFruit & autres chez MCHobby. Ecrit par Limor Fried/Ladyada pour Adafruit Industries. BSD license, tout le texte ci-dessus doit être inclus dans toutes les redistribution Traduit par Meurisse D. pour MCHobby.be - distributeur AdaFruit France et Belgique Tout les référence MCHobby doivent également être redistribué (pour sa tâche de traduction). Tutoriel Français complet disponible sur: http://mchobby.be/wiki/index.php?title=Senseur_Thermocouple ****************************************************/ #include "Adafruit_MAX31855.h" int thermoDO = 3; int thermoCS = 4; int thermoCLK = 5; Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO); void setup() { Serial.begin(9600); Serial.println("MAX31855 test"); // Attendre que le circuit MAX se stabilise. delay(500); } void loop() { // Test de lecture basique, afficher simplement la température courante Serial.print("Internal Temp = "); Serial.println(thermocouple.readInternal()); // Lecture en degrés Celcius double c = thermocouple.readCelsius(); if (isnan(c)) { Serial.println("Quelque chose ne fonctionne pas avec le thermocouple!"); } else { Serial.print("C = "); Serial.println(c);
Nous avons du créer un support pour les sondes pH (elles n'étaient pas combinées, il fallait donc les réunir).
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); }
Programme permettant de tester l'amplification d'une tension (nous aurons surement besoin d'amplifier une tension pour le pH)
int pin = A2; int valeur = 0; void setup() { Serial.begin(9600); } void loop() { valeur = analogRead(pin); Serial.print (valeur * (5.0 / 1023.0)); delay(1000); }
Pour le pH nous avons besoin d'utiliser deux boutons pour l'étalonnage. Ce programme permet de tester la manipulation de deux boutons poussoirs.
int ph =0; void setup() { pinMode(12, INPUT); // on déclare notre entrée pinMode(10, INPUT); Serial.begin(9600); } void loop() { if(digitalRead(12) == HIGH) { // on regarde si notre entrée capte du courant ph=4; Serial.print (ph); } if(digitalRead(10) == LOW) { // on regarde si notre entrée capte du courant ph=7; Serial.print (ph); } }
Programme nous permettant de mesurer le pH à partir de la lecture d'une tension (à l'intérieur de ce programme s'ajoute un programme lié à deux boutons poussoirs qui permettent l'étalonnage du pH).
int ph =0; float U4 =0; float U7=0; float b=0; float a= 0; float U=0; void setup() { pinMode(12, INPUT); // on déc0lare notre entrée pinMode(10, INPUT); Serial.begin(9600); } 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; Serial.print(ph); Serial.print(';');}} }
Programme permettant de mesurer la température grâce à un capteur (ce capteur sera rendu étanche pour qu'il puisse aller dans l'eau).
//initializes/defines the output pin of the LM335 temperature sensor int outputpin= 0; //this sets the ground pin to LOW and the input voltage pin to high void setup() { Serial.begin(9600); } //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"); delay(3000); }