5.1 Čitanje temperature i vlage
Cilj ovog primjera je izmjeriti temperaturu i vlagu prostorije pomoću SHTC3 senzora iz kita, i ispisati oboje u Serial Monitor. Jedan čip veličine zrna riže mjeri oboje odjednom, dovoljno točno da ćeš vidjeti kako se brojevi pomiču kada dahneš na njega.
Ovo je drugi Qwiic modul u kitu, nakon ultrazvučnog senzora u sekciji 3. To znači da je spajanje ponovno jedan kabel, i ponovno se nema što pogriješiti.
U ovoj dokumentaciji naučit ćeš:
- Kako jedan senzor mjeri i temperaturu i relativnu vlagu.
- Postotak čega je relativna vlaga, i zašto je to važno.
- Kako spojiti drugu vrstu Qwiic modula, i zašto mu ne trebaju brojevi pinova.
- Zašto jedno mjerenje traži dva poziva funkcije, i što se dogodi ako preskočiš prvi.
- Kako
millis()odmjerava mjerenja a da nikada ne zamrzne pločicu.
Potreban hardver:
- 1x Soldered NULA MINI pločica
- 1x Breadboard
- 1x Soldered SHTC3 senzor temperature i vlage
- 1x Qwiic kabel
- 1x USB-C kabel
Spajanje komponenti
Četiri koraka, a samo je jedan od njih spajanje.
1. Umetni NULA MINI pločicu na breadboard
Utisni pločicu u jedan kraj breadboarda tako da njezina dva reda pinova sjednu s obje strane središnjeg kanala. Na fotografijama zauzima redove 25 do 30.

2. Utisni Qwiic kabel u pločicu
NULA MINI ima jedan Qwiic konektor, na rubu pločice između tipki USER i RST, označen s qwiic na silkscreenu. Utisni kabel dok ne klikne.

- i +. To je konektor za bateriju, i Qwiic kabel u njega ne ulazi.Ako želiš vidjeti točno o kojem se konektoru radi na goloj pločici, ovdje je istaknut:

3. Utisni drugi kraj u senzor
Senzor je mala ljubičasta pločica sa silkscreenom SHTC3 BREAKOUT. Ima dva Qwiic konektora, po jedan na svakom kraju, s riječju qwiic ispisanom uz oba. Spojeni su međusobno, pa utisni slobodni kraj kabela u bilo koji od njih. Rezervni je tu da možeš dalje nalančati još jedan modul.

Ovdje je pločica senzora sama, izbliza:

Na ovoj pločici vrijedi primijetiti:
- Sam senzor je sitna crna komponenta u sredini. I termometar i ikona vlage na silkscreenu pokazuju na nju, jer stvarno mjeri oboje.
- Sjedi na uskom jezičcu tiskane pločice s utorima izrezanima s obje njegove strane. Ti utori su namjerni: otežavaju toplini s ostatka pločice da putuje duž bakra i dođe do senzora, koji bi inače prijavljivao temperaturu same pločice, a ne prostorije.
- Četiri kontakta označena s
SCL,SDA,VCCiGNDnose ista četiri signala kao Qwiic kabel, izvedena za onoga koji bi radije lemio žice nego utisnuo kabel. Ovdje ti ne trebaju. - Kontakti
JP1doJP4su tvorničke postavke. Ostavi ih kako su došli.
4. Spoji USB-C kabel
Utisni USB-C kabel u pločicu i u računalo. Ljubičasto PWR svjetlo uz tipku RST se upali, a i senzor je napojen, uzimajući što mu treba preko Qwiic kabela.

