Autor: Samir Gutić
Pročitano: 4229 puta

SHT31  senzorSHT31 senzor služi za mjerenje tempearture i vlažnosti. Iako radi isti posao kao DHT22 senzor, od njega se razlikuje, prije svega, po načinu komunikacije.

Naime SHT31 senzor komunicira preko I2C sabirnice, što znači da se sa Arduinom povezuju preko SDA i SCL pinova.

Pored komunikacijskih pinova, potrebne su još dvije žice za napajanje senzora. To je ukupno 4 žice, za razliku do DHT22 senzora koji se povezuje sa 3 žice.

Prednost SHT31 senzora je mogućnost istovremenog povezivanja dva senzora na isti SDA/SCL par pinova. Mana je ta da je, na jedan SDA/SCL par pinova moguće povezati samo dva senzora.

Zašto samo dva senzora? To nije ograničenje Arduina nego samog senzora. I2C senzori imaju adresu pomoću koje Arduino čita podatke. Default adresa je 0x44. Moguće je promijeniti ovu adresu u 0x45 tako da pin AD SHT31 senzora spojimo na VIN pin (Vcc). Iako je 0x44 default adresa, da bi bila aktivna, potrebno je AD pin spojiti na GND. To znači da AD pin u svakom slučaju treba spojiti, odvisno od željene adrese.

Upravo tu je mana SHT31 senzora - zbog samo dvije moguće I2C adrese, na jednu I2C sabirnicu je moguće spojiti samo dva SHT31 senzora. 

Arduino Mega 2560 (SDA - pin 20; SCL - PIN 21) kao i Arduino Uno imaju samo jednu I2C sabirnicu. Arduino Due ima dvije. To znači da je na Arduino Mega 2560 R3 moguće spojiti max. dva SHT31 senzora. Za mjerenje unutrašnje i vanjske temperature nije ni potrebno više.

Kako spajamo SHT31 senzor na Arduino?

Kako sam već pomenuo, SHT31 senzor se sa Arduinom spaja sa 4 žice:
      VIN --> +5V 
     GND --> GND
   SCL/T --> SCL (PIN 21)
SAA/RH --> SDA (PIN 20)

Pored toga je potrebno odrediti I2C adresu spajanjem AD pina SHT31 senzora na VIN (Vcc) pin senzora, ali to se može uraditi direktno na senzor tako da se zalemi žica između AD i VIN pina, tako da nije potrebna još jedna žica od senzora do Arduina.
       AD --> +5V

Na osnovu toga što je AD pin SHT31 senzora spojen na VIN pin, njegova adresa će biti 0x45.

To znači da je, za omogućavanje očitavanja ovog senzora potrebno koristiti naredbu:

// I2C adresa SHT31 senzora
shtSenzor.begin(0x45);

U slučaju da koristimo dva SHT31 senzora, AD pin drugog senzora je potrebno spojiti na GND da dobije adresu 0x44. Nakon toga, sve odgovarajuće žice oba senzora spojiti paralelno i priključiti na Arduino.

Ispod je Arduino Mega R3 sa spojenim SHT31 senzorom.

ArduinoMega 2560 R3 i SHT31

Na slici iznad je i peta žica koja vodi od SHT31 senzora na Arduino zato što sam je spojio na +3.3V (da definišem adresu 0x45) jer na senzoru nisam začemio žicu između AD i VIN pina.

Za komunikaciju sa SHT31 senzorom je, u sketch, potrebno uključiti biblioteke Wire.h (komunikacija sa I2C uređajima) i SHT31.h (komunikacija sa SHT31 senzorima).

Cijeli Arduino sketch za mjerenje temperature i vlažnosti je ispod:

///////////////////////////////////////////////////////////
// Mjerenje temperature i vlažnosti pomoću senzora SHT31 //
// i Arduino Mega 2560 R3                                //
//                                                       //
// Ako je pin AD spojen na GND I2C adresanje 0x44        //
// Ako je pin AD spojen na VIN (Vcc) I2C adresanje 0x45  //
//                                                       //
// Raspored pinova:                                      //
//    VIN --> +5V                                        //
//    GND --> GND                                        //
//  SCL/T --> SCL (PIN 21)                               //
// SAA/RH --> SDA (PIN 20)                               //
//     AD --> +5V                                        //
//                                                       //
// Verzija: 1.0.                                         //
// Datum: 7. XI 2021.                                    //
//                                                       //
// Autor: Samir Gutić, http://amicus.ba                  //
// novembar 2021.                                        //
///////////////////////////////////////////////////////////

// Arduino biblioteka za Digital temperature and humidity senzor (SHT31 sensor)
#include "Wire.h"

// Biblioteka za komunikaciju sa IC2 uređajima kao što je SHT31
#include "SHT31.h"

// Inicijalizacija objekta za očitavanje senzora
SHT31 shtSenzor;

void setup()
{
// Pokretanje serijske komunikacije
Serial.begin(115200);

// Inicijalizacija Wire biblioteke za I2C komunikaciju
Wire.begin();

// I2C adresa SHT31 senzora
shtSenzor.begin(0x45);

// Setovanje frekvencije I2C komunikacije u [Hz]
Wire.setClock(100000);
}

void loop()
{
// Očitaj SHT31 senzor
shtSenzor.read();

// Ispis poruka i očitanih vrijednosti
// Temperatura: shtSenzor.getTemperature()
// Vlažnost: shtSenzor.getHumidity()
Serial.print("Temperatura:");
Serial.print(shtSenzor.getTemperature(), 2);
Serial.print("°C");
Serial.print("\t");
Serial.print("Vlažnost:");
Serial.print(shtSenzor.getHumidity(), 2);
Serial.println("%");

// Pauza 3s da se spriječi prebrzo očitavanje senzora
delay(3000);
}

Rezultat izvršavanja ovog sketch-a je ispis izmjerene temperature i vlažnosti u serijsku konzolu svake 3 sekunde (max. brzina očitavanja je svake 2s), kao na slici ispod:

SHT31 rezultati mjerenja