Go Down

Topic: one wire 2 capteurs différents (Read 103 times) previous topic - next topic

berthon

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);
}
}
 


destroyedlolo

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 plus "moderne" que la DallasTemperature.h et il y a un exemple pour utiliser plusieurs sondes

A+

berthon

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 ^^


destroyedlolo

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, 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 pour expliquer comment ca fonctionne.

Go Up