Outils pour utilisateurs

Outils du site


wiki:projets:3_sondes_thermique_arduino

<= Page précédente PCR : Sommaire

Afficher la température de 3 sondes thermiques DS18B20 waterproof avec un arduino

Matériels et équipements nécessaire

- un breadbord avec des jumpers

nuclearwaste101.files.wordpress.com_2012_07_breadboard.jpg img.dxcdn.com_productimages_sku_146935_1.jpg

- 1 arduino ou similaire fournisseur : Electrodragon 9.64 €
upload.wikimedia.org_wikipedia_commons_3_38_arduino_uno_-_r3.jpg
- 3 résistances 4,7KOhms (pas chère)
media.digikey.com_renders_yageo_20renders_rsf100jb-47k.jpg

- 3 sondes thermiques résistantes à l’eau DS18B20 fournisseur : Electrodragon 2.5*3=6 €
s3.electrodragon.com_wp-content_uploads_2013_02_ds18b20-water-proof-probe-with-cable-2.jpg

- une alimentation 5V-1A (fait maison ou non)

Factultatif mais cool :

- un fer a souder
chrihani.ma_img_cms_fer.jpg

- de l'étain
i2.cdscdn.com_pdt2_9_2_2_1_700x700_biz3700420300922_rw_bobine-de-fil-d-etain-soudure.jpg

Construction

Avant toute chose il est nécessaire de mettre de l'étain sur les broches des sondes afin qu'elles puissent rentrer facilement dans le breadbord. Il faut réaliser ce montage :


/!\ Faites attention à la couleur des broches des sondes, voici le codes couleurs qui peut varier selon les modèles : - jaune : les données de la sonde
- rouge : l'alimenation (+)
- bleu ou vert : la masse (-)

Si cela ne fonctionne pas je vous conseille de vérifier les couleurs auprès du constructeur.

Code

1) Récupération de l'adresses des sondes thermiques

Il faut ensuite récupérer l'adresse des sondes thermiques avec ce code (trouvé sur http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html

// This sketch looks for 1-wire devices and
// prints their addresses (serial number) to
// the UART, in a format that is useful in Arduino sketches
// Tutorial: 
// http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
 
#include <OneWire.h>
 
OneWire  ds(10);  // Connecte 1-wire sur la pine d'entrée digitale de ton choix (ici 10)
 
void setup(void) {
  Serial.begin(9600);
  discoverOneWireDevices();
}
 
void discoverOneWireDevices(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
 
  Serial.print("Looking for 1-Wire devices...\n\r");
  while(ds.search(addr)) {
    Serial.print("\n\rFound \'1-Wire\' device with address:\n\r");
    for( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
        Serial.print("CRC is not valid!\n");
        return;
    }
  }
  Serial.print("\n\r\n\rThat's it.\r\n");
  ds.reset_search();
  return;
}
 
void loop(void) {
  // Rien à mettre ici
}

Copie colle ce code dans une nouvelle fenêtre du programme arduino.
Il faut d'abord installé la librairie one-Wire, si tu ne sais pas comment faire, va sur Comment installer une librairie sur Arduino
Connecte ton arduino avec l'ordinateur
Enregistre le puis suit les instruction de cette image :
img11.hostingpics.net_pics_400758lecturedesadressesdessondes.jpg

2) Programme permettant l'affichage de la température des 3 sondes

Après avoir téléverser le programme, cliquer sur “moniteur série” pour afficher les 3 valeurs des sondes. Noter les quelques part et entrer le code suivant pour mesurer les données des 3 sondes en même temps.

#include <OneWire.h> //importe la librairie OneWire
int broche_OneWire = 10; // Choisit la pin d'entrée digitale de l'arduino
OneWire  capteur(broche_OneWire);;
//---- code des instructions du capteur
const int modeLecture=0xBE;
const int lancerMesure=0x44;
 
void setup() {
    Serial.begin(9600);
}
 
