A quickly put-together post on the relationships between common electrochemical reference electrode potentials and the vacuum potential, with a proposed algorithm for converting between them.

Reference electrode potentials

Standard hydrogen electrode

The SHE contribution to the cell potential is by convention zero at all temperatures. (Inzelt, Lewenstam, and Scholz 2013, 77)

The expression “normal hydrogen electrode” (NHE) is not a synonym for SHE, in fact, the NHE is the historical standard (due to Nernst in 1889) defined as a metal in contact with a solution saturated with hydrogen gas at 1 atm partial pressure and containing $$\SI{1}{\mol\per\cubic\dm}$$ sulfuric acid. (Inzelt, Lewenstam, and Scholz 2013, 77) The NHE is thus experimentally realisable.

In contrast, the SHE is an ideal device and cannot be rigorously realised experimentally. For practical realisation the standard potential of the hydrogen electrode is not measured at standard conditions but recalculated to $$\ce{H+}$$ at unit activity and $$\SI{10E5}{\pascal}$$. These electrodes are often called reversible hydrogen electrodes (RHE).

Inzelt, Lewenstam, and Scholz (2013), p. 78

Calomel electrode

• Decimolar (decinormal) calomel electrode, $$c_\ce{KCl}=\SI{0.1}{\mol\per\litre}$$, $$E = \SI{0.3337}{\volt}$$.
• Molar (normal) calomel electrode, $$c_\ce{KCl}=\SI{1}{\mol\per\litre}$$, $$E = \SI{0.2801}{\volt}$$.
• Saturated calomel electrode (SCE), $$c_\ce{KCl}\approx\SI{4.2}{\mol\per\litre}$$, $$E = \SI{0.2412}{\volt}$$.

All potential values above at $$\SI{25}{\degreeCelsius}$$ and taken from Bagotsky (2006), p. 194. Because of solubility changes, SCE has a large temperature coefficient ($$\SI{0.65}{\mV\per\kelvin}$$). The potentials of calomel electrodes can be reproduced to $$\SI{+-0.1}{\mV}$$.

Calomel electrodes are unstable much above $$\SI{50}{\degreeCelsius}$$ owing to the disproportionation reaction $$\ce{Hg2Cl2 -> Hg(liq) + HgCl2}$$. (eDAQ wiki)

Marcus (1980) reports $$E^\circ_{\ce{Hg/Hg2Cl2}} = \SI{0.26818+-0.00002}{\volt}$$ at $$\SI{298.15}{\kelvin}$$ ($$a_{\ce{Cl^-}} = 1$$).

Silver-silver chloride electrode

$$E^0 = \SI{0.2224}{\volt}$$ at $$\SI{25}{\degreeCelsius}$$ ($$a_{\ce{Cl-}}=1$$). (Bagotsky 2006, 195; Inzelt, Lewenstam, and Scholz 2013, 87)

The standard potential of the Ag/AgCl electrode has been reported at temperatures exceeding $$\SI{100}{\degreeCelsius}$$.

The absolute potential scale

Trasatti (1986) shows a calculation of the absolute potential of SHE in water and recommends the following conversion:

$$E^\circ(\ce{H+}/\ce{H2})^{\ce{H2O}}\text{(abs)} = \SI{4.44+-0.02}{\volt}\quad\mathrm{at}~\SI{298.15}{\kelvin}$$

It is to be noted that the uncertainty in the knowledge of $$E^\circ(\ce{H+}/\ce{H2})\text{(abs)}$$ ($$\SI{+-20}{\mV}$$) by far exceeds the accuracy of most measurements of electrode potentials. Therefore, any convenience in the use of the absolute potential scale is confined to the specific cases when calculations of electronic energy levels are needed.

Trasatti (1986)

I did a quick scan of all papers that cite Trasatti (1986), and found no more recent recommendation on the relation between SHE and AVS. For now we will stick with Trasatti’s value.

The precise relation between the potential of a free electron in vacuum (absolute vacuum scale) and the conventional standard hydrogen electrode scale for aqueous solutions is still debated. (Inzelt, Lewenstam, and Scholz 2013)

Notes

[…] mercury-containing REs (calomel or mercury–mercuric oxide) are inappropriate for measurements in conjunction with platinum electrodes, since the mercury ions readily poison platinum surfaces.

