You are on page 1of 15

Straight forward approach for obtaining relaxation-recovery data.

Rasmus Røjkjær‡, Emil Andersen‡,#, Simon Heide-Jørgensen†, Carmine Ciallella#, René Mikkelsen#,
Søren Kristiansen#, Mogens Hinge‡*

Plastic and Polymer Engineering, Department of Engineering, Aarhus University, Hangøvej 2, DK-
8200 Aarhus N, Denmark
†Mechanical Engineering Section, Department of Engineering, Aarhus University, Inge Lehmanns
Gade 10, DK-8000 Aarhus C, Denmark
#
LEGO Systems A/S, Kløvermarken 16, DK-7190 Billund, Denmark

Abstract
An automated way of evaluating the recovery process of polymers was developed. Poly(acrylonitrile
butadiene styrene) (ABS) specimens were exposed to a constant strain for 24 hr, and thus creep and
stress relaxation occurred. Manual and automated procedures were developed and tested, and the
results were compared. The automated data acquisition process was superior both quantitatively and
qualitatively in terms of data compared to the manual acquisition. A Weibull distribution function
was successfully fitted to the data. The developed experimental setup produced a stable system,
reliable data, and it was found that the recovery of ABS followed the Weibull model during the
recovery process.

Introduction
When polymeric materials are exposed to the same amount of deformation, or strain, over a period
of time, stress relaxation, which is a phenomenon where the strain remains constant to the stress,
decreases over time introducing plastic strain to the material. This is due to the polymers being
viscoelastic. When a polymer element is elongated, the intertwined polymer strands in said element
will straighten and start to move in the element. Thus, prolonged strain can cause the polymer
strands to elongate to such a degree that permanent deformation occurs and recovery is only
partially possible. When the loading is removed from the material it will only recover the elastic
part of the strain, while the plastic part from the relaxation will remain, which effects the overall
dimensions and shape of the structure. A similar phenomenon, called creep, occurs if a constant
stress is applied to the polymer over time resulting in continuous deformation and accumulation of
plastic strain. Relaxation-recovery, or creep-recovery, testing can be used to reveal long-term
properties of polymer materials and is crucial for mechanical performance of plastics in many
products (e.g. soft drink containers, caps, seat polstering, and piping).

Poly(acrylonitrile butadiene styrene)


Poly(acrylonitrile butadiene styrene) (ABS) comprises of three different monomers; Acrylonitrile,
Butadiene, and Styrene, illustrated in Figure 1. After polymerization they are found in two phases; a
butadiene rubber phase dispersed in a glassy styrene-acrylonitrile matrix. The three monomers
contribute with different properties e.g. gloss and stiffness from styrene, toughness from butadiene,
and temperature resistance from acrylonitrile (Wittcoff, et al., 2013). ABS has a service temperature
from 40 °C to 107 °C and is flammable at higher temperatures (Wittcoff, et al., 2013).

Page 1
Figure 1. – The monomers of ABS; acrylonitrile, butadiene, and styrene.

Relaxation and Recovery Modelling


When viscoelastic materials, such as polymers, deforms, the total strain, 𝜀, consists of three parts
and can be written as: (Wang & al., 2015)
𝜀(𝑡) = 𝜀𝑒𝑙𝑎𝑠𝑡𝑖𝑐 + 𝜀𝑣𝑖𝑠𝑐𝑜𝑒𝑙𝑎𝑠𝑡𝑖𝑐 + 𝜀𝑝𝑒𝑟𝑚𝑎𝑛𝑒𝑛𝑡 (1)

