Capteur de température DALLAS DS18S20

Bonjour, j'ai acheter 2 capteurs e température DS18S20.
Sur les capteurs il y a marquer DALLAS DS1820 1121C4 +919AA...

Avec le code de mon-club-elec pour le DS18B20 (Thermomètre de précision basé sur un capteur de température One-wire de type DS18B20 (affichage série USB) - Mon Club Elec) ça m'affiche ça dans le terminal:

1 capteur 1-wire present avec code adresse 64 bits : 10 10 96 54 02 08 00 64 
Le capteur present n'est pas un capteur de temperature DS18B20.
Verification du code CRC de l'adresse 64 bits de ce capteur : VALIDE !
----- fin de la recherche du capteur ----

Temperature = 2.75 Degres Celsius. 
...

Dans ma maison et le thermomètre a coté affiche 21.4°C...

Donc j'aimerais savoir ce qu'il faut modifier pour avoir la température avec le capteur que j'ai ...

Merci de votre aide :slight_smile:

Tu as un DS18S20 et le code est pour un DS18B20 ....

Le capteur present n'est pas un capteur de temperature DS18B20

Il doit donc y avoir une différence sur la transmission des donnés entre ces deux capteurs :wink:

Regarde peut-être ça =>

#include <LiquidCrystalRus.h>
#include <OneWire.h>
#include <OneWireTempSensor.h>

LiquidCrystalRus lcd(12, 11, 10, 5, 4, 3, 2);
OneWireTempSensor sensors(8); 
int numdevs;
int value;
int temp;
byte newChar[8] = {
  B11000,
  B11000,
  B00110,
  B01001,
  B01000,
  B01001,
  B00110,
  B00000
};

void setup() 
{
  lcd.createChar(0, newChar); 
  lcd.begin(16, 2);  
  numdevs = sensors.getDevices(); 
}

void loop() {
  value = (int) sensors.getTempC(0);
if (value != 85)
{
    if (value < 10)
    {
      temp = value/10;
    }
    else
    {
      temp = value;
    }
}
lcd.setCursor(0,0);
lcd.print("Tемпература=");
lcd.setCursor(12,0);
lcd.print(temp);
lcd.setCursor(14,0);
lcd.write(0);
}

ici aussi => Arduino Playground - OneWire

pierreyves258:
Bonjour, j'ai acheter 2 capteurs e température DS18S20.
Sur les capteurs il y a marquer DALLAS DS1820 1121C4 +919AA...

Avec le code de mon-club-elec pour le DS18B20 (Thermomètre de précision basé sur un capteur de température One-wire de type DS18B20 (affichage série USB) - Mon Club Elec) ça m'affiche ça dans le terminal:

1 capteur 1-wire present avec code adresse 64 bits : 10 10 96 54 02 08 00 64 

Le capteur present n'est pas un capteur de temperature DS18B20.
Verification du code CRC de l'adresse 64 bits de ce capteur : VALIDE !
----- fin de la recherche du capteur ----

Temperature = 2.75 Degres Celsius.
...




Dans ma maison et le thermomètre a coté affiche 21.4°C...

Donc j'aimerais savoir ce qu'il faut modifier pour avoir la température avec le capteur que j'ai ...

Merci de votre aide :)

bonjour
C'est un probleme récurrent avec les DS18x20
Les DS18S20 ont une résolution fixe de 9 bits
Les DS18B20 ont une résolution programmable entre 9 et 12 bits
la c'est bien un DS18S20 (code famille 10H pour un S, 28H pour un B)
Il faut donc voir le code et le modifier pour qu'il lise en 9 bits

chicotore: ça ne marche pas car je pense pense pas avoir la librairie OneWireTempSensor ...

J'avais remarquer que ce n'étais pas les mêmes :wink:
Mais alors comment lire en 9bits ? (déja que je sais pas faire en 12bits ^^)

Si ça peut aider :

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1209105786/all

Bof ... Je sais pas comment lire la température en 9 Bits ...

Pouvez vous me donner un code qui marche avec le DS18S20 svp

pierreyves258:
Bof ...

hum... toujours un plaisir de vouloir aider ! XD

pierreyves258:
Pouvez vous me donner un code qui marche avec le DS18S20 svp

En cherchant un peu comment ça fonctionne.... ça peut aussi le faire XD

:smiley: je sais ^^ mais je comprend pas trop comment lire la valeur en 9 bits...
Si non y a pas une librairie qui fais ça ? qui décode la valeur ?

