İçindekiler:

HTS221 ve Parçacık Fotonu Kullanarak Nem ve Sıcaklık Ölçümü: 4 Adım
HTS221 ve Parçacık Fotonu Kullanarak Nem ve Sıcaklık Ölçümü: 4 Adım

Video: HTS221 ve Parçacık Fotonu Kullanarak Nem ve Sıcaklık Ölçümü: 4 Adım

Video: HTS221 ve Parçacık Fotonu Kullanarak Nem ve Sıcaklık Ölçümü: 4 Adım
Video: Amazon echo controlling with particle photon 2024, Haziran
Anonim
Image
Image

HTS221, bağıl nem ve sıcaklık için ultra kompakt kapasitif bir dijital sensördür. Dijital seri arabirimler aracılığıyla ölçüm bilgilerini sağlamak için bir algılama elemanı ve karma sinyal uygulamasına özel entegre devre (ASIC) içerir. Pek çok özellikle entegre edilmiş bu sensör, kritik nem ve sıcaklık ölçümleri için en uygun sensörlerden biridir.

Bu eğitimde, HTS221 sensör modülünün parçacık fotonu ile arayüzlenmesi gösterilmiştir. Nem ve sıcaklık değerlerini okumak için I2c adaptörlü partikül kullandık. Bu I2C adaptör sensör modülüne bağlantıyı daha kolay ve daha güvenilir hale getiriyor.

Adım 1: Donanım Gerekli:

Gerekli Donanım
Gerekli Donanım
Gerekli Donanım
Gerekli Donanım
Gerekli Donanım
Gerekli Donanım

Hedefimizi gerçekleştirmek için ihtiyaç duyduğumuz malzemeler aşağıdaki donanım bileşenlerini içerir:

1. HTS221

2. Parçacık Fotonu

3. I2C Kablosu

4. Parçacık fotonu için I2C Shield

Adım 2: Donanım Bağlantısı:

Donanım Bağlantısı
Donanım Bağlantısı
Donanım Bağlantısı
Donanım Bağlantısı

Donanım bağlantısı bölümü temel olarak sensör ve parçacık fotonu arasında gerekli olan kablo bağlantılarını açıklar. İstenilen çıktı için herhangi bir sistem üzerinde çalışırken doğru bağlantıların sağlanması temel zorunluluktur. Yani, gerekli bağlantılar aşağıdaki gibidir:

HTS221, I2C üzerinden çalışacaktır. Sensörün her bir arayüzünün nasıl bağlanacağını gösteren örnek kablo şeması buradadır.

Kutudan çıktığı gibi, kart bir I2C arayüzü için yapılandırılmıştır, bu nedenle, aksi takdirde agnostik iseniz bu bağlantıyı kullanmanızı öneririz.

Tek ihtiyacınız olan dört tel! Vcc, Gnd, SCL ve SDA pinlerinden sadece dört bağlantı gereklidir ve bunlar I2C kablosu yardımıyla bağlanır.

Bu bağlantılar yukarıdaki resimlerde gösterilmiştir.

Adım 3: Nem ve Sıcaklık Ölçümü Kodu:

Nem ve Sıcaklık Ölçümü Kodu
Nem ve Sıcaklık Ölçümü Kodu

Şimdi parçacık koduyla başlayalım.

Sensör modülünü parçacık ile kullanırken application.h ve spark_wiring_i2c.h kütüphanesini dahil ediyoruz. "application.h" ve spark_wiring_i2c.h kitaplığı, sensör ve parçacık arasındaki i2c iletişimini kolaylaştıran işlevleri içerir.

Parçacık kodunun tamamı, kullanıcının rahatlığı için aşağıda verilmiştir:

#Dahil etmek

#Dahil etmek

// HTS221 I2C adresi 0x5F

#define Addr 0x5F

çift nem = 0.0;

çift cTemp = 0.0;

çift fTemp = 0.0;

int sıcaklık = 0;

geçersiz kurulum()

{

// Değişken ayarla

Particle.variable("i2ccihaz", "HTS221");

Particle.variable("Nem",nem);

Particle.variable("cTemp",cTemp);

// I2C iletişimini MASTER olarak başlat

Wire.begin();

// Seri iletişimi başlat, baud hızını ayarla = 9600

Seri.başla(9600);

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Ortalama konfigürasyon kaydı seç

Wire.write(0x10);

// Sıcaklık ortalama örnekleri = 256, Nem ortalama örnekleri = 512

Wire.write(0x1B);

// I2C İletimini Durdur

Wire.endTransmission();

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Kontrol kaydı1'i seç

Wire.write(0x20);

// Güç AÇIK, Sürekli güncelleme, Veri çıkış hızı = 1 Hz

Wire.write(0x85);

// I2C İletimini Durdur

Wire.endTransmission();

gecikme(300);

}

