İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-23 15:13
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:
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ı 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:
Ş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:
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:
HYT939 ve Parçacık Fotonu Kullanarak Nem Ölçümü: 4 Adım
HYT939 ve Particle Photon Kullanılarak Nem Ölçümü: HYT939, I2C haberleşme protokolü ile çalışan dijital bir nem sensörüdür. Tıbbi sistemler ve laboratuvarlar söz konusu olduğunda nem çok önemli bir parametredir, bu nedenle bu hedeflere ulaşmak için HYT939'u ahududu pi ile arayüzlemeye çalıştık. BEN
MCP9803 ve Parçacık Fotonu Kullanarak Sıcaklık Ölçümü: 4 Adım
MCP9803 ve Partikül Fotonu Kullanarak Sıcaklık Ölçümü: MCP9803, 2 telli yüksek hassasiyetli bir sıcaklık sensörüdür. Sıcaklık algılama uygulamalarını kolaylaştıran, kullanıcı tarafından programlanabilen kayıtlarla yapılandırılmışlardır. Bu sensör, son derece gelişmiş çok bölgeli sıcaklık izleme sistemi için uygundur
STS21 ve Parçacık Fotonu Kullanarak Sıcaklık Ölçümü: 4 Adım
STS21 ve Partikül Fotonu Kullanarak Sıcaklık Ölçümü: STS21 Dijital Sıcaklık Sensörü, üstün performans ve yerden tasarruf sağlayan bir ayak izi sunar. Dijital, I2C formatında kalibre edilmiş, doğrusallaştırılmış sinyaller sağlar. Bu sensörün üretimi, üstün özelliklere atfedilen CMOSens teknolojisine dayanmaktadır
TMP112 ve Parçacık Fotonu Kullanarak Sıcaklık Ölçümü: 4 Adım
TMP112 ve Partikül Fotonu Kullanarak Sıcaklık Ölçümü: TMP112 Yüksek Doğruluk, Düşük Güç, Dijital Sıcaklık Sensörü I2C MINI modülü. TMP112, genişletilmiş sıcaklık ölçümü için idealdir. Bu cihaz, kalibrasyon veya harici bileşen sinyal koşullandırma gerektirmeden ±0.5°C doğruluk sunar.I
HDC1000 ve Parçacık Fotonu Kullanarak Sıcaklık ve Nem Ölçümü: 4 Adım
HDC1000 ve Partikül Fotonu Kullanarak Sıcaklık ve Nem Ölçümü: HDC1000, çok düşük güçte mükemmel ölçüm doğruluğu sağlayan entegre sıcaklık sensörüne sahip bir dijital nem sensörüdür. Cihaz, yeni bir kapasitif sensöre dayalı olarak nemi ölçer. Nem ve sıcaklık sensörleri fac