Arduino Forum

International => Français => Topic started by: berthon on Jun 14, 2018, 10:29 am

Title: one wire 2 capteurs différents
Post by: berthon on Jun 14, 2018, 10:29 am
bonjour,


je souhaite adapter onewire pour deux capteurs différents.

N'y connaissant pas tellement à par des copier coller en grandes partie, est-ce que quelqu'un pourrait me montrer comment faire pour activer onewire sur un capteur puis l'autre? J'ai eu beau essayer je n'y arrive pas :(


One wire fonctionne sur une sonde ds18b20 et dht22(sonde de température d'eau).
J'ai un 3ème capteur de ph qui fonctionne indépendamment sans problème.



voici mon code:

Code: [Select]
#include <OneWire.h>

/* DS18B20 Temperature chip i/o */

OneWire  ds(10);  // on pin 10
int t1 ;


#include <DallasTemperature.h>

#include <DHT.h>
#define DHTPIN A2
OneWire oneWire(DHTPIN);
#define DHTTYPE DHT22    // DHT11 sinon

DHT dht(DHTPIN, DHTTYPE);
                     
#define WATER_TEMP_PIN 'A0'
OneWire oneWire(WATER_TEMP_PIN)'A0';
DallasTemperature sensors(&oneWire);
                     

#define SensorPin A1          //pH meter Analog output to Arduino Analog Input 0
unsigned long int avgValue;  //Store the average value of the sensor feedback
float b;
int buf[10],temp;

void setup()
{
    pinMode(13,OUTPUT); 
  // On initialise la connexion série
  Serial.begin(9600);
  delay(2000);

  // On imprime un texte de bienvenu
  Serial.println("Bonjour Manu");

}


 
void loop()

{
  {

    float h = dht.readHumidity();
    float t = dht.readTemperature();


    if (isnan(t) || isnan(h))
    {
        Serial.println("Failed to read from DHT");
    }
    else
    {
        Serial.print("Humidity: ");
        Serial.print(h);
        Serial.print(" %\t");
        Serial.print("Temperature: ");
        Serial.print(t);
        Serial.println(" *C");
        delay(5000);
    }
}


  { // On récupère la température de la sonde
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);

  // On imprime la température
  Serial.print("Température de l'eau: ");
  Serial.print(dTempWater);
  Serial.println("°C");

}

 
{
  for(int i=0;i<10;i++)       //Get 10 sample value from the sensor for smooth the value
  {
    buf[i]=analogRead(SensorPin);
    delay(10);
  }
  for(int i=0;i<9;i++)        //sort the analog from small to large
  {
    for(int j=i+1;j<10;j++)
    {
      if(buf[i]>buf[j])
      {
        temp=buf[i];
        buf[i]=buf[j];
        buf[j]=temp;
      }
    }
  }
  avgValue=0;
  for(int i=2;i<8;i++)                      //take the average value of 6 center sample
    avgValue+=buf[i];
  float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
  phValue=3.5*phValue;                      //convert the millivolt into pH value
  Serial.print("    pH:"); 
  Serial.print(phValue,2);
  Serial.println(" ");
  digitalWrite(13, HIGH);       
  delay(2000);
  digitalWrite(13, LOW);
}
}
 

Title: Re: one wire 2 capteurs différents
Post by: destroyedlolo on Jun 14, 2018, 11:12 pm
Salut,

Ben ca ne peut par marcher car tu dis vouloir utiliser des DS18b20 alors que tu utilises du code pour DHT ... 2 sondes totalement différentes :)

ps:  Sinon, j'ai fait une librairie (https://github.com/destroyedlolo/OWBus) plus "moderne" que la DallasTemperature.h et il y a un exemple (https://github.com/destroyedlolo/OWBus/tree/master/examples/Multiple_Temperature) pour utiliser plusieurs sondes

A+
Title: Re: one wire 2 capteurs différents
Post by: berthon on Jun 15, 2018, 09:47 am
Merci pour ta réponse Destroyedlolo,

je vais essayer avec ton code pour voir.


Alors si j'utilise ton code pour faire fonctionner les deux ensemble, l'adresse de chacune des sondes c'est à et cet emplacement si j'ai bien compris:


   DS18B20  probe1(bus, 0x2882b25e09000015 );

   DS28EA00 probe2(bus, 0x42886847000000bf );


si les miens sont différents comment je peux les trouver ?plz help ^^

Title: Re: one wire 2 capteurs différents
Post by: destroyedlolo on Jun 18, 2018, 12:20 am
Salut,

Alors si j'utilise ton code pour faire fonctionner les deux ensemble, l'adresse de chacune des sondes c'est à et cet emplacement si j'ai bien compris:


   DS18B20  probe1(bus, 0x2882b25e09000015 );

   DS28EA00 probe2(bus, 0x42886847000000bf );
Oui ... et non :)
Les DS18B20 et DS28EA00 sont 2 modèles de sondes différents.
Si tu as 2 DS18B20, le code est :
Code: [Select]
DS18B20  probe1(bus, 0x2882b25e09000015 );
DS18B20 probe2(bus, 0x42886847000000bf );




si les miens sont différents comment je peux les trouver ?plz help ^^
L'adresse est imprimée sur les sondes elles-mêmes. Mais tu peux utiliser un autre exemple, NumberOfProbes (https://github.com/destroyedlolo/OWBus/blob/master/examples/NumberOfProbes/NumberOfProbes.ino), qui affichera le modèle, l'adresse et les caractéristiques des sondes présentes sur le bus.

Tu as sur mon site aussi un tuto (http://destroyedlolo.info/ESP/Temperature/) pour expliquer comment ca fonctionne.