Connecter 2 capteur BH1750 simultanément _ Arduino
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Connecter 2 capteur BH1750 simultanément _ Arduino



  1. #1
    warrior6386

    Connecter 2 capteur BH1750 simultanément _ Arduino


    ------

    Bonjour,

    Comme vous le voyez dans le titre, je souhaite connecter 2 capteur de luminosité (BH1750) sur une même carte arduino via le bus I2C.
    Avec 1 pas de soucis via la librairie BH1750 mais lorsque que je branche le 2ème, ils ont la même valeur.
    J'ai pris les adresse 0x23 et 0x5C donc ADDR relié sur +3.3V sur l'un et 0V sur l'autre.

    Voici mon code :
    Code:
    /*
    
      Advanced BH1750 library usage example
    
      This example has some comments about advanced usage features.
    
      Connection:
    
        VCC -> 3V3 or 5V
        GND -> GND
        SCL -> SCL (A5 on Arduino Uno, Leonardo, etc or 21 on Mega and Due, on esp8266 free selectable)
        SDA -> SDA (A4 on Arduino Uno, Leonardo, etc or 20 on Mega and Due, on esp8266 free selectable)
        ADD -> (not connected) or GND
    
      ADD pin is used to set sensor I2C address. If it has voltage greater or equal to
      0.7VCC voltage (e.g. you've connected it to VCC) the sensor address will be
      0x5C. In other case (if ADD voltage less than 0.7 * VCC) the sensor address will
      be 0x23 (by default).
    
    */
    
    #include <Wire.h>
    #include <BH1750.h>
    
    /*
      BH1750 can be physically configured to use two I2C addresses:
        - 0x23 (most common) (if ADD pin had < 0.7VCC voltage)
        - 0x5C (if ADD pin had > 0.7VCC voltage)
    
      Library uses 0x23 address as default, but you can define any other address.
      If you had troubles with default value - try to change it to 0x5C.
    
    */
    BH1750 lightMeter1(0x23);
    BH1750 lightMeter2(0x5C);
    
    void setup(){
    
      Serial.begin(9600);
    
      // Initialize the I2C bus (BH1750 library doesn't do this automatically)
      Wire.begin();
      // On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);
    
      /*
    
        BH1750 has six different measurement modes. They are divided in two groups;
        continuous and one-time measurements. In continuous mode, sensor continuously
        measures lightness value. In one-time mode the sensor makes only one
        measurement and then goes into Power Down mode.
    
        Each mode, has three different precisions:
    
          - Low Resolution Mode - (4 lx precision, 16ms measurement time)
          - High Resolution Mode - (1 lx precision, 120ms measurement time)
          - High Resolution Mode 2 - (0.5 lx precision, 120ms measurement time)
    
        By default, the library uses Continuous High Resolution Mode, but you can
        set any other mode, by passing it to BH1750.begin() or BH1750.configure()
        functions.
    
        [!] Remember, if you use One-Time mode, your sensor will go to Power Down
        mode each time, when it completes a measurement and you've read it.
    
        Full mode list:
    
          BH1750_CONTINUOUS_LOW_RES_MODE
          BH1750_CONTINUOUS_HIGH_RES_MODE (default)
          BH1750_CONTINUOUS_HIGH_RES_MODE_2
    
          BH1750_ONE_TIME_LOW_RES_MODE
          BH1750_ONE_TIME_HIGH_RES_MODE
          BH1750_ONE_TIME_HIGH_RES_MODE_2
    
      */
    
      // begin returns a boolean that can be used to detect setup problems.
      lightMeter1.begin(BH1750::CONTINUOUS_HIGH_RES_MODE);
      lightMeter2.begin(BH1750::CONTINUOUS_HIGH_RES_MODE);
      
      
    
    }
    
    
    void loop() {
      Wire.beginTransmission(0x23);
      float lux1 = lightMeter1.readLightLevel();
      
      Serial.print("Light1: ");
      Serial.print(lux1);
      Serial.println(" lx");
      Wire.endTransmission();
    
      Wire.beginTransmission(0x5C);
      float lux2 = lightMeter2.readLightLevel();
      Serial.print("Light2: ");
      Serial.print(lux2);
      Serial.println(" lx");
      Wire.endTransmission();
      delay(500);
    
    }
    Merci de votre aide.

    -----

  2. #2
    Jack
    Modérateur

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Qu'est-ce qui te fait dire qu'ils ont la même adresse?

  3. #3
    Jack
    Modérateur

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Ou alors, je n'ai pas compris ce que tu appelles "valeur": la mesure de la luminosité?

  4. #4
    warrior6386

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Oui, ils renvoient la même valeur (luminosité).
    Mais comment peut-on changer l'adresse de ce type de capteur ?
    D'après mes recherches, ceux-ci ne peuvent avoir que deux adresses différentes selon le branchement de la pin ADDR : 0x23 ou 0x5C ; Est-ce vrai ?

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    1 - Je ne comprends vraiment pas ton problème. Si les 2 capteurs sont illuminés de manière identique, ils doivent te renvoyer la même valeur.
    2 - bis: qu'est-ce qui te fait dire qu'ils ont la même adresse?

  7. #6
    warrior6386

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Même si je cache un capteur, ça ne bouge pas mais si je cache l'autre les deux valeurs renvoyées bougent identiquement.
    Je souhaite recevoir les infos de deux capteurs identiques via le bus I2C, est-ce possible ?
    Mais si les capteurs sont identiques, ils n'ont pas la même adresse ?
    C'est pour obtenir une différence de luminosité entre les deux.
    Mais quand je dit "identique", c'est que j'ai acheté deux fois le même;
    Dernière modification par warrior6386 ; 19/06/2020 à 06h51.

  8. #7
    Jack
    Modérateur

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Si les 2 capteurs ont 2 adresses différentes, il n'y a pas de raison que ça ne marche pas.
    Que se passe-t-il si tu laisses les 2 capteurs connectés au bus et que tu ne lis que le capteur d'adresse 0x23? Même chose avec celui d'adresse 0x5C?

  9. #8
    warrior6386

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Que je mette 0x23 ou 0x5C, seul un capteur réagi (celui 0x23).
    N'y a t-il pas une sorte de blocage sur le code source ?

    j'ai l'impression que seule l'adresse 0x23 est lue.
    Dernière modification par warrior6386 ; 19/06/2020 à 13h03.

  10. #9
    warrior6386

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    C'est bon, j'ai essayé avec une autre bibliothèque :

    Code:
    /***************************************************************************
    * Example sketch for the BH1750_WE library
    * 
    * Mode selection / abbreviations:
    * CHM:    Continuously H-Resolution Mode
    * CHM_2:  Continuously H-Resolution Mode2
    * CLM:    Continuously L-Resolution Mode
    * OTH:    One Time H-Resolution Mode
    * OTH_2:  One Time H-Resolution Mode2
    * OTL:    One Time L-Resolution Mode
    * 
    * Measuring time factor:
    * 1.0 ==> Mresuring Time Register = 69
    * 0.45 ==> Measuring Time Register = 31
    * 3.68 ==> Mesuring Time Register = 254
    * 
    * Other implemented functions, not used in the example:
    * resetDataReg() --> rests Data Register
    * powerOn() --> Wake Up!
    * powerDown() --> Sleep well, my BH1750
    * 
    * If you change the measuring time factor for calibration purpose, 
    * then you need to devide the light intensity by the measuring time factor 
    * 
    * Further information can be found on:
    * http://wolles-elektronikkiste.de/bh1750fvi-lichtsensormodul
    * Sorry - all in German!
    ***************************************************************************/
    
    #include <Wire.h>
    #include <BH1750_WE.h>
    #define BH1750_ADDRESS_1 0x5C
    #define BH1750_ADDRESS_2 0x23
    
    BH1750_WE myBH1750_1(BH1750_ADDRESS_1); 
    BH1750_WE myBH1750_2(BH1750_ADDRESS_2); 
    
    void setup(){
      Serial.begin(9600);
      Wire.begin();
      myBH1750_1.init();
      myBH1750_2.init();
      // sets default values: mode = CHM, measuring time factor = 1.0
      // myBH1750.setMode(CLM);  // uncomment if you want to change default values
      // myBH1750.setMeasuringTimeFactor(0.45); // uncomment for selection of value between 0.45 and 3.68
    }
    
    void loop(){
      float lightIntensity_1 = myBH1750_1.getLux();
      Serial.print(F("capteur 1: "));
      Serial.print(lightIntensity_1);
      Serial.println(F(" Lux"));
    
      float lightIntensity_2 = myBH1750_2.getLux();
      Serial.print(F("capteur 2: "));
      Serial.print(lightIntensity_2);
      Serial.println(F(" Lux"));
      delay(500);
    }

  11. #10
    warrior6386

    Re : Connecter 2 capteur BH1750 simultanément _ Arduino

    Merci de l'aide..

Discussions similaires

  1. [Autre] arduino; i2c et afficheur lcd, capteur de temperature et capteur de pression
    Par stephganne dans le forum Électronique
    Réponses: 4
    Dernier message: 17/12/2019, 13h37
  2. [Programmation] Connexion d'un capteur BH1750 avec une arduino nano
    Par Xydwix dans le forum Électronique
    Réponses: 7
    Dernier message: 18/04/2019, 09h45
  3. [Autre] Connecter un écran à son arduino?
    Par invite2e40483d dans le forum Électronique
    Réponses: 7
    Dernier message: 28/01/2017, 01h57
  4. capteur et arduino
    Par invite1c27b92a dans le forum Technologies
    Réponses: 3
    Dernier message: 04/03/2014, 10h22
  5. Connecter un raspberry pi et un arduino via i2c
    Par invite5e485611 dans le forum Électronique
    Réponses: 6
    Dernier message: 27/02/2014, 14h57