boşluk döngüsü()

{

imzasız int veri[2];

imzasız int val[4];

unsigned int H0, H1, H2, H3, T0, T1, T2, T3, ham;

// Nem kalibrasyon değerleri

for(int i = 0; i < 2; i++)

{

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write((48 + i));

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

data = Wire.read();

}

}

// Nem verilerini dönüştür

H0 = veri[0] / 2;

H1 = veri[1] / 2;

for(int i = 0; i < 2; i++)

{

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write((54 + i));

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

data = Wire.read();

}

}

// Nem verilerini dönüştür

H2 = (veri[1] * 256.0) + veri[0];

for(int i = 0; i < 2; i++)

{

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write((58 + i));

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

data = Wire.read();

}

}

// Nem verilerini dönüştür

H3 = (veri[1] * 256.0) + veri[0];

// Sıcaklık kalibrasyon değerleri

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write(0x32);

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

T0 = Tel.read();

}

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write(0x33);

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

T1 = Tel.read();

}

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write(0x35);

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

ham = Wire.read();

}

ham = ham & 0x0F;

// Sıcaklık kalibrasyon değerlerini 10 bit'e çevir

T0 = ((ham & 0x03) * 256) + T0;

T1 = ((ham & 0x0C) * 64) + T1;

for(int i = 0; i < 2; i++)

{

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write((60 + i));

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

data = Wire.read();

}

}

// Verileri dönüştür

T2 = (veri[1] * 256.0) + veri[0];

for(int i = 0; i < 2; i++)

{

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write((62 + i));

// I2C İletimini Durdur

Wire.endTransmission();

// 1 bayt veri iste

Wire.requestFrom(Adr, 1);

// 1 bayt veri oku

if(Wire.available() == 1)

{

data = Wire.read();

}

}

// Verileri dönüştür

T3 = (veri[1] * 256.0) + veri[0];

// I2C İletimini Başlat

Wire.beginTransmission(Adr);

// Veri kaydı gönder

Wire.write(0x28 | 0x80);

// I2C İletimini Durdur

Wire.endTransmission();

// 4 bayt veri iste

Wire.requestFrom(Adr, 4);

// 4 bayt veri oku

// nem msb, nem lsb, temp msb, temp lsb

if(Wire.available() == 4)

{

val[0] = Tel.read();

val[1] = Tel.read();

val[2] = Wire.read();

val[3] = Wire.read();

}

// Verileri dönüştür

nem = (val[1] * 256.0) + değer[0];

nem = ((1.0 * H1) - (1.0 * H0)) * (1.0 * nem - 1.0 * H2) / (1.0 * H3 - 1.0 * H2) + (1.0 * H0);

sıcaklık = (değer[3] * 256) + değer[2]; cTemp = (((T1 - T0) / 8.0) * (sıcaklık - T2)) / (T3 - T2) + (T0 / 8.0);

fTemp = (cTemp * 1.8) + 32;

// Gösterge tablosuna veri çıkışı

Particle.publish("Bağıl nem: ", String(nem));

gecikme(1000);

Particle.publish("Sıcaklık Santigrat Olarak: ", String(cTemp));

gecikme(1000);

Particle.publish("Sıcaklık Fahrenhayt Olarak: ", String(fTemp));

gecikme(1000);

}

Particle.variable() işlevi, sensörün çıktısını depolamak için değişkenleri oluşturur ve Particle.publish() işlevi, çıktıyı sitenin panosunda görüntüler.

Sensör çıkışı, referansınız için yukarıdaki resimde gösterilmektedir.

Adım 4: Uygulamalar:

Uygulamalar
Uygulamalar

HTS221, hava nemlendiriciler ve buzdolapları vb. gibi çeşitli tüketici ürünlerinde kullanılabilir. Bu sensör ayrıca Akıllı ev otomasyonu, Endüstriyel otomasyon, solunum ekipmanları, varlık ve mal takibi dahil olmak üzere daha geniş bir alanda uygulamasını bulur.

Önerilen: