Arduino Nano - HTS221 relativ fuktighet och temperatur Sensor handledning (3 / 4 steg)
Steg 3: kod:
Arduino koden för HTS221 kan hämtas från vår github repository-ControlEverythingCommunity
Här är länken för samma:
https://github.com/ControlEverythingCommunity/HTS2...
Databladet för HTS221 kan hittas här:
https://s3.amazonaws.com/controleverything.Media/c...
Vi inkluderar bibliotek Wire.h att underlätta I2c kommunikationen av sensorn med Arduino styrelsen.
Du kan också kopiera koden från här, det ges enligt följande:
Distribueras med en fri vilja licens.
Använda det något sätt du vill, vinst eller gratis, förutsatt att den passar i licenser av dess tillhörande arbeten.
HTS221
Denna kod är utformad att fungera med HTS221_I2CS I2C Mini modulen tillgänglig från ControlEverything.com.
https://www.controleverything.com/content/Humidit...
#include < Wire.h >
HTS221 I2C adress är 0x5F
#define Addr 0x5F
void setup()
{
Initialisera I2C kommunikation som MASTER
Wire.BEGIN();
Initialisera seriell kommunikation, ange baudvärde = 9600
Serial.BEGIN(9600);
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj genomsnittliga konfigurationen register
Wire.write(0x10);
Temperaturen genomsnittliga prover = 256, luftfuktighet genomsnittliga prover = 512
Wire.write(0x1B);
Stoppa I2C sändningen
Wire.endTransmission();
Starta I2C-överföring
Wire.beginTransmission(Addr);
SELECT-kontrollen register1
Wire.write(0x20);
POWER ON, kontinuerlig uppdatering, Data output ränta = 1 Hz
Wire.write(0x85);
Stoppa I2C sändningen
Wire.endTransmission();
Delay(300);
}
void loop()
{
unsigned int data [2].
unsigned int val [4].
unsigned int H0, H1, H2, H3, T0, T1, T2, T3, rå;
Fuktighet calliberation värden
för (int jag = 0; jag < 2; i ++)
{
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write ((48 + i));
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom (Addr, 1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
data [i] = Wire.read();
}
}
Konvertera luftfuktighetsdata
H0 = data [0] / 2;
H1 = data [1] / 2;
för (int jag = 0; jag < 2; i ++)
{
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write ((54 + i));
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom(Addr,1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
data [i] = Wire.read();
}
}
Konvertera luftfuktighetsdata
H2 = (data [1] * 256,0) + data [0];
för (int jag = 0; jag < 2; i ++)
{
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write ((58 + i));
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom(Addr,1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
data [i] = Wire.read();
}
}
Konvertera luftfuktighetsdata
H3 = (data [1] * 256,0) + data [0];
Temperatur calliberation värden
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write(0x32);
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom(Addr,1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
T0 = Wire.read();
}
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write(0x33);
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom(Addr,1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
T1 = Wire.read();
}
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write(0x35);
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom (Addr, 1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
rå = Wire.read();
}
rå = raw & 0x0F;
Konvertera temperatur calliberation värden till 10-bitar
T0 = ((raw & 0x03) * 256) + T0;
T1 = ((raw & 0x0C) * 64) + T1;
för (int jag = 0; jag < 2; i ++)
{
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write ((60 + i));
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom(Addr,1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
data [i] = Wire.read();
}
}
Konvertera data
T2 = (data [1] * 256,0) + data [0];
för (int jag = 0; jag < 2; i ++)
{
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write ((62 + i));
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 1 byte av data
Wire.requestFrom(Addr,1);
Läs 1 byte av data
IF(Wire.available() == 1)
{
data [i] = Wire.read();
}
}
Konvertera data
T3 = (data [1] * 256,0) + data [0];
Starta I2C-överföring
Wire.beginTransmission(Addr);
Skicka dataregister
Wire.write(0x28 | 0x80);
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 4 byte data
Wire.requestFrom(Addr,4);
Läs 4 byte data
fuktighet msb, luftfuktighet lsb, temp msb, temp lsb
IF(Wire.available() == 4)
{
val [0] = Wire.read();
val [1] = Wire.read();
val [2] = Wire.read();
val [3] = Wire.read();
}
Konvertera data
flyta fuktighet = (val [1] * 256,0) + val [0];
fukt = ((1.0 * H1)-(1.0 * H0)) * (1.0 * luftfuktighet - 1.0 * H2) / (1.0 * H3 - 1.0 * H2) + (1.0 * H0);
int temp = (val [3] * 256) + val [2].
flyta cTemp = (((T1-T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);
flyta fTemp = (cTemp * 1,8) + 32;
Utdata till seriell monitor
Serial.Print ("relativ luftfuktighet:");
Serial.Print(humidity);
Serial.println ("% RH").
Serial.Print ("temperaturen i Celsius:");
Serial.Print(cTemp); Serial.println ("C").
Serial.Print ("temperaturen i Fahrenheit:");
Serial.Print(fTemp);
Serial.println "F".
Delay(500);
}