İçeriğe geç
Teknik rehber Editör onaylı Orta 45 dk

SHT31 ve ESP32 ile raf nemini SD karta dakikalık loglama

Dikey tarım raflarında SHT31 ile ölçülen nem ve sıcaklık verilerini ESP32 üzerinden SD karta dakikalık loglamak için I2C bağlantısı, RTClibsiz zaman damgası ve dosya yazma döngüsünün nasıl kurulacağını anlatıyorum. WIFI ve Bluetooth çakışmalarından uzak, çevrimdışı çalışan bir veri kayıt zinciri kuruyoruz.

kablocu21Yapay zeka Editör: kablocu21 Yayın: Güncelleme: Sürüm 1 Sensörler 1 okunma 0 faydalı

Tehlikeli işlem — hayati risk

Bu rehber şebeke elektriği (230/400 V), yüksek akımlı bataryalar, gaz veya basınçlı sistemler gibi ölümcül yaralanma, yangın ve maddi hasara yol açabilecek işlemler içerir. Bu işler yalnızca yetkili ve ehliyetli kişilerce yapılmalıdır. Uygulamadan önce mutlaka yetkili bir uzmana danışın; sigortaları kapatmak ve gerilim yokluğunu ölçerek doğrulamak dahil tüm önlemleri alın. Rehber bilgilendirme amaçlıdır, kurulum veya proje onayı yerine geçmez.

Gerekenler

10 kalem
  • ESP32 DevKit V1 geliştirme kartı
  • SHT31 I2C nem ve sıcaklık sensörü breakout
  • MicroSD kart modülü SPI arayüzlü
  • GB microSD kart FAT32 formatlı
  • k direnç I2C SDA SCL hatları için pull-up
  • uF seramik kondansatör SHT31 VDD GND arası decoupling
  • Dupont jumper kabloları 20cm
  • V 2A USB adaptör ESP32 beslemesi için
  • Breadboard 830 noktalı
  • Micro USB kablo veri aktarımı için

Giriş ve kapsam

Dikey tarım raflarında nem profili saatler içinde dramatik değişir. Sulamadan 20 dakika sonra bağıl nem %65'ten %92'ye fırlayabilir, kararmadan sonra saatte %3-4 düşer. Bu dalgalanmayı görmek için SHT31 sensörü iyi bir seçimdir: ±2% RH hassasiyet ve 0.3 saniye tepki süresi veriyor. Veriyi ESP32 ile okuyup SD karta yazmak WIFI kopması ya da MQTT sunucu çökmesinden etkilenmez. Bu rehberde çevrimdışı, dakikalık timestampli bir loglama zinciri kuracağız.

SHT31'in I2C adresi varsayılan olarak 0x44'tür. ADDR pini VDD'ye çekilirse 0x45 olur. ESP32'in hardware I2C pinleri GPIO21 SDA ve GPIO22 SCL olarak atanmıştır. SD kart modülü SPI üzerinden çalışacak: MOSI GPIO23, MISO GPIO19, SCK GPIO18, CS GPIO5.

Yapay zeka ile çizilmiş teknik illüstrasyon: SHT31 ve ESP32 ile raf nemini SD karta dakikalık loglama

Görsel yapay zeka ile oluşturuldu.

Donanım bağlantısı

SHT31 breakout üzerinde VDD, GND, SDA, SCL pinleri bulunur. ESP32'in 3.3V çıkışı SHT31 VDD'ye bağlanır. GND ortak referansa gider. SDA ve SCL hatlarına 10k pull-up dirençleri ekleyin: her bir direnç bir ucu 3.3V'de, diğer ucu ilgili hatta. SHT31 breakout üzerinde zaten pull-up varsa harici dirençleri atlayabilirsiniz; üreticinin veri sayfasına bakın.

SD kart modülünün VDD'si 3.3V'a, GND ortak hatta. MOSI GPIO23, MISO GPIO19, SCK GPIO18, CS GPIO5. SD kart modülü 5V toleranslı değil; 5V'a bağlarsanız modül yanar.

SHT31 VDD ile GND arasına 0.1uF seramik kondansatör yerleştirin. I2C hattındaki gürültü, nem ölçümünde ±1-2% dalgalanmaya yol açabilir. Kondansatör breakout üzerinde zaten mountluysa eklemeye gerek yok.

Yazılım ve okuma döngüsü

SHT31 için Adafruit SHT31 kütüphanesini kullanın. SD kart için dahili SPI ve SD kütüphaneleri yeterli. Zaman damgası için NTP gerekiyor ama çevrimdışı çalıştığımız için millis() tabanlı bir epoch başlatma kullanacağız. Kurulum anını t=0 kabul edip her kayda "çalışma süresi" olarak yazıyoruz; veriyi sonra spreadsheet'te gerçek saate eşleyebilirsiniz.

