Sonde DS18B20 LED et python

Au programme la régulation de température, la climatisation, les chauffe-eau...

Modérateur : Francois

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Sonde DS18B20 LED et python

Message par Eddie » lun. 2 mars 2015 20:40

Hoyé,

J'ai perdu patience de chercher sur le net alors je compte sur vous pour :

- Je souhaiterais compléter la manip de lire une température, ça j'ai compris.
Par contre maintenant je souhaiterais rajouter un critère comme une plage de donnée par exemple. C'est à dire, vert si la température est supérieure à 20°C et rouge si c'est en dessous, le tout avec des LED évidement.
Si possible en français et avec un schéma :roll:

- Autre question, sur le net il y'a plein de façon de faire afficher la T°C en ligne et consultable sur tablette/iphone, etc.
Seulement il date un peu et son plus ou moins facile et exploitable. Lequel est le mieux et à la portée de débutant ?

Merci pour vos contributions. :mrgreen:
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

phdenaujan
Messages : 63
Enregistré le : lun. 5 janv. 2015 21:29

Re: Sonde DS18B20 LED et python

Message par phdenaujan » lun. 2 mars 2015 21:18

Bonsoir,

Avec quelques ligne de if, else et GPIO.output, tu devrais pouvoir faire quelques choses rapidement.

Pour lire la sonde en code python :

Code : Tout sélectionner

    system('modprobe w1-gpio')
    system('modprobe w1-therm')
 
    base_dir = '/sys/bus/w1/devices/'
    sonde = "/sys/bus/w1/devices/w1_bus_master1/n° de la sonde/w1_slave"
Ph.

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Sonde DS18B20 LED et python

Message par Eddie » lun. 2 mars 2015 23:11

Oyé,

Merci pour tes infos mais je suis désolé, étant débutant dans python ne ne comprend pas ce que tu me dit. :|
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

phdenaujan
Messages : 63
Enregistré le : lun. 5 janv. 2015 21:29

Re: Sonde DS18B20 LED et python

Message par phdenaujan » mar. 3 mars 2015 18:36

Bonjour,

Pour mettre en service ta sonde, visite : http://www.framboise314.fr/mesure-de-te ... pberry-pi/ ou encore http://www.domolio.fr/monitorer-la-temp ... bien-fait/

Tu as tout à tas de tuto sur le net te permettant de la mettre en oeuvre.

Pour piloter les LED, tu auras besoins de la laibrairie RPi.GPIO à l'adresse : https://pypi.python.org/pypi/RPi.GPIO

Je te conseille de parcourir le site et d'autres, ils te donnerons tout un tas d'informations indispensables pour débuter.

Amuse toi bien,
Ph.

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Sonde DS18B20 LED et python

Message par Eddie » mar. 3 mars 2015 20:46

Bonsoir,

Merci pour ces infos. j'arrive à faire fonctionner l'un et l'autre indépendamment.
Par contre maintenant je souhaiterais les faire marcher ensemble avec les critères dont j'ai parlé un peu plus haut.

Un autre lien à me proposer, exemple ou un code en python ?

En te remerciant.
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

EVOTk

Re: Sonde DS18B20 LED et python

Message par EVOTk » mer. 4 mars 2015 02:27

Salut,

Pour la gestion de ma chaudière, voici comment je récupère l'info de ma sonde :

Code : Tout sélectionner

def temperature():
 global temp
 tfile = open("/sys/bus/w1/devices/28-00042c77e5ff/w1_slave")
 text = tfile.read()
 tfile.close()
 temperaturedata = text.split("\n")[1].split(" ")[9]
 temperature = float(temperaturedata[2:])
 temp = round(temperature / 1000, 2)
Ensuite avec la valeur temp qui est arrondi a 2 chiffres apres la virgules, je peu faire des actions comme :

Si la température est supérieure ou égale à 20°C qui sera ma consigne, j'allume une LED verte, si je suis inférieur a la consigne, j'allume la led Rouge, ensuite en attend 30sec et on recommence.
On considère la led verte cablé sur le GPIO 17 et la rouge sur le GPIO 18 ( BCM )

