Pages: 1 [2]   Go Down
Author Topic: [resolu] capteur ds18b20  (Read 3483 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Breaks ? We don't need breaks !!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, j'ai une solution avec 3 sondes qui fonctionne, j'ai pioché du code un peu de partout et j'utilise la librairie DallasTemperature, voici le résultat (PHP + MySQL + JpGraph) :

http://37.59.122.168/ds18b20.php

Code:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>

#define ONE_WIRE_BUS 7
#define TEMPERATURE_PRECISION 12

byte mac[] = { 0xDE, 0xAD, 0xCA, 0xFE, 0xBA, 0xBE };
byte ip[] = { 192, 168, 0, 10 };
byte server[] = { 37, 59, 122, 168 }; // IP serveur MySQL + PHP
byte gateway[] = { 192, 168, 0, 254 };
byte dns[] = { 192, 168, 0, 254  };
byte subnet[] = { 255, 255, 255, 0 };

EthernetClient client;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress DS0, DS1, DS2;

void setup(void)
{
 Serial.begin(9600);
 sensors.begin();
 if (!sensors.getAddress(DS0, 0)) Serial.println("Pas d'adresse pour le capteur 0");
 if (!sensors.getAddress(DS1, 1)) Serial.println("Pas d'adresse pour le capteur 1");
 if (!sensors.getAddress(DS2, 2)) Serial.println("Pas d'adresse pour le capteur 2");
 sensors.setResolution(DS0, TEMPERATURE_PRECISION);
 sensors.setResolution(DS1, TEMPERATURE_PRECISION);
 sensors.setResolution(DS2, TEMPERATURE_PRECISION);
 Ethernet.begin(mac, ip, dns, gateway, subnet);
}

void getTemp(void)
{
 int i = 0;
 int numSensors = sensors.getDeviceCount();
 float temparray[numSensors]; 
 sensors.requestTemperatures();
 delay(100);
 for(i=0; i<numSensors; i++)
 {
  float temp = sensors.getTempCByIndex(i);
  temparray[i] = temp;
 }
 client.print("GET /getTemp.php?");
 for (i=0; i<numSensors; i++)
 {
  client.print("t");
  client.print(i);
  client.print("=");
  client.print(temparray[i]);
  if (i < numSensors-1)
  {
   client.print("&");
  }
  else
  {
  }   
 }
 client.println(" HTTP/1.1");
 client.println("Host: 37.59.122.168");
 client.println("User-Agent: Arduino");
 client.println("Accept: text/html");
 client.println("Connection: close");
 client.println();
 delay(50);
}

void loop(void)
{
 if(client.connect(server, 80))
 {
  getTemp();
 }
 else
 {
  Serial.println("Echec de connexion. Essayez de nouveau plus tard.");
 }
 client.stop();
 delay(60000); // 1 minute
}

Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'avais trouvé un "scanner de bus 1Wire" qui listait tout ce qui répondait sur le bus
Bonjour bricofoy
J'ai rapidement modifié à la hussarde un des prog pour en faire un "pseudo scanner OW"
Les compos listés sont ceux que j'ai aujourd'hui disponibles sous la main
ça liste juste l'ID et calcul/verifie le CRC

petite info : la plupart des compo en 1W repondent à la lecture de rom en parasitic power, ce qui est suffisant pour les detecter, mais attention
sorti de là, un certain nombre ne sont pas fonctionnels sans alim externe .

Code:
#include <OneWire.h>


OneWire  ds(8);  // on pin 8
void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
   byte data[12];
  byte addr[8];
 
  if ( !ds.search(addr)) {
    Serial.println();
    Serial.println("END OF SCAN.");
    Serial.println();
    ds.reset_search();
    delay(2500);
    return;
  }
  Serial.println("--------------");
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  Serial.print("CHIP FAMILY ");
 Serial.print(addr[0],HEX);
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x01:
      Serial.println(" DS1990");  //
            break;
            case 0x02:
      Serial.println(" DS1991");  //
            break;
    case 0x04:
      Serial.println(" DS1994");  //
            break;
    case 0x05:
      Serial.println(" DS2405");  //
            break;
            case 0x06:
      Serial.println(" DS1992");  //
            break;
            case 0x08:
      Serial.println(" DS1993");  //
            break;
    case 0x10:
      Serial.println(" DS18S20 DS1920");  // or old DS1820
            break;
            case 0x21:
      Serial.println(" DS1921");
            break;
   
    case 0x22:
      Serial.println(" DS1822");
            break;
            case 0x24:
      Serial.println(" DS1904");
            break;
            case 0x28:
      Serial.println(" DS18B20");
            break;
           
      case 0x29:
      Serial.println(" DS2408"); 
            break;
             case 0x41:
      Serial.println(" DS1923"); 
            break;
    default:
      Serial.println(" is not listed.");
     
      return;
  }

 
}


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne sais pas si cela change quelque chose mais je n'ai que 3 fils qui sortent du capteur.
J'essayerais quand même le code en rentrant voir si le capteur fonctionne.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon,
j'ai testé ton programme artouste, et j'ai dans le sérial monitor "end of scan" et c'est tout  smiley-cry
Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon,
j'ai testé ton programme artouste, et j'ai dans le sérial monitor "end of scan" et c'est tout  smiley-cry
bonsoir
- rien d'autre de cablé que le DS18B20 ?
- test fait en parasitic power (noir+rouge sur gnd) ?
- verif  (valeur) de la 4.7K et câblage ?
- test sur un autre pin que le 8 (adapter le programme)

par acquis de conscience , j'ai "reverifié/rechargé" le prog posté plus haut
avec 4 compos differents sur la ligne, ça retourne çà