(Bagotsky 2006, 195)

If this is a rule, we break it quite often.

Convert any scale to SHE (implemented in R)

I built on code I wrote a few years ago, that could convert to/from both electrochemical and electronic scales, but had no way of handling different electrolyte concentrations of electrochemical reference electrodes. I decided to rewrite a new implementation from scratch, that could handle different electrolyte concentrations as well as temperatures.

So, based on literature data (mostly presented above), I put together the following functions. Presented with commentary below. Available as part of my package of commonly used functions on github.

The core is a function that has most of the literature data hard-coded, and returns this data as a tidy dataframe when requested.

potentials.as.SHE() %>%
group_by(electrode, electrolyte) %>%
arrange(SHE) %>%
# return first and last row (if any) within each group
filter(row_number() %in% c(1, n())) %>%
arrange(electrode, SHE)
## # A tibble: 11 x 9
## # Groups:   electrode, electrolyte [8]
##    electrode electrolyte conc.num conc.string  temp    SHE sid   reference
##    <chr>     <chr>          <dbl> <chr>       <dbl>  <dbl> <chr> <chr>
##  1 AgCl/Ag   KCl(aq)          4.2 saturated     40   0.184 2     Sawyer1995
##  2 AgCl/Ag   KCl(aq)          3.5 3.5M at 25C   10   0.215 1     Sawyer1995
##  3 AgCl/Ag   NaCl(aq)         5.9 saturated     25   0.263 9     CRC 97th ed., 97-…
##  4 AVS       ""              NA   ""            25  -4.44  7     Trasatti1986
##  5 Hg2Cl2/Hg KCl(aq)          4.2 saturated     40   0.234 6     Sawyer1995
##  6 Hg2Cl2/Hg KCl(aq)          0.1 0.1M at 25C   25   0.336 3     Sawyer1995
##  7 Li        ""               1   1.0M at 25C   25  -3.04  10    CRC 97th ed., 97-…
##  8 Mg        ""               1   1.0M at 25C   25  -2.37  12    CRC 97th ed., 97-…
##  9 Na        ""               1   1.0M at 25C   25  -2.71  11    CRC 97th ed., 97-…
## 10 SHE       ""              NA   ""          -273.  0     8     Inzelt2013
## 11 SHE       ""              NA   ""           580   0     8     Inzelt2013
## # ... with 1 more variable: dEdT <dbl>

This function is primarily made up of a dataframe that contains all the data (an extract of this dataframe is shown above). This dataframe was constructed with the philosophy of one observation per row in mind (also called tidy data), which makes for some redundancies, but it does make further data analysis easier.

View the latest version on Github (scroll down to the function potentials.as.SHE).

Some of the the columns of this dataframe warrant some explanation. potentials$electrode is the name of the reference electrode, as defined by the function RefCanonicalName (see below). potentials$conc.string was added so that the user (me) won’t have to remember the saturation concentration for various salts in solution. And for those unsaturated electrolytes it was a good place to put information on the temperature where the concentration was defined. Saturation does not depend on temperature, but the concentration of an unsaturated solution (expressed as amount/volume) does depend on temperature due to liquid expansion.

