Go Down

Topic: Longeur maxi pour reseau 1-WIRE et sonde DS18B20 (Read 5011 times) previous topic - next topic

carlos05

Bonjour à tout le monde.

Je désire faire un système de pilotage de chauffage avec le système arduino.
J'ai lu dans le forum, comment lire la température (via la sonde de température DS18B20 sur un réseau 1-WIRE).
Je désire centraliser le tout dans mon garage (module arduino avec shield réseau).
Ma question est la suivante : qu'elle est la distance maximum pour relier la sonde au module arduino via le réseau 1-WIRE.
Ma maison est sur 3 niveaux !!!
J'ai cherché sur internet (wikipedia explique pied la topologie mais pas la distance maxi) et je n'ai pas trouvé de réponse claire.
Si quelqu'un connait la réponse ou s'il a déjà effectué des liaisons d'au moins 15 mètres merci de me le signaler.

Merci d'avance.

:)

albertrand

Salut carlos05, j'ai cablage  un montage avec 8 DS18B20 montée en série et étoile. Le plus éloigné  est a +/-21m.
J'ai utilisé du câble réseau catégorie 5.
« Ungibus et Rostro » (De bec et d'ongles)

Artouste



Si quelqu'un connait la réponse ou s'il a déjà effectué des liaisons d'au moins 15 mètres merci de me le signaler.

Merci d'avance.

:)

bonjour
15 metres ce n'est pas un probleme, j'ai déjà implementé du multidevices sur plus long
attention néanmoins avec les DS18B20 si il sont alimentés en parasitic power.

une bonne doc sur les longs reseaux 1W chez maxim
http://www.maximintegrated.com/app-notes/index.mvp/id/148

carlos05

Merci beaucoup pour vos réponses.

J'ai mon cadeau de noël  :)

benboua

est ce que quelle un connue un code juste pour afficher la temperature avec deux capteur DS18B20 sur deux salle par un afficheur lcd
jai chercher bien sur le net mais certin il affiche -0.06 , -127, NO MORE ADDRESSE, et des valeurs  incorrect
je vois ce code mais avec 1 seule cpateur mais comment modifier cela pour deux capteur
aider mois stp

#include <DallasTemperature.h>


#include <OneWire.h>
#include "LiquidCrystal.h"

LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library
/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 10;
OneWire  ds(10);// on pin 8


void setup(void) {
 
 Serial.begin(9600);
  lcd.begin(16, 2);
}

void loop(void) {
 byte i;
 byte present = 0;
 byte type_s;
 byte data[12];
 byte addr[8];
 float celsius, fahrenheit;
 
 if ( !ds.search(addr)) {
   Serial.println("No more addresses.");
   Serial.println();
   ds.reset_search();
   delay(250);
   return;
 }
 
 Serial.print("ROM =");
 for( i = 0; i < 8; i++) {
   Serial.write(' ');
   Serial.print(addr, HEX);
 }

 if (OneWire::crc8(addr, 7) != addr[7]) {
     Serial.println("CRC is not valid!");
     return;
 }
 Serial.println();

 // the first ROM byte indicates which chip
 switch (addr[0]) {
   case 0x10:
     Serial.println("  Chip = DS18S20");  // or old DS1820
     type_s = 1;
     break;
   case 0x28:
     Serial.println("  Chip = DS18B20");
     type_s = 0;
     break;
   case 0x22:
     Serial.println("  Chip = DS1822");
     type_s = 0;
     break;
   default:
     Serial.println("Device is not a DS18x20 family device.");
     return;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);         // start conversion, with parasite power on at the end
 
 delay(1000);     // maybe 750ms is enough, maybe not
 // we might do a ds.depower() here, but the reset will take care of it.
 
 present = ds.reset();
 ds.select(addr);   
 ds.write(0xBE);         // Read Scratchpad

 Serial.print("  Data = ");
 Serial.print(present,HEX);
 Serial.print(" ");
 for ( i = 0; i < 9; i++) {           // we need 9 bytes
   data = ds.read();
   Serial.print(data, HEX);
   Serial.print(" ");
 }
 Serial.print(" CRC=");
 Serial.print(OneWire::crc8(data, 8), HEX);
 Serial.println();

 // convert the data to actual temperature

 unsigned int raw = (data[1] << 8) | data[0];
 if (type_s) {
   raw = raw << 3; // 9 bit resolution default
   if (data[7] == 0x10) {
     // count remain gives full 12 bit resolution
     raw = (raw & 0xFFF0) + 12 - data[6];
   }
 } else {
   byte cfg = (data[4] & 0x60);
   if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
   else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
   else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
   // default is 12 bit resolution, 750 ms conversion time
 }
 celsius = (float)raw / 16.0;
 fahrenheit = celsius * 1.8 + 32.0;
 sensors2.requestTemperatures();   //Se envía el comando para leer la temperatura
float temp2= sensors2.getTempCByIndex(0); //Se obtiene la temperatura en ºC del sensor 2
 lcd.setCursor(0,0);
 Serial.print("Salle 1: ");
 lcd.print("Salle 1: ");
 lcd.print(celsius);
 Serial.print(celsius);
 lcd.setCursor(0,1);
  lcd.print("Salle 2: ");
  lcd.print(temp2);
  Serial.print("Salle 2: ");
   Serial.print(temp2);
  Serial.print(" Celsius, ");
 Serial.print(fahrenheit);
 Serial.println(" Fahrenheit");
}

Go Up