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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;"> +<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;"><br /></p></body></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