DS18B20 + Capteur de température numérique à un fil et Raspberry Pi

REMARQUE: Si vous utilisez le dernier logiciel pour votre Pi (que vous devriez être), vous devrez modifier le fichier texte de configuration de démarrage:

Ajoutez la ligne suivante à /boot/config.txt

dtoverlay = w1-gpio

Dans les didacticiels précédents, nous avons décrit l’intégration de capteurs et de commutateurs simples avec le Raspberry Pi. Ces composants ont eu une sortie marche / arrêt simple ou haute / basse, qui est détectée par le Raspberry Pi. Notre didacticiel sur les capteurs de mouvement PIR, par exemple, dit simplement «oui, j’ai détecté un mouvement».

Alors, que se passe-t-il lorsque nous connectons un capteur plus avancé et que nous voulons lire des données des données plus complexes? Dans ce didacticiel, nous allons connecter un thermomètre numérique à 1 fil et programmer notre Raspberry Pi pour lire la sortie à la température qu’il détecte!

Dans les capteurs à 1 fil, toutes les données sont envoyées sur un seul fil, ce qui le rend idéal pour les microcontrôleurs tels que le Raspberry Pi, car il ne nécessite qu’une seule broche GPIO pour la détection. En plus de cela, la plupart des capteurs à 1 fil seront livrés avec un code série unique (plus de détails plus tard), ce qui signifie que vous pouvez connecter plusieurs unités jusqu’à un microcontrôleur sans qu’elles interfèrent les unes avec les autres.

Le capteur que nous allons utiliser dans ce didacticiel est le thermomètre numérique à 1 fil à résolution programmable Maxim DS18B20 +. Le DS18B20 + a une disposition similaire aux transistors appelés boîtier TO-92, avec trois broches: GND, Data (DQ) et ligne d’alimentation 3,3 V (VDD). Vous aurez également besoin de cavaliers, d’une planche à pain et d’un 4.7k? (ou 10k?) résistance.

blank

La résistance dans cette configuration est utilisée comme un «pull-up» pour la ligne de données, et doit être connectée entre la ligne DQ et VDD. Il garantit que la ligne de données à 1 fil est à un niveau logique défini et limite les interférences dues au bruit électrique si notre broche était laissée flottante. Nous allons également utiliser GPIO 4 [Pin 7] comme broche pilote pour détecter la sortie du thermomètre. Il s’agit de la broche dédiée à la détection GPIO 1 fil.

Accrocher

1. Connectez GPIO GND [Pin 6] sur le Pi au rail négatif sur la planche à pain et connectez GPIO 3.3V [Pin 1] sur le Pi au rail positif sur la planche à pain.

2. Branchez le DS18B20 + dans votre maquette, en vous assurant que les trois broches sont dans des rangées différentes. Familiarisez-vous avec la disposition des broches, car il est assez facile de la brancher en arrière!

3. Connectez DS18B20 + GND [Pin 1] au rail négatif de la planche à pain.

4. Connectez DS18B20 + VDD [Pin 3] au rail positif de la planche à pain.

blank

5. Placez votre 4.7k? résistance entre DS18B20 + DQ [Pin 2] et une rangée gratuite sur votre planche à pain.

6. Connectez cette extrémité libre du 4.7k? résistance au rail positif de la planche à pain.

blank

7. Enfin, connectez DS18B20 + DQ [Pin 2] à GPIO 4 [Pin 7] avec un cavalier.

blank

C’est tout; nous sommes maintenant prêts pour une programmation!

Programmation

Avec un peu de configuration, le DS18B20 + peut être lu directement à partir de la ligne de commande sans avoir besoin de programmes Python. Cependant, cela nous oblige à saisir une commande chaque fois que nous voulons connaître la lecture de la température. Afin d’introduire certains concepts d’interfaçage 1-Wire, nous y accèderons d’abord via le terminal, puis nous écrirons un programme Python qui lira automatiquement la température à des intervalles de temps définis.

Le Raspberry Pi est équipé d’une gamme de pilotes pour l’interfaçage. Cependant, il n’est pas possible de charger chaque pilote au démarrage du système, car cela augmentera considérablement le temps de démarrage et utilisera une quantité considérable de ressources système pour les processus redondants. Ces pilotes sont donc stockés sous forme de modules chargeables et la commande modprobe est utilisé pour les démarrer dans le noyau Linux quand ils sont nécessaires. Les deux commandes suivantes chargent les pilotes 1 fil et thermomètre sur GPIO 4.

sudo modprobe w1-gpio
sudo modprobe w1-therm

Nous devons ensuite changer de répertoire CD dans notre dossier et liste d’appareils à 1 fil ls les appareils afin de s’assurer que notre thermomètre est correctement chargé.

