problème de distance de sondes de température

spheris

Senior Member
Bonjour,
J'ai un souci avec des sondes de températures situées à plusieurs endroits de la maison.
Etant dans un vieux corps de ferme, j'ai parfois des distances allant jusqu'à 80ml.
J'a 10 sondes DS18B20 qui sont reliées par du cable reseau catégorie 5 sur une carte electronique homemade à base de 20m2 sur les entrées B.0 à B7 et C.0 à C.2
elles ont toutes une résistance de tirage au vcc de 4.7kohm.

Le montage en tant que tel fonctionne très bien avec les sondes essayées à coté, mais en live avec les longueurs de cable réseau CAT5,cela ne fonctionne plus dès que je dépasse 25ml.
J'ai donc diminué la résistance jusqu'à 1Kohm (pas bon du tout) pour les plus loin mais cela fonctionne de façon alléatoire.
Je voudrais donc m'orienter vers une liaison 485. Pensez-vous que cela soit une bonne idée? Est il possible de faire passer l'alim dans les cables pour alimenter les picaxe 8M2 emetteur? Dois-je mettre une seul max485 en réception ou fautil mettre un max 485 par sonde à la réception?
Autant de question soulevées, mais je ne sais pas trop comment résoudre le problème. (Et ma chaudière ne sait plus trop où elle habite ;) )
Merci pour vos réponses et pour votre aide.
;)
 

MGU

Senior Member
Bonjour,

Le max485 est sans doute une des solutions.
Je ne sais plus d'où vient l'idée d'une liaison rfin rfout en filaire, mais ça mériterait d'être essayé. Avec un traitement du one wire localement et transmission du résultat, avec un identifiant. Le rfin faisant le tri à l'arrivée, en fonction de l'identifiant.
Jamais essayé, c'est juste une idée (farfelue ?)

J'ai retrouvé, c'était jojojo :
https://picaxeforum.co.uk/threads/communication-alleatoire-entre-deux-picaxes.31189/#post-322693
Mais avec quelle architecture ?
MM
 
Last edited:

jojojo

Senior Member
Hello, Michel.
Il y a quelque années, j'ai testé une liaison filaire, avec du Manchester.
Et, il y avait bien un PC en pilotage, avec une interface RS232/Manchester.
Ici, on pourrait envisager un simple 14M2, qui ferait le pont, entre le PC (ftd USB/RFOUT) et la sonde distante, elle aussi équipée d'un 14M2 en interface.

Pour info, mon système fonctionnait en milieu industriel TRÈS pollué (découpage à plasma, pour pièces de crochets d'attelages).
Le 485 le passait pas, ou mal. Le Manchester passait très bien, d'un bout à l'autre de l'usine, dans de simples paires téléphoniques.

Pour l'architecture, au mini, ça donnerait ça:

sonde_en_manchester.jpg
 
Last edited:

PieM

Senior Member
Bonjour,
Les difficultés viennent surtout du débit du 1Wire avec ses pulses de 60 µs.
Une solution avec de simples serin/serout a des débits très faibles (300 bauds, pas critique pour des températures) serait peut être suffisante.
De plus, tout peut se faire sur 1 seul câble en utilisant l'adressage via un qualifier pour chaque 08M2.
Le maître interroge successivement chaque capteur relié à un 08M2, qui répond seul sur la ligne.
 

spheris

Senior Member
pour le #4 Je vais tenter ce que dit PieM sans modifier le câblage avec des débits très faibles.
Pensez vous quand même qu'il n'y aura pas d'erreur de la valeur lue, vue la résistance parasite de la longueur des câbles?

pour le #3 c'est ce que j'envisageais de faire. Seulement est-il possible de faire transiter une alim 5volts dans le cable reseau pour alimenter les picaxes esclaves? jusqu'à quel niveau de tension peuvent il être considéré comme alimenté correctement?
 

spheris

Senior Member
Des nouvelles de mes manips.
J'ai fabriqué une petite carte a base de 08M2 alimenté par une alim 12VDC qui transite par une paire du cable reseau et sur la carte je regule la tension par un 78L05.
Avec un débit de 600 bauds, j'atteinds sans aucun souci les 800m sans erreur de communication avec du simple cable reseau catégorie 5.
Par contre, j'ai une différence de 1°c par rapport à une sonde étalonnée certifée professionnelle située au même endroit.
LA précision des DS18B20 est de 0.5, pourquoi donc cet ecart?
puis-je appliquer la relation y=ax+b pour corriger le problème?
ou est obligatoirement le coef 0.0695 qui fait foi?
Merci de vos réponses.
;)
 

