PsyLib PHP

Psikrometrik Hesaplama Kütüphanesi

Nemli ve kuru havanın psikrometrik özelliklerinin hesaplanmasını sağlayan PHP kütüphanesi.

Referans: ASHRAE Handbook - Fundamentals (2017)

🔧 Gereksinimler

  • PHP 8.2 veya üstü
  • JSON extension (varsayılan olarak etkin)

📦 Kurulum

Dosyaları projenize kopyalayın:

psychrolib_php/
├── src/
│   ├── UnitSystem.php
│   ├── PsychrometricValue.php
│   ├── Psychrometrics.php
│   └── PsyLibApi.php
├── api.php
└── README_TR.md

🚀 Hızlı Başlangıç

Temel Kullanım

<?php
require_once 'src/UnitSystem.php';
require_once 'src/PsychrometricValue.php';
require_once 'src/Psychrometrics.php';

use PsyLib\Psychrometrics;
use PsyLib\UnitSystem;

// SI birimleri ile psikrometrik hesaplayıcı oluştur
$psy = new Psychrometrics(UnitSystem::SI);

// Kuru termometre sıcaklığı: 25°C
// Bağıl nem: %50
// Basınç: 101325 Pa (deniz seviyesi)
$tDryBulb = 25.0;
$relHum = 0.50;
$pressure = 101325.0;

// Tüm psikrometrik değerleri hesapla
$result = $psy->calcPsychrometricsFromRelHum($tDryBulb, $relHum, $pressure);

echo "Kuru Termometre Sıcaklığı: " . $result->tDryBulb . " °C\n";
echo "Yaş Termometre Sıcaklığı: " . $result->tWetBulb . " °C\n";
echo "Çiy Noktası Sıcaklığı: " . $result->tDewPoint . " °C\n";
echo "Nem Oranı: " . $result->humRatio . " kg/kg\n";
echo "Entalpi: " . $result->moistAirEnthalpy . " J/kg\n";
echo "Özgül Hacim: " . $result->moistAirVolume . " m³/kg\n";

Elektrikli Isıtıcı API Kullanımı

<?php
require_once 'src/UnitSystem.php';
require_once 'src/PsychrometricValue.php';
require_once 'src/Psychrometrics.php';
require_once 'src/PsyLibApi.php';

use PsyLib\PsyLibApi;
use PsyLib\UnitSystem;

$api = new PsyLibApi(UnitSystem::SI);

$input = [
    'tAin' => 20.0,                   // Giriş sıcaklığı (°C)
    'electric_heater_power' => 5.0,   // Isıtıcı gücü (kW)
    'rHAin' => 0.50,                  // Giriş bağıl nemi (0-1)
    'flow' => 1000.0                  // Hava debisi (m³/h)
];

$results = $api->getResults($input);

echo "Giriş Sıcaklığı: " . $results['tAin'] . " °C\n";
echo "Çıkış Sıcaklığı: " . $results['tAout'] . " °C\n";
echo "Giriş Bağıl Nem: " . ($results['rHAin'] * 100) . " %\n";
echo "Çıkış Bağıl Nem: " . ($results['rHAout'] * 100) . " %\n";

📏 Birim Sistemleri

Kütüphane iki birim sistemini destekler:

SI (Metrik Sistem)

  • Sıcaklık: °C (Celsius)
  • Basınç: Pa (Pascal)
  • Kütle: kg (kilogram)
  • Hacim: m³ (metreküp)
  • Entalpi: J/kg (Joule/kilogram)

IP (Imperial/ABD Sistemi)

  • Sıcaklık: °F (Fahrenheit)
  • Basınç: Psi (pound/inç²)
  • Kütle: lb (pound)
  • Hacim: ft³ (kübik feet)
  • Entalpi: Btu/lb
use PsyLib\Psychrometrics;
use PsyLib\UnitSystem;

// SI birimleri
$psySI = new Psychrometrics(UnitSystem::SI);

// Imperial birimleri
$psyIP = new Psychrometrics(UnitSystem::IP);

// Birim sistemini değiştir
$psySI->setUnitSystem(UnitSystem::IP);

🔧 Metodlar

Sıcaklık Dönüşümleri

Metod Açıklama
getTRankineFromTFahrenheit(float $tF) Fahrenheit → Rankine
getTFahrenheitFromTRankine(float $tR) Rankine → Fahrenheit
getTKelvinFromTCelsius(float $tC) Celsius → Kelvin
getTCelsiusFromTKelvin(float $tK) Kelvin → Celsius

Yaş Termometre Sıcaklığı Hesaplamaları

Metod Açıklama
getTWetBulbFromTDewPoint($tDryBulb, $tDewPoint, $pressure) Çiy noktasından yaş termometre
getTWetBulbFromRelHum($tDryBulb, $relHum, $pressure) Bağıl nemden yaş termometre
getTWetBulbFromHumRatio($tDryBulb, $humRatio, $pressure) Nem oranından yaş termometre

Bağıl Nem Hesaplamaları

Metod Açıklama
getRelHumFromTDewPoint($tDryBulb, $tDewPoint) Çiy noktasından bağıl nem
getRelHumFromTWetBulb($tDryBulb, $tWetBulb, $pressure) Yaş termometreden bağıl nem
getRelHumFromHumRatio($tDryBulb, $humRatio, $pressure) Nem oranından bağıl nem
getRelHumFromVapPres($tDryBulb, $vapPres) Buhar basıncından bağıl nem

Çiy Noktası Hesaplamaları

Metod Açıklama
getTDewPointFromRelHum($tDryBulb, $relHum) Bağıl nemden çiy noktası
getTDewPointFromTWetBulb($tDryBulb, $tWetBulb, $pressure) Yaş termometreden çiy noktası
getTDewPointFromHumRatio($tDryBulb, $humRatio, $pressure) Nem oranından çiy noktası
getTDewPointFromVapPres($tDryBulb, $vapPres) Buhar basıncından çiy noktası

Nem Oranı Hesaplamaları

Metod Açıklama
getHumRatioFromTWetBulb($tDryBulb, $tWetBulb, $pressure) Yaş termometreden nem oranı
getHumRatioFromRelHum($tDryBulb, $relHum, $pressure) Bağıl nemden nem oranı
getHumRatioFromTDewPoint($tDewPoint, $pressure) Çiy noktasından nem oranı
getHumRatioFromVapPres($vapPres, $pressure) Buhar basıncından nem oranı
getHumRatioFromSpecificHum($specificHum) Özgül nemden nem oranı
getHumRatioFromEnthalpyAndTDryBulb($enthalpy, $tDryBulb) Entalpi ve sıcaklıktan nem oranı

Buhar Basıncı Hesaplamaları

Metod Açıklama
getVapPresFromRelHum($tDryBulb, $relHum) Bağıl nemden buhar basıncı
getVapPresFromTDewPoint($tDewPoint) Çiy noktasından buhar basıncı
getVapPresFromHumRatio($humRatio, $pressure) Nem oranından buhar basıncı
getSatVapPres($tDryBulb) Doymuş buhar basıncı

Entalpi Hesaplamaları

Metod Açıklama
getDryAirEnthalpy($tDryBulb) Kuru hava entalpisi
getMoistAirEnthalpy($tDryBulb, $humRatio) Nemli hava entalpisi
getSatAirEnthalpy($tDryBulb, $pressure) Doymuş hava entalpisi

Hacim ve Yoğunluk Hesaplamaları

Metod Açıklama
getDryAirVolume($tDryBulb, $pressure) Kuru hava hacmi
getDryAirDensity($tDryBulb, $pressure) Kuru hava yoğunluğu
getMoistAirVolume($tDryBulb, $humRatio, $pressure) Nemli hava özgül hacmi
getMoistAirDensity($tDryBulb, $humRatio, $pressure) Nemli hava yoğunluğu

Standart Atmosfer Hesaplamaları

Metod Açıklama
getStandardAtmPressure($altitude) Standart atmosfer basıncı
getStandardAtmTemperature($altitude) Standart atmosfer sıcaklığı
getSeaLevelPressure($stnPressure, $altitude, $tDryBulb) Deniz seviyesi basıncı
getStationPressure($seaLevelPressure, $altitude, $tDryBulb) İstasyon basıncı

Toplu Hesaplama Metodları

Metod Açıklama
calcPsychrometricsFromTWetBulb($tDryBulb, $tWetBulb, $pressure) Yaş termometreden tüm değerler
calcPsychrometricsFromTDewPoint($tDryBulb, $tDewPoint, $pressure) Çiy noktasından tüm değerler
calcPsychrometricsFromRelHum($tDryBulb, $relHum, $pressure) Bağıl nemden tüm değerler

🌐 REST API Kullanımı

Endpoint

POST /api.php
Content-Type: application/json

İstek Gövdesi

{
    "tAin": 20.0,
    "electric_heater_power": 5.0,
    "rHAin": 0.50,
    "flow": 1000.0,
    "unitSystem": "SI"
}
Parametre Tip Açıklama
tAin float Giriş kuru termometre sıcaklığı (°C veya °F)
electric_heater_power float Elektrikli ısıtıcı gücü (kW)
rHAin float Giriş bağıl nemi (0-1 arası)
flow float Hava debisi (m³/h veya ft³/min)
unitSystem string Birim sistemi: "SI" veya "IP" (opsiyonel, varsayılan: "SI")

Başarılı Yanıt

{
    "success": true,
    "data": {
        "tAout": 33.89,
        "rHAout": 0.215,
        "outTWetBulb": 18.23,
        "outPressure": 101325,
        "outHumRatio": 0.00729,
        "outTDewPoint": 10.15,
        "outRelHum": 0.215,
        "outVapPres": 1171.23,
        "outMoistAirEnthalpy": 52456.78,
        "outMoistAirVolume": 0.876,
        "outDegreeOfSaturation": 0.213,
        "tAin": 20.0,
        "rHAin": 0.50,
        "inTWetBulb": 13.67,
        "inPressure": 101325,
        "inHumRatio": 0.00729,
        "inTDewPoint": 10.15,
        "inRelHum": 0.50,
        "inVapPres": 1171.23,
        "inMoistAirEnthalpy": 38567.89,
        "inMoistAirVolume": 0.839,
        "inDegreeOfSaturation": 0.498
    },
    "unitSystem": "Metric (SI)"
}

