<= Page précédente PCR : Sommaire
- un breadbord avec des jumpers
- 1 arduino ou similaire fournisseur : Electrodragon 9.64 €
- 3 résistances 4,7KOhms (pas chère)
- 3 sondes thermiques résistantes à l’eau DS18B20 fournisseur : Electrodragon
2.5*3=6 €
- une alimentation 5V-1A (fait maison ou non)
Factultatif mais cool :
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.
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 :
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 :
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)