( Le code n'est pas complet, et il faut évidement changé le numéro de sonde ! )

Code : Tout sélectionner

tfile = open("/sys/bus/w1/devices/28-00042c77e5ff/w1_slave")
text = tfile.read()
tfile.close()
temperaturedata = text.split("\n")[1].split(" ")[9]
temperature = float(temperaturedata[2:])
temp = round(temperature / 1000, 2)

consigne = 20
LEDVERTE = 17
LEDROUGE =18

while True:
if temp >= consigne:
 GPIO.output(LEDVERTE,GPIO.HIGH)
 GPIO.output(LEDROUGE,GPIO.LOW)
elif temp < consigne:
 GPIO.output(LEDVERTE,GPIO.LOW)
 GPIO.output(LEDROUGE,GPIO.HIGH)
else:
 GPIO.output(LEDVERTE,GPIO.HIGH)
 GPIO.output(LEDROUGE,GPIO.HIGH)

time.sleep(30)

 
J'ai rajouter le else: qui n'est pas obligatoire mais qui si jamais pour une raison x ou y la valeur de la sonde n'est pas numérique ( sonde HS par exemple ? ) les 2 LED s'allument.

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Sonde DS18B20 LED et python

Message par Eddie » mer. 4 mars 2015 08:41

Pétard c'est génial ton truc là avec ta chaudière... Je pensais faire la même chose avec la mienne quant mes connaissances se seraient améliorés. Y'a moyen d'en savoir plus ? C'est la marque Perge.

Je vais regarder tour ça prochainement car je suis en vacance et j'ai pas emené mes Rpi... :D mais dans l'idée c'est ça... Merci
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Sonde DS18B20 LED et python

Message par dbrion0606 » mer. 4 mars 2015 10:55

remplacé par le suivant
Modifié en dernier par dbrion0606 le mer. 4 mars 2015 10:57, modifié 1 fois.

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Sonde DS18B20 LED et python

Message par dbrion0606 » mer. 4 mars 2015 10:56

Excusez moi d'être pédant, mais une erreur serait "mieux" gérée par une exception (un bloc "try" attrape toutes les erreurs, et les redirige vers un traitement spécifique); ceci mènerait au code suivant (testé sur PC; les instructions spécifiques au RPI ont été commentées et remplacées par des print)

Code : Tout sélectionner

consigne = 20
LEDVERTE = 17
LEDROUGE =18



def froid ():
 # GPIO.output(LEDVERTE,GPIO.LOW)
 # GPIO.output(LEDROUGE,GPIO.HIGH)
 print("froid")

def chaud ():
 print ("chaud")
 # GPIO.output(LEDVERTE,GPIO.HIGH)
 # GPIO.output(LEDROUGE,GPIO.LOW)
def panic ():
 print ("panic") # les deux leds s'allument si anomalie
# GPIO.output(LEDVERTE,GPIO.HIGH)
# GPIO.output(LEDROUGE,GPIO.HIGH)

#jeu d'essais
temperaturedata="b:21000" # -> chaud
temperaturedata="a:12000"
temperaturedata="t:18000" # froid
temperaturedata="zzzzzz" # valeur aberrante  -> panic

try :
  temperature=float(temperaturedata[2:])
  print (temperature)
  temp = round(temperature / 1000, 2)
  # while True:
  if temp >= consigne:
    chaud()
  elif temp < consigne:
    froid()
  else :
    panic()
except:
  panic()

Avatar du membre
Eddie
Messages : 80
Enregistré le : lun. 2 mars 2015 20:30

Re: Sonde DS18B20 LED et python

Message par Eddie » dim. 8 mars 2015 22:16

Bonjour,

J'ai essayé de faire un mix de tout ça mais que néni.
J'ai testé la sonde et les LED indépendamment et tout marche.
Le prog plante vers la fin sur except et si j'isole cette ligne il attend une fin du prog sur la ligne 78 alors qu'il n'y a rien...

Code : Tout sélectionner

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-000006a3375b')[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)

def temperature():
     global temp
     tfile = open("/sys/bus/w1/devices/28-000006a3375b/w1_slave")
     text = tfile.read()
     tfile.close()
     temperaturedata = text.split("\n")[1].split(" ")[9]
     temperature = float(temperaturedata[2:])
     temp = round(temperature / 1000, 2)

CONSIGNE = 20
LEDVERTE = 18
LEDROUGE = 17

def froid ():
     # GPIO.output(LEDVERTE,GPIO.LOW)
     # GPIO.output(LEDROUGE,GPIO.HIGH)
     print("froid")

def chaud ():
     print ("chaud")
     # GPIO.output(LEDVERTE,GPIO.HIGH)
     # GPIO.output(LEDROUGE,GPIO.LOW)
def panic ():
     print ("panic") # les deux leds s'allument si anomalie
    # GPIO.output(LEDVERTE,GPIO.HIGH)
    # GPIO.output(LEDROUGE,GPIO.HIGH)
    # GPIO.output(LEDVERTE,GPIO.HIGH)
    # GPIO.output(LEDROUGE,GPIO.HIGH)
    #jeu d'essais
    temperaturedata="b:21000" # -> chaud
    temperaturedata="a:12000"
    temperaturedata="t:18000" # froid
    temperaturedata="zzzzzz" # valeur aberrante  -> panic

try :
      temperature=float(temperaturedata[2:])
      print (temperature)
      temp = round(temperature / 1000, 2)
      # while True:
      if temp >= consigne:
        chaud()
      elif temp < consigne:
        froid()
      else :
        panic()
      except :
        panic()

Un p'tit coup de pouce STP merci.
Raspberry Pi 2 et KODI + HD
Raspberry B et Recalbox
Raspberryi B+ expérience électronique Lego et Python
Raspicam
Freebox V6

Répondre

Retourner vers « Gestion de la température »