Outils pour utilisateurs

Outils du site


teaching:progappchim:courbe_predominance_acide_2013

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

teaching:progappchim:courbe_predominance_acide_2013 [2013/11/28 14:18] (Version actuelle)
villersd créée
Ligne 1: Ligne 1:
 +====== 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>​
teaching/progappchim/courbe_predominance_acide_2013.txt · Dernière modification: 2013/11/28 14:18 par villersd