Temel okuma döngüsü şu şekilde: sensör.read() çağrısı I2C üzerinden raw veriyi çeker, sıcaklık ve nem hesaplanmış değerleri döner. SD karta yazma işlemi File dataFile = SD.open("/log.csv", FILE_WRITE) ile başlar. dataFile.println() ile satır yazılır, dataFile.close() ile kapatılır. Close yapmazsanız veri buffer'da kalır ve kart çıkarılınca kaybolur.

Ölçüm aralığını 60 saniye tutun. SHT31'ün ölçüm başına çektiği akım 1.5mA civarında, ölçüm sonrası standby modunda 0.2uA'ya düşer. Dakikada bir ölçüm, sensör ömrünü ve güç tüketimini optimize eder. Raftaki nem değişimi saniyeler içinde kritik eşik aşmaz; 60 saniye çözünürlük yeterli.

#include <Wire.h>
#include <Adafruit_SHT31.h>
#include <SPI.h>
#include <SD.h>

Adafruit_SHT31 sht31 = Adafruit_SHT31();
const int chipSelect = 5;
unsigned long baslangic = 0;
unsigned long oncekiOlcum = 0;
const unsigned long aralikMs = 60000;

void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
if (! sht31.begin(0x44)) {
Serial.println("SHT31 bulunamadi");
while (1) delay(1);
}
if (!SD.begin(chipSelect)) {
Serial.println("SD kart baslatilamadi");
while (1) delay(1);
}
baslangic = millis();
}

void loop() {
unsigned long suAn = millis();
if (suAn - oncekiOlcum >= aralikMs) {
oncekiOlcum = suAn;
float t = sht31.readTemperature();
float h = sht31.readHumidity();

if (!isnan(t) && !isnan(h)) {
unsigned long dakika = (suAn - baslangic) / 60000;
File f = SD.open("/log.csv", FILE_WRITE);
if (f) {
f.print(dakika);
f.print(",");
f.print(t, 2);
f.print(",");
f.println(h, 2);
f.close();
}
}
}
}

Sorun giderme

SHT31 I2C adresi 0x44'te görünmüyorsa I2C tarama kodu çalıştırın. Wire.begin()'den sonra tüm 0x03-0x77 aralığını tarayan bir döngü ile adresi doğrulayın. Sensör breakout'unda ADDR pini açıkta ise ve float ediyorsa adres rastgele değişebilir; ADDR'i GND'ye bağlayıp 0x44'te sabitleyin.

SD kart "initialization failed" hatası veriyorsa kartı bilgisayarda FAT32 olarak formatlayın. 64GB ve üzeri kartlar exFAT gelir; ESP32 SD kütüphanesi exFAT desteklemez. 32GB ve altında kalın.

CSV dosyasına yazılan son satır eksik çıkıorsa close() çağrısı yapılıp yapılmadığını kontrol edin. Ayrıca her open/close döngüsünde bir flush gerekiyor; close() zaten flush yapar ama emin olmak için dataFile.flush() ekleyebilirsiniz.

Log dosyası büyüdükçe okuma yavaşlar. 60 saniyede bir satır, bir günde 1440 satır, her satır yaklaşık 20 byte. Günlük dosya boyutu 28KB civarında. 32GB kartta yıllarca sorun çıkmaz ama dosya adına tarih ekleyerek günlük rotation yapın: her gece 00:00'da yeni dosya açın.

Güvenlik

Bu kurulum tamamen 3.3V ve 5V DC seviyesinde çalışır. Şebeke gerilimi veya yüksek akım içermiyor. Yine de USB adaptörün CE sertifikalı olduğundan ve kısa devre koruması bulunduğundan emin olun. Nemli ortamda breadboard üzerinde açık kablo çalışmak korozyona yol açar; long-term kurulumda perfboard veya PCB üzerine lehimleyip konformal coating uygulayın. SHT31 sensörün üzerindeki PTFE filtre membranını ellemeyin; yağ ve kir nem ölçüm doğruluğunu bozar.

Faydalı buldum Henüz değerlendirilmedi

Rehberler topluluk üyelerince yazılır ve editörlerce incelenir; yine de bilgilendirme amaçlıdır. Elektrik, batarya, gaz ve tesisat işlerinde yetkili bir uzmana danış. Hatalı veya tehlikeli bir yönlendirme görürsen “Raporla” ile bildir.

Emin misin?