Capteurs – Température avec l’interface 1-Wire et le DS18B20

Dans le prolongement du tutoriel de la semaine dernière sur l’utilisation d’un capteur i2c, cette semaine, nous allons examiner un autre protocole standard appelé «1 fil». Comme son nom l’indique, cela utilise un seul fil pour communiquer des informations détaillées sur l’état du capteur. Le capteur a en fait besoin de trois fils car l’alimentation doit être fournie, mais le 1 fil se réfère à la communication de données.

L’un des capteurs à 1 fil les plus courants est le capteur de température Dallas DS18B20. Cela se présente sous différentes formes, la principale ressemblant à un transistor à trois jambes. L’autre facteur de forme, et celui que je préfère, est la version étanche où le capteur est intégré dans un tube métallique à l’extrémité d’un long fil.

DS18B20DS18B20 scellé

Construire le circuit

Tu auras besoin de:

  • Un Dallas DS18B20 (l’une ou l’autre version)
  • Résistance de 4,7 k ohms
    • S’il y a quatre bandes, les couleurs seront le jaune, le violet, le rouge, puis l’or
    • S’il y a cinq bandes, les couleurs seront jaune, violet, noir, marron, marron
  • 4 fils de pontage femelle à mâle
  • 2 fils de connexion mâle à mâle

Avant de construire ce circuit, vous doit éteignez le Raspberry Pi.

Le circuit utilisera une broche «masse» (GND) pour agir comme les extrémités «négatives» ou 0 volt d’une batterie. L’une des broches marquées 3v3 fournira l’alimentation du capteur. 3v3 signifie qu’il s’agit d’une alimentation de 3,3 volts.

Utilisez deux fils de pontage femelle à mâle pour connecter les broches GND et 3v3 GPIO aux deux rangées de trous inférieures de la planche à pain. Faites correspondre les couleurs marquées sur la planche à pain – rouge et bleu – avec les fils de connexion du Framboise Pi – connectez 3v3 à la ligne rouge et GND à la ligne bleue. Ces deux «rails» (comme on les appelle) fourniront le sol et l’alimentation pour l’ensemble de la planche à pain.

Connectez le capteur de température comme indiqué, avec un fil de connexion mâle / mâle allant vers le «rail» inférieur Framboise Le sol de Pi (GND). Connectez le fil rouge à l’aide d’un cavalier au «rail» 3v3 en bas. Cela alimente le capteur de température en énergie.

BornierSi vous utilisez le capteur étanche, vous pouvez avoir des problèmes pour enfoncer les brins de fil dans les trous de la planche à pain. J’utilise un bornier et visse les fils dedans.

L’autre extrémité de la résistance doit être insérée dans une autre colonne de la planche à pain, entre le fil rouge du capteur de température et le cavalier connecté au ‘rail’ 3v3. Le fil jaune va dans une colonne avec une extrémité de la résistance de 4,7 k ohms et un autre fil de connexion (montré en jaune) qui va à la broche 4. GPIO. Le programme lira la température à partir de cette broche.

Connexion du DS18B20 à votre Raspberry Pi

Configurer votre Framboise Pi

Avant de pouvoir utiliser des appareils à 1 fil, vous devez d’abord indiquer au Raspberry Pi comment les lire. Ouvrez une fenêtre de terminal et saisissez ce qui suit pour modifier le fichier de configuration du Raspberry Pi:

sudo nano /boot/config.txt

Regardez s’il y a une ligne qui a dtoverlay=w1-gpio en elle. Sinon, ajoutez ce qui suit à la fin du fichier:

dtoverlay=w1-gpio

Maintenant, redémarrez le Framboise Pi:

sudo reboot

Pour tester la configuration, configurez le circuit ci-dessus pour connecter le DS18B20 et tapez ce qui suit dans une fenêtre de terminal:

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices
ls

Cette liste répertorie tous les périphériques connectés à l’interface 1 fil. Le capteur Dallas DS18B20 commence par «28 -» suivi d’un nombre long. Tapez ce qui suit, en remplaçant le «xxxx» par le texte qui suit le «28 -»:

cd 28-xxxx
cat w1_slave

En réponse, vous devriez obtenir les informations suivantes montrant que le DS18B20 fonctionne:

a3 01 4b 46 7f ff 0e 10 d8 : crc=d8 YES
a3 01 4b 46 7f ff 0e 10 d8 t=32768

Lecture depuis le capteur

Créez un nouveau script python à partir d’une fenêtre de terminal (avec nano 3-temperature.py) ou à partir d’IDE, l’environnement de développement interactif. Entrez l’exemple de code suivant:

# Import Libraries
import os
import glob
import time
 
# Initialize the GPIO Pins
os.system('modprobe w1-gpio')  # Turns on the GPIO module
os.system('modprobe w1-therm') # Turns on the Temperature module
 
# Finds the correct device file that holds the temperature data
base_dir="/sys/bus/w1/devices/"
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
 
# A function that reads the sensors data
def read_temp_raw():
  f = open(device_file, 'r') # Opens the temperature device file
  lines = f.readlines() # Returns the text
  f.close()
  return lines
 
# Convert the value of the sensor into a temperature
def read_temp():
  lines = read_temp_raw() # Read the temperature 'device file'
 
  # While the first line does not contain 'YES', wait for 0.2s
  # and then read the device file again.
  while lines[0].strip()[-3:] != 'YES':
    time.sleep(0.2)
    lines = read_temp_raw()
 
  # Look for the position of the '=' in the second line of the
  # device file.
  equals_pos = lines[1].find('t=")
 
  # If the "=' is found, convert the rest of the line after the
  # '=' into degrees Celsius, then degrees Fahrenheit
  if equals_pos != -1:
    temp_string = lines[1][equals_pos+2:]
    temp_c = float(temp_string) / 1000.0
    temp_f = temp_c * 9.0 / 5.0 + 32.0
    return temp_c, temp_f
 
# Print out the temperature until the program is stopped.
while True:
  print(read_temp())
  time.sleep(1)

Pour exécuter le code, vous devez être le super utilisateur, exécutez donc le code avec:

sudo python temperature.py

Observez maintenant la température du capteur pendant que vous le tenez ou mettez-le dans un verre d’eau (si vous en avez un étanche!).

Articles similaires

Bouton retour en haut de la page
Fermer