From 459a44ca0247324d50b5ca9298c611627d2303c7 Mon Sep 17 00:00:00 2001
From: Antonio Ospite <ao2@ao2.it>
Date: Wed, 30 May 2018 16:24:43 +0200
Subject: [PATCH 1/1] Initial import

---
 Fritzing/Hall-Effect-Sensor.fzz                    | Bin 0 -> 29686 bytes
 ...US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp | 101 +++
 Fritzing/svg/US1881_PCB.svg                        | 189 ++++++
 Fritzing/svg/US1881_breadboard.svg                 | 122 ++++
 Fritzing/svg/US1881_schematic.svg                  | 134 ++++
 Tetramag-ring-magnet.svg                           | 751 +++++++++++++++++++++
 rotary_encoder/Makefile                            |   6 +
 rotary_encoder/rotary_encoder.ino                  |  75 ++
 show_quadrature_states/Makefile                    |   6 +
 show_quadrature_states/show_quadrature_states.ino  |  44 ++
 10 files changed, 1428 insertions(+)
 create mode 100644 Fritzing/Hall-Effect-Sensor.fzz
 create mode 100644 Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp
 create mode 100644 Fritzing/svg/US1881_PCB.svg
 create mode 100644 Fritzing/svg/US1881_breadboard.svg
 create mode 100644 Fritzing/svg/US1881_schematic.svg
 create mode 100644 Tetramag-ring-magnet.svg
 create mode 100644 rotary_encoder/Makefile
 create mode 100644 rotary_encoder/rotary_encoder.ino
 create mode 100644 show_quadrature_states/Makefile
 create mode 100644 show_quadrature_states/show_quadrature_states.ino

