You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1230 lines
1.7 MiB

4 years ago
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<meta name="description" content="IoT Διαδίκτυο των Αντικειμένων">
<meta name="keywords" content="iot, imu, AHRS">
<meta name="author" content="Apostolos rootApostolos@swarmlab.io">
<title>Sensor node/mote</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="article toc2 toc-right">
<div id="header">
<h1>Sensor node/mote</h1>
<div class="details">
<span id="author" class="author">Apostolos rootApostolos@swarmlab.io</span><br>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Πίνακας περιεχομένων</div>
<ul class="sectlevel1">
<li><a href="#_sensor_node">1. Sensor node</a></li>
<li><a href="#_sensor_node_example_using_imu_sensors">2. Sensor node example using IMU sensors</a>
<ul class="sectlevel2">
<li><a href="#_imu">2.1. IMU</a></li>
<li><a href="#_connecting_it_up">2.2. Connecting It Up</a></li>
<li><a href="#_downloading_libraries">2.3. Downloading Libraries</a></li>
<li><a href="#_example_sketch">2.4. Example Sketch</a>
<ul class="sectlevel3">
<li><a href="#_pitch_roll">2.4.1. pitch &amp; roll</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_a_real_ahrs_system">3. A real AHRS system</a>
<ul class="sectlevel2">
<li><a href="#_loading_the_ahrs_sketch">3.1. Loading the AHRS Sketch</a></li>
<li><a href="#_compile">3.2. compile</a></li>
<li><a href="#_using_ahrs_data">3.3. Using AHRS Data</a></li>
<li><a href="#_savesending_the_data">3.4. Save/Sending the Data</a></li>
<li><a href="#_visualizing_data">3.5. Visualizing Data</a>
<ul class="sectlevel3">
<li><a href="#_the_tools_languages_and_frameworks">3.5.1. The tools, languages, and frameworks</a>
<ul class="sectlevel4">
<li><a href="#_three_js">Three.js</a></li>
<li><a href="#_processing">Processing</a></li>
<li><a href="#_p5_js">p5.js</a></li>
<li><a href="#_processing_py">Processing.py</a></li>
</ul>
</li>
<li><a href="#_requirements">3.5.2. Requirements</a></li>
<li><a href="#_write_the_processing_sketch">3.5.3. Write the Processing Sketch</a></li>
<li><a href="#_run_it">3.5.4. Run it</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_source_code">Appendix A: Source Code</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><br></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_sensor_node">1. Sensor node</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A <strong>sensor node</strong>, also known as a <strong>mote</strong>, is a node in a sensor network that is capable of performing some processing, gathering sensory information and communicating with other connected nodes in the network.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>A mote is a node but a node is not always a mote</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<div class="title">The typical architecture of the sensor node</div>
<p><span class="image"><img src="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAcQBxAAD/7R8CUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAACAcAVoAAxslRxwCAAACYQgcAlAADE1hbmlzaCBLdW1hcjhCSU0EJQAAAAAAEBcHiCAiRQDpRDjaMH2mzT44QklNBDoAAAAAAOUAAAAQAAAAAQAAAAAAC3ByaW50T3V0cHV0AAAABQAAAABQc3RTYm9vbAEAAAAASW50ZWVudW0AAAAASW50ZQAAAABDbHJtAAAAD3ByaW50U2l4dGVlbkJpdGJvb2wAAAAAC3ByaW50ZXJOYW1lVEVYVAAAAAEAAAAAAA9wcmludFByb29mU2V0dXBPYmpjAAAADABQAHIAbwBvAGYAIABTAGUAdAB1AHAAAAAAAApwcm9vZlNldHVwAAAAAQAAAABCbHRuZW51bQAAAAxidWlsdGluUHJvb2YAAAAJcHJvb2ZDTVlLADhCSU0EOwAAAAACLQAAABAAAAABAAAAAAAScHJpbnRPdXRwdXRPcHRpb25zAAAAFwAAAABDcHRuYm9vbAAAAAAAQ2xicmJvb2wAAAAAAFJnc01ib29sAAAAAABDcm5DYm9vbAAAAAAAQ250Q2Jvb2wAAAAAAExibHNib29sAAAAAABOZ3R2Ym9vbAAAAAAARW1sRGJvb2wAAAAAAEludHJib29sAAAAAABCY2tnT2JqYwAAAAEAAAAAAABSR0JDAAAAAwAAAABSZCAgZG91YkBv4AAAAAAAAAAAAEdybiBkb3ViQG/gAAAAAAAAAAAAQmwgIGRvdWJAb+AAAAAAAAAAAABCcmRUVW50RiNSbHQAAAAAAAAAAAAAAABCbGQgVW50RiNSbHQAAAAAAAAAAAAAAABSc2x0VW50RiNQeGxAf0AAAAAAAAAAAAp2ZWN0b3JEYXRhYm9vbAEAAAAAUGdQc2VudW0AAAAAUGdQcwAAAABQZ1BDAAAAAExlZnRVbnRGI1JsdAAAAAAAAAAAAAAAAFRvcCBVbnRGI1JsdAAAAAAAAAAAAAAAAFNjbCBVbnRGI1ByY0BZAAAAAAAAAAAAEGNyb3BXaGVuUHJpbnRpbmdib29sAAAAAA5jcm9wUmVjdEJvdHRvbWxvbmcAAAAAAAAADGNyb3BSZWN0TGVmdGxvbmcAAAAAAAAADWNyb3BSZWN0UmlnaHRsb25nAAAAAAAAAAtjcm9wUmVjdFRvcGxvbmcAAAAAADhCSU0D7QAAAAAAEABxAAAAAQACAHEAAAABAAI4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAAAAAABAAAAB44QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA10AAAAGAAAAAAAAAAAAAAafAAAH4AAAABQAZgAwADEALQAxADYALQA5ADcAOAAwADEAMgA4ADEAMQAxADUAMwA2AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAfgAAAGnwAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAGnwAAAABSZ2h0bG9uZwAAB+AAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAABp8AAAAAUmdodGxvbmcAAAfgAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAjhCSU0EDAAAAAAV6wAAAAEAAACgAAAAhwAAAeAAAP0gAAAVzwAYAAH/2P/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAhwCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A6nonROjdQ6Ng9R6jg4+dnZ2PVk5WVk1MtsfZaxtln6Sxp21tnZTSz9FRV+iq9iu/82Pqx/5TYH/sNV/5BL6sf+Jjo3/hDG/89MWkpAxEm3N/5sfVj/ymwP8A2Gq/8gl/zY+rH/lNgf8AsNV/5BaSSSLLm/8ANj6sf+U2B/7DVf8AkEv+bH1Y/wDKbA/9hqv/ACC0kklWXN/5sfVj/wApsD/2Gq/8gkPqv9WTx0bAP/oNV/5BaYEkD8i5rAxaOv4dXU+rudmNuh37Oc4jExntLt2JbiN2facvHd+jybOoet+mZ+iporTZSEQkea2UP8W+I81309HF
</div>
<div class="paragraph">
<p>The main components of a sensor node are a <strong>microcontroller</strong>, <strong>transceiver/Communication Module</strong>, <strong>memory</strong>, <strong>power source</strong> and one or more <strong>sensors.</strong></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_sensor_node_example_using_imu_sensors">2. Sensor node example using IMU sensors</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A basic IMU (Intertial Measurement Unit) generally provides raw sensor data, whereas an AHRS takes this data one step further, converting it into heading or direction in degrees, converting the raw altitude data into standard units like feet or meters, etc.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">AHRS (Attitude and Heading Reference System)</div>
<div class="paragraph">
<p>An attitude and heading reference system (AHRS) consists of sensors on three axes that provide attitude information for aircraft, including roll, pitch and yaw. These are sometimes referred to as MARG (Magnetic, Angular Rate, and Gravity) sensors and consist of either solid-state or microelectromechanical systems (MEMS) gyroscopes, accelerometers and magnetometers. They are designed to replace traditional mechanical gyroscopic flight instruments.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="_imu">2.1. IMU</h3>
<div class="paragraph">
<p><span class="image"><img src="data:image/jpg;base64,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
</div>
<div class="paragraph">
<p>Adafruit&#8217;s 10DOF <a href="https://en.wikipedia.org/wiki/Degrees_of_freedom">(10 Degrees of Freedom)</a> breakout board allows you to capture ten distinct types of motion or orientation related data.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>LSM303DLHC - a 3-axis accelerometer (up to +/-16g) and a 3-axis magnetometer (up to +/-8.1 gauss) on a single die</p>
</li>
<li>
<p>L3GD20 - a 3-axis gyroscope (up to +/-2000 dps)</p>
</li>
<li>
<p>BMP180 - A barometric pressure sensor (300..1100 hPa) that can be used to calculate altitude, with an additional on-board temperature sensor</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_connecting_it_up">2.2. Connecting It Up</h3>
<div class="paragraph">
<p>Basic Setup</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Connect the <strong>SCL</strong> pin on the breakout to the <strong>SCL</strong> pin on your Arduino. On an UNO &amp; '328 based Arduino, this is also known as <strong>A5</strong></p>
</li>
<li>
<p>Connect the <strong>SDA</strong> pin on the breakout to the <strong>SDA</strong> pin on your Arduino. On an UNO &amp; '328 based Arduino, this is also known as <strong>A4</strong></p>
</li>
<li>
<p>Connect the <strong>VIN</strong> pin on the breakout to <strong>3.3V</strong> or <strong>5V</strong> on your Uno (5V is preferred but if you have a 3V logic Arduino 3V is best)</p>
</li>
<li>
<p>Connect the <strong>GND</strong> pin on the breakout to the <strong>GND</strong> pin on your Uno</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>That&#8217;s it! With those four wires, you should be able to talk to any of the I2C chips on the board and run any of the example sketches.</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/jpg;base64,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
</div>
<div class="paragraph">
<p>Advanced Setup</p>
</div>
<div class="ulist">
<ul>
<li>
<p><strong>GINT</strong> - The interrupt pin on the L3GD20 gyroscope</p>
</li>
<li>
<p><strong>GRDY</strong> - The 'ready' pin on the L3GD20 gyroscope</p>
</li>
<li>
<p><strong>LIN1</strong> - Interrupt pin 1 on the LSM303DLHC</p>
</li>
<li>
<p><strong>LIN2</strong> - Interrupt pin 2 on the LSM303DLHC</p>
</li>
<li>
<p><strong>LRDY</strong> - The ready pin on the LSM303DLHC</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>These pins are all outputs from the 10-DOF breakout and are all 3.3V logic</p>
</div>
</div>
<div class="sect2">
<h3 id="_downloading_libraries">2.3. Downloading Libraries</h3>
<div class="paragraph">
<p>Place the files in the Arduino Sketch Folder '/libraries' sub-folder. You should end up with a structure like this:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>arduinosketches/libraries/Adafruit_10DOF</p>
</li>
<li>
<p>arduinosketches/libraries/Adafruit_BMP085</p>
</li>
<li>
<p>arduinosketches/libraries/Adafruit_L3GD20_U</p>
</li>
<li>
<p>arduinosketches/libraries/Adafruit_LSM303DLHC</p>
</li>
<li>
<p>arduinosketches/libraries/Adafruit_Sensor</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Arduino libraries</div>
<div class="paragraph">
<p>Arduino libraries are a convenient way to share code such as device drivers or commonly used utility functions.
<a href="https://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use">How to install Arduino libraries</a></p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="_example_sketch">2.4. Example Sketch</h3>
<div class="sect3">
<h4 id="_pitch_roll">2.4.1. pitch &amp; roll</h4>
<div class="listingblock">
<div class="title">sketch pitchrollheading</div>
<div class="content">
<pre class="highlight"><code class="language-c" data-lang="c">sensors_event_t accel_event;
sensors_vec_t orientation;
/* Calculate pitch and roll from the raw accelerometer data */
accel.getEvent(&amp;accel_event);
if (dof.accelGetOrientation(&amp;accel_event, &amp;orientation))
{
/* 'orientation' should have valid .roll and .pitch fields */
Serial.print(F("Roll: "));
Serial.print(orientation.roll);
Serial.print(F("; "));
Serial.print(F("Pitch: "));
Serial.print(orientation.pitch);
Serial.print(F("; "));
}</code></pre>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="paragraph">
<p>Arguments</p>
</div>
<div class="ulist">
<ul>
<li>
<p>event: The <strong>sensors_event_t</strong> variable containing the data from the <strong>accelerometer</strong></p>
</li>
<li>
<p>orientation: The <strong>sensors_vec_t</strong> object that will have its <strong>.pitch</strong> and <strong>.roll</strong> fields populated</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Returns</p>
</div>
<div class="ulist">
<ul>
<li>
<p><strong>true</strong> if the operation was successful,</p>
</li>
<li>
<p><strong>false</strong> if there was an error</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,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
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_a_real_ahrs_system">3. A real AHRS system</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_loading_the_ahrs_sketch">3.1. Loading the AHRS Sketch</h3>
<div class="listingblock">
<div class="title">AHRS Sketch</div>
<div class="content">
<pre class="highlight"><code class="language-c" data-lang="c">#include &lt;Wire.h&gt;
#include &lt;Adafruit_Sensor.h&gt;
#include &lt;Adafruit_LSM303_U.h&gt;
#include &lt;Adafruit_BMP085_U.h&gt;
#include &lt;Adafruit_Simple_AHRS.h&gt;
// Create sensor instances.
Adafruit_LSM303_Accel_Unified accel(30301);
Adafruit_LSM303_Mag_Unified mag(30302);
Adafruit_BMP085_Unified bmp(18001);
// Create simple AHRS algorithm using the above sensors.
Adafruit_Simple_AHRS ahrs(&amp;accel, &amp;mag);
// Update this with the correct SLP for accurate altitude measurements
float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
void setup()
{
Serial.begin(115200);
Serial.println(F("Adafruit 10 DOF Board AHRS Example")); Serial.println("");
// Initialize the sensors.
accel.begin();
mag.begin();
bmp.begin();
}
void loop(void)
{
sensors_vec_t orientation;
// Use the simple AHRS function to get the current orientation.
if (ahrs.getOrientation(&amp;orientation))
{
/* 'orientation' should have valid .roll and .pitch fields */
Serial.print(F("Orientation: "));
Serial.print(orientation.roll);
Serial.print(F(" "));
Serial.print(orientation.pitch);
Serial.print(F(" "));
Serial.print(orientation.heading);
Serial.println(F(""));
}
// Calculate the altitude using the barometric pressure sensor
sensors_event_t bmp_event;
bmp.getEvent(&amp;bmp_event);
if (bmp_event.pressure)
{
/* Get ambient temperature in C */
float temperature;
bmp.getTemperature(&amp;temperature);
/* Convert atmospheric pressure, SLP and temp to altitude */
Serial.print(F("Alt: "));
Serial.print(bmp.pressureToAltitude(seaLevelPressure,
bmp_event.pressure,
temperature));
Serial.println(F(""));
/* Display the temperature */
Serial.print(F("Temp: "));
Serial.print(temperature);
Serial.println(F(""));
}
delay(500);
}</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_compile">3.2. compile</h3>
<div class="ulist">
<ul>
<li>
<p>Compile the sketch,</p>
</li>
<li>
<p>open up the Serial Monitor (Tools &gt; Serial Monitor),</p>
</li>
<li>
<p>set the baud rate to 115200</p>
</li>
</ul>
</div>
<div class="paragraph">
<div class="title">output</div>
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="paragraph">
<p>This raw data shows the main orientation data, consisting of 'roll', 'pitch' and 'heading' (or 'yaw) in degrees, followed by the current altitude and temperature</p>
</div>
</div>
<div class="sect2">
<h3 id="_using_ahrs_data">3.3. Using AHRS Data</h3>
<div class="paragraph">
<p>The AHRS sketchs reads raw data from the board&#8217;s accelerometer/magnetometer and converts the raw data into easy to understand <strong>Euler angles.</strong></p>
</div>
<div class="paragraph">
<p>In this case, we can see that the <strong>roll is about 18°</strong>, the <strong>pitch is about 78°</strong> and the <strong>heading or yaw is about 32°</strong>, and the sketch will keep updating itself with the latest values at whatever speed we&#8217;ve set in the sketch.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<div class="title">Euler angles, one of the possible ways to describe an orientation</div>
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="paragraph">
<p>The first attempt to represent an orientation is attributed to Leonhard Euler. He imagined three reference frames that could rotate one around the other, and realized that by starting with a fixed reference frame and performing three rotations, he could get any other reference frame in the space (using two rotations to fix the vertical axis and other to fix the other two axes). The values of these three rotations are called Euler angles.</p>
</div>
<div class="paragraph">
<div class="title">Tait–Bryan angles, another way to describe orientation</div>
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="paragraph">
<p>These are three angles, also known as yaw, pitch and roll, Navigation angles and Cardan angles. Mathematically they constitute a set of six possibilities inside the twelve possible sets of Euler angles, the ordering being the one best used for describing the orientation of a vehicle such as an airplane. In aerospace engineering they are usually referred to as Euler angles.</p>
</div>
<div class="paragraph">
<p><a href="https://en.wikipedia.org/wiki/Rigid_body_dynamics">More Info: Rigid_body_dynamics</a></p>
</div>
<div class="paragraph">
<p><a href="https://en.wikipedia.org/wiki/Euler_angles">More Info: Eulers angles</a></p>
</div>
<div class="paragraph">
<p><a href="https://en.wikipedia.org/wiki/Leonhard_Euler">Leonhard Euler</a></p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="_savesending_the_data">3.4. Save/Sending the Data</h3>
<div class="paragraph">
<p>This raw data can then be sent over the network to the central application.</p>
</div>
<div class="paragraph">
<p>This will be the subject of another Lab Lesson</p>
</div>
</div>
<div class="sect2">
<h3 id="_visualizing_data">3.5. Visualizing Data</h3>
<div class="sect3">
<h4 id="_the_tools_languages_and_frameworks">3.5.1. The tools, languages, and frameworks</h4>
<div class="sect4">
<h5 id="_three_js">Three.js</h5>
<div class="paragraph">
<p><strong>Three.js</strong> is a cross-browser JavaScript library and Application Programming Interface (API) used to create and display animated 3D computer graphics in a web browser. Three.js uses WebGL.</p>
</div>
</div>
<div class="sect4">
<h5 id="_processing">Processing</h5>
<div class="paragraph">
<p><strong>Processing</strong> is an open-source graphical library and integrated development environment (IDE) built for the electronic arts, new media art, and visual design communities with the purpose of teaching non-programmers the fundamentals of computer programming in a visual context.</p>
</div>
<div class="paragraph">
<p>Processing uses the Java language, with additional simplifications such as additional classes and aliased mathematical functions and operations. It also provides a graphical user interface for simplifying the compilation and execution stage.</p>
</div>
<div class="paragraph">
<p>The Processing language and IDE were the precursor to other projects including Arduino, Wiring and p5.js.</p>
</div>
</div>
<div class="sect4">
<h5 id="_p5_js">p5.js</h5>
<div class="paragraph">
<p>In 2013, Lauren McCarthy created p5.js, a native JavaScript alternative to Processing.js that has the official support of the Processing Foundation.</p>
</div>
</div>
<div class="sect4">
<h5 id="_processing_py">Processing.py</h5>
<div class="paragraph">
<p>Python Mode for Processing, or Processing.py is a Python interface to the underlying Java toolkit. It was chiefly developed by Jonathan Feinberg starting in 2010, with contributions from James Gilles and Ben Alkov</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p><strong>ThreeJS</strong> is a wrapper around the browser’s native WebGL API. It’s the de facto standard 3D library — there are others, like BabylonJS, but Three is just miles more popular. The native browser APIs are… painful to work with, you can think of ThreeJS kinda like a jQuery for in-browser 3D graphics. Doesn’t give you anything that’s not already there, it just wraps it all into a user-friendly API</p>
</div>
<div class="paragraph">
<p><strong>P5</strong> is not a 3d graphics library, it’s an API for doing creative coding: things like procedural generation, natural simulations etc. It has some 3D features because it wraps the native WebGL API, but that’s not it’s core purpose. It is a artistic and teaching tool — it is occasionally used in production outside of artistic audio/visual stuff, but not often. It’s basically the JS version of Processing.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p><a href="https://www.slideshare.net/victorporof/processingjs-vs-threejs">More: Processing.js vs. three.js</a></p>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_requirements">3.5.2. Requirements</h4>
<div class="paragraph">
<p>To visualize the data, we&#8217;ve put together a basic <strong>Processing</strong> sketch that loads a 3D model and renders it using the data generated by the AHRS sketch.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://processing.org/">Processing</a></p>
</li>
<li>
<p><a href="https://code.google.com/archive/p/saitoobjloader/#Download">OBJ Loader library for Processing</a></p>
</li>
<li>
<p><a href="http://www.lagers.org.uk/g4p/">G4P GUI library for Processing</a></p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>The OBJ library is required to load 3D models. It isn&#8217;t strictly necessary and you could also render a boring cube in Processing, but why play with cubes when you have rabbits?!</p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="_write_the_processing_sketch">3.5.3. Write the Processing Sketch</h4>
<div class="listingblock">
<div class="title">Processing Sketch</div>
<div class="content">
<pre class="highlight"><code class="language-c" data-lang="c">import processing.serial.*;
import java.awt.datatransfer.*;
import java.awt.Toolkit;
import processing.opengl.*;
import saito.objloader.*;
import g4p_controls.*;
float roll = 0.0F;
float pitch = 0.0F;
float yaw = 0.0F;
float temp = 0.0F;
float alt = 0.0F;
OBJModel model;
// Serial port state.
Serial port;
String buffer = "";
final String serialConfigFile = "serialconfig.txt";
boolean printSerial = false;
// UI controls.
GPanel configPanel;
GDropList serialList;
GLabel serialLabel;
GCheckbox printSerialCheckbox;
void setup()
{
size(400, 500, OPENGL);
frameRate(30);
model = new OBJModel(this);
model.load("bunny.obj");
model.scale(20);
// Serial port setup.
// Grab list of serial ports and choose one that was persisted earlier or default to the first port.
int selectedPort = 0;
String[] availablePorts = Serial.list();
if (availablePorts == null) {
println("ERROR: No serial ports available!");
exit();
}
String[] serialConfig = loadStrings(serialConfigFile);
if (serialConfig != null &amp;&amp; serialConfig.length &gt; 0) {
String savedPort = serialConfig[0];
// Check if saved port is in available ports.
for (int i = 0; i &lt; availablePorts.length; ++i) {
if (availablePorts[i].equals(savedPort)) {
selectedPort = i;
}
}
}
// Build serial config UI.
configPanel = new GPanel(this, 10, 10, width-20, 90, "Configuration (click to hide/show)");
serialLabel = new GLabel(this, 0, 20, 80, 25, "Serial port:");
configPanel.addControl(serialLabel);
serialList = new GDropList(this, 90, 20, 200, 200, 6);
serialList.setItems(availablePorts, selectedPort);
configPanel.addControl(serialList);
printSerialCheckbox = new GCheckbox(this, 5, 50, 200, 20, "Print serial data");
printSerialCheckbox.setSelected(printSerial);
configPanel.addControl(printSerialCheckbox);
// Set serial port.
setSerialPort(serialList.getSelectedText());
}
void draw()
{
background(0,0, 0);
// Set a new co-ordinate space
pushMatrix();
// Simple 3 point lighting for dramatic effect.
// Slightly red light in upper right, slightly blue light in upper left, and white light from behind.
pointLight(255, 200, 200, 400, 400, 500);
pointLight(200, 200, 255, -400, 400, 500);
pointLight(255, 255, 255, 0, 0, -500);
// Displace objects from 0,0
translate(200, 350, 0);
// Rotate shapes around the X/Y/Z axis (values in radians, 0..Pi*2)
rotateX(radians(roll));
rotateZ(radians(pitch));
rotateY(radians(yaw));
pushMatrix();
noStroke();
model.draw();
popMatrix();
popMatrix();
//print("draw");
}
void serialEvent(Serial p)
{
String incoming = p.readString();
if (printSerial) {
println(incoming);
}
if ((incoming.length() &gt; 8))
{
String[] list = split(incoming, " ");
if ( (list.length &gt; 0) &amp;&amp; (list[0].equals("Orientation:")) )
{
roll = float(list[1]);
pitch = float(list[2]);
yaw = float(list[3]);
buffer = incoming;
}
if ( (list.length &gt; 0) &amp;&amp; (list[0].equals("Alt:")) )
{
alt = float(list[1]);
buffer = incoming;
}
if ( (list.length &gt; 0) &amp;&amp; (list[0].equals("Temp:")) )
{
temp = float(list[1]);
buffer = incoming;
}
}
}
// Set serial port to desired value.
void setSerialPort(String portName) {
// Close the port if it's currently open.
if (port != null) {
port.stop();
}
try {
// Open port.
port = new Serial(this, portName, 115200);
port.bufferUntil('\n');
// Persist port in configuration.
saveStrings(serialConfigFile, new String[] { portName });
}
catch (RuntimeException ex) {
// Swallow error if port can't be opened, keep port closed.
port = null;
}
}
// UI event handlers
void handlePanelEvents(GPanel panel, GEvent event) {
// Panel events, do nothing.
}
void handleDropListEvents(GDropList list, GEvent event) {
// Drop list events, check if new serial port is selected.
if (list == serialList) {
setSerialPort(serialList.getSelectedText());
}
}
void handleToggleControlEvents(GToggleControl checkbox, GEvent event) {
// Checkbox toggle events, check if print events is toggled.
if (checkbox == printSerialCheckbox) {
printSerial = printSerialCheckbox.isSelected();
}
}</code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_run_it">3.5.4. Run it</h4>
<div class="ulist">
<ul>
<li>
<p>Run the AHRS Sketch on the Uno</p>
</li>
<li>
<p>Run the Processing Sketch on the Processing</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>Make sure that the appropriate AHRS example sketch is running on the Uno (as described), and that the Serial Monitor is closed.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="videoblock">
<div class="title">And Voila!</div>
<div class="content">
<video src="Rabbit10DOF.mp4" controls>
Your browser does not support the video tag.
</video>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Cockpit Simulator</div>
<div class="paragraph">
<p>With small changes we can make this too</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,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
</div>
<div class="paragraph">
<p><span class="image"><img src="data:image/png;base64,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
<span class="image"><img src="data:image/png;base64,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
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_source_code">Appendix A: Source Code</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/adafruit/Adafruit_AHRS" class="bare">https://github.com/adafruit/Adafruit_AHRS</a></p>
</li>
<li>
<p><a href="https://sourceforge.net/projects/g4p/files/?source=navbar" class="bare">https://sourceforge.net/projects/g4p/files/?source=navbar</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p><br>
<br>
</p>
</div>
<hr>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-10-28 20:18:35 UTC
</div>
</div>
</body>
</html>