void loop() {
  float T_sonde_denaturation=0;
  byte Adresse1[8]={/*Met ici l'adresse d'une sonde récupérée grâce au programme précédent*/}; // doit ressembler à ça : 
  // byte Adresse1[8]={0x28,0x9F,0x9E,0x47,0x05,0x00,0x00,0xCD};
  float T_sonde_taq=0;
  byte Adresse2[8]={/*Met ici l'adresse d'une sonde récupérée grâce au programme précédent*/};
  float T_sonde_hybridation=0;
  byte Adresse3[8]={/*Met ici l'adresse d'une sonde récupérée grâce au programme précédent*/};
 
  T_sonde_denaturation=getTemp(Adresse1); 
  T_sonde_hybridation=getTemp(Adresse2);
  T_sonde_taq=getTemp(Adresse3);
  Serial.println(T_sonde_denaturation);
  Serial.println(T_sonde_hybridation);
  Serial.println(T_sonde_taq);
  Serial.println("Fin");
 
 
 
 
}
 
 
float getTemp(byte adressecapteur[8]) { //fonction qui renvoie résultat float et ne reçoit rien
  //-------- variable locale de la fonction ----------
  byte data[12]; // Tableau de 12 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
  int tempet=0; // variable pour resultat brute  de la mesure
  float tempetf=0.0; // variable pour resultat à virgule de la mesure
  // XXXXXXXXXXXXXXXXXXXXXX Lancement d'une mesure et lecture du résultat XXXXXXXXXXXXXXXXXXXXXXX
  // Serial.println("**** Acquisition d'une mesure de la temperature **** ");
  // avant chaque nouvelle instruction, il faut :
  //    * initialiser le bus 1-wire
  //    * sélectionner le capteur détecté
  //    * envoyer l'instruction
  //--------- lancer une mesure --------
  capteur.reset(); // initialise le bus 1-wire avant la communication avec un capteur donné
  capteur.select(adressecapteur); // sélectionne le capteur ayant l'adresse 64 bits contenue dans le tableau envoyé à la fonction
  capteur.write(lancerMesure,1); // lance la mesure et alimente le capteur par la broche de donnée
  //-------- pause d'une seconde -----
  delay(750);     // au moins 750 ms
  // il faudrait mettre une instruction capteur.depower ici, mais le reset va le faire
  //---------- passer en mode LECTURE -------------
  capteur.reset(); // initialise le bus 1-wire avant la communication avec un capteur donné
  capteur.select(adressecapteur); // sélectionne le capteur ayant l'adresse 64 bits contenue dans le tableau envoyé à la fonction
  capteur.write(modeLecture,1); // passe en mode lecture de la RAM du capteur
  // ----------- lire les 9 octets de la RAM (appelé Scratchpad) ----
  for ( int i = 0; i < 9; i++) {           // 9 octets de RAM stockés dans 9 octets
    data[i] = capteur.read();             // lecture de l'octet de rang i stocké dans tableau data
  }
  //----- caclul de la température mesurée (enfin!) ---------
  /*data[1]=data[1] & B10000111; // met à 0 les bits de signes inutiles  <- Le bug était caché la
  tempet=data[1]; // bits de poids fort
  tempet=tempet<<8;
  tempet=tempet+data[0]; // bits de poids faible
  */
  tempet=(data[1]<<8)|data[0]; // a l'arrache style !
  // --- en mode 12 bits, la résolution est de 0.0625°C - cf datasheet DS18B20
  tempetf=float(tempet)*6.25;
  tempetf=tempetf/100.0;
  return (tempetf);
}

En cliquant sur “Moniteur Série”, vous devrez observer ceci :
img11.hostingpics.net_pics_573968affichagetemprature.jpg

Si vous avez une valeur comme “-0.06” ou similaire qui s'affiche à la place de la température, cela peut signifier au moins deux choses :
- Vous avez mal fait les branchements
- L'adresse est incorrecte

Récupérons maintenant ces données sur un fichier excel (Windows)

<= Page précédente PCR : Sommaire

wiki/projets/3_sondes_thermique_arduino.txt · Dernière modification: 2016/09/11 12:59 (modification externe)