Table des matières

Utilisation d'un capteur DS18B20 (OneWire)

Nous avons utilisé le DS18B20P. Ce capteur comporte 3 pattes. De gauche à Droite:

1 la masse

2 le bus de données Input/Output

3 l'alimentation

       /|--->/          4.7K ohm
      | |-----------+---/\/\/\/-----> +5V
       \|---> GDN   |
                     +----------- DIGITAL Input pin 10

Le code Arduino modifié par Papa Nicolas

La lib de référence pour l'arduino est disponible ici : http://www.pjrc.com/teensy/td_libs_OneWire.html

 #include <OneWire.h>
 
 
 OneWire  ds(10);  
 
 void setup(void) {
  Serial.begin(9600);
 }
 
void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte LSB;
  byte MSB;
  byte temp;
  byte addr[8]; 
  if ( !ds.search(addr)) {
    delay(10);
    //Serial.print("No more addresses.\n");
    ds.reset_search();
    delay(250);
    return;
  }
 
  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }
  if ( addr[0] != 0x28) {
      Serial.print("Device is not a DS18S20 family device.\n");
      return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);        
  delay(1000);   
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         
  for ( i = 0; i < 9; i++) {         
    data[i] = ds.read();
    LSB=data[0];
    MSB=data[1];
    temp=(LSB >> 4)+(MSB << 4);
  }
  Serial.print(temp,DEC); 
  }

Capture de la température et représentation graphique

Supposons la capture de la température pendant 48H à raison de 2 captures par heures. Nous récupérons 96 données. Cela peux se faire de deux façons:

Le code

#!/usr/bin/python
 
import serial;
import Gnuplot;
ser = serial.Serial('/dev/ttyUSB0', 9600);
i=0;
val=0;
tplist=[];
gp = Gnuplot.Gnuplot(persist = 1) ;
gp('set data style lines');
while (i<96):
    val = int(ser.read(2));
    print val
    tplist.append([i, val])
    i +=1;
gp.plot(tplist)

todo

  1. Augmenter la précision de la température
  2. Lorsque que la température est constante le script emet une warning
  3. Modifier le delay dans le code arduino
  4. Production d'un graph au format png
  5. Affichage sur une page web