Što senzor stvarno mjeri
Temperatura je jednostavnija polovica, prijavljena u stupnjevima Celzija.
Relativna vlaga je polovica koja ljude zavara. Prijavljuje se kao postotak, ali nije postotak volumena zraka ni njegove težine. To je postotak najveće količine vodene pare koju bi zrak mogao držati na svojoj trenutnoj temperaturi, pa 47 % znači da zrak nosi nešto manje od pola onoga što trenutno može.
Zamka je u tome da se sam kapacitet pomiče. Topao zrak drži daleko više vodene pare od hladnog. Zato ako zagriješ prostoriju a da ne dodaš ni odstraniš ni kap vode, relativna vlaga pada: ista para sada je manji dio većeg maksimuma. Zato zagrijana prostorija zimi djeluje suho, i zato su ta dva broja daleko korisnija zajedno nego ijedan sam.
Zašto nema brojeva pinova
Kao i kod ultrazvučnog senzora, objekt senzora stvara se praznih ruku:
SHTC3 shtcSensor;
Razlog je onaj objašnjen u 3.1 Mjerenje udaljenosti: Qwiic kabel je fiksni svežnjić od četiri vodiča: 3.3 V, masa i dvije signalne linije I2C sabirnice. Na NULA MINI te dvije signalne linije trajno su spojene na IO6 i IO7. Nisu uopće izvedene na headere. Nema se što birati, pa se biblioteci nema što reći.
Ono što se od modula do modula razlikuje je adresa na koju odgovara, jer I2C dopušta da nekoliko modula dijeli jedan par žica. Ultrazvučni senzor odgovara na 0x30. Ovaj odgovara na 0x70. Biblioteka to već zna, i zato ni begin() ne prima argumente.
Instalacija biblioteke
Ovom primjeru treba SHTC3 Soldered Library. Ako si prošao Postavljanje Arduino okruženja, već je imaš. Ako nisi, otvori Tools → Manage Libraries, potraži SHTC3 i instaliraj onu koju objavljuje Soldered Electronics.
fatal error: SHTC3-SOLDERED.h: No such file or directory, biblioteka nije instalirana. Instaliraj je i prevedi ponovno. Spajanje i pločica nisu problem.Jedno mjerenje, dva poziva funkcije
Skupljanje mjerenja je posao u dva koraka, a redoslijed je važan:
shtcSensor.sample();
float temperature = shtcSensor.readTempC();
float humidity = shtcSensor.readHumidity();
sample() je jedini od ta tri koji uopće razgovara sa senzorom. Ona budi čip, traži od njega da izmjeri, skuplja sirove brojeve i vraća čip na spavanje. readTempC() i readHumidity() zatim samo pretvaraju brojeve koje je sample() već donio.
To ima posljedicu koju vrijedi zapamtiti. Ako pozoveš readTempC() bez prethodnog poziva sample(), ne dobiješ ni grešku ni upozorenje. Dobiješ prethodno mjerenje ponovno, što izgleda točno kao senzor koji se zamrznuo.
Mjerenje bez zaustavljanja
Skica ne koristi delay() da čeka dvije sekunde između vrijednosti. Koristi millis(), koji prijavljuje koliko dugo pločica radi, i novo mjerenje uzima samo kada je zapamćeni trenutak lastUpdate UPDATE_MS u prošlosti:
unsigned long now = millis();
if (now - lastUpdate >= UPDATE_MS) {
lastUpdate = now;
// ...uzmi mjerenje...
}
delay(2000) bio bi kraći zapis, ali zaustavlja pločicu mrtvu na dvije sekunde odjednom. Napisano ovako, pločica juri po loop() tisućama puta u sekundi i samo povremeno nađe da je mjerenje na redu, što je između toga ostavlja slobodnom da radi druge stvari. Onog trenutka kada skica ima dva posla, čitanje senzora i praćenje tipke, ovo je uzorak koji dopušta da se oboje dogodi.
millis() broji gore u unsigned long i, nakon otprilike 50 dana neprekidnog rada, prelije se natrag na nulu. Oduzimanje now - lastUpdate napisano je onako kako je napisano jer ostaje ispravno i kroz to prelijevanje.Kod
/**
**************************************************
*
* @file 5.1_Reading_Temperature_and_Humidity.ino
* @brief Primjer koji pokazuje kako izmjeriti temperaturu i vlagu pomoću Soldered SHTC3 senzora.
* Senzor s pločicom komunicira preko easyC-a, pa treba samo jedan kabel i nikakvi pinovi se ne moraju
* definirati. Izmjerene vrijednosti ispisuju se u Serial Monitor.
* Za detalje, shemu spajanja i više, pogledaj dokumentaciju primjera na: <link placeholder>
* @author Soldered
***************************************************
*/
/*
Uključivanje biblioteke daje nam pristup gotovim funkcijama koje teški posao rade za nas. Ovdje uključujemo
Soldered biblioteku za SHTC3 senzor. Ako Arduino IDE prijavi da ovu datoteku ne može naći, instaliraj biblioteku
kroz Sketch -> Include Library -> Manage Libraries i potraži "Soldered SHTC3".
*/
#include "SHTC3-SOLDERED.h"
/*
Ovdje stvaramo naš objekt senzora, koji smo nazvali "shtcSensor". Objekt je naš način razgovora sa senzorom: svaku
funkciju koju na njemu pozovemo, pozivamo preko ovog imena. Primijeti da ovaj put ne predajemo nikakve brojeve pinova. SHTC3
koristi easyC, a to je Soldered ime za I2C vezu preko jednog kabela, a I2C uvijek koristi ista dva
pina na pločici (IO6 i IO7 na NULA pločici), pa biblioteka već zna gdje naći senzor.
*/
SHTC3 shtcSensor;
/*
Ova varijabla definira koliko vremena prođe između dva mjerenja, u milisekundama. 2000 milisekundi su dvije
sekunde. Slobodno eksperimentiraj s ovom vrijednošću.
*/
const unsigned long UPDATE_MS = 2000;
/*
Ova varijabla pamti trenutak kada smo uzeli posljednje mjerenje. Uspoređujemo je s trenutnim vremenom da znamo
kada je sljedeće mjerenje na redu. Mora biti unsigned long jer brojevi koje nam sat daje postaju veliki.
*/
unsigned long lastUpdate = 0;
void setup() {
/*
Serial.begin() uspostavlja serijsku komunikaciju između tvoje pločice i tvog računala preko USB kabela. Ovdje ga
koristimo da bismo u Serial Monitoru mogli prikazati vrijednosti temperature i vlage.
*/
Serial.begin(115200);
/*
begin() priprema senzor za upotrebu i pokreće I2C komunikaciju. Također nam kaže je li senzor odgovorio:
funkcija vraća true pri uspjehu i false pri neuspjehu. Provjeravamo rezultat i ispisujemo poruku u svakom slučaju, pa
ako se kasnije ništa ne pojavi znamo je li problem u kabelu ili u kodu.
"!" ispred poziva znači "ne", pa se ova if izjava čita kao "ako se senzor nije pokrenuo".
*/
if (!shtcSensor.begin()) {
Serial.println("SHTC3 initialization failed!");
} else {
Serial.println("SHTC3 sensor ready!");
}
}
void loop() {
/*
millis() je funkcija koja vraća broj milisekundi koje su prošle od kada je pločica počela izvršavati trenutni
program. Koristimo ga umjesto delay() da pločica ostane slobodna za drugi posao između mjerenja, što
postaje važno onog trenutka kada tvoj program ima više od jednog posla. Taj broj će se preliti (vratiti na nulu) nakon
približno 50 dana.
*/
unsigned long now = millis();
/*
Ovdje provjeravamo koliko je vremena prošlo od posljednjeg mjerenja. Novu vrijednost uzimamo samo kada prođe
UPDATE_MS milisekundi, i odmah pamtimo trenutno vrijeme kao novu početnu točku.
*/
if (now - lastUpdate >= UPDATE_MS) {
lastUpdate = now;
/*
sample() govori senzoru da obavi svježe mjerenje i spremi rezultat u sebe. Moramo ga pozvati
prije čitanja vrijednosti, inače bismo stalno dobivali rezultat prethodnog mjerenja.
*/
shtcSensor.sample();
/*
readTempC() vraća temperaturu iz posljednjeg mjerenja u stupnjevima Celzija, a readHumidity() vraća
relativnu vlagu u postocima. Oboje su decimalni brojevi, i zato ih spremamo u float varijable.
*/
float temperature = shtcSensor.readTempC();
float humidity = shtcSensor.readHumidity();
/*
Serial.print() ispisuje podatke bez prelaska u novi red, dok Serial.println() ispisuje podatke i onda
preskače u novi red. Njihovim kombiniranjem gradimo jednu čitljivu liniju iz nekoliko dijelova. Broj 2 nakon
vrijednosti govori funkciji koliko decimalnih mjesta da prikaže.
*/
Serial.print("Temperature: ");
Serial.print(temperature, 2);
Serial.print(" °C, Humidity: ");
Serial.print(humidity, 2);
Serial.println(" %");
}
}
Što bi trebao vidjeti
Prenesi skicu, pa otvori Serial Monitor i postavi ga na 115200 bauda.
Prva linija koja se pojavi je SHTC3 sensor ready!, ispisana jednom iz setup(). Nakon toga nova linija dolazi svake dvije sekunde:

Obje vrijednosti ispisane su na dvije decimale. Na ovom screenshotu prostorija je na oko 24.7 °C i 47 % relativne vlage, a uzastopne vrijednosti razlikuju se samo u posljednjoj decimali ili dvije: 24.70, pa 24.73, pa 24.68. To malo kolebanje je senzor koji je iskren o svojoj vlastitoj točnosti, a ne greška.
Sada nježno dahni na senzor i gledaj kolonu vlage. Trebala bi jako porasti, dobro iznad 60 %, a onda se kroz sljedećih pola minute smjestiti natrag. Ako se to dogodi, senzor stvarno mjeri zrak a ne ponavlja spremljeni broj.
SHTC3 initialization failed!, begin() nije mogao dobiti odgovor od senzora. Postoje dva vjerojatna uzroka, u ovom redoslijedu. Prvo, Qwiic kabel nije do kraja utisnut na jednom od svoja dva kraja. Drugo, i mnogo lakše za promašiti: u IDE-u je odabrana pogrešna pločica. Svaka Soldered biblioteka svoje I2C pinove uzima od pločice koju si odabrao, pa odabir bilo čega osim Soldered NULA Mini ESP32C6 šalje I2C promet na pogrešne pinove. I dalje se prevodi i dalje se prenosi, a senzor i dalje nikada ne odgovori.Cijeli primjer
Pogledaj cijeli kod primjera na linku ispod:
5.1_Reading_Temperature_and_Humidity.ino
Primjer koji pokazuje kako izmjeriti temperaturu i vlagu pomoću Soldered SHTC3 senzora i prikazati vrijednosti u Serial Monitoru.