PieM

Senior Member
Bonjour,
la précision donnée de ± 0.5°C entre -10 et +85°C est une valeur statistique (3 écarts type) . Rien ne peut dire qu'un écart constaté lors d'une mesure sera le même lors des mesures suivantes.
Cela veut dire également que des mesures (rares) peuvent être au delà de cet écart
ne pas oublier que la précision passe à ±2°C entre -55 et + 125°C
Faire une correction d'offset n'a donc pas de sens, a mon avis.
Quant au 0.0695, c'est la valeur en °C de l'unité de la partie décimale (en 12 bits)
Une sonde type thermocouple ne donnerait pas mieux.
Selon la gamme de température une mesure par thermistance serait plus précise, en utilisant une table, ou un calcul (hors d'atteinte pour picaxe).
 
Last edited:

MGU

Senior Member
Bonjour,

0,0695, c'est la résolution max du DS19B20.
Beaucoup de paramètres peuvent expliquer les écarts de températures entre deux sondes : précision, temps de réponse, environnement...
Il faut faire plusieurs mesures à des températures différentes et voir si l'écart est constant ou non. Dans tous les cas, une correction est possible, si les sondes sont fidèles.

MM
 

spheris

Senior Member
Excusez moi de remonter ce post, mais je souhaiterais mieux comprendre ce petit calcul :

je reçois la valeur '387' surle PC sur ma ligne série lors d'une acquisition sur un 20m2 par un readtemp12.

Comment puis-je convertir cela en celsius par une formule sur le PC?
Une simple multiplication par 0.0695 me donne-t-elle ce résultat?
Est-ce comme cela qu'il faut convertir cette valeur numérique en degré celsius?
Merci pour votre réponse.
 

PieM

Senior Member
Bonjour,
SI tu as 387, c'est que ta température mesurée est de 24.1 °C.
Petit bout de programme qui te donne le calcul à faire:
(il y avait une erreur sur les précedents posts : ce n'est pas 0.0695 mais 625)
Rich (BB code):
'DS18B20-01
symbol signe = b27
symbol temper = w0
symbol temper_int = w1
symbol temper_dec = w2
do
      readtemp12 C.1, temper
      gosub Affichage_temp
      pause 1000
loop

Affichage_temp:
      if temper < $8000 then
            signe = 43
            else
            temper = -temper : signe = 45
      end if
      temper_int = temper / 16 'partie enti?re
      temper_dec = temper//16 * 5/8 'partie decimale
            
      sertxd( signe,#temper_int, ".", #temper_dec,cr,lf )
      serout C.1,N2400, (254,128,signe,#temper_int, ".",#temper_dec)
return
 

PieM

Senior Member
Non! mais les : correspondent à un passage à la ligne pour une autre instruction.
C'est identique à
temper = -temper
signe = 45
 

spheris

Senior Member
d'accord merci.
une dernière précision sans doute bête, mais je confonds les ASCII et les variables.
Pourriez-vous me confirmer dans cet exemple

sur un 08M j'ai un DS18B20 avec lequel je lis par cette commande :

readtemp12 C.4,w0
ensuite, je l'envoi à un autre picaxe 20M2 pour traitement :

serout C.2,T4800,(w0)

ensuite à la réception sur le 20M2 :
serin [1500],C.0,T4800,w1

question : dois-je ecrire pour l'emission #w0 ou w0?
et pour la reception #w1 ou w1?
merci pour votre aide
 
Top