Where 𝜀𝑒𝑙𝑎𝑠𝑡𝑖𝑐 is the instantaneous, elastic strain, 𝜀𝑣𝑖𝑠𝑐𝑜𝑒𝑙𝑎𝑠𝑡𝑖𝑐 is the delayed, time-dependent
viscoelastic strain and 𝜀𝑝𝑒𝑟𝑚𝑎𝑛𝑒𝑛𝑡 is permanent, inelastic, viscous strain. Elastic strain occurs
immediately when the load is applied. Viscoelastic strain and the viscous strain are delayed
compared to the elastic strain and happens at a decreasing rate until they become self-similar. Upon
unloading the viscoelastic strain recovery occurs at a decreasing rate until only the unrecoverable
viscous strain remains. To get a description of a viscoelastic material experiencing creep (or stress
relaxation) a combination of different models are often necessary e.g. Burger’s model and Zener
Model (Crawford, 2006) (Findley, et al., 1989). An effective way of modelling the recovery
behaviour of polymers is through the Weibull distribution function, which reads: (Fancey, 2005)
𝑡 − 𝑡0 𝛽𝑟
𝜀(𝑡) = 𝜀𝑣𝑖𝑠𝑐𝑜𝑒𝑙𝑎𝑠𝑡𝑖𝑐 [exp (− ) ] + 𝜀𝑝𝑒𝑟𝑚𝑎𝑛𝑒𝑛𝑡 (2)
𝜂𝑟

Where 𝑡 is the time from load application, 𝑡0 is the time of load removal, 𝜂𝑟 is the life factor and 𝛽𝑟
is the shape parameter. Since recovery only takes place after the load has been removed, the elastic
strain disappears as it recovers immediately.

This work gives a standardised way of evaluating the recovery process of polymer elements.
Testing procedures are developed and evaluated using ABS specimens. An optical approach
employing a standard webcam, adapted reading table, ImageJ, and a custom-made algorithm is
implemented whereby constants are obtained by curve fitting.

Materials and methods


Optical setup
An adjustable book stand (Wooden Reading Rest, IF, USA/China) was modified with a metal rod
holding a webcam (USB-2 4 MP Webcam, Biltema, DK). The camera was held in place by laboratory
clamps making it adjustable in every direction. Specimens were placed on the book holding part on
a black or white sheet of paper. The distance between the webcam and specimen was approx. 130
mm with the webcam perpendicular to the specimen. The optical setup is shown in Figure 2 and the
technical drawings are given in Appendix I: Experimental setup dimensions. The camera was
connected to a computer giving an optical setup ensuring stable and consistent conditions for
automatic image capture.

Page 2
Figure 2. - 3D-model of experimental setup (left) and developed experimental setup (right)

Sample stressing
Standard dogbones specimens (100x10x2 mm3) with
a 40 mm thought were used for testing. Specimens
were mounted in a fixture resulting in 2.5% axial
strain (see Figure 4) at the middle of the specimen.
The strain was kept for 24 hr in a temperature-
controlled environment of 20-22 °C. Figure 3. –Test specimen

Manual recovery experiment


Test specimens were removed from the fixtures and
pictured (PowerShot G12, Canon, JPN) at 4, 48 and
168 hr after removal. Manual image analysis consists
of drawing a line from one end of the specimen to the
other (green line in Figure 5), finding the middle of
that line and drawing perpendicular from the middle
point to the top of the specimen (red line in Figure 5).
The line ended at the neutral axis of the specimen.
Specimen strain was calculated from the two lines
where the curvature was found from the calculated Figure 4. - 2.5% strain fixture
radius of the creeped specimens (Gere, 2004).
𝑤 1 ℎ 𝑙2
𝜀 =𝜅∗( ) 𝜅= 𝑟= + (3)
2 𝑟 2 8ℎ
Where, 𝜀 = strain, 𝜅 = curvature, 𝑤 = specimen width, 𝑟 = arc radius, ℎ = height (red line), 𝑙 = length
(green line)

Automatic recovery experiment


Images were captured every 5 min and an ImageJ macro was developed for obtaining the
displacement.

Webcam control program


The images were acquired and saved at specific intervals by a custom script in Python 3.6 (IDLE)
and transferred to a Raspberry Pi 3 model B. The script utilizes the add-on "tkinter" to represent the
User Interface (UI) and "Threading" add-on to allow multi-threading for parallel executions.

