Courbe de Prédominance d'un Acide

<sxh python; title : courbe_predominance_acide.py> #!/usr/bin/env python # -*- coding: utf-8 -*- # travail de KH, ba2 chimie 2012-2013

# Courbe de Prédominance d'un Acide # from math import * import matplotlib.pyplot as plt from Tkinter import *

def equations (n,C,a,b,c,d,e,f,g,pKa1,pKa2,pKa3): #initialiser (valeur 0)

  
  pH = 0. #pH de départ
  if n==3:
      Ka1=10**(-pKa1)
      Ka2=10**(-pKa2)
      Ka3=10**(-pKa3)
      while pH < 14: #pH va jusque 14
          H = 10**(-pH) #équation pour avoir les concentrations en H30+ aux différents pH demandé
          O = (10**(-14)) / H #équation pour avoir les concentrations en OH- aux différents pH demandé
          K = 1 + H/Ka3 + (H**2)/(Ka2*Ka3) + (H**3)/(Ka1*Ka2*Ka3) #équation qui détermine la valeur de alpha H
          a0= 1/K   # équation pour avoir alpha0
          a1=a0*(H/Ka3)   # équation pour avoir alpha1
          a2=a1*(H/Ka2)   # équation pour avoir alpha2
          a3=a2*(H/Ka1)   # équation pour avoir alpha3
          H3Y = a3 * C      # équation pour avoir la [H3Y]  
          H2Y = a2 * C      # équation pour avoir la [H2Y-]  
          HY2 = a1 * C      # équation pour avoir la [HY2-]  
          Y3 = a0 * C         # équation pour avoir la [Y3-]  

# listes auxquels nous ajouterons les différentes valeurs calculées au dessus pour chaque pH demandé :

          a.append(pH)
          b.append (H)
          c.append (O)
          d.append (H3Y)
          e.append (H2Y)
          f.append (H2Y)
          g.append (Y3)
          pH = pH + 0.1
  elif n==2:
      Ka1=10**(-pKa1)
      Ka2=10**(-pKa2)
      while pH < 14:
          H = 10**(-pH)   #équation pour avoir les concentration en H3O+ aux différents pH demandé
          O = (10**(-14)) / H  # équation pour avoir les concentration en OH - aux différents pH demandé
          K = 1 + H/Ka2 + (H**2)/(Ka2*Ka1)  #équation pour avoir la valeur de alpha H
          a0 = 1/K  #équation pour avoir alpha 0
          a1= a0*(H/Ka1)   #équation pour avoir alpha 1
          a2 = a1*(H/Ka1)   #équation pour avoir alpha 2
          H2Y = a2*C   #équation pour avoir la [H2Y] 
          HY=a1*C    #équation pour avoir la [HY-]
          Y2=a0*C    # équation pour avoir la [Y2-]

# listes auxquels nous ajouterons les différentes valeurs calculées au dessus pour chaque pH demandé :

          a.append(pH)
          b.append(H)
          c.append(O)
          d.append(H2Y)
          e.append(HY)
          f.append(Y2)
          pH = pH + 0.1
  elif n==1:
        
      Ka1=10**(-pKa1)
      while pH < 14 :
          H = 10**(-pH)   #équation pour avoir les concentration en H3O+ aux différents pH demandé
          O = (10**(-14)) / H   # équation pour avoir les concentration en OH - aux différents pH demandé
          K = 1 + H/Ka1  #équation pour avoir la valeur de alpha H
          a0 = 1/K  #équation pour avoir alpha 0
          a1= a0*(H/Ka1)  #équation pour avoir alpha 1
          HY= a1*C #équation pour avoir la [HY]  
          Y=a0*C  #équation pour avoir la [Y-]

# listes auxquels nous ajouterons les différentes valeurs calculées au dessus pour chaque pH demandé :

          a.append(pH)
          b.append (H)
          c.append (O)
          d.append (HY)
          e.append (Y)
          pH = pH + 0.1  