OneWireTempSensor fais ça ? je trouve pas ou la télécharger ..

Tu as essayé ça :

http://www.netfluvia.org/code/ds18B20_test.pde

Maintenant oui ^^
et ...
Device is not a DS18B20 family device.

Logique ... c'est un DS18S20 :wink: mais la code de mon club elec marche mais affiche pas la bonne température car il lis en 12 Bits

Et si au lieu de ça

byte data[12]; // Tableau de 12 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
byte adresse[8]; // Tableau de 8 octets pour stockage du code d'adresse 64 bits du composant One Wire

tu met

byte data[9]; // Tableau de 9 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
byte adresse[8]; // Tableau de 8 octets pour stockage du code d'adresse 64 bits du composant One Wire

Tu changes ça :

  if ( addr[0] != 0x28) {
	Serial.print("Device is not a DS18B20 family device.\n");
	return;

Par ça :

 if ( addr[0] != 0x10) {
      Serial.print("Device is not a DS18S20 family device.\n");
      return;

Déja fait ... la ça marche mais bien sur ça ne donne pas la bonne température car il faut décoder la température en 9 Bits

EDIT: j'avais pas vu le post du dessus je vais essayer

Non ça ne marche pas (~26000°C :D)

Mais je ne comprend pas pourquoi un tableau de 12 parce que de toute façon la boucle d’écriture du tableau fais 9 tour ...

for ( i = 0; i < 9; i++)
data = ds.read();

pierreyves258:
Non ça ne marche pas (~26000°C :D)

Mais je ne comprend pas pourquoi un tableau de 12 parce que de toute façon la boucle d’écriture du tableau fais 9 tour ...

for ( i = 0; i < 9; i++)
data = ds.read();
[/quote]
re
voir
Electronique/Hardware/Sensors/DS18x20/Arduino — Ordinoscope.net
```
*#include <OneWire.h>

/* DS18S20 Temperature chip i/o */

OneWire  ds(10);  // on pin 10
int t1 ;
void setup(void) {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
 
  if ( !ds.search(addr)) {
    Serial.print("No more addresses.\n");
    ds.reset_search();
    delay(250);
    return;
  }
 
  Serial.print("R=");
  for( i = 0; i < 8; i++) {
    if (addr[i] < 16) Serial.print("0");
    Serial.print(addr[i], HEX);
    Serial.print(" ");
  }

if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }
 
  if ( addr[0] > 0x28) {
      Serial.print("Device is not a DS18S20 family device.\n");
      return;
  }

// The DallasTemperature library can do all this work for you!

ds.reset();
  ds.select(addr);
  ds.write(0x44,1);        // start conversion, with parasite power on at the end
 
  delay(800);    // 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("P=");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {          // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
  Serial.print(" ");
  int temp = data[0]/2;
  Serial.print(temp, DEC);
  t1=temp % 2;
  Serial.print(",");
    Serial.print(t1*5,DEC);

Serial.println();
  digitalWrite(13, HIGH);  // set the LED on
  delay(100); // for blink on activity
  digitalWrite(13, LOW);    // set the LED off
}*

```

Cool ça marche :slight_smile: Comment tu a fait ? je ne comprend pas comment tu a décoder la valeur

EDIT: en faite la température c'est tout simplement data[0]/2 ...

ReEDIT:

Mais avec cette façon on a que 0.5 de précision ... on peut pas avoir plus ?

pierreyves258:
Cool ça marche :slight_smile: Comment tu a fait ? je ne comprend pas comment tu a décoder la valeur

EDIT: en faite la température c'est tout simplement data[0]/2 ...

ReEDIT:

Mais avec cette façon on a que 0.5 de précision ... on peut pas avoir plus ?

non
la précision(accuracy) pour les B ou les S est la même :
±0.5°C Accuracy from -10°C to +85°C

C'est la résolution qui change entre S et B :
DS18S20 résolution sur 9 bits = 0.5 °C
DS18B20 résolution sur 12 bits = 0.0625 °C

Ok merci

pierreyves258:
Ok merci

La thermométrie "générale" ne demande pas dans l'absolu une grande précision
Déjà "savoir que la valeur rendue est précise à ±0.5°C est très largement suffisant dans la majorité des applications.
Et même si c'est toujours "intellectuellement agréable" d'avoir "plein de chiffres" après la virgule, ça ne rend pas la mesure plus précise pour autant.
C'est généralement plus les variations et la "rapidité des variations" de la T° acquise qui est souvent plus significative que la T° elle même.