Page 3
Weibull Fitting
Eq. (2) was used to fit the model to the data and the constants were obtained. The programs used were
OriginPro 2018, and/or Microsoft Office Excel 2018 with the add-on “solver”. The solver add-on
utilizes the method of least squares, which calculates the constants by minimizing the difference
between the measured and calculated values

Results
Preliminary experiments showed that an artificial light source was necessary for minimizing the
change in daylight and that ceiling light was sufficient for this purpose. Images were captured on the
black and white backgrounds, as seen in Figure 5.

Figure 5. – Automatically captured image on black background (left) and manually captured image on white background (right)

Black background produces better contrast for the image analysis algorithm compared to the white
background as seen in Figure 5. Please note that there is a difference in resolution from 8 megapixels
(left) to 10 megapixels (right) in the two images.

Image acquisition program


Automatically image capturing of the specimens
every 5 minutes was performed by Python. A
simple UI (Figure 6) was included in the script
consisting of a start-button, stop-button (not
shown), a progress bar, and a short explanatory
text.

The most crucial section; the section for


capturing images is shown in Figure 7 and Figure 6. - The User Interface for the image-capturing
described in the following part. program

Figure 7. - Image capturing script written in Python.

Page 4
While-loop states that while the variable “self.k” (name of the currently captured image) is less or
equal to the constant “self.MAX” (being the number of images captured) then the progress bar is
updated and after a 60 sec delay an image is captured. Every fifth image is saved as
“IMG_XXXX.jpg” where XXXX is the image number, which also timestamps the image relative to
when the script has been started. The full script is given in Appendix III: Python (3.6) IDLE
ImageJ Macro
A custom macro was written for ImageJ to find the
bending height. Only a short explanation of the central
parts of the macro is described. See Appendix II: ImageJ
Macro for the full macro. Pre-image transformations are
shown in Figure 8 and is executed before evaluating the
height of the creeped specimen.

Figure 8. – Pre- image transformations

The first line in Figure 8 transforms the image to an 8-bit


image followed by cropping the image to the area of
interest (AOI) determined by starting coordinates (startx
and starty) and the pixel distance (deltax and deltay).
Figure 9. - Height analysis algorithm part 1
Subsequently the image is converted to a black and white
image tress-holding at 70, meaning that every pixel above threshold were given the new value 255
(Black), and below the value 0 (White).

Figure 9 shows first part of the bend height algorithm defining the constants and the line at which the
pixel analysis takes place. For-loop evaluates all the pixel on the line and the x-value is changed to
the intensity-value of the current pixel. Three counters counts the number of black pixels before the
first white (end of the specimen), the number of white pixels (width at the first end of the specimen),
and number of black pixels before the next white pixel (hence between the two ends of the specimen),
respectively.

Page 5
Figure 10. - Height analysis algorithm part 2
Knowing the distance between the specimen ends the second part of the algorithm (Figure 10) is
executed. Initial counting the number of white pixels at the end of the specimen. Hereafter the two
variables “maks” and “sted” are set equal to “result” and “x”, respectively (they are used later to log
and save the values). The midpoint of a line determined by half the sizes of the specimen’s ends
(whiteteller1 and 2) and the distance between these (blackteller2) is found. A new line is drawn
perpendicular from this midpoint to the top of the image. A new for-loop is started where the number
of black pixels to the first white pixel (below the specimen) and
the number of white pixels (the width of the specimen) are
counted and stored in blackteller3 and whiteteller3 (not shown),
respectively.

In the last part of the algorithm (Figure 11) the height is


calculated as the sum of black pixels and half of the white
pixels. The filename, length and height of the specimen are
transferred to the result-window. Then the image is closed, and Figure 11. - Height analysis algorithm part 3
the next image opened. Finally, the result-window is saved as
an ASCII document.

Recovery experiments
The recovery data obtained with the manual approach are shown in Figure 12.

