Retro programming nostalgia IV: L’Equilibrio e la Titolazione Acido/Base

La motivazione per questo articolo nasce dal mio interesse per il retro-computing connesso, da una parte, alla rivalutazione delle mie esplorazioni giovanili del calcolo scientifico in linguaggio BASIC e dall’altra, alla popolarità che, negli ultimi anni, stanno avendo nel settore amatoriale e della didattica i microcomputer su scheda singola  (single-board computer, quali, per esempio  il Raspberry Pi).  Questi piccoli computer hanno una potenza considerevolmente maggiore a un costo decisamente inferiore dei microcalcolatori degli anni 80. Questo ha reso possibile l’emulazione su questi calcolatori dei sistemi operativi di mitici modelli di home computer della Commodore e i modelli MSX.

Pertanto sta prendendo piede anche un rinnovato interesse nel linguaggio di programmazione BASIC. Questo interesse nel retro-computing riflette la nostalgia nelle grandi emozioni che negli anni 70-80 lo sviluppo della tecnologia informatica consumistica ha portato alla mia generazione. Ricordo che rimasi folgorato dalla creatività nell’uso e nella programmazione di questi microcomputer al punto che ha ridiretto i miei interessi scientifici e la mia carriera accademica.   

Ho raccontato in altri articoli delle mie prime avventure di programmazione con  home computer della Commodore e i sistemi MSX alla fine degli anni ’80 e inizi degli anni ’90 e delle mie riscoperte di archeologia informatica. Tra i reperti ho rinvenuto un piccolo programma che ho usato per studiare le titolazioni acido/base sviluppato in MSX BASIC. Pertanto ho colto l’occasione per scrivere delle note sull’equilibrio acido base  e la titolazione e quindi fornire una versione restaurata e migliorate del mio programma, a gli studenti appassionati di programmazione  che sono  alle prese con questo importante concetto della chimica analitica.

 L’Equilibrio Acido/Base

Storicamente la prima teoria  sull’equilibrio acido-base venne proposta da Svante Arrhenius (1858-1927) nel 1887. Arrhenius classificò sostanze acide e basiche sulla base della loro capacità di dissociarsi spontaneamente in ioni H+ or OH- in soluzione. L’introduzione da parte del concetto di equilibrio chimico e, quindi, della costante di dissociazione permise la distinzione degli acidi e delle basi in forti e deboli. 

All’inizio dello scorso secolo (1909),  S.P. L. Sørensen (1868-1939) introdusse la definizione di scala di pH come misura della concentrazione degli H+ in soluzione. Questa unità di misura si diffuse ben presto perché usando le proprietà dei logaritmi decimali semplifica la notazione e il calcolo delle concentrazioni molto basse degli ioni H+. Nello stesso anno, L. J. Henderson (1878-1942), professore di fisiologia all?Università di Harvard, studiando i meccanismi che concorrono a mantenere la neutralità nel sangue, scoprì l’effetto tampone di alcune sostanze che  al  sangue di neutralizzare grandi quantità di acidi e di basi senza alterare la sua neutralità. Henderson rielaborando la legge di azione di massa  per la dissociazione degli acidi deboli così che fosse applicabile a miscele degli acidi deboli e dei loro sali con una base forte, ottenne la nota equazione. K.A. Hasselbalch (1874- 1962), nel 1917, convertì l?equazione di Henderson in termini logaritmici, nell’equazione nota da allora con la denominazione di equazione di Henderson-Hasselbalch.  

Diversamente da quanto comunemente si crede, fu Niels Bjerrum (1879-1958), e non Hasselbalch a introdurre questa trasformazione terminologica e in alcuni paesi l’equazione è nota come equazione di Bjerrum o equazione tampone. Descriverò in un altro articolo l’equazione tampone.