Temperature and concentration values need no further explanation. potentials$setid is mainly for housekeeping - a simple way to keep track of the datasets in the dataframe (allows us to avoid having to resort to advanced matching against several parameters to later identify a particular set). Note that no conversion happens in the potentials.as.SHE function above. It just returns data. It is one of two support functions, the other is for handling the many names each electrode system has. View the latest version of the function RefCanonicalName on Github. So this means the user can enter something like vacuum scale or Ag/AgCl (or a vector of such names) and this function will transparently convert that to a standardised form of the name (if everything works as expected). And finally, what about the function that actually does the conversion of potentials between the different scales? It takes the following arguments: the potential value (in volt), the scale (for the original scale, that you want to convert from), and optional arguments for concentration and temperature (set to saturated and RT by default). The last argument expects the dataframe generated by potentials.as.SHE. This way, all three of these functions are reasonably modular, and each one does a fairly well-defined job. View the latest version of the function as.SHE on Github. It may look complicated, but this function is really only taking care of three things: • concentration may be a number or a character string, which means we need to compare it to the appropriate column in the dataset, • the temperature requested by the user may coincide with a datapoint in the dataset (in that case we just return that potential), otherwise we interpolate (by linear regression) based on the existing data, • and for the final calculation of potential in SHE scale, we need to handle electronic (vacuum) and electrochemical scales separately because they go in opposite directions (this is handled by the ifelse(df$vacuum[p], ...) call.

The current implementation requires concentration to match an existing value. A functionality that could (perhaps even should) be added is the ability to interpolate concentrations in the same way as temperature (unless the change in potential with changing concentration deviates strongly from linearity).

Plotting the dataset

ggplot(potentials.as.SHE() %>%
filter(electrolyte == "KCl(aq)")) +
facet_wrap(~ electrode, ncol = 2) +
geom_line(aes(x = temp, y = SHE, colour = conc.string)) +
geom_point(aes(x = temp, y = SHE, colour =  conc.string)) +
geom_text_repel(data = subset(potentials.as.SHE(), electrode != "AVS" & temp == 30),
aes(y = SHE, x = temp, label = conc.string, colour = conc.string),
# hide the line connecting datapoint and label
segment.color = "transparent") +
scale_y_reverse() +
labs(x = expression("T/"*degree*C), # "T/C",
y = "E/V vs SHE") +
theme(legend.position = "none")

SessionInfo

## R version 3.4.4 (2018-03-15)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 16.04.5 LTS
##
## Matrix products: default
## BLAS: /usr/lib/libblas/libblas.so.3.6.0
## LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
##
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
##  [3] LC_TIME=sv_SE.UTF-8        LC_COLLATE=en_US.UTF-8
##  [5] LC_MONETARY=sv_SE.UTF-8    LC_MESSAGES=en_US.UTF-8
##  [7] LC_PAPER=sv_SE.UTF-8       LC_NAME=C
## [11] LC_MEASUREMENT=sv_SE.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] methods   stats     graphics  grDevices utils     datasets  base
##
## other attached packages:
## [1] common_0.0.0.9012 magrittr_1.5      dplyr_0.7.6       ggrepel_0.8.0
## [5] ggplot2_3.0.0     knitr_1.20
##
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.17     bindr_0.1.1      tidyselect_0.2.4 munsell_0.5.0
##  [5] colorspace_1.3-2 R6_2.2.2         rlang_0.2.1      stringr_1.3.1
##  [9] plyr_1.8.4       tools_3.4.4      grid_3.4.4       gtable_0.2.0
## [13] xfun_0.3         withr_2.1.2      htmltools_0.3.6  assertthat_0.2.0
## [17] yaml_2.1.19      lazyeval_0.2.1   rprojroot_1.3-2  digest_0.6.15
## [21] tibble_1.4.2     bookdown_0.7     bindrcpp_0.2.2   purrr_0.2.5
## [25] glue_1.2.0       evaluate_0.10.1  rmarkdown_1.10   blogdown_0.7
## [29] stringi_1.2.3    compiler_3.4.4   pillar_1.2.3     scales_0.5.0
## [33] backports_1.1.2  pkgconfig_2.0.1

References

Bagotsky, V. S. 2006. Fundamentals of electrochemistry. 2nd ed. Wiley-Interscience.

Inzelt, György, Andrzej Lewenstam, and Fritz Scholz, eds. 2013. Handbook of Reference Electrodes. Berlin, Heidelberg: Springer Berlin Heidelberg. doi:10.1007/978-3-642-36188-3.

Marcus, Y. 1980. “Compilation and Evaluation of Solubility Data in the Mercury (I) Chloride-Water System.” Journal of Physical and Chemical Reference Data 9 (4): 1307. doi:10.1063/1.555633.

Roberge, Pierre R. 2008. Corrosion Engineering Principles and Practice. doi:10.1036/0071482431.

Sawyer, Donald T., Andrzej Sobkowiak, and Julian L. Roberts. 1995. Electrochemistry for chemists. Second. John Wiley & Sons, Inc.

Trasatti, S. 1986. “The absolute electrode potential: an explanatory note (Recommendations 1986).” Pure and Applied Chemistry 58 (7): 955–66. doi:10.1351/pac198658070955.