diff --git a/Fritzing/Hall-Effect-Sensor.fzz b/Fritzing/Hall-Effect-Sensor.fzz
new file mode 100644
index 0000000000000000000000000000000000000000..57ba1d3e4ea245d504d65f6167953407985a3f3b
GIT binary patch
literal 29686
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
ZEnW$Qdg;0V14DXw&b?%405*TU`adAN;}`${

literal 0
HcmV?d00001

diff --git a/Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp b/Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp
new file mode 100644
index 0000000..b68a8f3
--- /dev/null
+++ b/Fritzing/parts/US1881UA_3394d811b1e61364d06f034ffbe599db_6.fzp
@@ -0,0 +1,101 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<module moduleId="US1881UA_3394d811b1e61364d06f034ffbe599db_6" referenceFile="mystery_part_sip_3_100mil.fzp">
+ <version>4</version>
+ <author>Antonio Ospite</author>
+ <title>US1881 Hall effect sensor</title>
+ <label>U</label>
+ <date>mar mag 29 2018</date>
+ <tags>
+  <tag>sensor</tag>
+ </tags>
+ <properties>
+  <property name="variant">Variant 1</property>
+  <property name="family">Sensor</property>
+  <property name="chip label">US1881</property>
+  <property name="part number"></property>
+  <property name="pin spacing">100mil</property>
+  <property name="hole size"></property>
+  <property name="editable pin labels">false</property>
+  <property name="package">THT</property>
+  <property name="layer"></property>
+  <property name="pins">3</property>
+  <property name="layout">Single Row</property>
+ </properties>
+ <taxonomy>part.mystery.magical.3.pins</taxonomy>
+ <description>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+p, li { white-space: pre-wrap; }
+&lt;/style>&lt;/head>&lt;body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;br />&lt;/p>&lt;/body>&lt;/html></description>
+ <views>
+  <iconView>
+   <layers image="icon/US1881UA_2d0ad8960d79f0a6ab217e6b43398fc3_2_icon.svg">
+    <layer layerId="icon"/>
+   </layers>
+  </iconView>
+  <breadboardView>
+   <layers image="breadboard/US1881UA_2d0ad8960d79f0a6ab217e6b43398fc3_2_breadboard.svg">
+    <layer layerId="breadboard"/>
+   </layers>
+  </breadboardView>
+  <schematicView>
+   <layers image="schematic/US1881UA_2d0ad8960d79f0a6ab217e6b43398fc3_2_schematic.svg">
+    <layer layerId="schematic"/>
+   </layers>
+  </schematicView>
+  <pcbView>
+   <layers image="pcb/US1881UA_2d0ad8960d79f0a6ab217e6b43398fc3_2_pcb.svg">
+    <layer layerId="silkscreen"/>
+    <layer layerId="copper0"/>
+    <layer layerId="copper1"/>
+   </layers>
+  </pcbView>
+ </views>
+ <connectors>
+  <connector id="connector0" type="male" name="VDD">
+   <description>Supply Voltage pin</description>
+   <views>
+    <breadboardView>
+     <p svgId="connector0pin" terminalId="connector0terminal" layer="breadboard"/>
+    </breadboardView>
+    <schematicView>
+     <p svgId="connector0pin" terminalId="connector0terminal" layer="schematic"/>
+    </schematicView>
+    <pcbView>
+     <p svgId="connector0pin" layer="copper0"/>
+     <p svgId="connector0pin" layer="copper1"/>
+    </pcbView>
+   </views>
+  </connector>
+  <connector id="connector1" type="male" name="GND">
+   <description>Ground pin</description>
+   <views>
+    <breadboardView>
+     <p svgId="connector1pin" terminalId="connector1terminal" layer="breadboard"/>
+    </breadboardView>
+    <schematicView>
+     <p svgId="connector1pin" terminalId="connector1terminal" layer="schematic"/>
+    </schematicView>
+    <pcbView>
+     <p svgId="connector1pin" layer="copper0"/>
+     <p svgId="connector1pin" layer="copper1"/>
+    </pcbView>
+   </views>
+  </connector>
+  <connector id="connector2" type="male" name="OUT">
+   <description>Output pin</description>
+   <views>
+    <breadboardView>
+     <p svgId="connector2pin" terminalId="connector2terminal" layer="breadboard"/>
+    </breadboardView>
+    <schematicView>
+     <p svgId="connector2pin" terminalId="connector2terminal" layer="schematic"/>
+    </schematicView>
+    <pcbView>
+     <p svgId="connector2pin" layer="copper0"/>
+     <p svgId="connector2pin" layer="copper1"/>
+    </pcbView>
+   </views>
+  </connector>
+ </connectors>
+</module>
diff --git a/Fritzing/svg/US1881_PCB.svg b/Fritzing/svg/US1881_PCB.svg
new file mode 100644
index 0000000..c293c75
--- /dev/null
+++ b/Fritzing/svg/US1881_PCB.svg
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Fritzing (http://www.fritzing.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.2"
+   x="0in"
+   y="0in"
+   width="4.0999999mm"
+   height="1.4548388mm"
+   viewBox="0 0 11.622047 4.1239525"
+   id="svg35"
+   sodipodi:docname="US1881_PCB.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata41">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs39" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="911"
+     id="namedview37"
+     showgrid="false"
+     inkscape:document-units="mm"
+     units="mm"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="57.843137"
+     inkscape:cx="5.4458838"
+     inkscape:cy="1.7908493"
+     inkscape:window-x="0"
+     inkscape:window-y="28"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg35"
+     inkscape:measure-start="-0.0518644,7.33017"
+     inkscape:measure-end="4.70237,2.69695" />
+  <g
+     id="g868"
+     transform="matrix(0,0.52070103,-0.52070103,0,12.184405,-0.56235713)">
+    <g
+       id="g7"
+       partID="854153460">
+      <g
+         id="copper0"
+         gorn="0.2.0">
+        <rect
+           width="4.1760001"
+           y="2.9519999"
+           x="2.9519999"
+           height="4.1760001"
+           id="square"
+           gorn="0.2.0.0"
+           style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+        <circle
+           cy="5.04"
+           cx="5.04"
+           id="connector0pin"
+           gorn="0.2.0.1"
+           r="2.0880001"
+           style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+        <circle
+           cy="12.24"
+           cx="5.04"
+           id="connector1pin"
+           gorn="0.2.0.2"
+           r="2.0880001"
+           style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+        <circle
+           cy="19.440001"
+           cx="5.04"
+           id="connector2pin"
+           gorn="0.2.0.3"
+           r="2.0880001"
+           style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+      </g>
+    </g>
+    <g
+       id="g20"
+       partID="854153461">
+      <g
+         id="copper1"
+         gorn="0.2">
+        <g
+           id="g17"
+           gorn="0.2.0">
+          <rect
+             width="4.1760001"
+             y="2.9519999"
+             x="2.9519999"
+             height="4.1760001"
+             id="rect9"
+             gorn="0.2.0.0"
+             style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+          <circle
+             cy="5.04"
+             cx="5.04"
+             id="circle11"
+             gorn="0.2.0.1"
+             r="2.0880001"
+             style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+          <circle
+             cy="12.24"
+             cx="5.04"
+             id="circle13"
+             gorn="0.2.0.2"
+             r="2.0880001"
+             style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+          <circle
+             cy="19.440001"
+             cx="5.04"
+             id="circle15"
+             gorn="0.2.0.3"
+             r="2.0880001"
+             style="fill:none;stroke:#ffbf00;stroke-width:1.44000006" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="g33"
+       partID="854153462">
+      <g
+         id="silkscreen"
+         gorn="0.1">
+        <line
+           id="line22"
+           x2="1.4400001"
+           x1="1.4400001"
+           y2="23.040001"
+           y1="1.4400001"
+           style="stroke:#ffffff;stroke-width:0.72000003" />
+        <line
+           id="line24"
+           x2="8.6400003"
+           x1="1.4400001"
+           y2="23.040001"
+           y1="23.040001"
+           style="stroke:#ffffff;stroke-width:0.72000003" />
+        <line
+           id="line26"
+           x2="8.6400003"
+           x1="8.6400003"
+           y2="1.4400001"
+           y1="23.040001"
+           style="stroke:#ffffff;stroke-width:0.72000003" />
+        <line
+           id="line28"
+           x2="1.4400001"
+           x1="8.6400003"
+           y2="1.4400001"
+           y1="1.4400001"
+           style="stroke:#ffffff;stroke-width:0.72000003" />
+        <line
+           id="line30"
+           x2="3.96"
+           x1="1.4400001"
+           y2="1.4400001"
+           y1="3.96"
+           style="stroke:#ffffff;stroke-width:0.36000001" />
+        <!-- 120 -->
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/Fritzing/svg/US1881_breadboard.svg b/Fritzing/svg/US1881_breadboard.svg
new file mode 100644
index 0000000..6b4c82c
--- /dev/null
+++ b/Fritzing/svg/US1881_breadboard.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Fritzing (http://www.fritzing.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="1.5mm"
+   viewBox="0 0 161.41732 59.055114"
+   x="0in"
+   y="0in"
+   version="1.2"
+   width="4.0999999mm"
+   id="svg18"
+   sodipodi:docname="US1881_breadboard.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata24">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="911"
+     id="namedview20"
+     showgrid="false"
+     inkscape:document-units="mm"
+     units="mm"
+     inkscape:zoom="22.627417"
+     inkscape:cx="6.3086667"
+     inkscape:cy="0.78553392"
+     inkscape:window-x="0"
+     inkscape:window-y="28"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg18"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:measure-start="11.4905,5.61266"
+     inkscape:measure-end="10.3856,9.23658"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <sodipodi:guide
+       position="5e-06,29.527545"
+       orientation="0.99862953,0.052335956"
+       id="guide861"
+       inkscape:locked="false"
+       inkscape:label=""
+       inkscape:color="rgb(0,0,255)" />
+  </sodipodi:namedview>
+  <desc
+     id="desc2">
+    <referenceFile>mystery_part_3_sip_100mil_bread.svg</referenceFile>
+  </desc>
+  <g
+     id="g827"
+     transform="translate(-19.836863,-77.011161)">
+    <g
+       transform="translate(0,66.94941)"
+       id="g858">
+      <path
+         sodipodi:nodetypes="ccccc"
+         inkscape:connector-curvature="0"
+         id="upper"
+         d="M 49.309815,10.061751 H 151.68209 l 29.57209,29.527558 H 19.836863 Z"
+         style="fill:#000000;stroke-width:0" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         inkscape:connector-curvature="0"
+         id="upper-8"
+         d="M 19.836868,39.58931 H 181.25418 l -1.54622,29.527557 H 21.448114 Z"
+         style="fill:#000000;stroke-width:0" />
+    </g>
+    <g
+       transform="translate(43.065209,-64.131415)"
+       id="g889">
+      <rect
+         style="fill:#8c8c8c;stroke:none;stroke-width:0"
+         width="14.960629"
+         y="170.67014"
+         id="connector0terminal"
+         x="0"
+         height="14.960629" />
+      <rect
+         style="fill:#8c8c8c;stroke:none;stroke-width:0"
+         width="14.960629"
+         y="170.67014"
+         id="connector0terminal-3"
+         x="50"
+         height="14.960629" />
+      <rect
+         style="fill:#8c8c8c;stroke:none;stroke-width:0"
+         width="14.960629"
+         y="170.67014"
+         id="connector0terminal-0"
+         x="100"
+         height="14.960629" />
+    </g>
+  </g>
+</svg>
diff --git a/Fritzing/svg/US1881_schematic.svg b/Fritzing/svg/US1881_schematic.svg
new file mode 100644
index 0000000..74ed33e
--- /dev/null
+++ b/Fritzing/svg/US1881_schematic.svg
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Fritzing (http://www.fritzing.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.2"
+   x="0in"
+   y="0in"
+   width="0.69846851in"
+   height="0.7853024in"
+   viewBox="0 0 50.289733 56.541772"
+   id="svg35"
+   sodipodi:docname="Untitled Sketch 3_schem.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata
+     id="metadata41">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs39" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="911"
+     id="namedview37"
+     showgrid="false"
+     showguides="false"
+     inkscape:zoom="6.1458332"
+     inkscape:cx="39.298787"
+     inkscape:cy="27.094184"
+     inkscape:window-x="0"
+     inkscape:window-y="28"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg35"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <rect
+     id="connector0pin"
+     x="-13.95"
+     height="0.69999802"
+     y="20.747057"
+     width="14.4"
+     connectorName="1"
+     style="fill:none;stroke-width:0" />
+  <rect
+     id="connector1pin"
+     x="-13.95"
+     height="0.69999802"
+     y="27.947058"
+     width="14.4"
+     connectorName="2"
+     style="fill:none;stroke-width:0" />
+  <rect
+     id="connector2pin"
+     x="-13.95"
+     height="0.69999802"
+     y="35.147057"
+     width="14.4"
+     connectorName="3"
+     style="fill:none;stroke-width:0" />
+  <g
+     id="g904"
+     transform="translate(-13.95,13.897057)">
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round"
+       id="rect2"
+       width="35.549999"
+       y="0.44999999"
+       height="27.9"
+       x="14.4" />
+    <text
+       style="font-size:3.5px;font-family:'Droid Sans';text-anchor:start;fill:#8c8c8c;stroke:none"
+       y="4.7270985"
+       x="21.174217"
+       id="label0"
+       font-size="3.5">VDD</text>
+    <line
+       style="fill:none;stroke:#787878;stroke-width:0.69999802;stroke-linecap:round;stroke-linejoin:round"
+       id="line12"
+       x2="63.884747"
+       x1="49.834743"
+       y2="14.4"
+       y1="14.4" />
+    <text
+       style="font-size:3.5px;font-family:'Droid Sans';text-anchor:start;fill:#8c8c8c;stroke:none"
+       y="26.540062"
+       x="21.64077"
+       id="label1"
+       font-size="3.5">VSS</text>
+    <line
+       style="fill:none;stroke:#787878;stroke-width:0.69999802;stroke-linecap:round;stroke-linejoin:round"
+       id="line5"
+       x2="24.974998"
+       x1="24.974998"
+       y2="42.28973"
+       y1="28.239729" />
+    <line
+       style="fill:none;stroke:#787878;stroke-width:0.69999802;stroke-linecap:round;stroke-linejoin:round"
+       id="line19"
+       x2="24.974998"
+       x1="24.974998"
+       y2="0.50792629"
+       y1="-13.542073" />
+    <text
+       style="font-size:3.5px;font-family:'Droid Sans';text-anchor:start;fill:#8c8c8c;stroke:none"
+       y="15.674047"
+       x="41.380207"
+       id="label2"
+       font-size="3.5">OUT</text>
+  </g>
+</svg>
diff --git a/Tetramag-ring-magnet.svg b/Tetramag-ring-magnet.svg
new file mode 100644
index 0000000..2006099
--- /dev/null
+++ b/Tetramag-ring-magnet.svg
@@ -0,0 +1,751 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="55.133369mm"
+   version="1.1"
+   viewBox="0 0 55.1334 55.1334"
+   width="55.133369mm"
+   id="svg51"
+   sodipodi:docname="Tetramag-ring-magnet.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   inkscape:export-filename="/home/ao2/sketchbook/Hall_effect_rotary_encoder/Tetramag-ring-magnet.svg.png"
+   inkscape:export-xdpi="598.91138"
+   inkscape:export-ydpi="598.91138">
+  <metadata
+     id="metadata55">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="911"
+     id="namedview53"
+     showgrid="false"
+     inkscape:zoom="2"
+     inkscape:cx="125.89222"
+     inkscape:cy="137.86384"
+     inkscape:window-x="0"
+     inkscape:window-y="28"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg51"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:measure-start="95.4844,12.8125"
+     inkscape:measure-end="96.3906,12.8125" />
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker97354"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path97352"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker97308"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path97306"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker79531"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path79529"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker79485"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path79483"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker78315"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path78313"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker78269"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path78267"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3151"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path3149"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3081"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path3079"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2494"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="TriangleOutL"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2609"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="scale(0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2488"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2470"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path2467"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient839">
+      <stop
+         style="stop-color:#0000ff;stop-opacity:1"
+         offset="0"
+         id="stop835" />
+      <stop
+         style="stop-color:#ff0000;stop-opacity:1"
+         offset="1"
+         id="stop837" />
+    </linearGradient>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-5-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2473-3-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-5-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2476-6-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2473-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2476-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient839"
+       id="linearGradient1019"
+       gradientUnits="userSpaceOnUse"
+       x1="27.567326"
+       y1="42.938477"
+       x2="27.572493"
+       y2="42.938477" />
+  </defs>
+  <g
+     id="g1194">
+    <rect
+       y="-9.6715235e-07"
+       x="-9.6715235e-07"
+       height="55.133404"
+       width="55.133404"
+       id="rect1123"
+       style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:0.99215686;stroke:none;stroke-width:1.08300066;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.49800384, 6.49800384;stroke-dashoffset:0;stroke-opacity:1" />
+    <g
+       id="id1">
+      <g
+         id="g1317">
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.01304128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker79485);marker-end:url(#marker79531)"
+           d="m 27.605614,48.584961 h 1.198764"
+           id="path2465-2"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.35277799px;line-height:1em;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0.01852085px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2645835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           x="27.547857"
+           y="49.033512"
+           id="text3839-9"><tspan
+             sodipodi:role="line"
+             id="tspan3837-1"
+             x="27.547857"
+             y="49.033512"
+             style="font-size:0.35277799px;stroke-width:0.2645835px">1.25mm</tspan></text>
+        <path
+           inkscape:connector-curvature="0"
+           id="path2444-7-2"
+           d="m 27.566685,47.646599 v 1.041144"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02645835;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07937505, 0.07937505;stroke-dashoffset:0;stroke-opacity:1"
+           sodipodi:nodetypes="cc" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path2444-7-2-7"
+           d="m 28.843307,47.28073 v 1.392544"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02645835;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07937505, 0.07937505;stroke-dashoffset:0;stroke-opacity:1"
+           sodipodi:nodetypes="cc" />
+      </g>
+      <g
+         id="g1298">
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.01500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 25.066685,44.939986 c 0,3.25067 0,3.554687 0,3.554687"
+           id="path2444"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.01500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 30.066685,45.010145 c 0,3.25067 0,3.554687 0,3.554687"
+           id="path2444-7"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02635633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker78269);marker-end:url(#marker78315)"
+           d="M 25.118559,48.10588 H 30.01481"
+           id="path2465"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.35277799px;line-height:1em;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0.01852085px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2645835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           x="26.373671"
+           y="48.047421"
+           id="text3839"><tspan
+             sodipodi:role="line"
+             id="tspan3837"
+             x="26.373671"
+             y="48.047421"
+             style="font-size:0.35277799px;stroke-width:0.2645835px">5mm</tspan></text>
+      </g>
+      <circle
+         style="fill:url(#linearGradient1019);fill-opacity:1;stroke:#000000;stroke-width:0.02645835;stroke-miterlimit:4;stroke-dasharray:none"
+         id="circle6"
+         r="2.5"
+         cy="45.133369"
+         cx="27.566685" />
+      <g
+         transform="translate(0.07957576,0.09095941)"
+         id="g1553">
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.05833399px;line-height:1em;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0.01852085px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.2645835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           x="26.133963"
+           y="45.428173"
+           id="text1529"><tspan
+             sodipodi:role="line"
+             id="tspan1527"
+             x="26.133963"
+             y="45.428173"
+             style="font-size:1.05833399px;fill:#ffffff;stroke-width:0.2645835px">N</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.05833399px;line-height:1em;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0.01852085px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.2645835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           x="28.123503"
+           y="45.427658"
+           id="text1529-3"><tspan
+             sodipodi:role="line"
+             id="tspan1527-6"
+             x="28.123503"
+             y="45.427658"
+             style="font-size:1.05833399px;fill:#ffffff;stroke-width:0.2645835px">S</tspan></text>
+      </g>
+    </g>
+    <circle
+       style="fill:none;stroke:#000000;stroke-width:0.02645835;stroke-miterlimit:4;stroke-dasharray:none"
+       id="circle4"
+       r="15.066686"
+       cy="27.566685"
+       cx="27.566685" />
+    <use
+       height="100%"
+       width="100%"
+       id="use9"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(16.363636,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use11"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(32.727273,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use13"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(49.090909,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use15"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(65.454545,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use17"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(81.818182,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use19"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(98.181818,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use21"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(114.54545,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use23"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(130.90909,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use25"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(147.27273,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use27"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(163.63636,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use29"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(180,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use31"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-163.63636,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use33"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-147.27273,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use35"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-130.90909,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use37"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-114.54546,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use39"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-98.181818,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use41"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-81.818182,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use43"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-65.454545,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use45"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-49.090909,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use47"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-32.727273,27.566685,27.566685)" />
+    <use
+       height="100%"
+       width="100%"
+       id="use49"
+       y="0"
+       xlink:href="#id1"
+       x="0"
+       transform="rotate(-16.363636,27.566685,27.566685)" />
+    <g
+       transform="translate(0.0382219)"
+       id="g4645">
+      <g
+         transform="matrix(0.06819926,0,0,-0.06819926,18.681746,101.75337)"
+         id="g3757">
+        <g
+           transform="translate(-0.3016764,425.45979)"
+           id="g2568">
+          <g
+             transform="matrix(3.84,0,0,-14.04,90.47952,304.1604)"
+             id="g554" />
+          <g
+             transform="matrix(19.2,0,0,-15.12,94.19952,304.4004)"
+             id="g562" />
+          <g
+             transform="matrix(26.88,0,0,-15.12,96.71952,361.1604)"
+             id="g570" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path934"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="M 100.19952,330.5604 H 159.84" />
+          <path
+             sodipodi:nodetypes="ccccccc"
+             inkscape:connector-curvature="0"
+             d="m 149.52,340.8804 10.32,-10.32 -0.84,-11.4 h -58.08048 l -0.72,11.4 10.08,10.32 z"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             id="path946" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path948"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 126.6,330.5604 v -3.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path950"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 126.6,326.8404 h 6.6" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path952"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 133.2,326.8404 v 3.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path954"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 144.96,330.5604 v -3.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path956"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 144.96,326.8404 h 6.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path958"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 151.68,326.8404 v 3.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path1028"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 107.51952,330.5604 v -3.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path1030"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 107.51952,326.8404 h 6.72" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path1032"
+             style="fill:none;stroke:#010101;stroke-width:0.470808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+             d="m 114.23952,326.8404 v 3.72" />
+        </g>
+        <path
+           id="path802-5-2"
+           d="m 134.23919,756.40352 v 1.97317 h -9.04222 v -1.97317 z"
+           style="fill:#e0c1ff;fill-opacity:1;stroke:#001c01;stroke-width:0.29579556;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g4615">
+        <path
+           sodipodi:nodetypes="cc"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.01500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 25.485733,50.192834 9e-5,1.670579"
+           id="path2444-78"
+           inkscape:connector-curvature="0" />
+        <path
+           sodipodi:nodetypes="cc"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.01500001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 29.571193,50.192834 v 1.670579"
+           id="path2444-7-4"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02386637;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker97308);marker-end:url(#marker97354)"
+           d="m 25.542716,51.438761 h 3.973867"
+           id="path2465-5"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.35277799px;line-height:1em;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0.01852085px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2645835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           x="26.873245"
+           y="51.803368"
+           id="text3839-0"><tspan
+             sodipodi:role="line"
+             id="tspan3837-3"
+             x="26.873245"
+             y="51.803368"
+             style="font-size:0.35277799px;stroke-width:0.2645835px">4.1mm</tspan></text>
+      </g>
+    </g>
+    <use
+       transform="translate(-4.3291777)"
+       height="100%"
+       width="100%"
+       id="use4647"
+       xlink:href="#g4645"
+       y="0"
+       x="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path2444-7-2-7-4-3"
+       d="m 27.566685,47.646599 v 5.374104"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02645835;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07937505, 0.07937505;stroke-dashoffset:0;stroke-opacity:1"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path2444-7-2-7-4"
+       d="m 23.237507,46.841839 v 6.178864"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02645835;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07937505, 0.07937505;stroke-dashoffset:0;stroke-opacity:1"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/rotary_encoder/Makefile b/rotary_encoder/Makefile
new file mode 100644
index 0000000..cc24a34
--- /dev/null
+++ b/rotary_encoder/Makefile
@@ -0,0 +1,6 @@
+BOARD_TAG = uno
+MONITOR_PORT = /dev/ttyACM0
+
+ARDUINO_LIBS = DFRkeypad Encoder LiquidCrystal
+
+include /usr/share/arduino/Arduino.mk
diff --git a/rotary_encoder/rotary_encoder.ino b/rotary_encoder/rotary_encoder.ino
new file mode 100644
index 0000000..8515524
--- /dev/null
+++ b/rotary_encoder/rotary_encoder.ino
@@ -0,0 +1,75 @@
+/*
+ * Rotary encoder example
+ *
+ * Copyright (C) 2018  Antonio Ospite <ao2@ao2.it>
+ * SPDX-License-Identitier: WTFPL
+ */
+
+#include <DFRkeypad.h>
+#include <Encoder.h>
+#include <LiquidCrystal.h>
+
+#define ENCODER_CHANNEL_A 2
+#define ENCODER_CHANNEL_B 3
+
+#define COUNTS_PER_ROTATION 84
+
+#define LCD_RS 8
+#define LCD_EN 9
+#define LCD_D4 4
+#define LCD_D5 5
+#define LCD_D6 6
+#define LCD_D7 7
+#define LCD_BL 10
+
+#define BACKLIGHT_VALUE 1023
+
+long old_counts = 0;
+Encoder encoder(ENCODER_CHANNEL_A, ENCODER_CHANNEL_B);
+LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
+
+void setup() {
+	pinMode(LCD_BL, OUTPUT);
+	analogWrite(LCD_BL, BACKLIGHT_VALUE);
+
+	lcd.begin(16, 2);
+
+	lcd.setCursor(1, 0);
+	lcd.print("Rotary Encoder");
+	lcd.setCursor(1, 1);
+	lcd.print("https://ao2.it");
+
+	DFRkeypad::FastADC(true);
+	DFRkeypad::iDEFAULT_THRESHOLD=140;
+}
+
+void loop() {
+	byte key = DFRkeypad::GetKey();
+	if (key == DFRkeypad::eSELECT) {
+		encoder.write(0);
+	}
+
+	long new_counts = encoder.read();
+	if (new_counts != old_counts) {
+		old_counts = new_counts;
+
+		lcd.clear();
+
+		lcd.setCursor(0, 0);
+		lcd.print("Count: ");
+		lcd.setCursor(8, 0);
+		lcd.print(new_counts);
+
+		/* Position normalized between 0 and COUNTS_PER_ROTATION */
+		long position = ((new_counts % COUNTS_PER_ROTATION) + COUNTS_PER_ROTATION) % COUNTS_PER_ROTATION;
+
+		float angle = position * (360.0 / COUNTS_PER_ROTATION);
+
+		lcd.setCursor(0, 1);
+		lcd.print("Angle: ");
+		lcd.setCursor(8, 1);
+		lcd.print(angle);
+	}
+
+	delay(20);
+}
diff --git a/show_quadrature_states/Makefile b/show_quadrature_states/Makefile
new file mode 100644
index 0000000..7b0316f
--- /dev/null
+++ b/show_quadrature_states/Makefile
@@ -0,0 +1,6 @@
+BOARD_TAG = uno
+MONITOR_PORT = /dev/ttyACM0
+
+ARDUINO_LIBS = Encoder
+
+include /usr/share/arduino/Arduino.mk
diff --git a/show_quadrature_states/show_quadrature_states.ino b/show_quadrature_states/show_quadrature_states.ino
new file mode 100644
index 0000000..b44f0ad
--- /dev/null
+++ b/show_quadrature_states/show_quadrature_states.ino
@@ -0,0 +1,44 @@
+/*
+ * Show quadrature states of two Hall effect sensors.
+ *
+ * Copyright (C) 2018  Antonio Ospite <ao2@ao2.it>
+ * SPDX-License-Identitier: WTFPL
+ */
+
+#define HALL_CHANNEL_A 2
+#define HALL_CHANNEL_B 3
+#define LED_PIN 13
+
+int hall_state_A = 0;
+int hall_state_B = 0;
+
+int old_hall_state_A = -1;
+int old_hall_state_B = -1;
+
+void setup()
+{
+	pinMode(HALL_CHANNEL_A, INPUT);
+	pinMode(HALL_CHANNEL_B, INPUT);
+	pinMode(LED_PIN, OUTPUT);
+	Serial.begin(115200);
+}
+
+void loop()
+{
+	hall_state_A = digitalRead(HALL_CHANNEL_A);
+	hall_state_B = digitalRead(HALL_CHANNEL_B);
+
+	if (hall_state_A != old_hall_state_A ||
+	    hall_state_B != old_hall_state_B)
+	{
+		digitalWrite(LED_PIN, hall_state_A);
+
+		old_hall_state_A = hall_state_A;
+		old_hall_state_B = hall_state_B;
+
+		Serial.print(hall_state_A);
+		Serial.print(" ");
+		Serial.print(hall_state_B);
+		Serial.print("\r\n");
+	}
+}
-- 
2.1.4