Nel 1923 da J.N. Brønsted (1879- 1947) e indipendentemente da T.M. Lowry (1874- 1936), generalizzarono la definizione di acido e base come specie chimiche donatori e/o accettori di protoni, estendendo la chimica acido-base anche a soluzioni non acquose. I progressi nella chimica quantistica nei primi decenni dell secolo scorso ebbero anche una grande stimolo nel campo, tanto che  G.N. Lewis (1875-1946), nello stesso anno (1923) propose come definizione di acidi, tutte le specie chimiche in grado di accettare di una coppia di elettroni, e di basi  quelle in grado di donare una coppia di elettroni.

 Ma adesso vediamo più in dettaglio alcuni aspetti dell’equilibrio chimico. Dalla definizione di  Brönsted e Lowry, un acido o una base sono specie chimiche in grado di donare o accettare protoni. Un equilibrio acido/base è la condizione termodinamica in cui un sistema costituito da una specie chimica donatore e una accettore di protoni raggiunge il massimo dell’entropia disponibile o equivalentemente il minimo della sua energia libera di Gibbs. 

L’equilibrio in soluzione acquosa di una generica specie acida monoprotica (A) e basica (B) viene descritto con l’equazione

AH _{aq}+ B^{-}_{aq} <=> A^{-}_{aq} + BH_{aq} 

dove AH e B^{-} sono rispettivamente generici composto  acido e basico dissociati. Usando le concentrazioni di queste specie possiamo caratterizzare il loro rapporto.

K_{equ} = \frac{[A^{-}_{aq}][BH_{aq}]}{[AH _{aq}][B^{-}_{aq}]}

Per entrare più in dettaglio, ecco alcuni esempi di reazioni d’equilibrio acidi/base.

L’acqua pura è un sostanza anfiprotica, ovvero una specie chimica che può donare come accettare protoni

H_2O + H_2O <=> H_3O^{+} + OH^{-}_{(aq)}

Gli ioni  H_3O^{+} e HO^{-} sono noti come catione ossonio e idrossido rispettivamente.

L’acqua in contatto con l’aria assorbe i gas (per la legge di Henry) contenuti. In particolare l’anidride carbonica dissolvendosi reagisce con  l’acqua e i suoi ioni formando acido carbonico:

CO_2 + 2H_2 O <=> CO_3H^{-} + H_3 O^{+}

che può  cedere anche l’altro protone

CO_3 H^{-} + H_2 O <=> CO_3 ^{2-} + H_3 O^{+} 

Questi equilibri deliziano il nostro palato quando assaporiamo bevande gassate come le acque minerali gassate (naturali o artificiali) o lo spumante a Capodanno. Ma sono anche le equazioni fondamentali che regolano il delicato equilibrio chimico tra l’acqua degli oceani e l’atmosfera. L’eccesso di acido carbonico creato dall’aumento di C O_2 dovuto all’attività umana  sta acidificando gli oceani distruggendo delicati ecosistemi come le barriere corallini con enormi conseguenze ambientali. L’acido non dissociato è chiamato acido carbonico H_2 CO_3 , un acido di protonico altamente instabile e prono a dissociarsi  di nuovo in anidride carbonica.

Un altro acido molto comune nelle nostre cucine è l’acido acetico che in l’acqua libera protoni second l’equilibrio

{HCl + NaOH <=> Cl^{-}_{(aq)} + Na^{+}_{(aq)} + H_2 O}

{CH_3 COOH + OH^{-}_{(aq)} <=> CH_3 COO^{-}_{(aq)} + H_2 O}

L’acido acetico e l’acido carbonico sono due esempi di acidi deboli, ovvero di sostanze che rilasciano i protoni meno facilmente di altri composti che sono pertanto chiamati acidi forti. Un esempio casalingo di acido forte è l’acido muriatico ovvero l’acido cloridrico (HCl) diluito usato in forma diluita per liberare tubature otturate da incrostazioni ostinate. In termini di equilibrio chimico, le costanti di dissociazioni tra i due tipi di acidi differiscono in ordini di grandezza, con quelle dei primi molto piccole.

