Sensirion SHT30 wyjątkowy czujnik temperatury i wilgotności

Czujników temperatury i wilgotności na rynku już nawet kilka lat temu było naprawdę sporo. Najpopularniejsze to DHT11 i DHT22, jednak mają kilka wad. Nie najlepsza dokładność, protokół bardzo wrażliwy na zależności czasowe to tylko niektóre. Inni producenci prześcigali się w dokładności czujników, wykorzystywanych interfejsach czy dodatkowych funkcjach.

Jednym z prawdziwych kombajnów do odczytu wartości temperatury i wilgotności jest Sensiron SHT30. Komunikuje się z mikrokontrolerem za pomocą magistrali I2C (czyli odpada problem zależności czasowych z DHT). Posiada dość wysoką dokładność, ma bardzo kompaktowe wymiary. Dodatkową zaltetą jest możliwość zaprogramowania samego czujnika aby na specjalny pin podał sygnał gdy wilgotność lub temperatura osiągnie lub spadnie do określonego poziomu. Dzięki czemu możemy zbudować proste urządzenia na bazie czujnika nie używając nawet mikrokontrolera. 

Jeśli dokładność SHT30 jest za mała, wówczas dostępny jest moduł SHT31, który programuje się dokładnie tak samo jak opisany tutaj SHT30 ale oferuje większą dokładność.

Budowa układu na bazie Arduino

Płytka z czujnikiem przychodzi do nas bez przylutowanych goldpinów, więc pierwszą operacją którą musimy wykonać jest właśnie lutowanie.  Do przylutowania mamy tylko 6 pinów, więc cała operacja zajmie najwyżej minutę. Gdy nasz układ jest gotowy możemy wpiąć go do płytki stykowej. Na początku użyjemy tylko 4 pinów, czyli VCC, GND, SDA i SCL. Układ powinien wyglądać jak poniżej.

Implementacja biblioteki oraz wgranie pierwszego programu.

Do obsługi modułu niezbędne będą biblioteki, w internecie można znaleźć ich kilka, my użyjemy pakietów SHT3x oraz ClosedCube SHT31-D, my w pierwszym programie użyjemy pierwszego pakietu, czyli SHT3x, nasz program będzie miał za zadanie odczytywać temperaturę oraz wilgotność powietrza, a wyniki wyświetlać będzie w Serial Monitorze. Biblioteki oczywiście możecie pobrać z linków podanych na dole artykułu. Program który wgramy do Arduino będzie przerobionym kodem przykładu z biblioteki SHT3x o nazwie “Absolute_Humidity”. Gdy mamy już zaimplementowane biblioteki możemy wgrać kod poniżej.

#include <SHT3x.h>
SHT3x Sensor;
void setup() {
  Serial.begin(9600);
  Sensor.Begin();//rozpoczęcie pracy czujnika
}
void loop() {
  int temp = Sensor.GetTemperature();// zmienna dla temperatury
  int wilg = Sensor.GetRelHumidity();//zmienna dla wilgotności
  Sensor.UpdateData();
  Serial.print(Sensor.GetTemperature());//pobieranie temperatury, domyślnie w Celsjuszach
  Serial.write("\xC2\xB0");
  Serial.print("C");
  Serial.print(" | ");
  Serial.print(Sensor.GetRelHumidity());//pobieranie wartości wigotności powietrza
  Serial.print("%");
  Serial.println();
  delay(1500);
}

Programowanie modułu i przygotowanie do samodzielnej pracy

Po wgraniu poprzedniego programu w Serial Monitorze powinny pojawiać się dane dotyczące temperatury i wilgotności powietrza, jeśli tak się dzieje, to możemy przejść do następnego przykładu wykorzystania modułu SHT30. Tak jak wcześniej wspominałem moduł może działać samodzielnie, bez Arduino, czy też innego kontrolera, pełni wtedy rolę swoistego termometru i higrometru i może uruchamiać inne urządzenia.

Oczywiście funkcje modułu w tej kwestii są dość ograniczone, jednak w większości przypadków w zupełności wystarczą. Tym razem biblioteką której użyjemy będzie ClosedCube SHT31-D, na razie w układ nie musimy ingerować ponieważ i tak do zaprogramowania układu potrzebujemy podłączenia do magistrali I2C oraz zasilania. Układ zaprogramujemy tak aby na pin alarm podawał stan wysoki gdy temperatura powietrza przekroczy 25°C oraz wyłączył go gdy temperatura będzie wynosić 20°C. Dzięki temu będziemy mogli wykonać symulacje uruchamiania na przykład wentylatora. Program powinien wyglądać jak poniżej.

#include <Wire.h>
#include "ClosedCube_SHT31D.h"
ClosedCube_SHT31D sht30;
void setup()
{
  Wire.begin();
  sht30.begin(0x44);//rozpoczęcie pracy czujnika
}

void loop()
{
  sht30.writeAlertHigh(25, 20, 0, 1); // ustawienie wartości
  delay(500);

}

Najważniejszą dla nas linijką jest:

sht30.writeAlertHigh(25, 20, 0, 1);

Odpowiada ona za konfigurację pinu alarm w naszym module. Wartości w nawiasie oznaczają kolejno temperature set, temperature clear, humidity set, humidity clear Czyli w jakiej temperaturze ma być włączany pin, a jakiej wyłączany. Jeśli chodzi o wilgotność to w tym wypadku nie jest po prostu uwzględniona, gdy będziemy chcieli aby czujnik brał ją również pod uwagę musimy zmienić wartości.

Po omówienie programu możemy przejść do samego układu, tutaj za dużo się nie zmienia, dodajemy jedynie diodę led, która będzie zastępować wentylator i rezystor. Połączenie powinno wyglądać tak.

Jak widać układ Sensirion nie jest aż tak skomplikowany jak wskazuje liczba funkcji którą oferuje, z pomocą podanych bibliotek korzystanie z czujnika jest dziecinnie proste i umożliwia nam wykonywanie wielu pomiarów

Produkty użyte w artykule:

Biblioteki użyte w artykule: