2 senzory HTU21D s displejem

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Anthlon
Příspěvky: 13
Registrován: 21 kvě 2019, 19:47
Reputation: 0

2 senzory HTU21D s displejem

Příspěvek od Anthlon » 20 dub 2020, 19:29

Dobrý den,
prosím poraďte začátečníkovi...,
Mám úspěšně zprovozněn senzor HTU21D podle návodu https://navody.arduino-shop.cz/navody-k ... d-i2c.html v kombinaci s 1602 dislpejem rovněž podle návodu https://navody.arduino-shop.cz/zaciname ... splej.html, přičemž u displeje (protože jelito "ještě" nemám i2c obvod, tak to mám tím neúsporným zapojením přes 10 vodičů). (u toho jsem zachoval komunikaci přes seriový "monitor" v PC kdyby displej zlobil).

mám to na Arduino nano, a co bych chtěl, je přidat druhý senzor HTU21D, pokud možno přímo, a vypisovat tímpádem dvojí hodnoty oproti tomuto výchozímu programu. O výpis na displej popřípadě do PC se postarám posléze, zajímá mě zapojení a ošetření v programu pokud to je takto možné.

Aktuální kód:

Kód: Vybrat vše

#include <SparkFunHTU21D.h>
#include <Wire.h>
#include <LiquidCrystal.h> // knihovna pro LCD displej

// inicializace senzoru z knihovny
HTU21D mujHTU;

// inicializace pinu, lze vyměnit za jiné volné
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
              // komunikace po sériové lince rychlostí 9600 baud
              Serial.begin(9600);
              // zahájení komunikace se senzorem
              mujHTU.begin();

              // nastavení počtu znaků a řádků LCD, zde 16x2
              lcd.begin(16, 2);
              // vytisknutí hlášky na první řádek
              lcd.print("Mereni Teploty");
              // nastavení kurzoru na první znak, druhý řádek
              // veškeré číslování je od nuly, poslední znak je tedy 15, 1
              // problik displeje při startu
              lcd.setCursor ( 0, 0 );
              lcd.print("-*-*-*-*-*-*-*-*");
              lcd.setCursor ( 0, 1 );
              lcd.print("*-*-*-*-*-*-*-*-");
              delay(1000);
              lcd.setCursor ( 0, 0 );
              lcd.print("*-*-*-*-*-*-*-*-");
              lcd.setCursor ( 0, 1 );
              lcd.print("-*-*-*-*-*-*-*-*");
              delay(1000);
              lcd.clear();               
              }

void loop() {
  // načtení informací o teplotě a vlhkosti
  // do proměnných
  float teplota = mujHTU.readTemperature();
  float vlhkost = mujHTU.readHumidity();
  if (teplota > 125 | vlhkost > 100) {
    Serial.println("Chyba komunikace se senzorem HTU21D!");
    lcd.print("Chyba HTU21D!");
    delay(2000);
  }
  else {
    // vytištění naměřených údajů, 1 ve výpisu označuje
    // počet desetinných míst
    lcd.clear();
    Serial.print("HTU21D | Teplota: ");
    Serial.print(teplota, 1);
      lcd.setCursor ( 0, 0 );
      lcd.print("Teplota: ");
      lcd.print(teplota,1);
          
    Serial.print(" st C | ");   
  
    Serial.print("Vlhkost: ");
    Serial.print(vlhkost, 1);
      lcd.setCursor ( 0, 1 );
      lcd.print("Vlhkost: ");
      lcd.print(vlhkost,1);
    Serial.print("%");
      lcd.print("%");
    Serial.println();
  }
  // pauza 0,5 sekundy mezi výpisy
  delay(500);
}

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: 2 senzory HTU21D s displejem

Příspěvek od ArduXPP » 20 dub 2020, 21:08

HTU21D má od výrobce danou na pevno adresu I2C, takže jestli MCU nemá dvě rozdílná I2C, tak to nebude možné.

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: 2 senzory HTU21D s displejem

Příspěvek od martinius96 » 20 dub 2020, 22:49

Ak máš 2 zariadenia s rovnakou I2C adresou, môžeš použiť I2C Multiplexer.
Avšak keď si začiatočník, pravdepodobne by to bolo na teba asi zložitejšie...
Bližšie to môžeš vidieť vo videu: https://www.youtube.com/watch?v=CSQEsQeCEAY

Anthlon
Příspěvky: 13
Registrován: 21 kvě 2019, 19:47
Reputation: 0

Re: 2 senzory HTU21D s displejem

