Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -680,25 +680,34 @@ def view_image():
|
|
680 |
|
681 |
|
682 |
fertilizers_db = {
|
|
|
683 |
"Кальциевая селитра": {
|
684 |
-
"N (NO3-)": 0.118, # 11.8% азота
|
685 |
-
"Ca": 0.169 # 16.9% кальция
|
686 |
},
|
|
|
|
|
687 |
"Калий азотнокислый": {
|
688 |
-
"N (NO3-)": 0.138, # 13.8% азота
|
689 |
-
"K": 0.387 # 38.7% калия
|
690 |
},
|
|
|
|
|
691 |
"Аммоний азотнокислый": {
|
692 |
"N (NO3-)": 0.175, # 17.5% нитратного азота
|
693 |
"N (NH4+)": 0.175 # 17.5% аммонийного азота
|
694 |
},
|
|
|
|
|
695 |
"Сульфат магния": {
|
696 |
-
"Mg": 0.098, # 9.8% магния
|
697 |
-
"S": 0.13 # 13% серы
|
698 |
},
|
|
|
|
|
699 |
"Монофосфат калия": {
|
700 |
-
"P": 0.227, # 22.7% фосфора
|
701 |
-
"K": 0.287 # 28.7% калия
|
702 |
}
|
703 |
}
|
704 |
|
@@ -719,9 +728,72 @@ class HydroCalculator:
|
|
719 |
ppm[element] = ppm.get(element, 0) + (grams * ratio * 1000) / self.volume
|
720 |
return ppm
|
721 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
722 |
def print_report(self):
|
723 |
ppm = self.calculate_ppm()
|
724 |
-
|
|
|
|
|
725 |
print("\nРезультаты расчёта:")
|
726 |
print("-" * 50)
|
727 |
print("{:<15} {:>10} {:>15}".format("Элемент", "ppm", "мг/л"))
|
@@ -729,25 +801,30 @@ class HydroCalculator:
|
|
729 |
for element, value in sorted(ppm.items()):
|
730 |
print("{:<15} {:>10.2f} {:>15.2f}".format(element, value, value))
|
731 |
print("-" * 50)
|
732 |
-
|
733 |
-
|
734 |
-
print("\nСодержание азота:")
|
735 |
-
print(f"Общий азот (N): {ppm.get('N (NO3-)', 0) + ppm.get('N (NH4+)', 0):.2f} ppm")
|
736 |
-
print(f"Нитратный азот (NO3-): {ppm.get('N (NO3-)', 0):.2f} ppm")
|
737 |
-
print(f"Аммонийный азот (NH4+): {ppm.get('N (NH4+)', 0):.2f} ppm")
|
738 |
print("-" * 50)
|
739 |
|
740 |
-
|
|
|
|
|
|
|
741 |
calc = HydroCalculator(10) # 10 литров раствора
|
742 |
|
743 |
-
# Добавляем удобрения
|
744 |
-
calc.add_fertilizer("Кальциевая селитра",
|
745 |
-
calc.add_fertilizer("Калий азотнокислый",
|
746 |
-
calc.add_fertilizer("Аммоний азотнокислый",
|
747 |
|
748 |
-
# Выводим отчёт
|
749 |
calc.print_report()
|
750 |
|
|
|
|
|
|
|
|
|
|
|
|
|
751 |
|
752 |
|
753 |
|
|
|
680 |
|
681 |
|
682 |
fertilizers_db = {
|
683 |
+
# Кальциевая селитра (Ca(NO3)2 · 4H2O - тетрагидрат)
|
684 |
"Кальциевая селитра": {
|
685 |
+
"N (NO3-)": 0.118, # 11.8% азота (правильно)
|
686 |
+
"Ca": 0.169 # 16.9% кальция (правильно)
|
687 |
},
|
688 |
+
|
689 |
+
# Калий азотнокислый (KNO3)
|
690 |
"Калий азотнокислый": {
|
691 |
+
"N (NO3-)": 0.138, # 13.8% азота (правильно)
|
692 |
+
"K": 0.387 # 38.7% калия (правильно)
|
693 |
},
|
694 |
+
|
695 |
+
# Аммоний азотнокислый (NH4NO3)
|
696 |
"Аммоний азотнокислый": {
|
697 |
"N (NO3-)": 0.175, # 17.5% нитратного азота
|
698 |
"N (NH4+)": 0.175 # 17.5% аммонийного азота
|
699 |
},
|
700 |
+
|
701 |
+
# Сульфат магния (MgSO4 · 7H2O - гептагидрат)
|
702 |
"Сульфат магния": {
|
703 |
+
"Mg": 0.098, # 9.8% магния (правильно)
|
704 |
+
"S": 0.13 # 13% серы (правильно)
|
705 |
},
|
706 |
+
|
707 |
+
# Монофосфат калия (KH2PO4)
|
708 |
"Монофосфат калия": {
|
709 |
+
"P": 0.227, # 22.7% фосфора (правильно)
|
710 |
+
"K": 0.287 # 28.7% калия (правильно)
|
711 |
}
|
712 |
}
|
713 |
|
|
|
728 |
ppm[element] = ppm.get(element, 0) + (grams * ratio * 1000) / self.volume
|
729 |
return ppm
|
730 |
|
731 |
+
def calculate_ec(self):
|
732 |
+
ppm = self.calculate_ppm()
|
733 |
+
ec = 0.0
|
734 |
+
EC_COEFFICIENTS = {
|
735 |
+
'N (NO3-)': 0.6,
|
736 |
+
'N (NH4+)': 0.4,
|
737 |
+
'K': 0.7,
|
738 |
+
'Ca': 0.75,
|
739 |
+
'Mg': 0.6,
|
740 |
+
'S': 0.3,
|
741 |
+
'P': 0.1,
|
742 |
+
}
|
743 |
+
for element, value in ppm.items():
|
744 |
+
if element in EC_COEFFICIENTS:
|
745 |
+
ec += value * EC_COEFFICIENTS[element]
|
746 |
+
return ec / 1000
|
747 |
+
|
748 |
+
def calculate_ec_exact(self):
|
749 |
+
MOLAR_MASSES = {
|
750 |
+
'NO3-': 62.0,
|
751 |
+
'NH4+': 18.0,
|
752 |
+
'K+': 39.1,
|
753 |
+
'Ca+2': 40.1,
|
754 |
+
'Mg+2': 24.3,
|
755 |
+
'SO4-2': 96.1,
|
756 |
+
'H2PO4-': 97.0,
|
757 |
+
}
|
758 |
+
ION_CONDUCTIVITY = {
|
759 |
+
'NO3-': 71.4,
|
760 |
+
'NH4+': 73.5,
|
761 |
+
'K+': 73.5,
|
762 |
+
'Ca+2': 119.0,
|
763 |
+
'Mg+2': 106.0,
|
764 |
+
'SO4-2': 160.0,
|
765 |
+
'H2PO4-': 33.0,
|
766 |
+
}
|
767 |
+
ELEMENT_TO_ION = {
|
768 |
+
'N (NO3-)': 'NO3-',
|
769 |
+
'N (NH4+)': 'NH4+',
|
770 |
+
'K': 'K+',
|
771 |
+
'Ca': 'Ca+2',
|
772 |
+
'Mg': 'Mg+2',
|
773 |
+
'S': 'SO4-2',
|
774 |
+
'P': 'H2PO4-',
|
775 |
+
}
|
776 |
+
|
777 |
+
ppm = self.calculate_ppm()
|
778 |
+
ec = 0.0 # µS/cm
|
779 |
+
|
780 |
+
for element, value in ppm.items():
|
781 |
+
if element in ELEMENT_TO_ION:
|
782 |
+
ion = ELEMENT_TO_ION[element]
|
783 |
+
molar_mass = MOLAR_MASSES[ion]
|
784 |
+
conductivity = ION_CONDUCTIVITY[ion]
|
785 |
+
# ppm = mg/L → mmol/L = (ppm / molar_mass)
|
786 |
+
mmol_per_liter = value / molar_mass
|
787 |
+
# µS/cm = mmol/L * µS·cm²/mmol
|
788 |
+
ec += mmol_per_liter * conductivity
|
789 |
+
|
790 |
+
return ec / 1000 # переводим в mS/cm
|
791 |
+
|
792 |
def print_report(self):
|
793 |
ppm = self.calculate_ppm()
|
794 |
+
ec_simple = self.calculate_ec()
|
795 |
+
ec_exact = self.calculate_ec_exact()
|
796 |
+
|
797 |
print("\nРезультаты расчёта:")
|
798 |
print("-" * 50)
|
799 |
print("{:<15} {:>10} {:>15}".format("Элемент", "ppm", "мг/л"))
|
|
|
801 |
for element, value in sorted(ppm.items()):
|
802 |
print("{:<15} {:>10.2f} {:>15.2f}".format(element, value, value))
|
803 |
print("-" * 50)
|
804 |
+
print("Электропроводность (EC):")
|
805 |
+
print(f"Упрощённый метод: {ec_simple:.2f} mS/cm")
|
|
|
|
|
|
|
|
|
806 |
print("-" * 50)
|
807 |
|
808 |
+
|
809 |
+
|
810 |
+
|
811 |
+
# Пример использования с правильными названиями удобрений
|
812 |
calc = HydroCalculator(10) # 10 литров раствора
|
813 |
|
814 |
+
# Добавляем удобрения с правильными названиями и адекватными количествами
|
815 |
+
calc.add_fertilizer("Кальциевая селитра", 10) # 10 г
|
816 |
+
calc.add_fertilizer("Калий азотнокислый", 5) # 5 г
|
817 |
+
calc.add_fertilizer("Аммоний азотнокислый", 3) # 3 г
|
818 |
|
819 |
+
# Выводим полный отчёт
|
820 |
calc.print_report()
|
821 |
|
822 |
+
# Дополнительный вывод только NO3 и NH4
|
823 |
+
ppm = calc.calculate_ppm()
|
824 |
+
print("\nСодержание азота:")
|
825 |
+
print(f"NO3-: {ppm.get('N (NO3-)', 0):.2f} ppm")
|
826 |
+
print(f"NH4+: {ppm.get('N (NH4+)', 0):.2f} ppm")
|
827 |
+
|
828 |
|
829 |
|
830 |
|