Le basi sono specie chimiche cariche negativamente che tendono a legare protoni. Un esempio di base è lo ione idrossile che si libera dalla dissociazione dell’acqua o è presente in sali, quali la soda caustica. Un altro prodotto di uso casalingo.

Anche in questo caso possiamo distinguere basi deboli e forti. Si può immediatamente notare che ogni acido è associato con una base di natura opposta all’acido. Per cui l’acido carbonico, un acido forte, ha come base debole lo ione carbossilico, L’acido muriatico (acido forte) ha come base lo ione cloruro (base debole). L’acqua, acido debole, ha come base l’idrossile (base forte). 

Acido e basi reagiscono con reazioni di  neutralizzazione. La reazione  

{HCl + NaOH <=> Cl^{-}_{(aq)} + Na^{+}_{(aq)} + H_2 O}

è una neutralizzazione di un acido forte con una base forte. Mentre la reazione dell’acido acetico  descritta in precedenza, è una reazione di neutralizzazione di un acido debole con una base forte. 

Le reazioni di neutralizzazione possono essere usate per determinare la concentrazione di un acido o una base in una soluzione arrivando all’argomento di questo articolo.

Titolazione Acido/Base

La titolazione è una delle conoscenze pratiche fondamentali che ogni studente di chimica che, almeno fino all’epoca in cui ho frequentato il corso di Laurea in Chimica, deve essere in grado di eseguire con grande accuratezza e precisione. L’importanza nell’apprendimento della tecnica non è legata allo sviluppo della  manualità necessaria per una impeccabile esecuzione ma nella comprensione degli aspetti teorici  della procedura nonchè  dell’analisi statistica dei risultati.

La titolazione acido/base è una procedura della chimica analitica consistente nel misurare il titolo di una soluzione acida o basica usando un opportuno titolante e un indicatore colorimetrico o un misuratore di pH, pH-metro. Lo strumento di quest’arte è la buretta, un lungo cilindro graduato con una accurata scala graduata che indica il volume del titolante che viene aggiunto al suo menisco. La buretta è  dotata di un rubinetto con cui si controlla il volume aggiunto.  

Una curva di titolazione acido/base è caratterizzata dai seguenti regioni:

  • solo acido o base
  • punti di equivalenza, 
  • punti intermedi prima e dopo l’equivalenza.

