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
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); }
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:
#!/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)