Senzor vlhkosti a teploty SHT15
V tomto návodu si představíme, jak se dá použít senzor SHT15 s Arduinem.
SHT15 je jednoduchý senzor, který v sobě kombinuje teploměr a vlhkoměr. Příjemně překvapí svojí přesností a nízkou spotřebou, je však poměrně drahý. Podobný senzor s daleko lepší cenou je snímač teploty a vlhkosti DHT22.
Ke komunikaci s Arduinem používá two-wire sběrnici (podobná I2C). Na rozdíl od I2C je o něco pomalejší, na druhou stranu můžete pro připojení použít libovolné dva piny, a ne pouze vyhrazené (jak tomu je u I2C). Arduino se senzorem propojíme podle obrázku.
Pozor!
Pro správné určení vlhkosti by neměl senzor přijít do styku s vodou.
Podle dokumentace by měl být po připájení pinů senzor minimálně 12 hodin v prostředí s vlhkostí větší než 75%, aby se polymer, který se používá k určování vlhkosti, stihl rehydratovat. V opačném případě může být měření nepřesné. Dané vlhkosti by se mělo dát dosáhnout tak, že umístíte navlhčený kapesník do pytlíku se senzorem. Pozor ale, aby se senzor kapesníku NEDOTÝKAL. Druhou možností je nechat senzor na déle než pět dní v prostředí s vlhkostí větší než 40%.
//Based of the wiring code at http://wiring.org.co/learning/basics/humiditytemperaturesht15.html int SHT_clockPin = 3; // pin used for clock int SHT_dataPin = 2; // pin used for data void setup(){ Serial.begin(9600); // open serial at 9600 bps } void loop(){ //these can take a bit to get the values (100ms or so) float temperature = getTemperature(); float humidity = getHumidity(); Serial.print(temperature); Serial.print(" | "); Serial.println(humidity); } float getTemperature(){ //Return Temperature in Celsius SHT_sendCommand(B00000011, SHT_dataPin, SHT_clockPin); SHT_waitForResult(SHT_dataPin); int val = SHT_getData(SHT_dataPin, SHT_clockPin); SHT_skipCrc(SHT_dataPin, SHT_clockPin); return (float)val * 0.01 - 40; //convert to celsius } float getHumidity(){ //Return Relative Humidity SHT_sendCommand(B00000101, SHT_dataPin, SHT_clockPin); SHT_waitForResult(SHT_dataPin); int val = SHT_getData(SHT_dataPin, SHT_clockPin); SHT_skipCrc(SHT_dataPin, SHT_clockPin); return -4.0 + 0.0405 * val + -0.0000028 * val * val; } void SHT_sendCommand(int command, int dataPin, int clockPin){ // send a command to the SHTx sensor // transmission start pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); digitalWrite(dataPin, HIGH); digitalWrite(clockPin, HIGH); digitalWrite(dataPin, LOW); digitalWrite(clockPin, LOW); digitalWrite(clockPin, HIGH); digitalWrite(dataPin, HIGH); digitalWrite(clockPin, LOW); // shift out the command (the 3 MSB are address and must be 000, the last 5 bits are the command) shiftOut(dataPin, clockPin, MSBFIRST, command); // verify we get the right ACK digitalWrite(clockPin, HIGH); pinMode(dataPin, INPUT); if (digitalRead(dataPin)) Serial.println("ACK error 0"); digitalWrite(clockPin, LOW); if (!digitalRead(dataPin)) Serial.println("ACK error 1"); } void SHT_waitForResult(int dataPin){ // wait for the SHTx answer pinMode(dataPin, INPUT); int ack; //acknowledgement //need to wait up to 2 seconds for the value for (int i = 0; i < 1000; ++i){ delay(2); ack = digitalRead(dataPin); if (ack == LOW) break; } if (ack == HIGH) Serial.println("ACK error 2"); } int SHT_getData(int dataPin, int clockPin){ // get data from the SHTx sensor // get the MSB (most significant bits) pinMode(dataPin, INPUT); pinMode(clockPin, OUTPUT); byte MSB = shiftIn(dataPin, clockPin, MSBFIRST); // send the required ACK pinMode(dataPin, OUTPUT); digitalWrite(dataPin, HIGH); digitalWrite(dataPin, LOW); digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); // get the LSB (less significant bits) pinMode(dataPin, INPUT); byte LSB = shiftIn(dataPin, clockPin, MSBFIRST); return ((MSB << 8) | LSB); //combine bits } void SHT_skipCrc(int dataPin, int clockPin){ // skip CRC data from the SHTx sensor pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); digitalWrite(dataPin, HIGH); digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); }
Článek byl převzat z webu bildr.com a mírně upraven.
Senzor SHT15 můžete zakoupit zde.
Dále by se také mohlo hodit:
Arduino UNO Rev3
Mini Breadboard
Vodiče k Breadboardu
- Sledovač slunce s Arduinem - 23.3.2022
- Programovatelný kytarový pedál s Arduinem - 26.2.2020
- Arduino infračervený teploměr vytištěný na 3D tiskárně - 11.2.2020
2 Comments on “Senzor vlhkosti a teploty SHT15”
Napsat komentář
Pro přidávání komentářů se musíte nejdříve přihlásit.
Oldřich Horáček
22.2.2015 at 17:48Zdravím Radime,
souhlasím s tím, že cena modulu SHT15 není bohužel zrovna příznivá. Je to hlavně proto, že přesnost tohoto snímače teploty a vlhkosti je opravdu slušná a taky je to Sparkfun kvalita. Pokud se člověk spokojí s běžnou přesností, pak mohu doporučit kombinovaný snímač teploty a vlhkosti RHT03.
http://www.hwkitchen.com/products/humidity-and-temperature-sensor-dht22-/
Cena je oproti SHT15 skoro čtvrtinová.
Ohledně snímače, který doporučujete se jedná o zajímavou alternativu.
Pokoušeli jsme se v katalogu hwkitchen dříve nabízet zboží z DX, ale měli jsme problém s kvalitou zboží. Kvalita hodně kolísala a zboží se vracelo v záruční době. Zboží mělo také více problémů s ESD.
Proto se na eshopu http://www.hwkitchen.com orientujeme především na originální Arduino komponenty a součástky od firem jako Sparkfun, Seeedstudio, Elecfreaks, Secret Labs, Mbed, Linksprite. Pokud máme opravdu garantovat záruku 2 roky, což samozřejmě garantujeme, tak je pro nás výběr kvalitních dodavatelů základ.
Samozřejmě když něco stojí na DX zlomek ceny a chci si s tím jen pohrát a je mi jedno jestli to shoří, tak to může být z hlediska ceny zajímavé :-).
S pozdravem
Oldřich
Radim
20.2.2015 at 17:13Zdravím, vidím zde jednu nevýhodu a to cena. Co tato náhrada za zlomek ceny http://www.dx.com/p/high-performance-mini-size-digital-temperature-humidity-sensor-module-for-arduino-361732#.VOdcQuaG8c0
S pozdravem
Radim