#2eme fenêtre dans laquelle on rentrera les paramètres propre à la molécule étudiée. def fenetre2():

  root2 = Tk()
  
  
  n = float (champn.get ()) # transformation en nombre flottant de la valeur entrée pour n
  txtn = Label(root2, text ='pKa1 : ', fg = 'red')
  txtn.grid(row=2)
  champ1 = Entry(root2) #demander le pKa1
  champ1.grid(row=3)      # ligne à laquelle apparaitra le champs ou l'on donnera le pKa1
      
  if n > 1 :               #paramètre demander si la molécule possède 2  H+
      txt2 = Label(root2, text ='pKa2 : ', fg = 'red')
      txt2.grid(row=4)
      champ2 = Entry (root2) #demande le pKa2
      champ2.grid(row=5)  # ligne à laquelle apparaitra le champs ou l'on donnera le pKa2
      
      if n == 3 :               #paramètre demander si la molécule possède 3 H+
          txt3 = Label(root2, text ='pKa3 : ', fg = 'red')
          txt3.grid(row=6)
          champ3 = Entry (root2) #demande le pKa3
          champ3.grid(row=7)  #ligne à laquelle apparaitra le champs dans lequel on donnera le pKa3
  def graphe():
      
      a=[]    
      b=[]
      c=[]
      d=[]
      e=[]
      f=[]
      g=[]
      n = float(champn.get())
      C = float(champc.get())
      pKa1 = float(champ1.get())
      pKa2 = 0
      pKa3 = 0
      if n > 1:
          pKa2 = float (champ2.get())
          if n == 3:
              pKa3 = float (champ3.get())
      
      equations(n,C,a,b,c,d,e,f,g,pKa1 = pKa1, pKa2 = pKa2, pKa3 = pKa3)
      
      plt.xlabel("pH")        #nom donné à l'axe des abscisses
      plt.ylabel("Concentrations")     #nom donné à l'axe des ordonnées

# les différentes droites qui seront présentes sur le graphique semilog :

      
      c1 = plt.semilogy(a,b,'r')  #courbe donnant le concentration en H3O+ en fonction du pH
      c2 = plt.semilogy(a,c, 'b') #courbe donnant le concentration en OH- en fonction du pH
      c3 = plt.semilogy(a,e,'g') #courbe donnant le concentration en l'acide qui à tout ces H+ en fonction du pH
      c4 = plt.semilogy(a,d,'m')  
      if len(f)>1:       
          c5 = plt.semilogy(a,f,'c') #courbe donnant le concentration en l'acide qui a perdu 2H+ en fonction du pH
      if len(g)>1:
          c6 = plt.semilogy(a,g,'y') #courbe donnant le concentration en l'acide qui a perdu 3H+ en fonction du pH
      
      plt.title("Courbe representant la predominance")   
      plt.show()
      
  b2=Button(root2,text="Tracer le Graphique",command=graphe, bg = 'black', fg = 'red')  #bouton qui tracera la courbe de prédominance de l'acide choisit.
  b2.grid(row=8)      #ligne à laquelle se situe le bouton2
  bfin=Button(root2,text="Quitter",command=root2.quit, bg ='green', fg = 'blue') 
  bfin.grid(row=9)         #ligne à laquelle se trouve le bouton de fin.
  root2.mainloop()
 # éliminer la fenêtre :
  root2.destroy()
  #fenêtre n°1 dans laquelle on donnera le nombre de proton de la molécule afin de pouvoir donner les valeurs nécessaires à ceux-ci.

root1= Tk()

txtn = Label(root1, text = “Combien de proton peut perdre la molecule ?”, fg = 'red') txtn.grid(row=0) champn=Entry(root1) #demande le nombre de H+ de la molécule (1, 2 ou 3) champn.grid(row=1) #ligne à laquelle apparaitra le champ à complèter

txtc = Label(root1, text = “Concentration (mol/L) :”, fg ='orange') txtc.grid(row=2) champc = Entry(root1) #demande la concentration de la molécule. champc.grid(row=3) #ligne à laquelle apparaîtra le champ où l'on donnera la concentration

b1 = Button(root1, text = 'Valeurs des pKa ?',command = fenetre2,fg = 'red', bg = 'black') #bouton qui ouvrira la fenêtre n°2 afin de rentrer les autres paramètres.

b1.grid(row = 4)

b2 = Button(root1, text = 'Quitter', command = root1.quit,fg = 'red', bg = 'black') b2.grid (row = 5) root1.mainloop()

# éliminer la fenêtre : root1.destroy()

#Référence:

# http://w3.umons.ac.be/perso/Villers.Didier/wiki/doku.php?id=floss:python # http://www.siteduzero.com/informatique/python/tutoriels # https://moodle.umons.ac.be/course/view.php?id=107 # http://www.inforef.be/swi/download/apprendre_python3.pdf

</sxh>

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • teaching/progappchim/courbe_predominance_acide_2013.txt
  • Dernière modification : 2013/11/28 14:18
  • de villersd