Příspěvek od Anthlon » 21 dub 2020, 08:02

martinius96 píše:
20 dub 2020, 22:49
Ak máš 2 zariadenia s rovnakou I2C adresou, môžeš použiť I2C Multiplexer.
Avšak keď si začiatočník, pravdepodobne by to bolo na teba asi zložitejšie...
Bližšie to môžeš vidieť vo videu: https://www.youtube.com/watch?v=CSQEsQeCEAY
Děkuju za utvrzení, myslel jsem si to, zároveň až po postu jsem se dočetl někde v eshopu, kde to bylo vyloženě u negativ věci, že se dá použit pouze jeden. Multiplexer principem chápu, ještě jsem jej fyzicky nepoužíval.

Přičemž multiplexer bude asi dávat větší smysl, jak finančně tak rozměrově hádám.

narazil jsem ještě na tento "příklad" ale nechápu ho :-D hlavně nevím kdybych to jenom okopíroval, tak s těmi senzory na A0 zapojit první SDA a na A2 zapojit druhé SDA? (krom napájení, to je asi jasnéé)...:

Kód: Vybrat vše

This is an Arduino library for SHT21 & HTU21D Digital Humidity & Temperature Sensor

Adapted for Multiple Sensors with no way to change device address.........
Pins, any you have spare on your ESP8266, But NOT A0 or D16(D0 Node)

The devices can share a Clock pin but not the data pin if they share an address.....
In this example I have used...(I only have 3 spare SHT21's)

pin 5 for SCL 
Pin 0 for SDA Bus 0
Pin 2 for SDA Bus 1
Pin 4 for SDA Bus 2

Written by enjoyneering79
Adapted Jan 2017

These sensors use I2C to communicate, 2 pins are required to interface

Connect HTU21D to pins :  SDA  SCL
Uno, Redboard, Pro:       A4   A5
Mega2560, Due:            20   21
Leonardo:                 2    3



BSD license, all text above must be included in any redistribution
*/
/**************************************************************************/

#include <Wire.h>
#include "HTU21D.h"


HTU21D myHTU21D;


int flip=0;


void setup()
{
 
  Serial.begin(115200);
  //Serial.set_tx (2);
  Serial.println(F(""));
  delay(10);
  Wire.begin(4,5);  
  delay(250);
  while (myHTU21D.begin() != true)
  {
    Serial.println(F("HTU21D sensor is not present"));
    delay(5000);
  }
  
  Serial.println(F("HTU21D sensor is present"));
}

void loop()
{
  if(flip==0){
    flip=1;
    delay(250);
    Wire.begin(0, 5);
    delay(100); 
    myHTU21D.begin();  
    delay(250);
    Serial.println(F("Sensor Bus 0"));
  }else if (flip==1){
    flip=2;
    delay(250);
    Wire.begin(2, 5);
    delay(100); 
    myHTU21D.begin();  
    delay(250);
     Serial.println(F("Sensor Bus 1"));    
  }else{
    flip=0;
    delay(250);
    Wire.begin(4, 5);
    delay(100); 
    myHTU21D.begin();  
    delay(250);
     Serial.println(F("Sensor Bus 2"));    
  }
  Serial.println(F(""));
  Serial.println(F("<<DEMO: Default settings, %RH: 12Bit, Temperature - 14Bit>>"));
 
  Serial.println(F(""));
  Serial.print(F("Compensated Humidity: "));
  Serial.print(myHTU21D.readCompensatedHumidity());
  Serial.println(F(" +-2%RH     in range 0%RH - 100%RH at tmp. range 0deg.C - 80deg.C"));

  Serial.println(F(""));
  Serial.print(F("Temperature: "));
  Serial.print(myHTU21D.readTemperature());
  Serial.println(F(" +-0.5 deg.C"));

  Serial.println(F(""));
  Serial.println(F("\r\n\r\n"));
  delay(5000);
}

afilip
Příspěvky: 116
Registrován: 26 črc 2017, 16:34
Reputation: 0
Kontaktovat uživatele:

Re: 2 senzory HTU21D s displejem

Příspěvek od afilip » 21 dub 2020, 22:46

Tohle jsem nikdy neviděl, ani nezkoušel. Muselo by být společné napájení, GND a SCL, což jsou hodiny. SDA je datový signál, a je napojený každý na jiný pin. V podstatě to můžeš vyzkoušet klidně i s jedním HTU21D (pokud oba nemáš k dispozici), a mohlo by to fungovat.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů