DmitrMakeev commited on
Commit
16169a9
·
verified ·
1 Parent(s): 127fc0a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +98 -21
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("Кальциевая селитра", 100) # 100 г
745
- calc.add_fertilizer("Калий азотнокислый", 50) # 50 г
746
- calc.add_fertilizer("Аммоний азотнокислый", 30) # 30 г
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