Table des matières

Eléments de Programmation & Montages (Arduino)

Cette page énumère tous les programmes utilisés pour la réalisation du projet (Description; Schéma du montage; Programmation Arduino)

Programme écran LCD

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é
 
}

Programme Power/On

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
}
 
}

Programme Conductimètre

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); 
 
}

Programme Thermocouple

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).

mchobby.be_wiki_images_2_29_thermocouple-40.jpg

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);

Programme OnpenSCAD - Support sonde

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);
}

Amplificateur

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); 
 
}

Étalonnage du pH-mètre

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 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 capteur de température

Programme permettant de mesurer la température grâce à un capteur (ce capteur sera rendu étanche pour qu'il puisse aller dans l'eau).

www.pobot.org_img_jpg_lm335z-2.jpg

//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);
}