Hata Yanıtı

{
    "success": false,
    "error": "Hata mesajı"
}

cURL Örneği

curl -X POST http://localhost/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "tAin": 20.0,
    "electric_heater_power": 5.0,
    "rHAin": 0.50,
    "flow": 1000.0
  }'

💡 Örnek Hesaplamalar

Örnek 1: Yaş Termometre Sıcaklığı Hesaplama

$psy = new Psychrometrics(UnitSystem::SI);

// 25°C, %60 bağıl nem, deniz seviyesi
$tWetBulb = $psy->getTWetBulbFromRelHum(25.0, 0.60, 101325.0);
echo "Yaş Termometre: {$tWetBulb} °C\n";  // ~19.4 °C

Örnek 2: Çiy Noktası Hesaplama

$psy = new Psychrometrics(UnitSystem::SI);

// 30°C, %70 bağıl nem
$tDewPoint = $psy->getTDewPointFromRelHum(30.0, 0.70);
echo "Çiy Noktası: {$tDewPoint} °C\n";  // ~23.9 °C

Örnek 3: Nem Oranı Hesaplama

$psy = new Psychrometrics(UnitSystem::SI);

// 22°C, %55 bağıl nem, 101325 Pa
$humRatio = $psy->getHumRatioFromRelHum(22.0, 0.55, 101325.0);
echo "Nem Oranı: {$humRatio} kg/kg\n";  // ~0.00912 kg/kg

Örnek 4: Yüksekliğe Göre Basınç

$psy = new Psychrometrics(UnitSystem::SI);

// 1000 metre yükseklikte standart atmosfer basıncı
$pressure = $psy->getStandardAtmPressure(1000.0);
echo "Basınç: {$pressure} Pa\n";  // ~89875 Pa

Örnek 5: HVAC Sistemi Analizi

$psy = new Psychrometrics(UnitSystem::SI);
$pressure = 101325.0;

// Oda koşulları: 24°C, %50 bağıl nem
$room = $psy->calcPsychrometricsFromRelHum(24.0, 0.50, $pressure);

// Dış hava: 35°C, %80 bağıl nem
$outdoor = $psy->calcPsychrometricsFromRelHum(35.0, 0.80, $pressure);

echo "=== Oda Havası ===\n";
echo "Entalpi: " . round($room->moistAirEnthalpy / 1000, 2) . " kJ/kg\n";
echo "Özgül Hacim: " . round($room->moistAirVolume, 4) . " m³/kg\n";

echo "\n=== Dış Hava ===\n";
echo "Entalpi: " . round($outdoor->moistAirEnthalpy / 1000, 2) . " kJ/kg\n";
echo "Özgül Hacim: " . round($outdoor->moistAirVolume, 4) . " m³/kg\n";

// Entalpi farkı (soğutma yükü hesabı için)
$enthalpyDiff = $outdoor->moistAirEnthalpy - $room->moistAirEnthalpy;
echo "\nEntalpi Farkı: " . round($enthalpyDiff / 1000, 2) . " kJ/kg\n";

📚 Psikrometrik Terimler Sözlüğü

Terim İngilizce Birim Açıklama
Kuru Termometre Sıcaklığı Dry-Bulb Temperature °C / °F Normal termometre ile ölçülen hava sıcaklığı
Yaş Termometre Sıcaklığı Wet-Bulb Temperature °C / °F Islak fitilli termometre ile ölçülen sıcaklık
Çiy Noktası Sıcaklığı Dew-Point Temperature °C / °F Havanın doygunluğa ulaştığı sıcaklık
Bağıl Nem Relative Humidity % Havadaki nem miktarının doygunluk değerine oranı
Nem Oranı Humidity Ratio kg/kg Kuru havadaki su buharı kütlesi oranı
Özgül Nem Specific Humidity kg/kg Toplam havadaki su buharı kütlesi oranı
Entalpi Enthalpy J/kg Havanın toplam ısı içeriği
Özgül Hacim Specific Volume m³/kg Birim kütle başına hacim
Buhar Basıncı Vapor Pressure Pa Su buharının kısmi basıncı
Doygunluk Derecesi Degree of Saturation - Nem oranının doymuş nem oranına oranı

⚠️ Hata Yönetimi

Kütüphane, geçersiz giriş değerleri için InvalidArgumentException fırlatır:

try {
    $psy = new Psychrometrics(UnitSystem::SI);
    
    // Geçersiz bağıl nem değeri
    $result = $psy->getHumRatioFromRelHum(25.0, 1.5, 101325.0);
    
} catch (InvalidArgumentException $e) {
    echo "Hata: " . $e->getMessage();
    // Çıktı: "getHumRatioFromRelHum: Bağıl nem [0,1] aralığı dışında"
}