cd / sys / bus / w1 / périphériques /
ls

Dans les pilotes de périphérique, votre capteur doit être répertorié comme une série de chiffres et de lettres. Dans ce cas, l’appareil est enregistré sous le numéro 28-000005e2fdc3. Vous devez ensuite accéder au capteur avec le CD en remplaçant notre numéro de série par le vôtre.

cd 28-000005e2fdc3

Le capteur écrit périodiquement dans le fichier w1_slave, nous utilisons donc simplement le chat commande pour le lire.

chat w1_slave

Cela donne les deux lignes de texte suivantes, avec la sortie t = montrant la température en degrés Celsius. Un point décimal doit être placé après les deux premiers chiffres, par exemple, la lecture de température que nous avons reçue est de 23,125 degrés Celsius.

72 01 4b 46 7f ff 0e ​​10 57: crc = 57 OUI

72 01 4b 46 7f ff 0e ​​10 57 t = 23125

blank

En termes de lecture depuis le module, c’est tout ce qui est requis du terminal. Essayez de tenir le thermomètre et de prendre une autre lecture! Avec ces commandes à l’esprit, nous pouvons écrire un programme Python pour sortir automatiquement nos données de température.

Programme Python

Notre première étape consiste à importer les modules requis: os nous permet d’activer nos pilotes 1-Wire et d’interfacer avec notre capteur, et temps permet à notre Raspberry Pi de définir l’heure, et permet l’utilisation de périodes dans notre code.

importer os
temps d’importation

Nous devons ensuite charger nos pilotes:

os.system (‘modprobe w1-gpio’)
os.system (‘modprobe w1-therm’)

L’étape suivante consiste à définir le fichier de sortie de notre capteur (le fichier w1_slave) comme défini ci-dessus. N’oubliez pas d’utiliser le code de série de votre propre capteur de température!

temp_sensor = ‘sys / bus / w1 / devices / 28-000005e2fdc3 / w1_slave’

Nous devons ensuite définir une variable pour notre valeur de température brute (temp_raw); les deux lignes produites par le capteur démontrées avec notre exemple de terminal. Nous pourrions simplement imprimer cette déclaration maintenant. Cependant, nous allons le transformer en quelque chose de plus utilisable. Ainsi, nous ouvrons, lisons, enregistrons puis fermons notre fichier de température. Nous utilisons ici la fonction de retour, afin de rappeler ces données à un stade ultérieur de notre code.

def temp_raw ():

f = ouvert (temp_sensor, ‘r’)
lines = f.readlines ()
f.close ()
lignes de retour

Tout d’abord, nous vérifions notre variable de la fonction précédente pour toute erreur. Si vous étudiez notre sortie d’origine telle que définie dans l’exemple du terminal, nous obtenons deux lignes de code (ligne 0 = 72 01 4b 46 7f ff 0e ​​10 57: crc = 57 OUI); nous bande cette ligne à l’exception des trois derniers chiffres, et vérifiez le signal «OUI», indiquant une lecture de température réussie du capteur. En Python, non-égal est défini comme «! =», Donc ici, nous disons alors que la lecture n’est pas égale à OUI, veillez pendant 0,2 s et répétez.

def read_temp ():

lines = temp_raw ()
tandis que les lignes[0].bande()[-3:] ! = ‘OUI’:
time.sleep (0,2)
lines = temp_raw ()

Une fois que le programme est satisfait de la réception du signal OUI, nous passons à notre deuxième ligne de code de sortie (ligne 1 = 72 01 4b 46 7f ff 0e ​​10 57 t = 23125). nous trouver notre sortie de température “t =”, vérifiez les erreurs, bande la sortie de la phrase “t =” pour ne laisser que les chiffres de température et exécuter deux calculs pour nous donner les chiffres en degrés Celsius et Fahrenheit.

temp_output = lignes[1].find (‘t = “)

si temp_output! = -1:
temp_string = lignes[1].bande()[temp_output+2:]
temp_c = float (temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
retour temp_c, temp_f

Enfin, nous bouclons notre processus et lui disons de sortir nos données de température toutes les 1 seconde.

tandis que True:
print (read_temp ())
time.sleep (1)

Voilà donc notre code!

blank

Enregistrez votre programme (je l’ai enregistré sous temp_2.py) et exécutez-le avec Python pour obtenir la sortie de température:

sudo python temp_2.py

blank

Les capteurs DS18B20 + peuvent être exécutés en parallèle et accessibles à l’aide de leurs répertoires série uniques. L’exemple Python ci-dessus peut être modifié pour accéder et lire à partir de plusieurs capteurs!

Articles similaires

Bouton retour en haut de la page
Fermer