Page 6
Figure 12. - Recovery data of ABS test specimens manually captured and evaluated with exponential decay fits

Figure 12 shows that the recovery curves resemble exponential decaying functions. The different
values of the curves when fitting the Weibull model are given in Table 1.
Table 1. – Weibull model values obtained from the least squares method
Specimen a b c d e
εve 1.95·10 -3
1.67·10 -3
1.92·10 -3
1.79·10 -3
1.75·10-3
ηr 41597 61793 35106 37679 47939
βr 0.363 0.395 0.359 0.359 0.270
εf 4.8·10-3 4.7·10-3 4.6·10-3 5.5·10-3 4.7·10-3

Table 2 shows a comparison between manual and automated procedures performed on the same
images.

Table 2. - Comparison between automatic and manual bending heights in pixel and mm
Image Image Time Manual Manual (mm) Automatic Automatic
number name (hr) (pixels) (pixels) (mm)
1 1 0.02 68.3 10.04 67.5 9.93
49 241 4.02 53.7 7.89 53.0 7.79
577 2881 48.02 45.5 6.69 44.0 6.47
2017 10081 168.02 38.7 5.68 36.5 5.37

Manual results are one to two pixels lower than the automated counterparts. Giving a precision of 0.1
mm which is within human error in the manual analysis.

Results obtained from the automated recovery experiment of only one test specimen gave 2016
pictures analysed automatically and the recovery data are shown in Figure 13.

Page 7
Figure 13. – Fitted Weibull model of automatically obtained recovery data

Discussion
The scope of the experimental setup is to produce an easy-to-make setup that produces stable and
uniform images from which the recovery process of specimens can be evaluated. In the produced
setup a large degree of flexibility was necessary to ensure that the setup could easily be adjusted to
fit different angels and distances. For a permanent setup this flexibility is not necessary, and a
permanent fixation of the webcam and specimen holder could be made. A small economical
evaluation showed that the automated experimental setup was approx. 1000DKK all included. This
low-price range is easily compensated by the short operation time, compared to the operation time of
the manual procedure (with only 4 images). The images captured with the setup differed only in the
amount of light, and the recovery process of the specimens, meaning that the images were deemed
stable.

When comparing the image quality (Figure 5) it is seen that the experimental setup produces images
similar to the manually captured with only one major difference being the resolution. This difference
can be minimised with a higher resolution webcam, if deemed necessary. Other major differences are
the introduction of human factors when capturing and analysing images manually. Especially
difficulties when controlling the distance between the camera and specimen and the camera angle
with respect to the specimen. Manual and automatic evaluation of the specimen strain was performed
on the same images to examine if similar results were obtainable with the two procedures. The
methods are within two pixels from each other. This difference is within human errors when
evaluating the height in ImageJ. It is evaluated that the automatic method is equal to (or better) than
the manual method. Furthermore, the image capturing settings are fully controlled in the automatic
experimental setup.

From Figure 13 the fitted model to the automated data is shown. It is seen that the Weibull distribution
describes the obtained data with a R2-value of 0.989. When comparing Figure 12 and Figure 13 it is

Page 8
noted that a significant amount of information is missing in the manual method, when only capturing
images in specific time points. This also results in the difference in values obtained from the Weibull
fitting, it is seen that the automatic variables vary from the manual being 325 times larger (𝜀𝑣𝑒 ) to
2237 times smaller (𝜀𝑓 ) which confirms the difference in information gathered in the experiments. In
a previous study made by (Daver, et al., 2016) where the creep-recovery phenomena were
investigated in Polyolefin-Rubbers similar values, to the automatic experiment, were obtained, which
suggests that the values obtained automatically can be assumed reliable.

Conclusion
A cheap, stable, and reliable optical setup is made, and an image capture script is developed
together with an automatic image analysis macro for ImageJ. The setup produces 500 times (can
easily be tweaked to produce 2500 times) more data points than the manual approach with less
human interaction/effort. This is a dramatically increase in data-points resulting in better estimation
of the mechanically parameters.

