J'ai acheté une sonde de température pour mon Raspberry Pi, de référence maxim DS18B20 (1-wire) que j'ai acheté sur eBay pour environ 3 euros. Étanche et livrée avec 1 mètre de câble, c'est parfait.
Quand je l'ai reçue l'echelle de mesure de la sonde était d'un demi degré, mais il est possible de passer sur une lecture à 0,1°c (0.0625°c plus précisément). Voyons comment changer la "résolution" de cette sonde.
DS18B20
Pour identifier votre sonde il suffit de repérer les deux premiers chiffres :
pi@raspbian ~ $ ls /sys/bus/w1/devices/ 28-021561a1f9ff w1_bus_master1
Puis de chercher la correspondance avec la colone "family" sur le site owfs.
Dans mon cas 28-021561a1f9ff. Cet identifiant est propre à chaque sonde, comme les adresses mac il n'y en a pas deux identiques dans le monde.
Je précise que ma sonde n'est pas connectée en mode parasite, je ne m'attarde pas sur ce point car un autre billet complet est prévu sur ce sujet.
Programmons la sonde
Par défaut la résolution de la sonde que j'ai reçue était programmée sur 9 bits, ce qui correspond à +/- 0,5°c. Le but est de passer sur 12 bits pour avoir une précision à 0,1°c, c'est d'ailleurs tout à fait prévu dans les specs ("programmable resolution").
Le script BitBangingDS18B20 permet de choisir la résolution souhaitée en écrivant dans l'EEPROM de la sonde.
Nous devons compiler le script en C puis l'exécuter :
wget https://github.com/blogmotion/BitBangingDS18B20/raw/master/configDS18B20.c gcc -o configDS18B20 configDS18B20.c
Ne vous préoccupez pas des warnings. Je vous met à disposition la version compilée pour
Exécutez ensuite le binaire :
sudo ./configDS18B20 GPIO 4 .....80 01 80 80 7F FF 7F 80 4C 12 bits Temperature: 24.00 +/- 0.062500 Celsius DS18B20 Resolution (9,10,11 or 12) ?
Saisir 12 au clavier pour passer en 12 bits.
Cette modification est permanente, pour modifier à nouveau la valeur il suffit d'exécuter à nouveau le patch et de choisir. La différence entre les résolutions n'influence aucunement la marge d’erreur ou la précision, mais l'échelle qui est :
- sur 9 bit : 0.5°c
- sur 10 bit : 0.25°c
- sur 11 bit : 0.125°c
- sur 12 bit : 0.0625°c
Sur 12 bits cela signifie que la température retournée sera un multiple de 0.0625 (0,125, 0,1875, etc.). Ex : "23937" correspond à 23,9°c.
Conclusion
Je précise que la précision de la sonde reste de +/- 0.5°c (entre -10 °C et +85 °C) dans tous les cas. C'est simplement la lecture de la température qui est lue différemment.
Mais c'est toujours plus sympa d'avoir une température qui ne se termine pas toujours par "0,5".
note : ce script semble incompatible avec le Raspberry Pi 2, une autre version du script sera prochainement mis à dispo pour le RPi 2, en attendant il suffit simplement de remplacer la valeur de la constante BCM2708_PERI_BASE "0x20000000" par "0x3F000000".
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
5 commentaires
Bonjour,
Savez-vous s'il y a besoin d'étalonner la sonde, et dans ce cas, comment le faire ?
Cordialement.
@phypsi: non, la sonde est livrée fonctionnelle
Comment le faire fonctionner sur raspberry 3 ?
Merci.
Pour que cela fonctionne, il faut utiliser un port du pi qui n'est pas utilisé par du 1wire (4 dans mon cas): j'ai utilisé le 25. Et il ne faut qu'une sonde de connectée à la fois.