Quote
--------------
ROM = 10 2F 7D BC 0 8 0 1D
CHIP FAMILY 10 DS18S20 DS1920
--------------
ROM = 28 EC FB B8 0 0 0 11
CHIP FAMILY 28 DS18B20
--------------
ROM = 5 A5 CA F 0 0 0 7B
CHIP FAMILY 5 DS2405
--------------
ROM = 5 73 CA F 0 0 0 D
CHIP FAMILY 5 DS2405

END OF SCAN.
« Last Edit: December 13, 2012, 03:29:26 pm by Artouste » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon,
j'ai testé ton programme artouste, et j'ai dans le sérial monitor "end of scan" et c'est tout  smiley-cry
bonsoir
- rien d'autre de cablé que le DS18B20 ?
- test fait en parasitic power (noir+rouge sur gnd) ?
- verif  (valeur) de la 4.7K et câblage ?
- test sur un autre pin que le 8 (adapter le programme)

par acquis de conscience , j'ai "reverifié/rechargé" le prog posté plus haut
avec 4 compos differents sur la ligne, ça retourne çà

Quote
--------------
ROM = 10 2F 7D BC 0 8 0 1D
CHIP FAMILY 10 DS18S20 DS1920
--------------
ROM = 28 EC FB B8 0 0 0 11
CHIP FAMILY 28 DS18B20
--------------
ROM = 5 A5 CA F 0 0 0 7B
CHIP FAMILY 5 DS2405
--------------
ROM = 5 73 CA F 0 0 0 D
CHIP FAMILY 5 DS2405

END OF SCAN.


je continue a croire que c'est bien mon capteur qui est en cause, je viens de refaire des tests et j'ai toujours "end of scan" tout seul.
J'ai aussi utilisé l'autre capteur et c'est toujours pareil.
J'ai fait exactement ce que tu m'as dit, c'est a dire:
-le rouge et noir sur gnd
-le jaune sur un autre pin avec adaptation du programme
-verif de la résistance
-rien d'autre de branché sur l'arduino

Ca me parait bizarre quand même que les deux capteurs soient cramés, a moins d'avoir fait une mauvaise manip au début mais bon, je n'y croit pas de trop.
Logged

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

essaye avec le rouge sur la ligne data, et le jaune et noir au gnd smiley-wink
Logged

-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Ca me parait bizarre quand même que les deux capteurs soient cramés, a moins d'avoir fait une mauvaise manip au début mais bon, je n'y croit pas de trop.
Les DS18B20 particulierement (et les compos1W en général) sont très tolérants aux "erreurs" de connections , j'en "martyrise" depuis des années  smiley-mr-green
et je ne me souvient pas en avoir "cuit" un seul (évidemment en restant sur du 5V "correct"  smiley-cool )

tu devrais recevoir tes "vrais" ds18b20 quand ?


Logged

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il faudrait aussi essayer de mettre la tresse de masse au gnd, si ça se trouve le noir n'est relié à rien...
Logged

-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il faudrait aussi essayer de mettre la tresse de masse au gnd, si ça se trouve le noir n'est relié à rien...
bonjour bricofoy
d'apres ce que j'ai compris, il n'a pas sur ses exemplaires de tresse de masse
voir :
http://arduino.cc/forum/index.php/topic,137166.msg1031423.html#msg1031423
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,
bon j'ai reçu mes nouveaux capteurs et toujours le même problème.

J'ai compris mon erreur, je m'était le fil jaune sur une entrée analogique de l'arduino alors qu'il fallait la mettre sur une entrée pwm.

Quel boulet!!  smiley-red

Tout fonctionne nickel comme cela.

Merci à tous ceux qui auront pris le temps de me répondre. Mais là c'est vraiment une erreur de débutant, je m'en veux terriblement.

Bon reste plus qu'à écrire un programme avec l'horloge, le lcd et les deux ds18b20  smiley-wink
Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,
bon j'ai reçu mes nouveaux capteurs et toujours le même problème.

J'ai compris mon erreur, je m'était le fil jaune sur une entrée analogique de l'arduino alors qu'il fallait la mettre sur une entrée pwm.

Quel boulet!!  smiley-red

Tout fonctionne nickel comme cela.

bonjour
C'est le genre d'erreur que l'on ne fait qu'une fois  smiley-mr-green
C'etait quand meme etonnant d'avoir 2 sondes HS
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pourquoi la lib OneWire ne pourrait-elle pas utiliser une pin An ?
On peut bien pourtant les utiliser comme des pins numériques ?
Je l'ai encore fait ce week-end pour tester une matrice de leds 8x8.

Est-ce pas plutôt que tu n'a pas indiqué le numéro de pin correctement ?
D'ailleurs ton code exemple plus haut dit qu'il utilise la pin 8.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pourquoi la lib OneWire ne pourrait-elle pas utiliser une pin An ?
On peut bien pourtant les utiliser comme des pins numériques ?
Je l'ai encore fait ce week-end pour tester une matrice de leds 8x8.

Est-ce pas plutôt que tu n'a pas indiqué le numéro de pin correctement ?
D'ailleurs ton code exemple plus haut dit qu'il utilise la pin 8.

salut,
j'ai suivi le code et mis le data sur le pin 8 analog in de l'arduino et ca ne marchais pas. lorsque je l'ai mis sur le pin8 pwm cela fonctionne nickel.

Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

8 == Pin 8 Numérique
A8 == Pin 8 Analogique

Donc la lib fonctionne bien, juste un problème de mauvaise pin.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Pages: 1 [2]   Go Up
Jump to: