Température ( DS18B20) et Orange Pi Zéro
Mesure de température D’un liquide
La mesure de température est possible avec de nombreux capteurs. Ici nous allons utiliser le capteur DS18B20 qui est disponible en version étanche pour mesurer par exemple la température de l’eau d’une piscine.
Raccordement
Raccordez comme montré sur le schéma le DS18B20
- noir = masse
- jaune = data sur pin PA14
- rouge = 3.3v
- Une résistance de 4.7kohm entre le 3.3v et le fil jaune de data
Activation du bus 1 Wire
Le DS18B20 fourni les mesures de température sur un bus série » 1-wire ».Il faut configurer le système armbian en lançant ‘armbian-config’, l’équivalent du ‘raspiconfig’ sur Raspberry.
$ armbian-config
Allez dans la rubrique « system » et sélectionnez « Hardware » puis activé w1-gpio.
Il faut rajouter » l’overlay » correspondant dans /boot/armbianEnv.txt
:
On précise également la pin utilisée. Ici PA14 sur un Orange pi-Zero. Le bus 1wire nécessite une résistance de rappel au +. On peut rajouter utilise celle de l’orange-pi qui est beaucoup plus élevé que la 4.7kOhm.
Il est indispensable, pour gérer les dialogues sur le bus 1-wire, d’avoir la maîtrise du temps d’exécution du processeur. Pour ce faire il faut pouvoir ‘geler’ temporairement, la capacité de l’OS à préempter en rajoutant des modules au noyau de Linux.
On défini ces modules dans le fichier de configuration
/etc/modules-load.d/modules.conf
On peut aussi les rajouter par la commande
modprobe w1-therm
modprobe w1-gpio
Verifications
Après un reboot du système, on peut vérifier la presence de la sonde par:
ls /sys/bus/w1/devices
La réponse doit ressembler à celle ci dessous avec un code 28 en tête qui correspond à un capteur de température.
28-3c01b556793a
Vérifiez la bonne prise en compte des modules chargés en mémoire
lsmod
w1_therm et w1_gpio doivent être mentionnés.
On peut vérifier la bonne prise en compte de la pin du gpio par
cat /sys/kernel/debug/gpio
gpio-14 ( |onewire@0 ) out hi gpio-17 ( |orangepi:red:status ) out lo
Mesure
Les mesures se trouvent dans le dossier 28… localisé:
/sys/devices/w1_bus_master1/28-3c01b556793a
Lire le fichier w1-slave, il contient 2 lignes. On y trouve le résultat en hexadécimal et le contrôle du CRC pour valider le résultat.
98 01 55 05 7f a5 81 66 64 : crc=64 YES
98 01 55 05 7f a5 81 66 64 t=25500
En fin de deuxième ligne la température t=…. à diviser par 1000 donne la température de °Celsius.
Les mesures sont effectuées périodiquement par le noyau linux. Le fichier w1_master_timeout donne 10s de base. Cette valeur s’adapte suivant le nombre de senseurs sur la ligne et la qualité des réponses. Un script écrit par exemple en python permettra de lire le fichier w1-slave et d’afficher les mesures ou les envoyer vers un client web. Un fichier nommé temperature dans le même dossier donne la dernière valeur connue.
Commentaires récents