[[(http://pmclab.fr/dokuwiki/doku.php?id=wiki:projets:pcr_facile|<= 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\\
{{http://nuclearwaste101.files.wordpress.com/2012/07/breadboard.jpg?200}}
{{http://img.dxcdn.com/productimages/sku_146935_1.jpg?200}}\\
- 1 arduino ou similaire [[(http://www.electrodragon.com/product/arduino-uno-r3/?added-to-cart=6067|fournisseur : Electrodragon]] 9.64 €\\
{{http://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg?200}}\\
- 3 résistances 4,7KOhms (pas chère) \\
{{http://media.digikey.com/Renders/Yageo%20Renders/RSF100JB-47K.jpg?75}}\\
- 3 sondes thermiques résistantes à l’eau DS18B20 [[(http://www.electrodragon.com/product/4-channels-relay-module/|fournisseur : Electrodragon]]
2.5*3=6 €\\
{{http://s3.electrodragon.com/wp-content/uploads/2013/02/DS18B20-Water-Proof-Probe-with-Cable-2.jpg?200}}\\
- une alimentation 5V-1A (fait maison ou non) \\
Factultatif mais cool :
- un fer a souder \\
{{http://chrihani.ma/img/cms/FER.jpg?200}}\\
- de l'étain \\
{{http://i2.cdscdn.com/pdt2/9/2/2/1/700x700/biz3700420300922/rw/bobine-de-fil-d-etain-soudure.jpg?200}}\\
===== 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 : \\
{{http://image.noelshack.com/fichiers/2014/39/1411744557-3sonde-breadbord-2.png}}\\
/!\ 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 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 [[http://mchobby.be/wiki/index.php?title=Installation_d%27un_librairie_Arduino|Comment installer une librairie sur Arduino]]\\
Connecte ton arduino avec l'ordinateur\\
Enregistre le puis suit les instruction de cette image : \\
{{http://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 //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 : \\
{{http://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\\
[[wiki:tutoriels:donnee_arduino_excel|Récupérons maintenant ces données sur un fichier excel (Windows)]]\\
[[(http://pmclab.fr/dokuwiki/doku.php?id=wiki:projets:pcr_facile|<= Page précédente PCR : Sommaire]]