RPi-DS18B20

De Wiki levelKro

Le DS18B20 est un composant électronique qui à la faculté d'être sensible à la température ambiante et de retourner une valeur interprétable avec Arduino et les Raspberry Pi, entre-autres.

Matériel

Vous pouvez acheter un kit module assemblé ou créer votre propre circuit.

Module

Les modules sont généralement prêt à l'emploi, selon le module, une alimentation 3.3v ou 5v est requise.

Fait soi-même

DS18B20.jpg
Resistor-4k7.jpg

Il vous faudra un composant DS18B20 en forme TO-92 et une résistance de 4.7Kohm. Vous devez les installer selon cette configuration, noter l'usage e la résistance sur le connecteur du senseur et du voltage.

Rpi-ds18b20.jpg

Installation

1-wire

Il existe deux moyen d'activer le "1-wire" du Raspberry Pi.

Méthode Raspi-config

  • Entrer la commande
    sudo raspi-config
  • Sélectionner le menu "Interfacing options"
  • Sélectionner "1-Wire" est activer le
  • Redémarrer

Méthode manuel

  • Éditer le fichier de config avec
    sudo nano /boot/config.txt
  • Ajouter dans le document cette ligne
    dtoverlay=w1-gpio
  • Sauvegarder le document
  • Redémarrer

Chargement du module

  • Vous devez activer les module avec;
    sudo modprobe w1-gpio
    sudo modprobe w1-therm
  • Lister la liste des appareil détecté sur le port 1-wire avec
    ls /sys/bus/w1/devices
  • Si vous avez un résultat commençant par "28-", c'est que le module est présent.

Utilisation

Vous pouvez utiliser le module avec plusieurs moyens, voici le code requis pour l'utiliser avec Python et avoir la lecture en Celsius et Fahrenheit.

import os
import glob
import time
 
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
   f = open(device_file, 'r')
   lines = f.readlines()
   f.close()
   return lines

def read_temp():
   lines = read_temp_raw()
   while lines[0].strip()[-3:] != 'YES':
       time.sleep(0.2)
       lines = read_temp_raw()
   equals_pos = lines[1].find('t=')
   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
	
while True:
	print(read_temp())	
	time.sleep(1)