Acknowledgements
The authors greatly acknowledge Dan Kristiansen (Software-Engineer student, Data-logical faculty,
Aalborg University) for his support and read-through the programming in Python.

References
Crawford, R. J., 2006. Plastics Engineering. 3rd ed. Oxford: Elsevier.
Daver, F., Mladenko, K., Brandt, M. & Shanks, R. A., 2016. Creep and Recovery Behaviour of
Polyolefin-Rubber Nanocomposites Developed for Additive Manufacturing. Special Issue
Nanocomposites of Polymers and Inorganic Particles 2016, 8(12), p. 437.
Fancey, K. S., 2005. A mechanical model for creep, recovery and stress relaxation in polymeric
materials. Journal of material science - September 2005.
Fancey, K. S., 2005. A mechanical model for creep, recovery and stress relaxation in polymeric
materials. JOURNAL OF MATERIALS SCIENCE , 40(18), p. 4827–4831.
Findley, W. N., Lai, J. S. & Onaran, K., 1989. Creep and Relaxation of Nonlinear Viscoelastic
materials. New York: Dover publications, INC..
Gere, J. M., 2004. MECHANICS of MATERIALS. 6th ed. Belmount, USA: THOMSON;
BROOKS/COLE.
Schiessel, H., Metzler, R., Blument, A. & Nonnonmacher, T. F., 1995. Generalized viscoelastic
models: their fractional equations with solutions. Freiburg, Germany: IOP Publishing Ltd..
Wang, X. & al., e., 2015. Temperature dependence of creep and recovery behaviors of polymer
composites filled with chemically reduced graphene oxide. Composites Part A; Applied Science and
Manufacturing , Volume 69, pp. 288-298.
Wittcoff, H. A., Reuben, B. G. & Plotkin, J. S., 2013. Industrial Organic Chemistry. 3rd ed.
Hoboken (New Jersey): Wiley.

Page 9
Appendix I: Experimental setup dimensions

Page I
Appendix II: ImageJ Macro
//------------------------------Constants and Naming-----------------------------//
bilstart = 1;
bilslut = 10081;
base = "C:\\...add link to images... \\IMG_";
picturetype = ".JPG"
//------------------------------Area of Interest-------------------------------//
startx = 4
starty = 125
deltax = 642
deltay = 187
xmindste = 5
black =70
linjexstart = 0
linjeystart = 170
linjexslut = 642
linjeyslut=170
//-------------------------------Counters---------------------------------------------//
whiteteller1=0
blackteller1=0
whiteteller2=0
blackteller2=0
whiteteller3=0
blackteller3=0
//------------------------------Code for Naming-------------------------------//
print("\\Clear")
print("Working on converting "+bilslut+bilstart+" images");
print("Please wait...");
setBatchMode(true);
run("Clear Results");
Teller = 0
for(j=bilstart; j<=(bilslut+bilstart); j+=5) {
showProgress(j, bilslut);
navn = j;
//if (j<10) {navn = "000"+j;}
//if (j>9) {navn = "00"+j;}
//if (j>99) {navn = "0"+j;}
//if (j>999) {navn = ""+j;}
sti =base+navn+picturetype;
open(sti);
input = getImageID();
//-------------------------------Pre-Imagetransformation--------//
run("8-bit");
makeRectangle(startx, starty, deltax, deltay);
run("Crop");
setAutoThreshold("Default B&W");
setThreshold(0, black);
run("Convert to Mask");

Page II
//------------------------------Algorithm for height analysis--------------//
k=1;
maks=0;
result=0;
whiteteller1=0;
whiteteller2=0;
blackteller1=0;
blackteller2=0;
makeLine(linjexstart, linjeystart, linjexslut, linjeyslut);
for(x=0; x<=deltax-1; x++) {
result=getPixel(x,linjeystart);
if(whiteteller1<=0) {
if(result>254) {
if(x<(deltax/2)) {
blackteller1=blackteller1+1;
};};};
if(result<1) {
if(x<(deltax/2)) {
whiteteller1=whiteteller1+1;
};};
if(whiteteller1>0) {
if(whiteteller2 <=0) {
if(result>254) {
blackteller2=blackteller2+1;
};};};
if(result<1) {
if(x>(deltax/2)) {
whiteteller2=whiteteller2+1;
result=0;
};};
if(x>xmindste) {
if(result>maks) {
maks=result;sted=x;
};};
};
makeLine((blackteller1+(whiteteller1/2)), linjeystart,
(blackteller1+whiteteller1+blackteller2+(whiteteller2/2)), linjeyslut);
length = (whiteteller2/2) + (whiteteller1/2) + blackteller2;
midpoint = blackteller1 + (length/2);
makeLine(midpoint, linjeystart, midpoint, 0);
whiteteller3=0;
blackteller3=0;
for(y=linjeystart; y>=1; y--) {
resulty=getPixel(midpoint,y);
if(whiteteller3<=0) {
if(resulty>254) {
blackteller3=blackteller3+1;
};};

Page III
if(resulty<1) {
whiteteller3=whiteteller3+1;
};};
height = (whiteteller3/2) + blackteller3;
setResult(k, Teller, navn);
setResult(k+1, Teller, length);
setResult(k+2, Teller, height);
selectImage(input);
run("Close");
Teller=Teller+1;
};
//-----------------------------Writing and Saving of Results ------------------//
gemnavn = base+"resultat.txt";
updateResults();
saveAs("Results",gemnavn);
setBatchMode(false);
beep();
print("DONE! :)");
//-----------------------------Information in the log-window-----------------------------//
print("\n")
print("Please note that in the results window, column:")
print("1 = The image number")
print("2 = The length of the test element")
print("3 = The height of the test element af half the length")

