V jednom z prvních IoT článků jsem psal jak měřit teplotu pomocí Arduina a senzoru DHT22, který je sice poměrně přesný, ale problémem je jeho spolehlivost.
Dnes si ukážeme o krapet lepší provedení a to kombinaci desky s čipem ESP8266 a senzoru SHT31.
Hardware
ESP8266
Můžeme použít například desku Wemos D1 mini, ale senzor se dá zapojit samozřejmě i do Arduina – jako digitální vstupy použijeme piny SLC a SDA namísto D1 a D2 u ESP8266 v provedení D1 mini.
SHT31
Jedná se o poměrně přesný a spolehlivý senzor na měření teploty a vlhkosti, který můžete najít v několika provedeních – já jsem použil toto.
Význam pinů
- VIN – napájení 2,5 – 5V
- GND – uzemění
- SLC – I2C sběrnice – hodinový signál
- SDA – I2C sběrnice – datová linka
Další tři piny se na desce nemusí vyskytovat a my je pro náš příklad nebudeme ani potřebovat:
- ADR – určuje I2C adresy. Ve výchozím nastavení je 0x44. Spojením s VIN ji můžeme změnit na 0x45.
- RST – hardwarový reset – připojením na Ground můžeme vyvolat restart zařízení.
- ALR – alert výstup. Úplně netuším jak s tímhle pracovat.
Schéma zapojení
Oproti DHT22 budeme potřebovat vodiče čtyři, ale stále zůstavá zapojení jednoduché. Dva pro napájení a dva pro komunikaci.
Software
Budeme potřebovat dvě knihovny:
- https://github.com/adafruit/Adafruit_Sensor – tuto knihovnu jsme již použili v předchozím článku
- https://github.com/adafruit/Adafruit_SHT31
#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
Serial.begin(9600);
Serial.println("SHT31 test");
if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("Nemohu najít SHT31");
while (1) delay(1);
}
}
void loop() {
float t = sht31.readTemperature();
float h = sht31.readHumidity();
if (! isnan(t)) { // check if 'is not a number'
Serial.print("Teplota *C = "); Serial.println(t);
} else {
Serial.println("Čtení teploty se nezdařilo");
}
if (! isnan(h)) { // check if 'is not a number'
Serial.print("Vlhkost. % = "); Serial.println(h);
} else {
Serial.println("Čtení vlhkosti se nezdařilo");
}
Serial.println();
delay(1000);
}
Přesnost měření
Jak je vidět z grafů u teploty je maximální odchylka při běžných teplotách je +-0.3 st.
Co se týče vlhkosti je přesnost měření téměř konstatní a to +-2 %RH a při 100% vlhkosti by neměly hodnoty padnou mimo tolerancei +-3.5 %RH.
Add comment