Thermometre Arduino

De Wikidebrouillard.

La vidéo "Thermometre Arduino"


Sommaire

Présentation du projet Arduino

Le thermomètre Arduino permet de mesurer la température d'une pièce, par une série de LED.

Liste du matériel

Explication

Le capteur permettant de mesurer la température est une thermo-résistance, sa résistance électrique augmente avec la température, ainsi on peut transformer la température ambiante en un signal électrique. Celle que nous avons utilisé est un composant numérique, il utilise un bus délivrant des informations sur 8 bits, ce n'est pas simple à utiliser, c'est pourquoi un certain Paul Stoffregen propose une bibliothèque pour simplifier son utilisation : OneWire (si vous ne savez pas comment installer une biblithothèque Arduino rendez-vous ici)

Schéma Fritzing

Code

#include <OneWire.h> // Inclusion de la librairie OneWire
 
#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 2 // Broche utilisée pour le bus 1-Wire

OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
int led1=3;   // LED Bleue
int led2=4;
int led3=5;
int led4=6;
int led5=7;
int led6=8;
int led7=9;
int led8=10;
int led9=11;
int led10=12;
int led11=13;  // LED Rouge

//fonction gérant l'affichage des leds, nb étant le nombre de leds à allumer (la led du bas ne comptant pas)
void leds(int nb){
  switch (nb){
      case 0 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,LOW);
        digitalWrite(led3,LOW);
        digitalWrite(led4,LOW);
        digitalWrite(led5,LOW);
        digitalWrite(led6,LOW);
        digitalWrite(led7,LOW);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
      case 1 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,LOW);
        digitalWrite(led4,LOW);
        digitalWrite(led5,LOW);
        digitalWrite(led6,LOW);
        digitalWrite(led7,LOW);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
     case 2 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,LOW);
        digitalWrite(led5,LOW);
        digitalWrite(led6,LOW);
        digitalWrite(led7,LOW);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
      case 3 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,LOW);
        digitalWrite(led6,LOW);
        digitalWrite(led7,LOW);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
       case 4 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,LOW);
        digitalWrite(led7,LOW);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
      case 5 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,HIGH);
        digitalWrite(led7,LOW);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
       case 6 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,HIGH);
        digitalWrite(led7,HIGH);
        digitalWrite(led8,LOW);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
       case 7 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,HIGH);
        digitalWrite(led7,HIGH);
        digitalWrite(led8,HIGH);
        digitalWrite(led9,LOW);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
       case 8 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,HIGH);
        digitalWrite(led7,HIGH);
        digitalWrite(led8,HIGH);
        digitalWrite(led9,HIGH);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        break;
       case 9 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,HIGH);
        digitalWrite(led7,HIGH);
        digitalWrite(led8,HIGH);
        digitalWrite(led9,HIGH);
        digitalWrite(led10,HIGH);
        digitalWrite(led11,LOW);
        break;
       case 10 : 
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);
        digitalWrite(led3,HIGH);
        digitalWrite(led4,HIGH);
        digitalWrite(led5,HIGH);
        digitalWrite(led6,HIGH);
        digitalWrite(led7,HIGH);
        digitalWrite(led8,HIGH);
        digitalWrite(led9,HIGH);
        digitalWrite(led10,HIGH);
        digitalWrite(led11,HIGH);
        break;
  }
} 

//fonction permettant d'analyser la température
void analyseTemp(float temp, float mini, float interv){
    
    if (temp <= mini) { leds(0); }
    if(temp >mini && temp <= mini+ interv  ){ leds(1); }   
    if(temp >mini+ interv && temp <= mini+ interv*2){ leds(2); } 
    if(temp >mini+ interv*2 && temp <= mini+ interv*3){ leds(3); } 
    if(temp >mini+ interv*3 && temp <= mini+ interv*4){ leds(4); } 
    if(temp >mini+ interv*4 && temp <= mini+ interv*5){ leds(5); } 
    if(temp >mini+ interv*5 && temp <= mini+ interv*6){ leds(6); }
    if(temp >mini+ interv*6 && temp <= mini+ interv*7){ leds(7); }
    if(temp >mini+ interv*7 && temp <= mini+ interv*8){ leds(8); }
    if(temp >mini+ interv*8 && temp <= mini+ interv*9){ leds(9); }
    if(temp >mini+ interv*9 )  { leds(10); }
}

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
  byte data[9], addr[8];
  // data : Données lues depuis le scratchpad
  // addr : adresse du module 1-Wire détecté
 
  if (!ds.search(addr)) { // Recherche un module 1-Wire
    ds.reset_search();    // Réinitialise la recherche de module
    return false;         // Retourne une erreur
  }
   
  if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
    return false;                        // Si le message est corrompu on retourne une erreur
 
  if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
    return false;         // Si ce n'est pas le cas on retourne une erreur
 
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
   
  ds.write(0x44, 1);      // On lance une prise de mesure de température
  delay(800);             // Et on attend la fin de la mesure
   
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
  ds.write(0xBE);         // On envoie une demande de lecture du scratchpad
 
  for (byte i = 0; i < 9; i++) // On lit le scratchpad
    data[i] = ds.read();       // Et on stock les octets reçus
   
  // Calcul de la température en degré Celsius
  *temp = ((data[1] << 8) | data[0]) * 0.0625;
   
  // Pas d'erreur
  return true;
}
 
// setup()
void setup() {
  Serial.begin(9600); 
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  pinMode(led7,OUTPUT);
  pinMode(led8,OUTPUT); 
  pinMode(led9,OUTPUT);
  pinMode(led10,OUTPUT);
  pinMode(led11,OUTPUT);
}
 
// loop()
void loop() {
  float temp;
  if(getTemperature(&temp)) {
	
    analyseTemp(temp, 28, 0.1);
	
    // Affiche la température dans le terminal
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.write(176); // caractère °
    Serial.write('C');
    Serial.println();
  }
}

Liens avec d'autres projets arduino

chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino

Liens avec le quotidien

Mesure de la température d'une pièce.

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR
CO

Thermometre Arduino

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique