Water Whitening
Quick Start
A problem with coatings from water dispersions is that they tend to pick up water and turn white - from light scattering. The effect can be modelled via Rayleigh Scattering.
Credits
The app is based on work from the Keddie group in U Sussex1
Water Whitening
//One universal basic required here to get things going once loaded
window.onload = function () {
//restoreDefaultValues(); //Un-comment this if you want to start with defaults
Main();
};
//Main() is hard wired as THE place to start calculating when inputs change
//It does no calculations itself, it merely sets them up, sends off variables, gets results and, if necessary, plots them.
function Main() {
//Save settings every time you calculate, so they're always ready on a reload
saveSettings();
//Send all the inputs as a structured object
//If you need to convert to, say, SI units, do it here!
const inputs = {
R: sliders.SlideR.value * 1e-9, //nm to m
phi: sliders.Slidephi.value / 100, //% to fraction
d: sliders.Slided.value * 1e-6, //μm to m
RI: sliders.SlideRI.value,
lFrom: sliders.SlideFrom.value,
lTo: sliders.SlideTo.value,
};
//Send inputs off to CalcIt where the names are instantly available
//Get all the resonses as an object, result
const result = CalcIt(inputs);
document.getElementById('m').value = result.m;
document.getElementById('C').value = result.C;
document.getElementById('Tav').value = result.Tav;
if (result.plots) {
for (let i = 0; i < result.plots.length; i++) {
plotIt(result.plots[i], result.canvas[i]);
}
}
//You might have some other stuff to do here, but for most apps that's it for Main!
}
//Here's the app calculation
//The inputs are just the names provided - their order in the curly brackets is unimportant!
//By convention the input values are provided with the correct units within Main
function CalcIt({ R, phi, d, RI, lFrom, lTo}) {
const m=1.33/RI
const mterm=Math.pow((m*m-1)/(m*m+2),2)
//I have an error of 1000 in C
const C=1000*32*Math.pow(Math.PI,2)*Math.pow(R,3)*phi*d*mterm
let RS=[], lambda,lm,T, Tav=0, count=0
for (lambda=lFrom;lambda<=lTo;lambda+=10){
lm=lambda/1e9 //to m
T=Math.exp(-C/Math.pow(lm,4))
Tav+=T; count++
RS.push({x:lambda,y:100*T})
}
Tav/=count
// console.log(100*Opacity)
//Now set up all the graphing data detail by detail.
let plotData = [RS], lineLabels = ["% Transmission"]
const prmap = {
plotData: plotData, //An array of 1 or more datasets
lineLabels: lineLabels, //An array of labels for each dataset
hideLegend: true, //Set to true if you don't want to see any labels/legnds.
xLabel: 'λ&nm', //Label for the x axis, with an & to separate the units
yLabel: '%T& ', //Label for the y axis, with an & to separate the units
y2Label: null, //Label for the y2 axis, null if not needed
yAxisL1R2: [], //Array to say which axis each dataset goes on. Blank=Left=1
logX: false, //Is the x-axis in log form?
xTicks: undefined, //We can define a tick function if we're being fancy
logY: false, //Is the y-axis in log form?
yTicks: undefined, //We can define a tick function if we're being fancy
legendPosition: 'top', //Where we want the legend - top, bottom, left, right
xMinMax: [lFrom,lTo], //Set min and max, e.g. [-10,100], leave one or both blank for auto
yMinMax: [0,100], //Set min and max, e.g. [-10,100], leave one or both blank for auto
y2MinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
xSigFigs: 'F0', //These are the sig figs for the Tooltip readout. A wide choice!
ySigFigs: 'F1', //F for Fixed, P for Precision, E for exponential
};
//Now we return everything - text boxes, plot and the name of the canvas, which is 'canvas' for a single plot
return {
m:m.toFixed(2),
C:(C*1e27).toFixed(1),
Tav:(Tav*100).toFixed(1),
plots: [prmap],
canvas: ['canvas'],
};
}
What causes water whitening?
When a water-based emulsion is made into a film, the hope is that the emulsion particles will film form. If the emulsion particles do not fully fuse on coating/drying, and if there are polar materials (e.g. residual surfactant) at the particle boundaries, then water can diffuse into the emulsion film and accumulate as nano-droplets in between particles. From Rayleigh Scattering theory we can deduce the transmission spectrum (less transmission = more scattering) from the radius of the nanodrops, R, the volume fraction of spherical voids of water, φ, the film thickness d, and the ratio, m, of the refractive index of water (1.33) to that of the polymer (typically around 1.5), so m is typically ~0.9. These give us the constant C:
`C=32π^2R^3φd((m^2-1)/(m^2+2))^2`
The transmission, T, at wavelength λ is given by:
`T=e^(-C/λ^4)`
You can plot between λFrom and λTo and an average is calculated as a convenient single number.
Reducing water whitening
In addition to the obvious fact that thinner coatings give lower visible whiteness, we can reduce the refractive index of our polymer to reduce m, but that's not practical. So we need to reduce both R and φ. Note that the total volume fraction of water may be larger than φ, but in terms of scattering, generally absorbed water is irrelevant (though it might have other downsides).
Although it is commonly assumed that it is the surfactant from the emulsion polymerisation process that attracts the water and creates the scattering, the paper shows no obvious correlation with surfactant concentration - indeed their worst scattering came from a sample where they had dialysed out all the surfactant. Instead, the root cause is poorly fused emulsion particles which, if rather too rigid, will have, in the worse case, 30% voids between the packed rigid spheres. So you will get less water whitening via more deformable particles that can fill space better, plus plasticised surfaces (and the surfactant, if chosen carefully, can be the plasticiser) that allow particle sintering at the boundaries.
Yang Liu, Agata M. Gajewicz, Victor Rodin, Willem-Jan Soer, Jurgen Scheerder, Guru Satgurunathan, Peter J. McDonald, Joseph L. Keddie, Explanations for Water Whitening in Secondary Dispersion and Emulsion Polymer Films, J Poly. Sci. B:, 2016, 54, 1658–1674