Page IV
Appendix III: Python (3.6) IDLE script

from tkinter import Tk, Label, Button, ttk, LEFT, RIGHT, BOTTOM, TOP
from tkinter import *
import time, threading, os, errno

class GUI:
experiment = 0
MAX=60*24*7
path = '/home/pi/Webcam/' + time.strftime("%d-%m-%Y")

def start(self):
self.k = 0
self.pictureCount = 0
#self.start_button["text"] = "Reset"
self.start_button.destroy()
self.close_button.pack(side=LEFT)
if os.path.exists(self.path):
os.makedirs(self.path)
else:
while os.path.exists(self.path + str(self.experiment)):
self.experiment += 1
os.makedirs(self.path + str(self.experiment))

while self.k <= self.MAX:


self.progress_var.set(self.k)
self.k += 1
time.sleep(60)
root.update_idletasks()
if self.pictureCount == 5:
self.pictureCount = 0
os.system('fswebcam -r 2240x1680 --no-banner -S 3 --jpeg 50 --save ' + 'IMG_' + str(self.k)
+ '.jpg')
self.pictureCount += 1

def __init__(self, master):


self.master = master
master.title("Experiment")

self.label = Label(master, text="This program was developed to capture images of test elements
doing experiments, \n in order to evaluate the relaxation process.")
self.label.pack(side=TOP)

self.t1 = threading.Thread(target=self.start)
self.start_button = Button(text="Start", command=self.t1.start)
self.start_button.pack(side=LEFT)

Page V
self.close_button = Button(master, text="Stop", command=master.quit)
#self.close_button.pack(side=LEFT)

self.progress_var = DoubleVar()
self.progressbar = ttk.Progressbar(root, variable=self.progress_var, maximum=self.MAX)
self.progressbar.pack(fill=X, expand=1, side=LEFT)

self.photo = PhotoImage(file=self.pathlego)
self.photo_label = Label(image=self.photo)
self.photo_label.image = self.photo
self.photo_label.pack(side=RIGHT)

root = Tk()
root.geometry('{}x{}'.format(700, 350))
my_gui = GUI(root)
root.mainloop()

Page VI

You might also like