La titolazione consiste nell’ aggiunta di un volume ({V}_B) del  titolante avente concentrazione nota (C_A

alla soluzione da titolare usando la buretta.  La soluzione da titolare ha una concentrazione C_A e un volume  pari a {V}_A

La curva di titolazione consiste nel riportare il valore del pH in funzione del volume aggiunto. Il pH può essere misurato con un pH-metro ma nella procedura classica di laboratorio veniva identificato il punto di equivalenza che corrisponde al valore di pH = 7 usando un indicatore, ovvero un colorante che cambia le proprietà cromatiche in ristretto intervallo del pH. In questo tipo di titolazioni, l’indicatore usato è la fenolftaleina (3,3-Bis(4-hydroxyphenyl)-2-benzofuran-1(3H)-one), la cui struttura è riportata nella Figura 1.

Figura 1: Formula chimica della fenoftaleina

Questa molecola, sintetizzata nel 1871 da chimico tedesco Adolf von Baeyer, varia da incolore a un rosa debole nel punto di equivalenza aumentando poi in tonalità con l’aumentare del pH.

Questo indicatore viene aggiunto in un a minima quantità alla soluzione da titolare. Ovviamente, la fenolftaleina può essere usata quando la variazione è chiaramente visibile altrimenti si ricorre a un altro indicatore o a uno spettrofotometro, un misuratore elettronico dell’assorbimento della luce visibile di un campione. 

Ricordo che il mio primo incontro  con il metodo della titolazione con fenolftaleina come indicatore la avvenne quando frequentavo la scuola media e la mia insegnante di scienze organizzò una visita scolastica presso una azienda  locale per la lavorazione del latte (la SOLAC di Frosinone). Nella visita del laboratorio, un tecnico ci mostrò la procedura per la determinazione del contenuto di acido lattico

Figura 2: Formula chimica dell’acido lattico

nel latte usando la fenolftaleina in soluzione alcolica (la sostanza è poco solubile in acqua) come indicatore poiché il suo colore rosa risalta chiaramente nello sfondo bianco del latte. 

Analizziamo adesso come l’equilibrio chimico in una soluzione di un acido o una base  cambia con  l’aggiunta del titolante. Nella prima parte di questo articolo, ci limiteremo a considerare solo acidi e basi forti sia per la soluzione da titolare che il per il titolante.

Titolazione di un acido forte con base forte

La titolazione più semplice consiste nella misura della concentrazione di acidi o basi totalmente dissociati in acqua. Per esempio,  si vuole determinare il titolo dell’acido (cloridrico) nella  soluzione di acido muriatico acquistata al supermercato.

In questo caso, si riempie la buretta con di una base totalmente dissociata come, per esempio, l’idrossido di sodio (Na O H ). 

Consideriamo le concentrazioni dello ioni [H_3O^+] nelle varie fasi della titolazione. Indichiamo con C_A la concentrazione della soluzione  avente volume {V}_A, C_T la concentrazione del titolante e {V}_T il volume di titolante aggiunto.

  • Prima dell’equivalenza la concentrazione di

[H_3 O^+] = \frac{V_AC_A-V_TC_B}{V_A+V_T} 

da cui si ottiene il valore del pH

pH= -\log_{10} [H_3O^+]

  • Con l’aggiunta di base il valore del pH aumenta fino a raggiungere il valore di pH = 6 dove il contributo d’ioni [ H_3 O^{+} ] dall’auto dissociazione dell’acqua diventa significativa. 

Nell’ intervallo di 6 \leq pH < 7 possiamo distinguere  le due seguenti condizioni.

  • La condizione in cui [H_3 O^{+}]_{acido} \geq[H_3 O^{+}]_{acqua} ,

per la quale  la concentrazione totale è data dalla formula

[H_3O^+]= [H_3O^+]_{acido} + \frac{10^{-14}}{ [H_3O^+]_{acido}}

Il secondo termine deriva dall’equilibro di dissociazione dell’acqua esaminato nel paragrafo introduttivo, la cui costante è uguale a 

k_w =10^{-14} = [H_3 O^{+}][OH^{-}]

esprimendo la relazione in termini di volumi e concentrazioni si ottiene

[H_3O^+]= \frac{V_AC_A-V_TC_T}{V_A+V_T}+10^{-14} \frac{V_A+V_T}{V_AC_A-V_TC_T}

  • La condizione in cui [H_3O^{+}]_{acido} \leq [H_3 O^{+}]_{acqua} viene approssimata nel modo seguente 

[ H_3 O^{+} ] = [ H_3 O^{+} ]_{acido} + \frac{10^{-14}}{ 10^{-7} + [ H_3 O^{+} ]_{acido}}

che  espressa in termini di volumi e concentrazioni si ottiene

[ H_3 O^{+} ] = \frac{V_AC_A-V_TC_T}{V_A+V_T} + \frac{10^{-14}} {10^{-7} + \frac{V_AC_A - V_TC_T}{V_A + V_T}}

Il valore del pH può essere quindi calcolato usando al solita espressione

pH = -\log_{10}  [H_3 O^{+}].

  • All’equivalenza si ha che pH = {7}. Per valori di pH  > 7, il valore del pH è determinato dall’eccesso di base 

e dal contributo dell’acqua. Di nuovo possiamo distinguere due condizioni che determinano il contenuto totale di ioni idrossidici.

  • La condizione in cui [O H^{+}] _{base} >= [O H^{+} ] _{acqua},

per la quale  la concentrazione totale è data dalla formula

[O H^{-}]= [O H^{-} ]_{base} + \frac{10^{-14}}{ [OH^{-}]_{acido}}

che determina un valore di pH  in termini di volumi e concentrazioni pari a

pH = 14 + \frac{V_TC_T-V_AC_A}{V_A+V_T} + 10^{-14} \frac{V_A + V_T}{V_TC_T - V_AC_A}

  • La condizione in cui  [O H^{+} ]_{base} \geq \frac{10^{-14}}{[O H^+]_{base}}, in cui il pH è calcolato con la formula 

pH = 14 +  \frac{V_TC_T  - V_AC_A}{V_A + V_T} + \frac{10^{-14}}{10^{-7} + \frac{V_A+V_T}{V_TC_T - V_AC_A}}

Nella Figura 3, viene riportata la titolazione di una soluzione di acido cloridrico con una soluzione  idrossido di sodio come titolante.

Figura 3: Esempio di curva di titolazione di un acido forte con una base forte.

La titolazione di una base forte con un acido forte

Come si può vedere nell’esempio della Figura 4, la curva di titolazione di una base forte con un acido forte, è simmetrica rispetto al punto di equivalenza (pH = 7) a quella della delle titolazione di una base forte com un acido forte.

Figura 4: Esempio di curva di titolazione di una base forte con un acido forte.

Per cui, in questo case le equazioni del pH nelle varie condizioni si possono ottenere applicando semplicemente la relazione

pH^{tit.base} =14- pH.

Dove per pH si sostituiscono le relazioni ottenute nel paragrafo precendente.

In un prossimo articolo considereremo il caso di titolazioni con acidi e basi uni-protici deboli. 

Il programma in BASIC

Le curve mostrate in questo articolo sono state ottenute con il programma in BASIC riportato in appendice. Questo è una versione aggiornata del programma di cui ho raccontato nell’introduzione. Ho usato per sviluppare il programma il compilatore open source QB64 (https://www.qb64.org/portal). Questo compilatore BASIC è compatibile con il QuickBasic. QB64 prima traduce il programma in C++ che quindi lo compila con un compilatore C++. Pertanto l’eseguibile che ne risulta è notevolmente più veloce di un programma BASIC tradotto.

Questa versione del programma permette la simulazione delle titolazioni di  acidi o base forti. Il programma usa valori prestabiliti per i parametri di titolazione che possono essere comunque modificati. La titolazione può essere effettuata manualmente aggiungendo aliquote di acido e basi o automaticamente inserendo un numero negativo.  

Figura 5: Il Menu iniziale del programma. Solo le titolazioni con acidi o basi forti sono attive.

APPENDICE

In questa appendice è riportato il listato programma in BASIC. Per il momento il programma calcolo solo le curve di titolazioni Il programma viene distribuito per scopi didattici e non viene garantito che sia esente da bug di programmazione. Per cui se trovate e(o,;-))rrori o avete suggerimenti, mandate un commento. Se poi lo trovate interessante potreste anche provare a svilupparlo ulteriormente.

'================================================================
' PROGRAMMA  : TITOLAZIONI_AB.BAS
' DESCRIZIONE: QUESTO PROGRAMMA CALCOLA LE CURVE DI TITOLAZIONI
'              ACIDO BASE
' AUTORE     : D. ROCCATANO
' ANNO DI PRIMA IDEAZIONE (MSX BASIC)   : 1987
' ANNO DI ADATTAMENTO E AGGIORNAMENTO (QB64 BASIC): 2019
'================================================================

DIM SHARED XI, YI, YF, SY, SX, XF, CI, CF, SE AS INTEGER
DIM SHARED G AS DOUBLE

'line colors

CF = 2 'colore delle linee del grafico
CI = 12 'Curva di titolazione

'Screen parameters
G = 1 / 448
XI = 150
YI = 485
YF = 38
SY = 448
SX = 500
XF = XI + SX

RANDOMIZE TIMER
SCREEN _NEWIMAGE(1000, 600, 256)
COLOR 2, 15
OUT &H3C8, 0
OUT &H3C9, 63
OUT &H3C9, 63
OUT &H3C9, 63

' PARAMETRI DI DEFAULT
VC = 70
' Concentrazione del titolante
CT = 0.08
' Concentrazione delle soluzione
CC = 0.005
' Aliquota di volume aggiunto
DV = 0.1
GENC = 1
CMAX = 0.5
CMIN = 0.01
VMAX = 100
VMIN = 10

'    ====  PROGRAMMA  PRINCIPALE =====
'
COLOR 8
DO
    DO:
        CLS
        LOCATE 5, 5: PRINT "CURVE DI TITOLAZIONE ACIDO-BASE"
        LOCATE 10, 10: PRINT "[1] ACIDO FORTE+BASE FORTE"
        LOCATE 11, 10: PRINT "[2] ACIDO DEBOLE+BASE FORTE"
        LOCATE 12, 10: PRINT "[3] BASE FORTE+ACIDO FORTE"
        LOCATE 13, 10: PRINT "[4] BASE DEBOLE+ACIDO FORTE"
        LOCATE 14, 10: PRINT "[5] CAMBIA PARAMETRI"
        LOCATE 15, 10: PRINT "[6] ESCI "
        LOCATE 17, 12: INPUT "Scegli l'opzione  {1} {2} {3} {4} {5} {6}"; SE
    LOOP UNTIL SE > 0 AND SE < 7

    IF GENC = 0 THEN
        LOCATE 11, 5: INPUT "CONCENTRAZIONE DEL CAMPIONE : "; CC
    ELSE
        GENC = 1
        CC = CMIN + RAND * CMAX
    END IF
    IF SE > 5 THEN END
    FRAME
    SELECT CASE SE
        CASE 1
            AFBF VC, CC, CT, DV
        CASE 2
            ADBF VC, CC, CT
        CASE 3
            AFBF VC, CC, CT, DV
        CASE 4
            ADBF VC, CC, CT
        CASE 5
            CAMBIA_PARAM VC, CC, CT, KA, KB, GENC
        CASE 6
            END
    END SELECT

    LOCATE 36, 1: PRINT "UN'ALTRA TITOLAZIONE? (S/N): ";
    DO: K$ = UCASE$(INKEY$)
    LOOP UNTIL K$ = "S" OR K$ = "N"
LOOP UNTIL K$ = "N"

END

' ==== SUBROUTINES ====
SUB CAMBIA_PARAM (VC, CC, CT, KA, KB, GENC)
    ' INSERIMENTO DEI DATI
    ' INIZIALI
    CLS
    COLOR 8
    LOCATE 5, 5: PRINT "INSERISCI DATI INIZIALI"
    LOCATE 5, 5: PRINT "USANDO UNITA' DI MISURA COMPATIBILI"
    LOCATE 10, 5: INPUT "VOLUME CAMPIONE: "; VC
    LOCATE 11, 5: INPUT "CONC. TITOLANTE: "; CT
    ' DISEGNA LO SCHERMO INIZIALE
    LOCATE 12, 5: INPUT "GENERA CAUSALMENTE LA CONCENTRAZIONE DEL CAMPIONE? (S/N)"; K$
    DO: K$ = UCASE$(INKEY$)
    LOOP UNTIL K$ = "S" OR K$ = "N"
    IF K$ = "N" THEN
        GENC = 0
        LOCATE 12, 5: INPUT "INSERISCI CONCENTRAZIONE DELLA SOLUZIONE: "; CC
    END IF
    IF K$ = "S" THEN
        GENC = 1
        CC = CMIN + RAND * CMAX
    END IF
    FRAME
END SUB

SUB FRAME
    '   DRAW THE GRAPH FRAME
    SHARED XI, XF, YI, YF, SX, SY, CF, SE
    CLS
    '   DRAW GRAPH FRAME
    LINE (XI, YF)-(XF, YI), CF, B
    '   DRAW x-ticks
    FOR I = XI TO XF STEP 5
        LINE (I, YF)-(I, YF + 5), CF
        LINE (I, YI)-(I, YI - 5), CF
    NEXT
    FOR I = XI TO XF STEP 50
        LINE (I, YF)-(I, YF + 10), CF
        LINE (I, YI)-(I, YI - 10), CF
    NEXT

    '   DRAW y-tics
    FOR I = YI TO YF STEP -4
        LINE (XI, I)-(XI + 5, I), CF
        LINE (XF, I)-(XF - 5, I), CF
    NEXT
    FOR I = YI TO YF STEP -32
        LINE (XI, I)-(XI + 10, I), CF
        LINE (XF, I)-(XF - 10, I), CF
    NEXT
    COLOR 8
    LOCATE 15, 12: PRINT "pH"
    FOR I = 1 TO 14 STEP 1
        LOCATE 3 + (I - 1) * 2, 17: PRINT USING "##"; 15 - I
        LOCATE 3 + (I - 1) * 2, 83: PRINT USING "##"; 15 - I
    NEXT
END SUB

SUB SCALAVOL (RV, DV)
    '
    ' STAMPA I VALORI DELLA SCALA DEI VOLUMI AGGIUNTI
    '
    inc = RV * DV * 0.1
    tmp = 0
    LOCATE 32, 18: PRINT USING "###.#"; tmp;
    tmp = inc
    FOR i = 1 TO 10 STEP 1
        LOCATE 32, 22 + (i - 1) * 6.3: PRINT USING "###.#"; tmp;
        tmp = tmp + inc
    NEXT
    LOCATE 33, 70: PRINT "VOL. AGGIUNTO"

END SUB

SUB AFBF (VC, CC, CT, DV)
    SHARED XI, SE, YF, YI
    COLOR 8
    IF SE = 1 THEN
        LOCATE 1, 2: PRINT "TITOLAZIONE ACIDO FORTE - BASE FORTE"
    ELSE
        LOCATE 1, 2: PRINT "TITOLAZIONE BASE FORTE - ACIDO FORTE"
    END IF
    LOCATE 5, 87: PRINT USING "VOLUME SOLUZIONE: ##.##"; VC
    LOCATE 6, 87: PRINT USING "CONC. TITOLANTE: ##.##"; CT
    LOCATE 7, 87: PRINT USING "DEFAULT ALIQU. DI TITOLANTE: ##.##"; DV

    VT = DV ' Volume iniziale di titolante
    AUTO = 0
    ' Calcolo del volume necessario a completare la titolazione
    '
    RV = (1.1 + 0.9 * RND) * (VC * CC) / (DV * CT)
    ' Calcola il fattore di scala per il volume

    GF = 500 / (RV * DV)

    SCALAVOL RV, DV

    PP = 0
    MAXV = RV * DV

    ' Esegue la titoalazione
    DO:
        H = (VC * CC - VT * CT) / (VC + VT)
        F = -H

        IF H = 0 THEN PH = 7
        IF H < 0 THEN
            IF F <= 1E-14 / F THEN
                PH = 14 + Log10#(F + 1E-14 / (F + 1E-7))
            ELSE
                PH = 14 + Log10#(F + 1E-14 / F)
            END IF
        END IF

        IF H > 0 THEN
            IF H < (1E-14) / H THEN
                PH = -Log10#(H + 1E-14 / (H + 1E-7))
            ELSE
                PH = -Log10#(H + 1E-14 / H)
            END IF
        END IF

        ' SE LA TITOLAZIONE E' DI UNA BASE FORTE CON UN ACIDO FORTE
        IF (SE = 3) THEN PH = 14 - PH
        ' DISEGNA LA CURVA
        IF (PP = 0) THEN
            PSET (XI + VT * GF, YI - SY * PH / 14), CI
        ELSE
            LINE -(XI + VT * GF, YI - SY * PH / 14), CI
        END IF
        PP = PP + 1

        'aggiunti aliquota
        NALI = 1
        IF (AUTO = 0) THEN
            LOCATE 34, 5: PRINT "NUMERO (n) DI ALIQUOTE (dv) DA AGGIUNGERE. IL NUMERO n E' UN FATTORE DI dv."
            LOCATE 35, 5: PRINT "                                                      "
            LOCATE 35, 5: INPUT "UN VALORE n<0 TERMINA LA TITOLAZIONE:"; inval
        END IF
        IF inval > 0 THEN NALI = inval
        IF inval < 0 THEN AUTO = 1: NALI = 1
        VT = VT + DV * NALI
        LOCATE 30, 87: PRINT USING "VOLUME AGGIUNTO: ##.##"; VT;
    LOOP UNTIL VT > MAXV
    EXIT SUB

END SUB
SUB ADBF (VC, CC, CT)
    SHARED XI, SE, YF, YI
    kk = 6.6E-4
    DV = 0.1 ' Volume increment
    VT = 0
    RV = 0.5 + 3. * RND
    RR = INT(CC / CT)
    RV = RR / 2. + 3 * RR * (RND + 0.1)
    LOCATE 33, 2: PRINT CC, CT, RV
    GF = 500 / (RV * VC)
    IF SE = 1 THEN PRESET (XI, YI) ELSE PRESET (XI, YF)
    '   IF VT = VC - 2 AND (VC + H) < VC * 2 THEN AV = .01
    50 VT = VT + DV
    IF VT > RV * VC THEN EXIT SUB
    H = (VC * CC - VT * CT) / (VC + VT)
    SS = VT * CT / (VC + VT)
    F = -H
    UU = VC * CC / (VC + VT)
    IF H = 0 THEN
        ZZ = (SQR((1E-14 / kk) ^ 2 + 4E-14 * SS / kk) - 1E-14 / kk) / 2
        PH = 14 + Log10#(ZZ)
    END IF
    IF H < 0 THEN
        LL = F + (-F + SQR(F * F + 4E-14 * UU / kk)) / 2

        PH = 14 + Log10#(LL)
    END IF

    IF H > 0 THEN
        WW = (-kk - SS + SQR(kk * kk + 4 * kk * CC) / 2)
        IF WW > (1E-7) THEN
            PH = -Log10#(W)
        ELSE
            PH = 14 - Log10#(-H + SQR(H * H + 4E-14 * UU / kk) / 2)
        END IF

    END IF
    '    LOCATE 15, 15:
    ' PER LA TITOLAZIONE DI BASI FORTI CON ACIDO FORTE
    IF (SE = 4) THEN PH = 14 - PH
    ' DISEGNA LA CURVA
    LINE -(XI + VT * GF, YI - SY * PH / 14), CI
    GOTO 50
END SUB

FUNCTION Log10# (value AS DOUBLE) STATIC
    Log10# = LOG(value) / LOG(10.#)
END FUNCTION

About Danilo Roccatano

I have a Doctorate in chemistry at the University of Roma “La Sapienza”. I led educational and research activities at different universities in Italy, The Netherlands, Germany and now in the UK. I am fascinated by the study of nature with theoretical models and computational. For years, my scientific research is focused on the study of molecular systems of biological interest using the technique of Molecular Dynamics simulation. I have developed a server (the link is in one of my post) for statistical analysis at the amino acid level of the effect of random mutations induced by random mutagenesis methods. I am also very active in the didactic activity in physical chemistry, computational chemistry, and molecular modeling. I have several other interests and hobbies as video/photography, robotics, computer vision, electronics, programming, microscopy, entomology, recreational mathematics and computational linguistics.
This entry was posted in Programming, Science Topics, What is new. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.