From f5910d5adab0d1c9e5b89bb066b96178121ae698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20G=2E=20Fern=C3=A1ndez?= Date: Thu, 27 Aug 2020 17:07:26 -0300 Subject: [PATCH 1/4] [new] pcb driver eezy mk3 --- hardware/eezy_mk3_driver.kicad_pcb | 2789 ++++++++++++++++++++++++++++ hardware/eezy_mk3_driver.pro | 281 +++ hardware/eezy_mk3_driver.sch | 1148 ++++++++++++ 3 files changed, 4218 insertions(+) create mode 100644 hardware/eezy_mk3_driver.kicad_pcb create mode 100644 hardware/eezy_mk3_driver.pro create mode 100644 hardware/eezy_mk3_driver.sch diff --git a/hardware/eezy_mk3_driver.kicad_pcb b/hardware/eezy_mk3_driver.kicad_pcb new file mode 100644 index 0000000..73ab0b9 --- /dev/null +++ b/hardware/eezy_mk3_driver.kicad_pcb @@ -0,0 +1,2789 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.6) + + (general + (thickness 1.6) + (drawings 6) + (tracks 200) + (zones 0) + (modules 43) + (nets 43) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 1) + (trace_clearance 0.7) + (zone_clearance 0.8) + (zone_45_only no) + (trace_min 0.8) + (via_size 1) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.05) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.12) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0.05) + (aux_axis_origin 0 0) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory "")) + ) + + (net 0 "") + (net 1 GND) + (net 2 +12V) + (net 3 +5V) + (net 4 "Net-(D1-Pad2)") + (net 5 "Net-(D1-Pad1)") + (net 6 "Net-(D2-Pad2)") + (net 7 "Net-(D2-Pad1)") + (net 8 "Net-(D3-Pad2)") + (net 9 "Net-(D3-Pad1)") + (net 10 "Net-(D4-Pad2)") + (net 11 "Net-(D4-Pad1)") + (net 12 "Net-(D5-Pad2)") + (net 13 "Net-(D5-Pad1)") + (net 14 "Net-(D6-Pad2)") + (net 15 "Net-(D6-Pad1)") + (net 16 "Net-(D7-Pad2)") + (net 17 "Net-(D7-Pad1)") + (net 18 "Net-(D8-Pad2)") + (net 19 "Net-(D8-Pad1)") + (net 20 "Net-(D9-Pad2)") + (net 21 "Net-(D9-Pad1)") + (net 22 "Net-(D10-Pad2)") + (net 23 "Net-(D10-Pad1)") + (net 24 "Net-(D11-Pad2)") + (net 25 "Net-(D11-Pad1)") + (net 26 "Net-(D12-Pad2)") + (net 27 "Net-(D12-Pad1)") + (net 28 "Net-(D14-Pad2)") + (net 29 "Net-(J1-Pad4)") + (net 30 "Net-(J1-Pad1)") + (net 31 "Net-(J1-Pad3)") + (net 32 "Net-(J1-Pad2)") + (net 33 SERVO_PWM) + (net 34 "Net-(J6-Pad4)") + (net 35 "Net-(J6-Pad1)") + (net 36 "Net-(J6-Pad3)") + (net 37 "Net-(J6-Pad2)") + (net 38 5V_uC) + (net 39 "Net-(J9-Pad4)") + (net 40 "Net-(J9-Pad1)") + (net 41 "Net-(J9-Pad3)") + (net 42 "Net-(J9-Pad2)") + + (net_class Default "This is the default net class." + (clearance 0.7) + (trace_width 1) + (via_dia 1) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (diff_pair_width 0.8) + (diff_pair_gap 0.25) + (add_net GND) + (add_net "Net-(D1-Pad1)") + (add_net "Net-(D1-Pad2)") + (add_net "Net-(D10-Pad1)") + (add_net "Net-(D10-Pad2)") + (add_net "Net-(D11-Pad1)") + (add_net "Net-(D11-Pad2)") + (add_net "Net-(D12-Pad1)") + (add_net "Net-(D12-Pad2)") + (add_net "Net-(D14-Pad2)") + (add_net "Net-(D2-Pad1)") + (add_net "Net-(D2-Pad2)") + (add_net "Net-(D3-Pad1)") + (add_net "Net-(D3-Pad2)") + (add_net "Net-(D4-Pad1)") + (add_net "Net-(D4-Pad2)") + (add_net "Net-(D5-Pad1)") + (add_net "Net-(D5-Pad2)") + (add_net "Net-(D6-Pad1)") + (add_net "Net-(D6-Pad2)") + (add_net "Net-(D7-Pad1)") + (add_net "Net-(D7-Pad2)") + (add_net "Net-(D8-Pad1)") + (add_net "Net-(D8-Pad2)") + (add_net "Net-(D9-Pad1)") + (add_net "Net-(D9-Pad2)") + (add_net "Net-(J1-Pad1)") + (add_net "Net-(J1-Pad2)") + (add_net "Net-(J1-Pad3)") + (add_net "Net-(J1-Pad4)") + (add_net "Net-(J6-Pad1)") + (add_net "Net-(J6-Pad2)") + (add_net "Net-(J6-Pad3)") + (add_net "Net-(J6-Pad4)") + (add_net "Net-(J9-Pad1)") + (add_net "Net-(J9-Pad2)") + (add_net "Net-(J9-Pad3)") + (add_net "Net-(J9-Pad4)") + (add_net SERVO_PWM) + ) + + (net_class MOT_POWER "" + (clearance 0.7) + (trace_width 1.8) + (via_dia 2.5) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (diff_pair_width 0.8) + (diff_pair_gap 0.25) + ) + + (net_class POWER "" + (clearance 0.5) + (trace_width 1.2) + (via_dia 1.5) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (diff_pair_width 0.8) + (diff_pair_gap 0.25) + (add_net +12V) + (add_net +5V) + (add_net 5V_uC) + ) + + (net_class SIGNAL "" + (clearance 0.4) + (trace_width 0.8) + (via_dia 0.8) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (diff_pair_width 0.8) + (diff_pair_gap 0.25) + ) + + (module Package_TO_SOT_THT:TO-220-3_Vertical (layer F.Cu) (tedit 5AC8BA0D) (tstamp 5F4648F9) + (at 129.794 58.928) + (descr "TO-220-3, Vertical, RM 2.54mm, see https://www.vishay.com/docs/66542/to-220-1.pdf") + (tags "TO-220-3 Vertical RM 2.54mm") + (path /5FDBFB20) + (fp_text reference U3 (at -1.778 2.286) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LM7805_TO220 (at 2.794 -4.064) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.778 2.286) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.46 -3.15) (end -2.46 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -2.46 1.25) (end 7.54 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 7.54 1.25) (end 7.54 -3.15) (layer F.Fab) (width 0.1)) + (fp_line (start 7.54 -3.15) (end -2.46 -3.15) (layer F.Fab) (width 0.1)) + (fp_line (start -2.46 -1.88) (end 7.54 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start 0.69 -3.15) (end 0.69 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start 4.39 -3.15) (end 4.39 -1.88) (layer F.Fab) (width 0.1)) + (fp_line (start -2.58 -3.27) (end 7.66 -3.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 1.371) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 -3.27) (end -2.58 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.66 -3.27) (end 7.66 1.371) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.58 -1.76) (end 7.66 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.69 -3.27) (end 0.69 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.391 -3.27) (end 4.391 -1.76) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.71 -3.4) (end -2.71 1.51) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.71 1.51) (end 7.79 1.51) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.79 1.51) (end 7.79 -3.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 7.79 -3.4) (end -2.71 -3.4) (layer F.CrtYd) (width 0.05)) + (pad 3 thru_hole oval (at 5.08 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 3 +5V)) + (pad 2 thru_hole oval (at 2.54 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0) (size 1.905 2) (drill 1.1) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-220-3_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm_LongPads (layer F.Cu) (tedit 5A02E8C5) (tstamp 5F4648DF) + (at 129.159 102.108) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), LongPads") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil LongPads") + (path /5F4EAC1F) + (fp_text reference U2 (at 3.81 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ULN2003 (at 3.81 20.11) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.81 8.89) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.56 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.56 -1.33) (end 1.56 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.56 19.11) (end 6.06 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.06 19.11) (end 6.06 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.06 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.45 -1.55) (end -1.45 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 19.3) (end 9.1 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.1 19.3) (end 9.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.1 -1.55) (end -1.45 -1.55) (layer F.CrtYd) (width 0.05)) + (pad 16 thru_hole oval (at 7.62 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 "Net-(D7-Pad1)")) + (pad 8 thru_hole oval (at 0 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 15 thru_hole oval (at 7.62 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 19 "Net-(D8-Pad1)")) + (pad 7 thru_hole oval (at 0 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) + (pad 14 thru_hole oval (at 7.62 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 "Net-(D9-Pad1)")) + (pad 6 thru_hole oval (at 0 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 40 "Net-(J9-Pad1)")) + (pad 13 thru_hole oval (at 7.62 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 "Net-(D10-Pad1)")) + (pad 5 thru_hole oval (at 0 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 "Net-(J9-Pad2)")) + (pad 12 thru_hole oval (at 7.62 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 25 "Net-(D11-Pad1)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 41 "Net-(J9-Pad3)")) + (pad 11 thru_hole oval (at 7.62 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 27 "Net-(D12-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(J9-Pad4)")) + (pad 10 thru_hole oval (at 7.62 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) + (pad 2 thru_hole oval (at 0 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 35 "Net-(J6-Pad1)")) + (pad 9 thru_hole oval (at 7.62 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (pad 1 thru_hole rect (at 0 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 "Net-(J6-Pad2)")) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm_LongPads (layer F.Cu) (tedit 5A02E8C5) (tstamp 5F4648BB) + (at 129.159 79.883) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), LongPads") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil LongPads") + (path /5F4F10A4) + (fp_text reference U1 (at 3.81 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ULN2003 (at 3.81 20.11) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.81 8.89) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.56 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.56 -1.33) (end 1.56 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.56 19.11) (end 6.06 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.06 19.11) (end 6.06 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.06 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.45 -1.55) (end -1.45 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.45 19.3) (end 9.1 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.1 19.3) (end 9.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.1 -1.55) (end -1.45 -1.55) (layer F.CrtYd) (width 0.05)) + (pad 16 thru_hole oval (at 7.62 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 5 "Net-(D1-Pad1)")) + (pad 8 thru_hole oval (at 0 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 15 thru_hole oval (at 7.62 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 7 "Net-(D2-Pad1)")) + (pad 7 thru_hole oval (at 0 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) + (pad 14 thru_hole oval (at 7.62 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 "Net-(D3-Pad1)")) + (pad 6 thru_hole oval (at 0 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 "Net-(J6-Pad3)")) + (pad 13 thru_hole oval (at 7.62 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 "Net-(D4-Pad1)")) + (pad 5 thru_hole oval (at 0 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 34 "Net-(J6-Pad4)")) + (pad 12 thru_hole oval (at 7.62 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 "Net-(D5-Pad1)")) + (pad 4 thru_hole oval (at 0 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 30 "Net-(J1-Pad1)")) + (pad 11 thru_hole oval (at 7.62 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 "Net-(D6-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 "Net-(J1-Pad2)")) + (pad 10 thru_hole oval (at 7.62 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) + (pad 2 thru_hole oval (at 0 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(J1-Pad3)")) + (pad 9 thru_hole oval (at 7.62 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (pad 1 thru_hole rect (at 0 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 29 "Net-(J1-Pad4)")) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F4651D8) + (at 139.954 74.168 180) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5FA485FA) + (fp_text reference R14 (at 5.08 -2.37) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 28 "Net-(D14-Pad2)")) + (pad 1 thru_hole circle (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F46D408) + (at 171.45 125.73 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F472613) + (fp_text reference R12 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 "Net-(D12-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F464869) + (at 175.006 125.73 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F47237A) + (fp_text reference R11 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 24 "Net-(D11-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F464852) + (at 171.45 111.76 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4720CF) + (fp_text reference R10 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 "Net-(D10-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F46483B) + (at 175.006 111.76 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F47189B) + (fp_text reference R9 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 "Net-(D9-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F464824) + (at 171.45 98.044 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4EAC76) + (fp_text reference R8 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 18 "Net-(D8-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F46480D) + (at 175.006 98.044 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4EAC70) + (fp_text reference R7 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 "Net-(D7-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F4647F6) + (at 171.45 84.074 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4EAC6A) + (fp_text reference R6 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 "Net-(D6-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F4647DF) + (at 175.006 84.074 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4EAC64) + (fp_text reference R5 (at 5.08 -2.37 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 2.37 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 "Net-(D5-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F4647C8) + (at 171.45 70.104 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4F10FB) + (fp_text reference R4 (at -2.032 -0.254 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -2.032 -0.254 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 "Net-(D4-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F4647B1) + (at 175.006 70.104 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4F10F5) + (fp_text reference R3 (at -2.032 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -2.032 0 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 8 "Net-(D3-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F46479A) + (at 171.45 56.388 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4F10EF) + (fp_text reference R2 (at -2.032 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 0 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -2.032 0 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 6 "Net-(D2-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5F46C553) + (at 175.006 56.388 270) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5F4F10E9) + (fp_text reference R1 (at -2.032 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1k (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -2.032 0 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 4 "Net-(D1-Pad2)")) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TerminalBlock:TerminalBlock_bornier-3_P5.08mm (layer F.Cu) (tedit 59FF03B9) (tstamp 5F46476C) + (at 145.542 59.69) + (descr "simple 3-pin terminal block, pitch 5.08mm, revamped version of bornier3") + (tags "terminal block bornier3") + (path /60059553) + (fp_text reference J10 (at 5.05 -4.65) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value IN_SERVO (at 5.08 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.47 2.55) (end 12.63 2.55) (layer F.Fab) (width 0.1)) + (fp_line (start -2.47 -3.75) (end 12.63 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 12.63 -3.75) (end 12.63 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 12.63 3.75) (end -2.47 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.47 3.75) (end -2.47 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.54 3.81) (end -2.54 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.7 3.81) (end 12.7 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 2.54) (end 12.7 2.54) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 12.7 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 12.7 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.72 -4) (end 12.88 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.72 -4) (end -2.72 4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.88 4) (end 12.88 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 12.88 4) (end -2.72 4) (layer F.CrtYd) (width 0.05)) + (pad 3 thru_hole circle (at 10.16 0) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 33 SERVO_PWM)) + (pad 2 thru_hole circle (at 5.08 0) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 38 5V_uC)) + (pad 1 thru_hole rect (at 0 0) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-3_P5.08mm.wrl + (offset (xyz 5.079999923706055 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm (layer F.Cu) (tedit 59FF03D1) (tstamp 5F464756) + (at 115.189 132.588 90) + (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") + (tags "terminal block bornier4") + (path /6004A19B) + (fp_text reference J9 (at -1.524 -4.699 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value IN_STP3 (at 7.6 -4.699 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.524 -4.699 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.48 2.55) (end 17.72 2.55) (layer F.Fab) (width 0.1)) + (fp_line (start -2.43 3.75) (end -2.48 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end -2.48 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end 17.72 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 17.72 -3.75) (end 17.72 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end -2.43 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.54 -3.81) (end -2.54 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 17.78 3.81) (end 17.78 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 17.78 2.54) (end -2.54 2.54) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.73 -4) (end 17.97 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.73 -4) (end -2.73 4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.97 4) (end 17.97 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.97 4) (end -2.73 4) (layer F.CrtYd) (width 0.05)) + (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 39 "Net-(J9-Pad4)")) + (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 40 "Net-(J9-Pad1)")) + (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 41 "Net-(J9-Pad3)")) + (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 42 "Net-(J9-Pad2)")) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl + (offset (xyz 7.619999885559082 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F46473E) + (at 134.112 62.992 90) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5F8B6AB3) + (fp_text reference J8 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value POWER_JUMPER_5V (at -2.286 5.08 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 38 5V_uC)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 +5V)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_Phoenix_MSTB:PhoenixContact_MSTBVA_2,5_2-G-5,08_1x02_P5.08mm_Vertical (layer F.Cu) (tedit 5B785047) (tstamp 5F464728) + (at 116.586 67.818 90) + (descr "Generic Phoenix Contact connector footprint for: MSTBVA_2,5/2-G-5,08; number of pins: 02; pin pitch: 5.08mm; Vertical || order number: 1755736 12A || order number: 1924305 16A (HC)") + (tags "phoenix_contact connector MSTBVA_01x02_G_5.08mm") + (path /5F4619E5) + (fp_text reference J7 (at 2.54 -0.254 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value POWER_12V (at 4.826 -6.096 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -2.54 -6.096 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 5.08 0.55) (end 3.08 2.2) (angle -100.5) (layer F.SilkS) (width 0.12)) + (fp_arc (start 0 0.55) (end -2 2.2) (angle -100.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.65 -4.91) (end -3.65 3.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.65 3.91) (end 8.73 3.91) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.73 3.91) (end 8.73 -4.91) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.73 -4.91) (end -3.65 -4.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.54 -4.8) (end -3.54 3.8) (layer F.Fab) (width 0.1)) + (fp_line (start -3.54 3.8) (end 8.62 3.8) (layer F.Fab) (width 0.1)) + (fp_line (start 8.62 3.8) (end 8.62 -4.8) (layer F.Fab) (width 0.1)) + (fp_line (start 8.62 -4.8) (end -3.54 -4.8) (layer F.Fab) (width 0.1)) + (fp_line (start -3.65 -4.1) (end -1.11 -4.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.73 -4.1) (end 6.19 -4.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 -4.1) (end 4.08 -4.1) (layer F.SilkS) (width 0.12)) + (fp_line (start -1 -3.1) (end -1 -4.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -1 -4.91) (end 1 -4.91) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 -4.91) (end 1 -3.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 1 -3.1) (end -1 -3.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.08 -3.1) (end 4.08 -4.91) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.08 -4.91) (end 6.08 -4.91) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.08 -4.91) (end 6.08 -3.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.08 -3.1) (end 4.08 -3.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 2 2.2) (end 3.08 2.2) (layer F.SilkS) (width 0.12)) + (fp_line (start -2 2.2) (end -2.74 2.2) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.74 2.2) (end -2.74 -3.1) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.74 -3.1) (end 7.82 -3.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.82 -3.1) (end 7.82 2.2) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.82 2.2) (end 7.08 2.2) (layer F.SilkS) (width 0.12)) + (fp_line (start -4.04 -5.3) (end -4.04 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.04 4.3) (end 9.12 4.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.12 4.3) (end 9.12 -5.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.12 -5.3) (end -4.04 -5.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.3 -5.71) (end 0 -5.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 0 -5.11) (end -0.3 -5.71) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.3 -5.71) (end 0.3 -5.71) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.5 -3.55) (end 0 -2.55) (layer F.Fab) (width 0.1)) + (fp_line (start 0 -2.55) (end -0.5 -3.55) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 -3.55) (end 0.5 -3.55) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 5.08 0 90) (size 2.08 3.6) (drill 1.4) (layers *.Cu *.Mask) + (net 2 +12V)) + (pad 1 thru_hole roundrect (at 0 0 90) (size 2.08 3.6) (drill 1.4) (layers *.Cu *.Mask) (roundrect_rratio 0.120192) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_Phoenix_MSTB.3dshapes/PhoenixContact_MSTBVA_2,5_2-G-5,08_1x02_P5.08mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm (layer F.Cu) (tedit 59FF03D1) (tstamp 5F4646FC) + (at 115.189 111.633 90) + (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") + (tags "terminal block bornier4") + (path /600498E2) + (fp_text reference J6 (at -1.905 -4.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value IN_STP2 (at 7.239 -4.699 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.905 -4.699 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.48 2.55) (end 17.72 2.55) (layer F.Fab) (width 0.1)) + (fp_line (start -2.43 3.75) (end -2.48 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end -2.48 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end 17.72 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 17.72 -3.75) (end 17.72 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end -2.43 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.54 -3.81) (end -2.54 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 17.78 3.81) (end 17.78 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 17.78 2.54) (end -2.54 2.54) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.73 -4) (end 17.97 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.73 -4) (end -2.73 4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.97 4) (end 17.97 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.97 4) (end -2.73 4) (layer F.CrtYd) (width 0.05)) + (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 34 "Net-(J6-Pad4)")) + (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 35 "Net-(J6-Pad1)")) + (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 36 "Net-(J6-Pad3)")) + (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 37 "Net-(J6-Pad2)")) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl + (offset (xyz 7.619999885559082 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28142C) (tstamp 5F4646E4) + (at 151.892 119.126 270) + (descr "JST EH series connector, B5B-EH-A (http://www.jst-mfg.com/product/pdf/eng/eEH.pdf), generated with kicad-footprint-generator") + (tags "connector JST EH vertical") + (path /5F4746C0) + (fp_text reference J5 (at 5 -2.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OUT_STP3 (at 5 3.4 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5 1.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.5 -1.6) (end -2.5 2.2) (layer F.Fab) (width 0.1)) + (fp_line (start -2.5 2.2) (end 12.5 2.2) (layer F.Fab) (width 0.1)) + (fp_line (start 12.5 2.2) (end 12.5 -1.6) (layer F.Fab) (width 0.1)) + (fp_line (start 12.5 -1.6) (end -2.5 -1.6) (layer F.Fab) (width 0.1)) + (fp_line (start -3 -2.1) (end -3 2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3 2.7) (end 13 2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13 2.7) (end 13 -2.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13 -2.1) (end -3 -2.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.61 -1.71) (end -2.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 2.31) (end 12.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 2.31) (end 12.61 -1.71) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 -1.71) (end -2.61 -1.71) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 0) (end -2.11 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.11 0) (end -2.11 -1.21) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.11 -1.21) (end 12.11 -1.21) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.11 -1.21) (end 12.11 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.11 0) (end 12.61 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 0.81) (end -1.61 0.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.61 0.81) (end -1.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 0.81) (end 11.61 0.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 11.61 0.81) (end 11.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 0.11) (end -2.91 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 2.61) (end -0.41 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 0.11) (end -2.91 2.61) (layer F.Fab) (width 0.1)) + (fp_line (start -2.91 2.61) (end -0.41 2.61) (layer F.Fab) (width 0.1)) + (pad 5 thru_hole oval (at 10 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 2 +12V)) + (pad 4 thru_hole oval (at 7.5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 27 "Net-(D12-Pad1)")) + (pad 3 thru_hole oval (at 5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 25 "Net-(D11-Pad1)")) + (pad 2 thru_hole oval (at 2.5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 23 "Net-(D10-Pad1)")) + (pad 1 thru_hole roundrect (at 0 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) + (net 21 "Net-(D9-Pad1)")) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28142C) (tstamp 5F4646C1) + (at 151.892 98.298 270) + (descr "JST EH series connector, B5B-EH-A (http://www.jst-mfg.com/product/pdf/eng/eEH.pdf), generated with kicad-footprint-generator") + (tags "connector JST EH vertical") + (path /5F4EAC80) + (fp_text reference J4 (at 5 -2.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OUT_STP2 (at 5 3.4 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5 1.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.5 -1.6) (end -2.5 2.2) (layer F.Fab) (width 0.1)) + (fp_line (start -2.5 2.2) (end 12.5 2.2) (layer F.Fab) (width 0.1)) + (fp_line (start 12.5 2.2) (end 12.5 -1.6) (layer F.Fab) (width 0.1)) + (fp_line (start 12.5 -1.6) (end -2.5 -1.6) (layer F.Fab) (width 0.1)) + (fp_line (start -3 -2.1) (end -3 2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3 2.7) (end 13 2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13 2.7) (end 13 -2.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13 -2.1) (end -3 -2.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.61 -1.71) (end -2.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 2.31) (end 12.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 2.31) (end 12.61 -1.71) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 -1.71) (end -2.61 -1.71) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 0) (end -2.11 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.11 0) (end -2.11 -1.21) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.11 -1.21) (end 12.11 -1.21) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.11 -1.21) (end 12.11 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.11 0) (end 12.61 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 0.81) (end -1.61 0.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.61 0.81) (end -1.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 0.81) (end 11.61 0.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 11.61 0.81) (end 11.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 0.11) (end -2.91 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 2.61) (end -0.41 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 0.11) (end -2.91 2.61) (layer F.Fab) (width 0.1)) + (fp_line (start -2.91 2.61) (end -0.41 2.61) (layer F.Fab) (width 0.1)) + (pad 5 thru_hole oval (at 10 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 2 +12V)) + (pad 4 thru_hole oval (at 7.5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 19 "Net-(D8-Pad1)")) + (pad 3 thru_hole oval (at 5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 17 "Net-(D7-Pad1)")) + (pad 2 thru_hole oval (at 2.5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 15 "Net-(D6-Pad1)")) + (pad 1 thru_hole roundrect (at 0 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) + (net 13 "Net-(D5-Pad1)")) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical (layer F.Cu) (tedit 5C28142C) (tstamp 5F46469E) + (at 151.892 77.724 270) + (descr "JST EH series connector, B5B-EH-A (http://www.jst-mfg.com/product/pdf/eng/eEH.pdf), generated with kicad-footprint-generator") + (tags "connector JST EH vertical") + (path /5F4F1105) + (fp_text reference J3 (at 5 -2.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OUT_STP1 (at 5 3.4 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5 1.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.5 -1.6) (end -2.5 2.2) (layer F.Fab) (width 0.1)) + (fp_line (start -2.5 2.2) (end 12.5 2.2) (layer F.Fab) (width 0.1)) + (fp_line (start 12.5 2.2) (end 12.5 -1.6) (layer F.Fab) (width 0.1)) + (fp_line (start 12.5 -1.6) (end -2.5 -1.6) (layer F.Fab) (width 0.1)) + (fp_line (start -3 -2.1) (end -3 2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3 2.7) (end 13 2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13 2.7) (end 13 -2.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13 -2.1) (end -3 -2.1) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.61 -1.71) (end -2.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 2.31) (end 12.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 2.31) (end 12.61 -1.71) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 -1.71) (end -2.61 -1.71) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 0) (end -2.11 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.11 0) (end -2.11 -1.21) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.11 -1.21) (end 12.11 -1.21) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.11 -1.21) (end 12.11 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.11 0) (end 12.61 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.61 0.81) (end -1.61 0.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.61 0.81) (end -1.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.61 0.81) (end 11.61 0.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 11.61 0.81) (end 11.61 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 0.11) (end -2.91 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 2.61) (end -0.41 2.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.91 0.11) (end -2.91 2.61) (layer F.Fab) (width 0.1)) + (fp_line (start -2.91 2.61) (end -0.41 2.61) (layer F.Fab) (width 0.1)) + (pad 5 thru_hole oval (at 10 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 2 +12V)) + (pad 4 thru_hole oval (at 7.5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 11 "Net-(D4-Pad1)")) + (pad 3 thru_hole oval (at 5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 9 "Net-(D3-Pad1)")) + (pad 2 thru_hole oval (at 2.5 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) + (net 7 "Net-(D2-Pad1)")) + (pad 1 thru_hole roundrect (at 0 0 270) (size 1.7 1.95) (drill 0.95) (layers *.Cu *.Mask) (roundrect_rratio 0.147059) + (net 5 "Net-(D1-Pad1)")) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5F46467B) + (at 150.368 69.85 270) + (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x03 2.54mm single row") + (path /5F8C1480) + (fp_text reference J2 (at 0 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OUT_SERVO (at 0 7.41 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 2.54) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 6.35) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 6.41) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 6.85) (end 1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 6.85) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 +5V)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 33 SERVO_PWM)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x03_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module TerminalBlock:TerminalBlock_bornier-4_P5.08mm (layer F.Cu) (tedit 59FF03D1) (tstamp 5F464664) + (at 115.189 90.678 90) + (descr "simple 4-pin terminal block, pitch 5.08mm, revamped version of bornier4") + (tags "terminal block bornier4") + (path /600478E4) + (fp_text reference J1 (at -1.778 -4.699 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value IN_STP1 (at 8.128 -4.953 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.778 -4.699 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.48 2.55) (end 17.72 2.55) (layer F.Fab) (width 0.1)) + (fp_line (start -2.43 3.75) (end -2.48 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.48 3.75) (end -2.48 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.48 -3.75) (end 17.72 -3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 17.72 -3.75) (end 17.72 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start 17.72 3.75) (end -2.43 3.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.54 -3.81) (end -2.54 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 17.78 3.81) (end 17.78 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 17.78 2.54) (end -2.54 2.54) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 -3.81) (end 17.78 -3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.54 3.81) (end 17.78 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.73 -4) (end 17.97 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.73 -4) (end -2.73 4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.97 4) (end 17.97 -4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 17.97 4) (end -2.73 4) (layer F.CrtYd) (width 0.05)) + (pad 4 thru_hole circle (at 15.24 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 29 "Net-(J1-Pad4)")) + (pad 1 thru_hole rect (at 0 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 30 "Net-(J1-Pad1)")) + (pad 3 thru_hole circle (at 10.16 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 31 "Net-(J1-Pad3)")) + (pad 2 thru_hole circle (at 5.08 0 90) (size 3 3) (drill 1.52) (layers *.Cu *.Mask) + (net 32 "Net-(J1-Pad2)")) + (model ${KISYS3DMOD}/TerminalBlock.3dshapes/TerminalBlock_bornier-4_P5.08mm.wrl + (offset (xyz 7.619999885559082 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F46464C) + (at 123.444 73.406) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5FA56A36) + (fp_text reference D14 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 28 "Net-(D14-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F46463A) + (at 165.1 134.112) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F470439) + (fp_text reference D12 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 26 "Net-(D12-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 27 "Net-(D12-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F464628) + (at 165.1 127.254) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4700BD) + (fp_text reference D11 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 24 "Net-(D11-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 25 "Net-(D11-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F464616) + (at 165.1 120.396) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F46F812) + (fp_text reference D10 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 22 "Net-(D10-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 23 "Net-(D10-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F464604) + (at 165.1 113.538) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F46E71D) + (fp_text reference D9 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 20 "Net-(D9-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 21 "Net-(D9-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F4645F2) + (at 165.1 106.68) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4EAC55) + (fp_text reference D8 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 18 "Net-(D8-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 19 "Net-(D8-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F4645E0) + (at 165.1 99.822) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4EAC4F) + (fp_text reference D7 (at 1.27 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 16 "Net-(D7-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 17 "Net-(D7-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F4645CE) + (at 165.1 92.71) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4EAC49) + (fp_text reference D6 (at 3.556 4.064) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at -0.762 4.064) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.556 4.064) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 14 "Net-(D6-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 15 "Net-(D6-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F4645BC) + (at 165.1 85.852) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4EAC40) + (fp_text reference D5 (at 3.556 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at -0.762 -4.064) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.556 -3.81) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 12 "Net-(D5-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 13 "Net-(D5-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F4645AA) + (at 165.1 78.74) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4F10DA) + (fp_text reference D4 (at 3.556 4.064) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at -0.762 4.064) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.556 4.064) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 10 "Net-(D4-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 11 "Net-(D4-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F46C877) + (at 165.1 71.882) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4F10D4) + (fp_text reference D3 (at 3.556 -4.064) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at -0.762 -4.064) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 8 "Net-(D3-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 9 "Net-(D3-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F464586) + (at 165.1 65.024) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4F10CE) + (fp_text reference D2 (at 3.556 4.064) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at -0.762 3.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.556 4.064) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 6 "Net-(D2-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 7 "Net-(D2-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D5.0mm (layer F.Cu) (tedit 5995936A) (tstamp 5F464574) + (at 165.1 58.166) + (descr "LED, diameter 5.0mm, 2 pins, http://cdn-reichelt.de/documents/datenblatt/A500/LL-504BC2E-009.pdf") + (tags "LED diameter 5.0mm 2 pins") + (path /5F4F10C5) + (fp_text reference D1 (at 3.556 -3.96) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at -0.762 -4.064) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.556 -4.064) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.2))) + ) + (fp_arc (start 1.27 0) (end -1.29 1.54483) (angle -148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.29 -1.54483) (angle 148.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -1.23 -1.469694) (angle 299.1) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.27 0) (end 3.77 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.23 -1.469694) (end -1.23 1.469694) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.545) (end -1.29 1.545) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.95 -3.25) (end -1.95 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.95 3.25) (end 4.5 3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 3.25) (end 4.5 -3.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.5 -3.25) (end -1.95 -3.25) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 4 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 5 "Net-(D1-Pad1)")) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D5.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5F464562) + (at 140.716 61.722 90) + (descr "C, Disc series, Radial, pin pitch=5.00mm, , diameter*width=6*2.5mm^2, Capacitor, http://cdn-reichelt.de/documents/datenblatt/B300/DS_KERKO_TC.pdf") + (tags "C Disc series Radial pin pitch 5.00mm diameter 6mm width 2.5mm Capacitor") + (path /5FE5BBC2) + (fp_text reference C6 (at 2.5 -2.5 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 0.1uF (at 2.5 2.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.5 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.5 -1.25) (end -0.5 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 1.25) (end 5.5 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.5 1.25) (end 5.5 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.5 -1.25) (end -0.5 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.62 -1.37) (end 5.62 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 1.37) (end 5.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 -1.37) (end -0.62 -0.925) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 0.925) (end -0.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.62 -1.37) (end 5.62 -0.925) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.62 0.925) (end 5.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 6.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.05 1.5) (end 6.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.05 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 5 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D6.0mm_W2.5mm_P5.00mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5F46454D) + (at 123.444 61.722 90) + (descr "C, Disc series, Radial, pin pitch=5.00mm, , diameter*width=6*2.5mm^2, Capacitor, http://cdn-reichelt.de/documents/datenblatt/B300/DS_KERKO_TC.pdf") + (tags "C Disc series Radial pin pitch 5.00mm diameter 6mm width 2.5mm Capacitor") + (path /5FE42433) + (fp_text reference C5 (at 2.5 -2.5 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 0.33uF (at 2.5 2.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.5 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.5 -1.25) (end -0.5 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 1.25) (end 5.5 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.5 1.25) (end 5.5 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.5 -1.25) (end -0.5 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.62 -1.37) (end 5.62 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 1.37) (end 5.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 -1.37) (end -0.62 -0.925) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 0.925) (end -0.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.62 -1.37) (end 5.62 -0.925) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.62 0.925) (end 5.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 6.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.05 1.5) (end 6.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.05 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 5 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D6.0mm_W2.5mm_P5.00mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:CP_Radial_D5.0mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5F464538) + (at 124.968 65.278 270) + (descr "CP, Radial series, Radial, pin pitch=2.50mm, , diameter=5mm, Electrolytic Capacitor") + (tags "CP Radial series Radial pin pitch 2.50mm diameter 5mm Electrolytic Capacitor") + (path /5F4AA5B1) + (fp_text reference C4 (at 1.25 -3.75 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 10uF (at 1.25 3.75 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1.25 0) (end 3.75 0) (layer F.Fab) (width 0.1)) + (fp_circle (center 1.25 0) (end 3.87 0) (layer F.SilkS) (width 0.12)) + (fp_circle (center 1.25 0) (end 4 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.883605 -1.0875) (end -0.383605 -1.0875) (layer F.Fab) (width 0.1)) + (fp_line (start -0.633605 -1.3375) (end -0.633605 -0.8375) (layer F.Fab) (width 0.1)) + (fp_line (start 1.25 -2.58) (end 1.25 2.58) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.29 -2.58) (end 1.29 2.58) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 -2.579) (end 1.33 2.579) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.37 -2.578) (end 1.37 2.578) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.41 -2.576) (end 1.41 2.576) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.45 -2.573) (end 1.45 2.573) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.49 -2.569) (end 1.49 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.49 1.04) (end 1.49 2.569) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.53 -2.565) (end 1.53 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.53 1.04) (end 1.53 2.565) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.57 -2.561) (end 1.57 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.57 1.04) (end 1.57 2.561) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.61 -2.556) (end 1.61 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.61 1.04) (end 1.61 2.556) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.65 -2.55) (end 1.65 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.65 1.04) (end 1.65 2.55) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -2.543) (end 1.69 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.04) (end 1.69 2.543) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.73 -2.536) (end 1.73 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.73 1.04) (end 1.73 2.536) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.77 -2.528) (end 1.77 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.77 1.04) (end 1.77 2.528) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 -2.52) (end 1.81 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.04) (end 1.81 2.52) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.85 -2.511) (end 1.85 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.85 1.04) (end 1.85 2.511) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.89 -2.501) (end 1.89 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.89 1.04) (end 1.89 2.501) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.93 -2.491) (end 1.93 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.93 1.04) (end 1.93 2.491) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.971 -2.48) (end 1.971 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.971 1.04) (end 1.971 2.48) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.011 -2.468) (end 2.011 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.011 1.04) (end 2.011 2.468) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.051 -2.455) (end 2.051 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.051 1.04) (end 2.051 2.455) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.091 -2.442) (end 2.091 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.091 1.04) (end 2.091 2.442) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.131 -2.428) (end 2.131 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.131 1.04) (end 2.131 2.428) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.171 -2.414) (end 2.171 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.171 1.04) (end 2.171 2.414) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.211 -2.398) (end 2.211 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.211 1.04) (end 2.211 2.398) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.251 -2.382) (end 2.251 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.251 1.04) (end 2.251 2.382) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.291 -2.365) (end 2.291 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.291 1.04) (end 2.291 2.365) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.331 -2.348) (end 2.331 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.331 1.04) (end 2.331 2.348) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.371 -2.329) (end 2.371 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.371 1.04) (end 2.371 2.329) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.411 -2.31) (end 2.411 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.411 1.04) (end 2.411 2.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.451 -2.29) (end 2.451 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.451 1.04) (end 2.451 2.29) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.491 -2.268) (end 2.491 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.491 1.04) (end 2.491 2.268) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.531 -2.247) (end 2.531 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.531 1.04) (end 2.531 2.247) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.571 -2.224) (end 2.571 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.571 1.04) (end 2.571 2.224) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.611 -2.2) (end 2.611 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.611 1.04) (end 2.611 2.2) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.651 -2.175) (end 2.651 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.651 1.04) (end 2.651 2.175) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.691 -2.149) (end 2.691 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.691 1.04) (end 2.691 2.149) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.731 -2.122) (end 2.731 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.731 1.04) (end 2.731 2.122) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.771 -2.095) (end 2.771 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.771 1.04) (end 2.771 2.095) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.811 -2.065) (end 2.811 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.811 1.04) (end 2.811 2.065) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.851 -2.035) (end 2.851 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.851 1.04) (end 2.851 2.035) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.891 -2.004) (end 2.891 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.891 1.04) (end 2.891 2.004) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.931 -1.971) (end 2.931 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.931 1.04) (end 2.931 1.971) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.971 -1.937) (end 2.971 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.971 1.04) (end 2.971 1.937) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.011 -1.901) (end 3.011 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.011 1.04) (end 3.011 1.901) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.051 -1.864) (end 3.051 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.051 1.04) (end 3.051 1.864) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.091 -1.826) (end 3.091 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.091 1.04) (end 3.091 1.826) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.131 -1.785) (end 3.131 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.131 1.04) (end 3.131 1.785) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.171 -1.743) (end 3.171 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.171 1.04) (end 3.171 1.743) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.211 -1.699) (end 3.211 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.211 1.04) (end 3.211 1.699) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.251 -1.653) (end 3.251 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.251 1.04) (end 3.251 1.653) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.291 -1.605) (end 3.291 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.291 1.04) (end 3.291 1.605) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.331 -1.554) (end 3.331 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.331 1.04) (end 3.331 1.554) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.371 -1.5) (end 3.371 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.371 1.04) (end 3.371 1.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.411 -1.443) (end 3.411 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.411 1.04) (end 3.411 1.443) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.451 -1.383) (end 3.451 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.451 1.04) (end 3.451 1.383) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.491 -1.319) (end 3.491 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.491 1.04) (end 3.491 1.319) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.531 -1.251) (end 3.531 -1.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.531 1.04) (end 3.531 1.251) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.571 -1.178) (end 3.571 1.178) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.611 -1.098) (end 3.611 1.098) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.651 -1.011) (end 3.651 1.011) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.691 -0.915) (end 3.691 0.915) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.731 -0.805) (end 3.731 0.805) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.771 -0.677) (end 3.771 0.677) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.811 -0.518) (end 3.811 0.518) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.851 -0.284) (end 3.851 0.284) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.554775 -1.475) (end -1.054775 -1.475) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.304775 -1.725) (end -1.304775 -1.225) (layer F.SilkS) (width 0.12)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/CP_Radial_D5.0mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5F46519A) + (at 131.318 69.342) + (descr "C, Disc series, Radial, pin pitch=5.00mm, , diameter*width=6*2.5mm^2, Capacitor, http://cdn-reichelt.de/documents/datenblatt/B300/DS_KERKO_TC.pdf") + (tags "C Disc series Radial pin pitch 5.00mm diameter 6mm width 2.5mm Capacitor") + (path /5F466489) + (fp_text reference C2 (at 2.5 -2.5) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 0.1uF (at 2.5 2.5) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.5 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.5 -1.25) (end -0.5 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.5 1.25) (end 5.5 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.5 1.25) (end 5.5 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.5 -1.25) (end -0.5 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.62 -1.37) (end 5.62 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 1.37) (end 5.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 -1.37) (end -0.62 -0.925) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.62 0.925) (end -0.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.62 -1.37) (end 5.62 -0.925) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.62 0.925) (end 5.62 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 6.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.05 1.5) (end 6.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.05 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (pad 2 thru_hole circle (at 5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +12V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D6.0mm_W2.5mm_P5.00mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text v1.0 (at 151.13 134.62) (layer B.Cu) + (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) + ) + (gr_text "MyEP\nFING\nUNCUYO" (at 131.826 130.81) (layer B.Cu) (tstamp 5F46DDCC) + (effects (font (size 1.5 1.5) (thickness 0.375)) (justify mirror)) + ) + (gr_line (start 180.086 52.832) (end 108.966 52.832) (layer Edge.Cuts) (width 0.05) (tstamp 5F46DDBA)) + (gr_line (start 180.086 139.192) (end 180.086 52.832) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 108.966 139.192) (end 180.086 139.192) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 108.966 52.832) (end 108.966 139.192) (layer Edge.Cuts) (width 0.05)) + + (segment (start 128.27 61.722) (end 123.444 61.722) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 129.794 60.198) (end 129.794 58.928) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 128.27 61.722) (end 129.794 60.198) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 146.017 129.126) (end 151.892 129.126) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 136.779 119.888) (end 146.017 129.126) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 56.388) (end 175.006 56.388) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 70.104) (end 175.006 70.104) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 84.074) (end 175.006 84.074) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 98.044) (end 175.006 98.044) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 111.76) (end 175.006 111.76) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 125.73) (end 175.006 125.73) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 68.003999) (end 175.006 70.104) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 58.488001) (end 177.106001 68.003999) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 175.006 56.388) (end 177.106001 58.488001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 72.204001) (end 177.106001 81.973999) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 81.973999) (end 175.006 84.074) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 175.006 70.104) (end 177.106001 72.204001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 95.943999) (end 175.006 98.044) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 86.174001) (end 177.106001 95.943999) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 175.006 84.074) (end 177.106001 86.174001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 109.659999) (end 175.006 111.76) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 100.144001) (end 177.106001 109.659999) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 175.006 98.044) (end 177.106001 100.144001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 123.629999) (end 175.006 125.73) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 177.106001 113.860001) (end 177.106001 123.629999) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 175.006 111.76) (end 177.106001 113.860001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 111.76) (end 169.672 109.982) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 153.576 109.982) (end 151.892 108.298) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 169.672 109.982) (end 153.576 109.982) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 158.661598 87.724) (end 151.892 87.724) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 163.111597 83.274001) (end 158.661598 87.724) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 170.650001 83.274001) (end 163.111597 83.274001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 171.45 84.074) (end 170.650001 83.274001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 134.27899 95.992852) (end 134.27899 78.71164) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 135.949138 97.663) (end 134.27899 95.992852) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 136.779 97.663) (end 135.949138 97.663) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 136.779 119.888) (end 135.949138 119.888) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 134.27899 100.16301) (end 136.779 97.663) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 134.27899 118.217852) (end 134.27899 100.16301) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 135.949138 119.888) (end 134.27899 118.217852) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 170.650001 55.588001) (end 171.45 56.388) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 163.537997 55.588001) (end 170.650001 55.588001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 160.528 58.597998) (end 163.537997 55.588001) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 127.254 65.278) (end 124.968 65.278) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 131.318 69.342) (end 127.254 65.278) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 138.82263 74.168) (end 139.954 74.168) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 134.27899 78.71164) (end 138.82263 74.168) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 138.82263 74.168) (end 138.82263 74.05263) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 138.82263 74.05263) (end 137.16 72.39) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 134.366 72.39) (end 131.318 69.342) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 137.16 72.39) (end 134.366 72.39) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 122.428 62.738) (end 123.444 61.722) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 116.586 62.738) (end 122.428 62.738) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 122.428 62.738) (end 124.968 65.278) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 139.954 74.168) (end 143.02401 74.168) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 151.384 75.438) (end 160.528 66.294) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 144.29401 75.438) (end 151.384 75.438) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 160.528 66.294) (end 160.528 58.597998) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 143.02401 74.168) (end 144.29401 75.438) (width 1.2) (layer B.Cu) (net 2)) + (segment (start 137.922 58.928) (end 140.716 61.722) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 134.874 58.928) (end 137.922 58.928) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 134.112 62.992) (end 134.112 61.976) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 134.874 61.214) (end 134.874 58.928) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 134.112 61.976) (end 134.874 61.214) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 134.112 65.042) (end 134.112 62.992) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 135.28601 66.21601) (end 134.112 65.042) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 147.828 69.207998) (end 144.836012 66.21601) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 144.836012 66.21601) (end 135.28601 66.21601) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 147.828 69.85) (end 147.828 69.207998) (width 1.2) (layer B.Cu) (net 3)) + (segment (start 175.006 65.532) (end 175.006 66.548) (width 1) (layer B.Cu) (net 4)) + (segment (start 167.64 58.166) (end 175.006 65.532) (width 1) (layer B.Cu) (net 4)) + (segment (start 138.938 77.724) (end 151.892 77.724) (width 1) (layer B.Cu) (net 5)) + (segment (start 136.779 79.883) (end 138.938 77.724) (width 1) (layer B.Cu) (net 5)) + (segment (start 162.328009 60.937991) (end 165.1 58.166) (width 1) (layer B.Cu) (net 5)) + (segment (start 162.328009 67.287991) (end 162.328009 60.937991) (width 1) (layer B.Cu) (net 5)) + (segment (start 151.892 77.724) (end 162.328009 67.287991) (width 1) (layer B.Cu) (net 5)) + (segment (start 169.926 65.024) (end 171.45 66.548) (width 1) (layer B.Cu) (net 6)) + (segment (start 167.64 65.024) (end 169.926 65.024) (width 1) (layer B.Cu) (net 6)) + (segment (start 152.767626 80.224) (end 165.1 67.891626) (width 1) (layer B.Cu) (net 7)) + (segment (start 165.1 67.891626) (end 165.1 65.024) (width 1) (layer B.Cu) (net 7)) + (segment (start 151.892 80.224) (end 152.767626 80.224) (width 1) (layer B.Cu) (net 7)) + (segment (start 151.367849 80.224) (end 151.892 80.224) (width 1) (layer B.Cu) (net 7)) + (segment (start 149.168849 82.423) (end 151.367849 80.224) (width 1) (layer B.Cu) (net 7)) + (segment (start 136.779 82.423) (end 149.168849 82.423) (width 1) (layer B.Cu) (net 7)) + (segment (start 175.006 79.248) (end 175.006 80.264) (width 1) (layer B.Cu) (net 8)) + (segment (start 167.64 71.882) (end 175.006 79.248) (width 1) (layer B.Cu) (net 8)) + (segment (start 154.258 82.724) (end 165.1 71.882) (width 1) (layer B.Cu) (net 9)) + (segment (start 151.892 82.724) (end 154.258 82.724) (width 1) (layer B.Cu) (net 9)) + (segment (start 151.367849 82.724) (end 151.892 82.724) (width 1) (layer B.Cu) (net 9)) + (segment (start 149.128849 84.963) (end 151.367849 82.724) (width 1) (layer B.Cu) (net 9)) + (segment (start 136.779 84.963) (end 149.128849 84.963) (width 1) (layer B.Cu) (net 9)) + (segment (start 169.926 78.74) (end 171.45 80.264) (width 1) (layer B.Cu) (net 10)) + (segment (start 167.64 78.74) (end 169.926 78.74) (width 1) (layer B.Cu) (net 10)) + (segment (start 158.616 85.224) (end 165.1 78.74) (width 1) (layer B.Cu) (net 11)) + (segment (start 151.892 85.224) (end 158.616 85.224) (width 1) (layer B.Cu) (net 11)) + (segment (start 151.367849 85.224) (end 151.892 85.224) (width 1) (layer B.Cu) (net 11)) + (segment (start 149.088849 87.503) (end 151.367849 85.224) (width 1) (layer B.Cu) (net 11)) + (segment (start 136.779 87.503) (end 149.088849 87.503) (width 1) (layer B.Cu) (net 11)) + (segment (start 175.006 93.218) (end 175.006 94.234) (width 1) (layer B.Cu) (net 12)) + (segment (start 167.64 85.852) (end 175.006 93.218) (width 1) (layer B.Cu) (net 12)) + (segment (start 152.654 98.298) (end 165.1 85.852) (width 1) (layer B.Cu) (net 13)) + (segment (start 151.892 98.298) (end 152.654 98.298) (width 1) (layer B.Cu) (net 13)) + (segment (start 143.637 90.043) (end 136.779 90.043) (width 1) (layer B.Cu) (net 13)) + (segment (start 151.892 98.298) (end 143.637 90.043) (width 1) (layer B.Cu) (net 13)) + (segment (start 169.926 92.71) (end 171.45 94.234) (width 1) (layer B.Cu) (net 14)) + (segment (start 167.64 92.71) (end 169.926 92.71) (width 1) (layer B.Cu) (net 14)) + (segment (start 157.012 100.798) (end 165.1 92.71) (width 1) (layer B.Cu) (net 15)) + (segment (start 151.892 100.798) (end 157.012 100.798) (width 1) (layer B.Cu) (net 15)) + (segment (start 151.016374 100.798) (end 151.892 100.798) (width 1) (layer B.Cu) (net 15)) + (segment (start 142.801374 92.583) (end 151.016374 100.798) (width 1) (layer B.Cu) (net 15)) + (segment (start 136.779 92.583) (end 142.801374 92.583) (width 1) (layer B.Cu) (net 15)) + (segment (start 175.006 107.188) (end 175.006 108.204) (width 1) (layer B.Cu) (net 16)) + (segment (start 167.64 99.822) (end 175.006 107.188) (width 1) (layer B.Cu) (net 16)) + (segment (start 161.624 103.298) (end 165.1 99.822) (width 1) (layer B.Cu) (net 17)) + (segment (start 151.892 103.298) (end 161.624 103.298) (width 1) (layer B.Cu) (net 17)) + (segment (start 151.112197 103.298) (end 151.892 103.298) (width 1) (layer B.Cu) (net 17)) + (segment (start 149.922197 102.108) (end 151.112197 103.298) (width 1) (layer B.Cu) (net 17)) + (segment (start 136.779 102.108) (end 149.922197 102.108) (width 1) (layer B.Cu) (net 17)) + (segment (start 169.926 106.68) (end 171.45 108.204) (width 1) (layer B.Cu) (net 18)) + (segment (start 167.64 106.68) (end 169.926 106.68) (width 1) (layer B.Cu) (net 18)) + (segment (start 164.218 105.798) (end 165.1 106.68) (width 1) (layer B.Cu) (net 19)) + (segment (start 151.892 105.798) (end 164.218 105.798) (width 1) (layer B.Cu) (net 19)) + (segment (start 151.20802 105.798) (end 151.892 105.798) (width 1) (layer B.Cu) (net 19)) + (segment (start 150.05802 104.648) (end 151.20802 105.798) (width 1) (layer B.Cu) (net 19)) + (segment (start 136.779 104.648) (end 150.05802 104.648) (width 1) (layer B.Cu) (net 19)) + (segment (start 175.006 120.904) (end 175.006 121.92) (width 1) (layer B.Cu) (net 20)) + (segment (start 167.64 113.538) (end 175.006 120.904) (width 1) (layer B.Cu) (net 20)) + (segment (start 140.804 107.188) (end 136.779 107.188) (width 1) (layer B.Cu) (net 21)) + (segment (start 151.892 118.276) (end 140.804 107.188) (width 1) (layer B.Cu) (net 21)) + (segment (start 151.892 119.126) (end 151.892 118.276) (width 1) (layer B.Cu) (net 21)) + (segment (start 159.512 119.126) (end 165.1 113.538) (width 1) (layer B.Cu) (net 21)) + (segment (start 151.892 119.126) (end 159.512 119.126) (width 1) (layer B.Cu) (net 21)) + (segment (start 169.926 120.396) (end 171.45 121.92) (width 1) (layer B.Cu) (net 22)) + (segment (start 167.64 120.396) (end 169.926 120.396) (width 1) (layer B.Cu) (net 22)) + (segment (start 137.923176 109.728) (end 136.779 109.728) (width 1) (layer B.Cu) (net 23)) + (segment (start 149.821176 121.626) (end 137.923176 109.728) (width 1) (layer B.Cu) (net 23)) + (segment (start 151.892 121.626) (end 149.821176 121.626) (width 1) (layer B.Cu) (net 23)) + (segment (start 163.87 121.626) (end 165.1 120.396) (width 1) (layer B.Cu) (net 23)) + (segment (start 151.892 121.626) (end 163.87 121.626) (width 1) (layer B.Cu) (net 23)) + (segment (start 175.006 134.62) (end 175.006 135.89) (width 1) (layer B.Cu) (net 24)) + (segment (start 167.64 127.254) (end 175.006 134.62) (width 1) (layer B.Cu) (net 24)) + (segment (start 138.059 112.268) (end 136.779 112.268) (width 1) (layer B.Cu) (net 25)) + (segment (start 149.917 124.126) (end 138.059 112.268) (width 1) (layer B.Cu) (net 25)) + (segment (start 151.892 124.126) (end 149.917 124.126) (width 1) (layer B.Cu) (net 25)) + (segment (start 161.972 124.126) (end 165.1 127.254) (width 1) (layer B.Cu) (net 25)) + (segment (start 151.892 124.126) (end 161.972 124.126) (width 1) (layer B.Cu) (net 25)) + (segment (start 169.672 134.112) (end 171.45 135.89) (width 1) (layer B.Cu) (net 26)) + (segment (start 167.64 134.112) (end 169.672 134.112) (width 1) (layer B.Cu) (net 26)) + (segment (start 137.467441 114.808) (end 136.779 114.808) (width 1) (layer B.Cu) (net 27)) + (segment (start 149.285441 126.626) (end 137.467441 114.808) (width 1) (layer B.Cu) (net 27)) + (segment (start 151.892 126.626) (end 149.285441 126.626) (width 1) (layer B.Cu) (net 27)) + (segment (start 157.614 126.626) (end 165.1 134.112) (width 1) (layer B.Cu) (net 27)) + (segment (start 151.892 126.626) (end 157.614 126.626) (width 1) (layer B.Cu) (net 27)) + (segment (start 126.746 74.168) (end 125.984 73.406) (width 1) (layer B.Cu) (net 28)) + (segment (start 129.794 74.168) (end 126.746 74.168) (width 1) (layer B.Cu) (net 28)) + (segment (start 129.159 79.883) (end 122.301 79.883) (width 1) (layer B.Cu) (net 29)) + (segment (start 117.856 75.438) (end 115.189 75.438) (width 1) (layer B.Cu) (net 29)) + (segment (start 122.301 79.883) (end 117.856 75.438) (width 1) (layer B.Cu) (net 29)) + (segment (start 129.159 87.503) (end 122.301 87.503) (width 1) (layer B.Cu) (net 30)) + (segment (start 119.126 90.678) (end 115.189 90.678) (width 1) (layer B.Cu) (net 30)) + (segment (start 122.301 87.503) (end 119.126 90.678) (width 1) (layer B.Cu) (net 30)) + (segment (start 129.159 82.423) (end 121.539 82.423) (width 1) (layer B.Cu) (net 31)) + (segment (start 119.634 80.518) (end 115.189 80.518) (width 1) (layer B.Cu) (net 31)) + (segment (start 121.539 82.423) (end 119.634 80.518) (width 1) (layer B.Cu) (net 31)) + (segment (start 115.824 84.963) (end 115.189 85.598) (width 1) (layer B.Cu) (net 32)) + (segment (start 129.159 84.963) (end 115.824 84.963) (width 1) (layer B.Cu) (net 32)) + (segment (start 150.368 65.024) (end 155.702 59.69) (width 1) (layer B.Cu) (net 33)) + (segment (start 150.368 69.85) (end 150.368 65.024) (width 1) (layer B.Cu) (net 33)) + (segment (start 129.159 90.043) (end 123.825 90.043) (width 1) (layer B.Cu) (net 34)) + (segment (start 117.475 96.393) (end 115.189 96.393) (width 1) (layer B.Cu) (net 34)) + (segment (start 123.825 90.043) (end 117.475 96.393) (width 1) (layer B.Cu) (net 34)) + (segment (start 129.159 104.648) (end 123.698 104.648) (width 1) (layer B.Cu) (net 35)) + (segment (start 116.713 111.633) (end 115.189 111.633) (width 1) (layer B.Cu) (net 35)) + (segment (start 123.698 104.648) (end 116.713 111.633) (width 1) (layer B.Cu) (net 35)) + (segment (start 115.189 101.473) (end 117.475 101.473) (width 1) (layer B.Cu) (net 36)) + (segment (start 126.365 92.583) (end 129.159 92.583) (width 1) (layer B.Cu) (net 36)) + (segment (start 117.475 101.473) (end 126.365 92.583) (width 1) (layer B.Cu) (net 36)) + (segment (start 115.189 106.553) (end 117.729 106.553) (width 1) (layer B.Cu) (net 37)) + (segment (start 122.174 102.108) (end 129.159 102.108) (width 1) (layer B.Cu) (net 37)) + (segment (start 117.729 106.553) (end 122.174 102.108) (width 1) (layer B.Cu) (net 37)) + (segment (start 138.176 64.516) (end 136.652 62.992) (width 1.2) (layer B.Cu) (net 38)) + (segment (start 145.796 64.516) (end 150.622 59.69) (width 1.2) (layer B.Cu) (net 38)) + (segment (start 138.176 64.516) (end 145.796 64.516) (width 1.2) (layer B.Cu) (net 38)) + (segment (start 125.349 107.188) (end 129.159 107.188) (width 1) (layer B.Cu) (net 39)) + (segment (start 115.189 117.348) (end 125.349 107.188) (width 1) (layer B.Cu) (net 39)) + (segment (start 126.959 114.808) (end 129.159 114.808) (width 1) (layer B.Cu) (net 40)) + (segment (start 120.142 125.309998) (end 124.884999 120.566999) (width 1) (layer B.Cu) (net 40)) + (segment (start 124.884999 120.566999) (end 124.884999 116.882001) (width 1) (layer B.Cu) (net 40)) + (segment (start 120.142 129.794) (end 120.142 125.309998) (width 1) (layer B.Cu) (net 40)) + (segment (start 124.884999 116.882001) (end 126.959 114.808) (width 1) (layer B.Cu) (net 40)) + (segment (start 117.348 132.588) (end 120.142 129.794) (width 1) (layer B.Cu) (net 40)) + (segment (start 115.189 132.588) (end 117.348 132.588) (width 1) (layer B.Cu) (net 40)) + (segment (start 115.189 122.428) (end 120.65 116.967) (width 1) (layer B.Cu) (net 41)) + (segment (start 120.65 116.967) (end 120.65 114.808) (width 1) (layer B.Cu) (net 41)) + (segment (start 125.73 109.728) (end 129.159 109.728) (width 1) (layer B.Cu) (net 41)) + (segment (start 120.65 114.808) (end 125.73 109.728) (width 1) (layer B.Cu) (net 41)) + (segment (start 127.094824 112.268) (end 129.159 112.268) (width 1) (layer B.Cu) (net 42)) + (segment (start 122.6185 116.744324) (end 127.094824 112.268) (width 1) (layer B.Cu) (net 42)) + (segment (start 122.6185 120.0785) (end 122.6185 116.744324) (width 1) (layer B.Cu) (net 42)) + (segment (start 115.189 127.508) (end 122.6185 120.0785) (width 1) (layer B.Cu) (net 42)) + + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 0) (hatch edge 0.508) + (connect_pads (clearance 0.8)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 180.34 139.446) (xy 108.712 139.446) (xy 108.712 52.578) (xy 180.34 52.578) + ) + ) + (filled_polygon + (pts + (xy 179.134 138.24) (xy 109.918 138.24) (xy 109.918 110.133) (xy 112.757515 110.133) (xy 112.757515 113.133) + (xy 112.775413 113.314724) (xy 112.82842 113.489464) (xy 112.914499 113.650505) (xy 113.030341 113.791659) (xy 113.171495 113.907501) + (xy 113.332536 113.99358) (xy 113.507276 114.046587) (xy 113.689 114.064485) (xy 116.454433 114.064485) (xy 115.569733 114.949185) + (xy 115.428039 114.921) (xy 114.949961 114.921) (xy 114.48107 115.014268) (xy 114.039385 115.197221) (xy 113.641878 115.462826) + (xy 113.303826 115.800878) (xy 113.038221 116.198385) (xy 112.855268 116.64007) (xy 112.762 117.108961) (xy 112.762 117.587039) + (xy 112.855268 118.05593) (xy 113.038221 118.497615) (xy 113.303826 118.895122) (xy 113.641878 119.233174) (xy 114.039385 119.498779) + (xy 114.48107 119.681732) (xy 114.949961 119.775) (xy 115.428039 119.775) (xy 115.89693 119.681732) (xy 115.931509 119.667409) + (xy 115.569733 120.029185) (xy 115.428039 120.001) (xy 114.949961 120.001) (xy 114.48107 120.094268) (xy 114.039385 120.277221) + (xy 113.641878 120.542826) (xy 113.303826 120.880878) (xy 113.038221 121.278385) (xy 112.855268 121.72007) (xy 112.762 122.188961) + (xy 112.762 122.667039) (xy 112.855268 123.13593) (xy 113.038221 123.577615) (xy 113.303826 123.975122) (xy 113.641878 124.313174) + (xy 114.039385 124.578779) (xy 114.48107 124.761732) (xy 114.949961 124.855) (xy 115.428039 124.855) (xy 115.89693 124.761732) + (xy 115.931509 124.747409) (xy 115.569733 125.109185) (xy 115.428039 125.081) (xy 114.949961 125.081) (xy 114.48107 125.174268) + (xy 114.039385 125.357221) (xy 113.641878 125.622826) (xy 113.303826 125.960878) (xy 113.038221 126.358385) (xy 112.855268 126.80007) + (xy 112.762 127.268961) (xy 112.762 127.747039) (xy 112.855268 128.21593) (xy 113.038221 128.657615) (xy 113.303826 129.055122) + (xy 113.641878 129.393174) (xy 114.039385 129.658779) (xy 114.48107 129.841732) (xy 114.949961 129.935) (xy 115.428039 129.935) + (xy 115.89693 129.841732) (xy 116.338615 129.658779) (xy 116.736122 129.393174) (xy 117.074174 129.055122) (xy 117.339779 128.657615) + (xy 117.522732 128.21593) (xy 117.616 127.747039) (xy 117.616 127.268961) (xy 117.587815 127.127267) (xy 118.715001 126.000082) + (xy 118.715 129.202917) (xy 117.411178 130.506739) (xy 117.347659 130.429341) (xy 117.206505 130.313499) (xy 117.045464 130.22742) + (xy 116.870724 130.174413) (xy 116.689 130.156515) (xy 113.689 130.156515) (xy 113.507276 130.174413) (xy 113.332536 130.22742) + (xy 113.171495 130.313499) (xy 113.030341 130.429341) (xy 112.914499 130.570495) (xy 112.82842 130.731536) (xy 112.775413 130.906276) + (xy 112.757515 131.088) (xy 112.757515 134.088) (xy 112.775413 134.269724) (xy 112.82842 134.444464) (xy 112.914499 134.605505) + (xy 113.030341 134.746659) (xy 113.171495 134.862501) (xy 113.332536 134.94858) (xy 113.507276 135.001587) (xy 113.689 135.019485) + (xy 116.689 135.019485) (xy 116.870724 135.001587) (xy 117.045464 134.94858) (xy 117.206505 134.862501) (xy 117.347659 134.746659) + (xy 117.463501 134.605505) (xy 117.54958 134.444464) (xy 117.602587 134.269724) (xy 117.620485 134.088) (xy 117.620485 133.995067) + (xy 117.627741 133.994352) (xy 117.896731 133.912755) (xy 118.144634 133.780248) (xy 118.361923 133.601923) (xy 118.406609 133.547473) + (xy 121.101482 130.852601) (xy 121.155922 130.807923) (xy 121.200601 130.753482) (xy 121.200608 130.753475) (xy 121.334248 130.590635) + (xy 121.420461 130.429341) (xy 121.466755 130.342731) (xy 121.548352 130.073741) (xy 121.569 129.864098) (xy 121.569 129.86409) + (xy 121.575903 129.794) (xy 121.569 129.72391) (xy 121.569 126.08425) (xy 126.175786 126.08425) (xy 126.175786 135.81325) + (xy 137.476215 135.81325) (xy 137.476215 132.538) (xy 147.695857 132.538) (xy 147.695857 136.942) (xy 154.564143 136.942) + (xy 154.564143 132.538) (xy 147.695857 132.538) (xy 137.476215 132.538) (xy 137.476215 126.08425) (xy 126.175786 126.08425) + (xy 121.569 126.08425) (xy 121.569 125.90108) (xy 125.844482 121.625599) (xy 125.898921 121.580922) (xy 125.9436 121.526481) + (xy 125.943607 121.526474) (xy 126.077247 121.363633) (xy 126.209754 121.115731) (xy 126.291351 120.84674) (xy 126.308193 120.675741) + (xy 126.311999 120.637097) (xy 126.311999 120.637096) (xy 126.318903 120.566999) (xy 126.311999 120.496901) (xy 126.311999 120.237039) + (xy 127.367096 120.237039) (xy 127.384633 120.319818) (xy 127.495285 120.579646) (xy 127.6545 120.812895) (xy 127.856161 121.010601) + (xy 128.092517 121.165166) (xy 128.354486 121.27065) (xy 128.632 121.323) (xy 129.032 121.323) (xy 129.032 120.015) + (xy 129.286 120.015) (xy 129.286 121.323) (xy 129.686 121.323) (xy 129.963514 121.27065) (xy 130.225483 121.165166) + (xy 130.461839 121.010601) (xy 130.6635 120.812895) (xy 130.822715 120.579646) (xy 130.933367 120.319818) (xy 130.950904 120.237039) + (xy 130.828915 120.015) (xy 129.286 120.015) (xy 129.032 120.015) (xy 127.489085 120.015) (xy 127.367096 120.237039) + (xy 126.311999 120.237039) (xy 126.311999 117.473083) (xy 127.218397 116.566685) (xy 127.15574 116.683908) (xy 127.056988 117.009449) + (xy 127.023644 117.348) (xy 127.056988 117.686551) (xy 127.15574 118.012092) (xy 127.316104 118.312112) (xy 127.531918 118.575082) + (xy 127.794888 118.790896) (xy 127.817711 118.803095) (xy 127.6545 118.963105) (xy 127.495285 119.196354) (xy 127.384633 119.456182) + (xy 127.367096 119.538961) (xy 127.489085 119.761) (xy 129.032 119.761) (xy 129.032 119.741) (xy 129.286 119.741) + (xy 129.286 119.761) (xy 130.828915 119.761) (xy 130.950904 119.538961) (xy 130.933367 119.456182) (xy 130.822715 119.196354) + (xy 130.6635 118.963105) (xy 130.500289 118.803095) (xy 130.523112 118.790896) (xy 130.786082 118.575082) (xy 131.001896 118.312112) + (xy 131.16226 118.012092) (xy 131.261012 117.686551) (xy 131.294356 117.348) (xy 131.261012 117.009449) (xy 131.16226 116.683908) + (xy 131.001896 116.383888) (xy 130.786082 116.120918) (xy 130.733786 116.078) (xy 130.786082 116.035082) (xy 131.001896 115.772112) + (xy 131.16226 115.472092) (xy 131.261012 115.146551) (xy 131.294356 114.808) (xy 131.261012 114.469449) (xy 131.16226 114.143908) + (xy 131.001896 113.843888) (xy 130.786082 113.580918) (xy 130.733786 113.538) (xy 130.786082 113.495082) (xy 131.001896 113.232112) + (xy 131.16226 112.932092) (xy 131.261012 112.606551) (xy 131.294356 112.268) (xy 131.261012 111.929449) (xy 131.16226 111.603908) + (xy 131.001896 111.303888) (xy 130.786082 111.040918) (xy 130.733786 110.998) (xy 130.786082 110.955082) (xy 131.001896 110.692112) + (xy 131.16226 110.392092) (xy 131.261012 110.066551) (xy 131.294356 109.728) (xy 131.261012 109.389449) (xy 131.16226 109.063908) + (xy 131.001896 108.763888) (xy 130.786082 108.500918) (xy 130.733786 108.458) (xy 130.786082 108.415082) (xy 131.001896 108.152112) + (xy 131.16226 107.852092) (xy 131.261012 107.526551) (xy 131.294356 107.188) (xy 131.261012 106.849449) (xy 131.16226 106.523908) + (xy 131.001896 106.223888) (xy 130.786082 105.960918) (xy 130.733786 105.918) (xy 130.786082 105.875082) (xy 131.001896 105.612112) + (xy 131.16226 105.312092) (xy 131.261012 104.986551) (xy 131.294356 104.648) (xy 131.261012 104.309449) (xy 131.16226 103.983908) + (xy 131.001896 103.683888) (xy 130.950752 103.621568) (xy 131.017659 103.566659) (xy 131.133501 103.425505) (xy 131.21958 103.264464) + (xy 131.272587 103.089724) (xy 131.290485 102.908) (xy 131.290485 101.308) (xy 131.272587 101.126276) (xy 131.21958 100.951536) + (xy 131.133501 100.790495) (xy 131.017659 100.649341) (xy 130.876505 100.533499) (xy 130.715464 100.44742) (xy 130.540724 100.394413) + (xy 130.359 100.376515) (xy 127.959 100.376515) (xy 127.777276 100.394413) (xy 127.602536 100.44742) (xy 127.441495 100.533499) + (xy 127.300341 100.649341) (xy 127.274359 100.681) (xy 122.244087 100.681) (xy 122.173999 100.674097) (xy 122.103911 100.681) + (xy 122.103902 100.681) (xy 121.894259 100.701648) (xy 121.625269 100.783245) (xy 121.377366 100.915752) (xy 121.160077 101.094077) + (xy 121.11539 101.148528) (xy 117.14782 105.116098) (xy 117.074174 105.005878) (xy 116.736122 104.667826) (xy 116.338615 104.402221) + (xy 115.89693 104.219268) (xy 115.428039 104.126) (xy 114.949961 104.126) (xy 114.48107 104.219268) (xy 114.039385 104.402221) + (xy 113.641878 104.667826) (xy 113.303826 105.005878) (xy 113.038221 105.403385) (xy 112.855268 105.84507) (xy 112.762 106.313961) + (xy 112.762 106.792039) (xy 112.855268 107.26093) (xy 113.038221 107.702615) (xy 113.303826 108.100122) (xy 113.641878 108.438174) + (xy 114.039385 108.703779) (xy 114.48107 108.886732) (xy 114.949961 108.98) (xy 115.428039 108.98) (xy 115.89693 108.886732) + (xy 116.338615 108.703779) (xy 116.736122 108.438174) (xy 117.074174 108.100122) (xy 117.154437 107.98) (xy 117.658912 107.98) + (xy 117.729 107.986903) (xy 117.799088 107.98) (xy 117.799098 107.98) (xy 118.008741 107.959352) (xy 118.277731 107.877755) + (xy 118.525634 107.745248) (xy 118.742923 107.566923) (xy 118.78761 107.512472) (xy 122.765082 103.535) (xy 122.804802 103.535) + (xy 122.738525 103.589392) (xy 122.738522 103.589395) (xy 122.684077 103.634077) (xy 122.639395 103.688522) (xy 117.052003 109.275915) + (xy 117.045464 109.27242) (xy 116.870724 109.219413) (xy 116.689 109.201515) (xy 113.689 109.201515) (xy 113.507276 109.219413) + (xy 113.332536 109.27242) (xy 113.171495 109.358499) (xy 113.030341 109.474341) (xy 112.914499 109.615495) (xy 112.82842 109.776536) + (xy 112.775413 109.951276) (xy 112.757515 110.133) (xy 109.918 110.133) (xy 109.918 89.178) (xy 112.757515 89.178) + (xy 112.757515 92.178) (xy 112.775413 92.359724) (xy 112.82842 92.534464) (xy 112.914499 92.695505) (xy 113.030341 92.836659) + (xy 113.171495 92.952501) (xy 113.332536 93.03858) (xy 113.507276 93.091587) (xy 113.689 93.109485) (xy 116.689 93.109485) + (xy 116.870724 93.091587) (xy 117.045464 93.03858) (xy 117.206505 92.952501) (xy 117.347659 92.836659) (xy 117.463501 92.695505) + (xy 117.54958 92.534464) (xy 117.602587 92.359724) (xy 117.620485 92.178) (xy 117.620485 92.105) (xy 119.055912 92.105) + (xy 119.126 92.111903) (xy 119.196088 92.105) (xy 119.196098 92.105) (xy 119.405741 92.084352) (xy 119.674731 92.002755) + (xy 119.922634 91.870248) (xy 120.139923 91.691923) (xy 120.184609 91.637473) (xy 122.892083 88.93) (xy 122.931802 88.93) + (xy 122.865525 88.984392) (xy 122.865522 88.984395) (xy 122.811077 89.029077) (xy 122.766395 89.083522) (xy 117.039107 94.810811) + (xy 116.736122 94.507826) (xy 116.338615 94.242221) (xy 115.89693 94.059268) (xy 115.428039 93.966) (xy 114.949961 93.966) + (xy 114.48107 94.059268) (xy 114.039385 94.242221) (xy 113.641878 94.507826) (xy 113.303826 94.845878) (xy 113.038221 95.243385) + (xy 112.855268 95.68507) (xy 112.762 96.153961) (xy 112.762 96.632039) (xy 112.855268 97.10093) (xy 113.038221 97.542615) + (xy 113.303826 97.940122) (xy 113.641878 98.278174) (xy 114.039385 98.543779) (xy 114.48107 98.726732) (xy 114.949961 98.82) + (xy 115.428039 98.82) (xy 115.89693 98.726732) (xy 116.338615 98.543779) (xy 116.736122 98.278174) (xy 117.074174 97.940122) + (xy 117.154437 97.82) (xy 117.404912 97.82) (xy 117.475 97.826903) (xy 117.545088 97.82) (xy 117.545098 97.82) + (xy 117.754741 97.799352) (xy 118.023731 97.717755) (xy 118.271634 97.585248) (xy 118.488923 97.406923) (xy 118.533609 97.352473) + (xy 124.416083 91.47) (xy 125.471802 91.47) (xy 125.405525 91.524392) (xy 125.405522 91.524395) (xy 125.351077 91.569077) + (xy 125.306395 91.623522) (xy 117.039107 99.890811) (xy 116.736122 99.587826) (xy 116.338615 99.322221) (xy 115.89693 99.139268) + (xy 115.428039 99.046) (xy 114.949961 99.046) (xy 114.48107 99.139268) (xy 114.039385 99.322221) (xy 113.641878 99.587826) + (xy 113.303826 99.925878) (xy 113.038221 100.323385) (xy 112.855268 100.76507) (xy 112.762 101.233961) (xy 112.762 101.712039) + (xy 112.855268 102.18093) (xy 113.038221 102.622615) (xy 113.303826 103.020122) (xy 113.641878 103.358174) (xy 114.039385 103.623779) + (xy 114.48107 103.806732) (xy 114.949961 103.9) (xy 115.428039 103.9) (xy 115.89693 103.806732) (xy 116.338615 103.623779) + (xy 116.736122 103.358174) (xy 117.074174 103.020122) (xy 117.154437 102.9) (xy 117.404912 102.9) (xy 117.475 102.906903) + (xy 117.545088 102.9) (xy 117.545098 102.9) (xy 117.754741 102.879352) (xy 118.023731 102.797755) (xy 118.271634 102.665248) + (xy 118.488923 102.486923) (xy 118.533609 102.432473) (xy 122.954043 98.012039) (xy 127.367096 98.012039) (xy 127.384633 98.094818) + (xy 127.495285 98.354646) (xy 127.6545 98.587895) (xy 127.856161 98.785601) (xy 128.092517 98.940166) (xy 128.354486 99.04565) + (xy 128.632 99.098) (xy 129.032 99.098) (xy 129.032 97.79) (xy 129.286 97.79) (xy 129.286 99.098) + (xy 129.686 99.098) (xy 129.963514 99.04565) (xy 130.225483 98.940166) (xy 130.461839 98.785601) (xy 130.6635 98.587895) + (xy 130.822715 98.354646) (xy 130.933367 98.094818) (xy 130.950904 98.012039) (xy 130.828915 97.79) (xy 129.286 97.79) + (xy 129.032 97.79) (xy 127.489085 97.79) (xy 127.367096 98.012039) (xy 122.954043 98.012039) (xy 126.956083 94.01) + (xy 127.438293 94.01) (xy 127.316104 94.158888) (xy 127.15574 94.458908) (xy 127.056988 94.784449) (xy 127.023644 95.123) + (xy 127.056988 95.461551) (xy 127.15574 95.787092) (xy 127.316104 96.087112) (xy 127.531918 96.350082) (xy 127.794888 96.565896) + (xy 127.817711 96.578095) (xy 127.6545 96.738105) (xy 127.495285 96.971354) (xy 127.384633 97.231182) (xy 127.367096 97.313961) + (xy 127.489085 97.536) (xy 129.032 97.536) (xy 129.032 97.516) (xy 129.286 97.516) (xy 129.286 97.536) + (xy 130.828915 97.536) (xy 130.950904 97.313961) (xy 130.933367 97.231182) (xy 130.822715 96.971354) (xy 130.6635 96.738105) + (xy 130.500289 96.578095) (xy 130.523112 96.565896) (xy 130.786082 96.350082) (xy 131.001896 96.087112) (xy 131.16226 95.787092) + (xy 131.261012 95.461551) (xy 131.294356 95.123) (xy 131.261012 94.784449) (xy 131.16226 94.458908) (xy 131.001896 94.158888) + (xy 130.786082 93.895918) (xy 130.733786 93.853) (xy 130.786082 93.810082) (xy 131.001896 93.547112) (xy 131.16226 93.247092) + (xy 131.261012 92.921551) (xy 131.294356 92.583) (xy 131.261012 92.244449) (xy 131.16226 91.918908) (xy 131.001896 91.618888) + (xy 130.786082 91.355918) (xy 130.733786 91.313) (xy 130.786082 91.270082) (xy 131.001896 91.007112) (xy 131.16226 90.707092) + (xy 131.261012 90.381551) (xy 131.294356 90.043) (xy 131.261012 89.704449) (xy 131.16226 89.378908) (xy 131.001896 89.078888) + (xy 130.786082 88.815918) (xy 130.733786 88.773) (xy 130.786082 88.730082) (xy 131.001896 88.467112) (xy 131.16226 88.167092) + (xy 131.261012 87.841551) (xy 131.294356 87.503) (xy 131.261012 87.164449) (xy 131.16226 86.838908) (xy 131.001896 86.538888) + (xy 130.786082 86.275918) (xy 130.733786 86.233) (xy 130.786082 86.190082) (xy 131.001896 85.927112) (xy 131.16226 85.627092) + (xy 131.261012 85.301551) (xy 131.294356 84.963) (xy 131.261012 84.624449) (xy 131.16226 84.298908) (xy 131.001896 83.998888) + (xy 130.786082 83.735918) (xy 130.733786 83.693) (xy 130.786082 83.650082) (xy 131.001896 83.387112) (xy 131.16226 83.087092) + (xy 131.261012 82.761551) (xy 131.294356 82.423) (xy 131.261012 82.084449) (xy 131.16226 81.758908) (xy 131.001896 81.458888) + (xy 130.950752 81.396568) (xy 131.017659 81.341659) (xy 131.133501 81.200505) (xy 131.21958 81.039464) (xy 131.272587 80.864724) + (xy 131.290485 80.683) (xy 131.290485 79.083) (xy 131.272587 78.901276) (xy 131.21958 78.726536) (xy 131.133501 78.565495) + (xy 131.017659 78.424341) (xy 130.876505 78.308499) (xy 130.715464 78.22242) (xy 130.540724 78.169413) (xy 130.359 78.151515) + (xy 127.959 78.151515) (xy 127.777276 78.169413) (xy 127.602536 78.22242) (xy 127.441495 78.308499) (xy 127.300341 78.424341) + (xy 127.274359 78.456) (xy 122.892082 78.456) (xy 118.91461 74.478528) (xy 118.869923 74.424077) (xy 118.726047 74.306) + (xy 121.905928 74.306) (xy 121.918188 74.430482) (xy 121.954498 74.55018) (xy 122.013463 74.660494) (xy 122.092815 74.757185) + (xy 122.189506 74.836537) (xy 122.29982 74.895502) (xy 122.419518 74.931812) (xy 122.544 74.944072) (xy 123.15825 74.941) + (xy 123.317 74.78225) (xy 123.317 73.533) (xy 122.06775 73.533) (xy 121.909 73.69175) (xy 121.905928 74.306) + (xy 118.726047 74.306) (xy 118.652634 74.245752) (xy 118.404731 74.113245) (xy 118.135741 74.031648) (xy 117.926098 74.011) + (xy 117.926088 74.011) (xy 117.856 74.004097) (xy 117.785912 74.011) (xy 117.154437 74.011) (xy 117.074174 73.890878) + (xy 116.736122 73.552826) (xy 116.338615 73.287221) (xy 115.89693 73.104268) (xy 115.428039 73.011) (xy 114.949961 73.011) + (xy 114.48107 73.104268) (xy 114.039385 73.287221) (xy 113.641878 73.552826) (xy 113.303826 73.890878) (xy 113.038221 74.288385) + (xy 112.855268 74.73007) (xy 112.762 75.198961) (xy 112.762 75.677039) (xy 112.855268 76.14593) (xy 113.038221 76.587615) + (xy 113.303826 76.985122) (xy 113.641878 77.323174) (xy 114.039385 77.588779) (xy 114.48107 77.771732) (xy 114.949961 77.865) + (xy 115.428039 77.865) (xy 115.89693 77.771732) (xy 116.338615 77.588779) (xy 116.736122 77.323174) (xy 117.074174 76.985122) + (xy 117.154437 76.865) (xy 117.264918 76.865) (xy 119.490918 79.091) (xy 117.154437 79.091) (xy 117.074174 78.970878) + (xy 116.736122 78.632826) (xy 116.338615 78.367221) (xy 115.89693 78.184268) (xy 115.428039 78.091) (xy 114.949961 78.091) + (xy 114.48107 78.184268) (xy 114.039385 78.367221) (xy 113.641878 78.632826) (xy 113.303826 78.970878) (xy 113.038221 79.368385) + (xy 112.855268 79.81007) (xy 112.762 80.278961) (xy 112.762 80.757039) (xy 112.855268 81.22593) (xy 113.038221 81.667615) + (xy 113.303826 82.065122) (xy 113.641878 82.403174) (xy 114.039385 82.668779) (xy 114.48107 82.851732) (xy 114.949961 82.945) + (xy 115.428039 82.945) (xy 115.89693 82.851732) (xy 116.338615 82.668779) (xy 116.736122 82.403174) (xy 117.074174 82.065122) + (xy 117.154437 81.945) (xy 119.042918 81.945) (xy 120.480395 83.382478) (xy 120.525077 83.436923) (xy 120.579522 83.481605) + (xy 120.579525 83.481608) (xy 120.62708 83.520635) (xy 120.645802 83.536) (xy 116.471483 83.536) (xy 116.338615 83.447221) + (xy 115.89693 83.264268) (xy 115.428039 83.171) (xy 114.949961 83.171) (xy 114.48107 83.264268) (xy 114.039385 83.447221) + (xy 113.641878 83.712826) (xy 113.303826 84.050878) (xy 113.038221 84.448385) (xy 112.855268 84.89007) (xy 112.762 85.358961) + (xy 112.762 85.837039) (xy 112.855268 86.30593) (xy 113.038221 86.747615) (xy 113.303826 87.145122) (xy 113.641878 87.483174) + (xy 114.039385 87.748779) (xy 114.48107 87.931732) (xy 114.949961 88.025) (xy 115.428039 88.025) (xy 115.89693 87.931732) + (xy 116.338615 87.748779) (xy 116.736122 87.483174) (xy 117.074174 87.145122) (xy 117.339779 86.747615) (xy 117.487909 86.39) + (xy 121.407802 86.39) (xy 121.341525 86.444392) (xy 121.341522 86.444395) (xy 121.287077 86.489077) (xy 121.242395 86.543522) + (xy 118.534918 89.251) (xy 117.620485 89.251) (xy 117.620485 89.178) (xy 117.602587 88.996276) (xy 117.54958 88.821536) + (xy 117.463501 88.660495) (xy 117.347659 88.519341) (xy 117.206505 88.403499) (xy 117.045464 88.31742) (xy 116.870724 88.264413) + (xy 116.689 88.246515) (xy 113.689 88.246515) (xy 113.507276 88.264413) (xy 113.332536 88.31742) (xy 113.171495 88.403499) + (xy 113.030341 88.519341) (xy 112.914499 88.660495) (xy 112.82842 88.821536) (xy 112.775413 88.996276) (xy 112.757515 89.178) + (xy 109.918 89.178) (xy 109.918 72.506) (xy 121.905928 72.506) (xy 121.909 73.12025) (xy 122.06775 73.279) + (xy 123.317 73.279) (xy 123.317 72.02975) (xy 123.571 72.02975) (xy 123.571 73.279) (xy 123.591 73.279) + (xy 123.591 73.533) (xy 123.571 73.533) (xy 123.571 74.78225) (xy 123.72975 74.941) (xy 124.344 74.944072) + (xy 124.468482 74.931812) (xy 124.58818 74.895502) (xy 124.698494 74.836537) (xy 124.771145 74.776914) (xy 124.819355 74.825124) + (xy 125.118591 75.025066) (xy 125.451084 75.162789) (xy 125.791198 75.230442) (xy 125.949366 75.360248) (xy 126.197269 75.492755) + (xy 126.384661 75.5496) (xy 126.466258 75.574352) (xy 126.490474 75.576737) (xy 126.675902 75.595) (xy 126.67591 75.595) + (xy 126.746 75.601903) (xy 126.81609 75.595) (xy 128.82114 75.595) (xy 128.975959 75.698447) (xy 129.290253 75.828632) + (xy 129.623905 75.895) (xy 129.964095 75.895) (xy 130.297747 75.828632) (xy 130.612041 75.698447) (xy 130.894898 75.509448) + (xy 131.135448 75.268898) (xy 131.324447 74.986041) (xy 131.454632 74.671747) (xy 131.521 74.338095) (xy 131.521 73.997905) + (xy 131.454632 73.664253) (xy 131.324447 73.349959) (xy 131.135448 73.067102) (xy 130.894898 72.826552) (xy 130.612041 72.637553) + (xy 130.297747 72.507368) (xy 129.964095 72.441) (xy 129.623905 72.441) (xy 129.290253 72.507368) (xy 128.975959 72.637553) + (xy 128.82114 72.741) (xy 127.686078 72.741) (xy 127.603066 72.540591) (xy 127.403124 72.241355) (xy 127.148645 71.986876) + (xy 126.849409 71.786934) (xy 126.516916 71.649211) (xy 126.163944 71.579) (xy 125.804056 71.579) (xy 125.451084 71.649211) + (xy 125.118591 71.786934) (xy 124.819355 71.986876) (xy 124.771145 72.035086) (xy 124.698494 71.975463) (xy 124.58818 71.916498) + (xy 124.468482 71.880188) (xy 124.344 71.867928) (xy 123.72975 71.871) (xy 123.571 72.02975) (xy 123.317 72.02975) + (xy 123.15825 71.871) (xy 122.544 71.867928) (xy 122.419518 71.880188) (xy 122.29982 71.916498) (xy 122.189506 71.975463) + (xy 122.092815 72.054815) (xy 122.013463 72.151506) (xy 121.954498 72.26182) (xy 121.918188 72.381518) (xy 121.905928 72.506) + (xy 109.918 72.506) (xy 109.918 68.858) (xy 114.147928 68.858) (xy 114.160188 68.982482) (xy 114.196498 69.10218) + (xy 114.255463 69.212494) (xy 114.334815 69.309185) (xy 114.431506 69.388537) (xy 114.54182 69.447502) (xy 114.661518 69.483812) + (xy 114.786 69.496072) (xy 116.30025 69.493) (xy 116.459 69.33425) (xy 116.459 67.945) (xy 116.713 67.945) + (xy 116.713 69.33425) (xy 116.87175 69.493) (xy 118.386 69.496072) (xy 118.510482 69.483812) (xy 118.63018 69.447502) + (xy 118.740494 69.388537) (xy 118.837185 69.309185) (xy 118.916537 69.212494) (xy 118.975502 69.10218) (xy 119.011812 68.982482) + (xy 119.024072 68.858) (xy 119.023717 68.770702) (xy 124.154903 68.770702) (xy 124.226486 69.014671) (xy 124.481996 69.135571) + (xy 124.756184 69.2043) (xy 125.038512 69.218217) (xy 125.31813 69.176787) (xy 125.584292 69.081603) (xy 125.709514 69.014671) + (xy 125.781097 68.770702) (xy 124.968 67.957605) (xy 124.154903 68.770702) (xy 119.023717 68.770702) (xy 119.021 68.10375) + (xy 118.86225 67.945) (xy 116.713 67.945) (xy 116.459 67.945) (xy 114.30975 67.945) (xy 114.151 68.10375) + (xy 114.147928 68.858) (xy 109.918 68.858) (xy 109.918 66.778) (xy 114.147928 66.778) (xy 114.151 67.53225) + (xy 114.30975 67.691) (xy 116.459 67.691) (xy 116.459 66.30175) (xy 116.713 66.30175) (xy 116.713 67.691) + (xy 118.86225 67.691) (xy 119.021 67.53225) (xy 119.024072 66.778) (xy 119.011812 66.653518) (xy 118.975502 66.53382) + (xy 118.916537 66.423506) (xy 118.837185 66.326815) (xy 118.740494 66.247463) (xy 118.63018 66.188498) (xy 118.510482 66.152188) + (xy 118.386 66.139928) (xy 116.87175 66.143) (xy 116.713 66.30175) (xy 116.459 66.30175) (xy 116.30025 66.143) + (xy 114.786 66.139928) (xy 114.661518 66.152188) (xy 114.54182 66.188498) (xy 114.431506 66.247463) (xy 114.334815 66.326815) + (xy 114.255463 66.423506) (xy 114.196498 66.53382) (xy 114.160188 66.653518) (xy 114.147928 66.778) (xy 109.918 66.778) + (xy 109.918 62.738) (xy 113.849483 62.738) (xy 113.887461 63.123599) (xy 113.999936 63.49438) (xy 114.182586 63.836094) + (xy 114.428391 64.135609) (xy 114.727906 64.381414) (xy 115.06962 64.564064) (xy 115.440401 64.676539) (xy 115.729372 64.705) + (xy 117.442628 64.705) (xy 117.731599 64.676539) (xy 118.10238 64.564064) (xy 118.444094 64.381414) (xy 118.585945 64.265) + (xy 121.795497 64.265) (xy 123.236515 65.706019) (xy 123.236515 66.078) (xy 123.254413 66.259724) (xy 123.30742 66.434464) + (xy 123.393499 66.595505) (xy 123.509341 66.736659) (xy 123.650495 66.852501) (xy 123.811536 66.93858) (xy 123.936163 66.976385) + (xy 123.731329 67.036486) (xy 123.610429 67.291996) (xy 123.5417 67.566184) (xy 123.527783 67.848512) (xy 123.569213 68.12813) + (xy 123.664397 68.394292) (xy 123.731329 68.519514) (xy 123.975298 68.591097) (xy 124.788395 67.778) (xy 124.774253 67.763858) + (xy 124.953858 67.584253) (xy 124.968 67.598395) (xy 124.982143 67.584253) (xy 125.161748 67.763858) (xy 125.147605 67.778) + (xy 125.960702 68.591097) (xy 126.204671 68.519514) (xy 126.325571 68.264004) (xy 126.3943 67.989816) (xy 126.408217 67.707488) + (xy 126.366787 67.42787) (xy 126.271603 67.161708) (xy 126.204671 67.036486) (xy 125.999837 66.976385) (xy 126.124464 66.93858) + (xy 126.285505 66.852501) (xy 126.343385 66.805) (xy 126.621497 66.805) (xy 129.656157 69.839661) (xy 129.657368 69.845747) + (xy 129.787553 70.160041) (xy 129.976552 70.442898) (xy 130.217102 70.683448) (xy 130.499959 70.872447) (xy 130.814253 71.002632) + (xy 130.820339 71.003843) (xy 133.233207 73.416711) (xy 133.281024 73.474976) (xy 133.51354 73.665797) (xy 133.594367 73.709) + (xy 133.778815 73.80759) (xy 134.066655 73.894905) (xy 134.093955 73.897594) (xy 134.290989 73.917) (xy 134.290996 73.917) + (xy 134.366 73.924387) (xy 134.441004 73.917) (xy 136.527497 73.917) (xy 136.720811 74.110315) (xy 133.252279 77.578848) + (xy 133.194015 77.626664) (xy 133.146199 77.684928) (xy 133.146198 77.684929) (xy 133.003194 77.85918) (xy 132.861401 78.124455) + (xy 132.774086 78.412296) (xy 132.744603 78.71164) (xy 132.751991 78.786651) (xy 132.75199 95.917851) (xy 132.744603 95.992852) + (xy 132.75199 96.067853) (xy 132.75199 96.067862) (xy 132.774085 96.292195) (xy 132.8614 96.580036) (xy 133.003193 96.845311) + (xy 133.194014 97.077828) (xy 133.252283 97.125649) (xy 134.204565 98.077931) (xy 133.252279 99.030218) (xy 133.194015 99.078034) + (xy 133.146199 99.136298) (xy 133.146198 99.136299) (xy 133.003194 99.31055) (xy 132.861401 99.575825) (xy 132.774086 99.863666) + (xy 132.744603 100.16301) (xy 132.751991 100.238021) (xy 132.75199 118.142851) (xy 132.744603 118.217852) (xy 132.75199 118.292853) + (xy 132.75199 118.292862) (xy 132.774085 118.517195) (xy 132.8614 118.805036) (xy 133.003193 119.070311) (xy 133.194014 119.302828) + (xy 133.252283 119.350649) (xy 134.816345 120.914711) (xy 134.864162 120.972976) (xy 135.096678 121.163797) (xy 135.361953 121.30559) + (xy 135.397011 121.316225) (xy 135.414888 121.330896) (xy 135.714908 121.49126) (xy 136.040449 121.590012) (xy 136.294159 121.615) + (xy 136.346497 121.615) (xy 144.884208 130.152712) (xy 144.932024 130.210976) (xy 145.16454 130.401797) (xy 145.429815 130.54359) + (xy 145.717655 130.630905) (xy 145.744955 130.633594) (xy 145.941989 130.653) (xy 145.941996 130.653) (xy 146.017 130.660387) + (xy 146.092004 130.653) (xy 150.854169 130.653) (xy 151.083681 130.775677) (xy 151.418647 130.877288) (xy 151.679704 130.903) + (xy 152.104296 130.903) (xy 152.365353 130.877288) (xy 152.700319 130.775677) (xy 153.009025 130.61067) (xy 153.279608 130.388608) + (xy 153.50167 130.118025) (xy 153.666677 129.809319) (xy 153.768288 129.474353) (xy 153.802598 129.126) (xy 153.768288 128.777647) + (xy 153.666677 128.442681) (xy 153.50167 128.133975) (xy 153.435215 128.053) (xy 157.022918 128.053) (xy 163.268515 134.298598) + (xy 163.268515 135.012) (xy 163.286413 135.193724) (xy 163.33942 135.368464) (xy 163.425499 135.529505) (xy 163.541341 135.670659) + (xy 163.682495 135.786501) (xy 163.843536 135.87258) (xy 164.018276 135.925587) (xy 164.2 135.943485) (xy 166 135.943485) + (xy 166.181724 135.925587) (xy 166.356464 135.87258) (xy 166.517505 135.786501) (xy 166.658659 135.670659) (xy 166.667699 135.659644) + (xy 166.774591 135.731066) (xy 167.107084 135.868789) (xy 167.460056 135.939) (xy 167.819944 135.939) (xy 168.172916 135.868789) + (xy 168.505409 135.731066) (xy 168.792858 135.539) (xy 169.080918 135.539) (xy 169.753042 136.211124) (xy 169.789368 136.393747) + (xy 169.919553 136.708041) (xy 170.108552 136.990898) (xy 170.349102 137.231448) (xy 170.631959 137.420447) (xy 170.946253 137.550632) + (xy 171.279905 137.617) (xy 171.620095 137.617) (xy 171.953747 137.550632) (xy 172.268041 137.420447) (xy 172.550898 137.231448) + (xy 172.791448 136.990898) (xy 172.980447 136.708041) (xy 173.110632 136.393747) (xy 173.177 136.060095) (xy 173.177 135.719905) + (xy 173.110632 135.386253) (xy 172.980447 135.071959) (xy 172.791448 134.789102) (xy 172.550898 134.548552) (xy 172.268041 134.359553) + (xy 171.953747 134.229368) (xy 171.771124 134.193042) (xy 170.730607 133.152525) (xy 170.685923 133.098077) (xy 170.468634 132.919752) + (xy 170.220731 132.787245) (xy 169.951741 132.705648) (xy 169.742098 132.685) (xy 169.742088 132.685) (xy 169.672 132.678097) + (xy 169.601912 132.685) (xy 168.792858 132.685) (xy 168.505409 132.492934) (xy 168.172916 132.355211) (xy 167.819944 132.285) + (xy 167.460056 132.285) (xy 167.107084 132.355211) (xy 166.774591 132.492934) (xy 166.667699 132.564356) (xy 166.658659 132.553341) + (xy 166.517505 132.437499) (xy 166.356464 132.35142) (xy 166.181724 132.298413) (xy 166 132.280515) (xy 165.286598 132.280515) + (xy 158.672607 125.666525) (xy 158.627923 125.612077) (xy 158.555938 125.553) (xy 161.380918 125.553) (xy 163.268515 127.440598) + (xy 163.268515 128.154) (xy 163.286413 128.335724) (xy 163.33942 128.510464) (xy 163.425499 128.671505) (xy 163.541341 128.812659) + (xy 163.682495 128.928501) (xy 163.843536 129.01458) (xy 164.018276 129.067587) (xy 164.2 129.085485) (xy 166 129.085485) + (xy 166.181724 129.067587) (xy 166.356464 129.01458) (xy 166.517505 128.928501) (xy 166.658659 128.812659) (xy 166.667699 128.801644) + (xy 166.774591 128.873066) (xy 167.107084 129.010789) (xy 167.446152 129.078234) (xy 173.465103 135.097186) (xy 173.345368 135.386253) + (xy 173.279 135.719905) (xy 173.279 136.060095) (xy 173.345368 136.393747) (xy 173.475553 136.708041) (xy 173.664552 136.990898) + (xy 173.905102 137.231448) (xy 174.187959 137.420447) (xy 174.502253 137.550632) (xy 174.835905 137.617) (xy 175.176095 137.617) + (xy 175.509747 137.550632) (xy 175.824041 137.420447) (xy 176.106898 137.231448) (xy 176.347448 136.990898) (xy 176.536447 136.708041) + (xy 176.666632 136.393747) (xy 176.733 136.060095) (xy 176.733 135.719905) (xy 176.666632 135.386253) (xy 176.536447 135.071959) + (xy 176.433 134.91714) (xy 176.433 134.690087) (xy 176.439903 134.619999) (xy 176.433 134.549911) (xy 176.433 134.549902) + (xy 176.412352 134.340259) (xy 176.330755 134.071269) (xy 176.198248 133.823366) (xy 176.162861 133.780247) (xy 176.064608 133.660525) + (xy 176.064601 133.660518) (xy 176.019922 133.606077) (xy 175.965483 133.5614) (xy 169.464234 127.060152) (xy 169.396789 126.721084) + (xy 169.259066 126.388591) (xy 169.059124 126.089355) (xy 168.804645 125.834876) (xy 168.505409 125.634934) (xy 168.172916 125.497211) + (xy 167.819944 125.427) (xy 167.460056 125.427) (xy 167.107084 125.497211) (xy 166.774591 125.634934) (xy 166.667699 125.706356) + (xy 166.658659 125.695341) (xy 166.517505 125.579499) (xy 166.356464 125.49342) (xy 166.181724 125.440413) (xy 166 125.422515) + (xy 165.286598 125.422515) (xy 163.030607 123.166525) (xy 162.985923 123.112077) (xy 162.913938 123.053) (xy 163.799912 123.053) + (xy 163.87 123.059903) (xy 163.940088 123.053) (xy 163.940098 123.053) (xy 164.149741 123.032352) (xy 164.418731 122.950755) + (xy 164.666634 122.818248) (xy 164.883923 122.639923) (xy 164.928609 122.585473) (xy 165.286597 122.227485) (xy 166 122.227485) + (xy 166.181724 122.209587) (xy 166.356464 122.15658) (xy 166.517505 122.070501) (xy 166.658659 121.954659) (xy 166.667699 121.943644) + (xy 166.774591 122.015066) (xy 167.107084 122.152789) (xy 167.460056 122.223) (xy 167.819944 122.223) (xy 168.172916 122.152789) + (xy 168.505409 122.015066) (xy 168.792858 121.823) (xy 169.334918 121.823) (xy 169.753042 122.241124) (xy 169.789368 122.423747) + (xy 169.919553 122.738041) (xy 170.108552 123.020898) (xy 170.349102 123.261448) (xy 170.631959 123.450447) (xy 170.946253 123.580632) + (xy 171.279905 123.647) (xy 171.620095 123.647) (xy 171.953747 123.580632) (xy 172.268041 123.450447) (xy 172.550898 123.261448) + (xy 172.791448 123.020898) (xy 172.980447 122.738041) (xy 173.110632 122.423747) (xy 173.177 122.090095) (xy 173.177 121.749905) + (xy 173.110632 121.416253) (xy 172.980447 121.101959) (xy 172.791448 120.819102) (xy 172.550898 120.578552) (xy 172.268041 120.389553) + (xy 171.953747 120.259368) (xy 171.771124 120.223042) (xy 170.98461 119.436528) (xy 170.939923 119.382077) (xy 170.722634 119.203752) + (xy 170.474731 119.071245) (xy 170.205741 118.989648) (xy 169.996098 118.969) (xy 169.996088 118.969) (xy 169.926 118.962097) + (xy 169.855912 118.969) (xy 168.792858 118.969) (xy 168.505409 118.776934) (xy 168.172916 118.639211) (xy 167.819944 118.569) + (xy 167.460056 118.569) (xy 167.107084 118.639211) (xy 166.774591 118.776934) (xy 166.667699 118.848356) (xy 166.658659 118.837341) + (xy 166.517505 118.721499) (xy 166.356464 118.63542) (xy 166.181724 118.582413) (xy 166 118.564515) (xy 164.2 118.564515) + (xy 164.018276 118.582413) (xy 163.843536 118.63542) (xy 163.682495 118.721499) (xy 163.541341 118.837341) (xy 163.425499 118.978495) + (xy 163.33942 119.139536) (xy 163.286413 119.314276) (xy 163.268515 119.496) (xy 163.268515 120.199) (xy 160.453938 120.199) + (xy 160.525923 120.139923) (xy 160.57061 120.085472) (xy 165.286597 115.369485) (xy 166 115.369485) (xy 166.181724 115.351587) + (xy 166.356464 115.29858) (xy 166.517505 115.212501) (xy 166.658659 115.096659) (xy 166.667699 115.085644) (xy 166.774591 115.157066) + (xy 167.107084 115.294789) (xy 167.446152 115.362234) (xy 173.390709 121.306791) (xy 173.345368 121.416253) (xy 173.279 121.749905) + (xy 173.279 122.090095) (xy 173.345368 122.423747) (xy 173.475553 122.738041) (xy 173.664552 123.020898) (xy 173.905102 123.261448) + (xy 174.187959 123.450447) (xy 174.502253 123.580632) (xy 174.835905 123.647) (xy 174.929497 123.647) (xy 174.508339 124.068157) + (xy 174.502253 124.069368) (xy 174.187959 124.199553) (xy 174.1828 124.203) (xy 172.2732 124.203) (xy 172.268041 124.199553) + (xy 171.953747 124.069368) (xy 171.620095 124.003) (xy 171.279905 124.003) (xy 170.946253 124.069368) (xy 170.631959 124.199553) + (xy 170.349102 124.388552) (xy 170.108552 124.629102) (xy 169.919553 124.911959) (xy 169.789368 125.226253) (xy 169.723 125.559905) + (xy 169.723 125.900095) (xy 169.789368 126.233747) (xy 169.919553 126.548041) (xy 170.108552 126.830898) (xy 170.349102 127.071448) + (xy 170.631959 127.260447) (xy 170.946253 127.390632) (xy 171.279905 127.457) (xy 171.620095 127.457) (xy 171.953747 127.390632) + (xy 172.268041 127.260447) (xy 172.2732 127.257) (xy 174.1828 127.257) (xy 174.187959 127.260447) (xy 174.502253 127.390632) + (xy 174.835905 127.457) (xy 175.176095 127.457) (xy 175.509747 127.390632) (xy 175.824041 127.260447) (xy 176.106898 127.071448) + (xy 176.347448 126.830898) (xy 176.536447 126.548041) (xy 176.666632 126.233747) (xy 176.667843 126.227661) (xy 178.132712 124.762791) + (xy 178.190977 124.714975) (xy 178.381798 124.482459) (xy 178.523591 124.217184) (xy 178.551251 124.126) (xy 178.610906 123.929344) + (xy 178.620262 123.834351) (xy 178.633001 123.70501) (xy 178.633001 123.705003) (xy 178.640388 123.629999) (xy 178.633001 123.554995) + (xy 178.633001 113.935005) (xy 178.640388 113.860001) (xy 178.633001 113.784997) (xy 178.633001 113.78499) (xy 178.610906 113.560657) + (xy 178.604034 113.538001) (xy 178.523591 113.272816) (xy 178.434419 113.105988) (xy 178.381798 113.007541) (xy 178.190977 112.775025) + (xy 178.132714 112.72721) (xy 177.165504 111.76) (xy 178.132712 110.792791) (xy 178.190977 110.744975) (xy 178.381798 110.512459) + (xy 178.523591 110.247184) (xy 178.528939 110.229553) (xy 178.610906 109.959344) (xy 178.620234 109.864632) (xy 178.633001 109.73501) + (xy 178.633001 109.735003) (xy 178.640388 109.659999) (xy 178.633001 109.584995) (xy 178.633001 100.219005) (xy 178.640388 100.144001) + (xy 178.633001 100.068997) (xy 178.633001 100.06899) (xy 178.610906 99.844657) (xy 178.604034 99.822001) (xy 178.523591 99.556816) + (xy 178.51214 99.535392) (xy 178.381798 99.291541) (xy 178.190977 99.059025) (xy 178.132714 99.01121) (xy 177.165504 98.044) + (xy 178.132712 97.076791) (xy 178.190977 97.028975) (xy 178.381798 96.796459) (xy 178.523591 96.531184) (xy 178.530134 96.509613) + (xy 178.610906 96.243344) (xy 178.628989 96.05974) (xy 178.633001 96.01901) (xy 178.633001 96.019003) (xy 178.640388 95.943999) + (xy 178.633001 95.868995) (xy 178.633001 86.249005) (xy 178.640388 86.174001) (xy 178.633001 86.098997) (xy 178.633001 86.09899) + (xy 178.610906 85.874657) (xy 178.576015 85.759634) (xy 178.523591 85.586816) (xy 178.51581 85.572259) (xy 178.381798 85.321541) + (xy 178.190977 85.089025) (xy 178.132714 85.04121) (xy 177.165504 84.074) (xy 178.132712 83.106791) (xy 178.190977 83.058975) + (xy 178.381798 82.826459) (xy 178.523591 82.561184) (xy 178.55906 82.444259) (xy 178.610906 82.273344) (xy 178.613595 82.246044) + (xy 178.633001 82.04901) (xy 178.633001 82.049003) (xy 178.640388 81.973999) (xy 178.633001 81.898995) (xy 178.633001 72.279005) + (xy 178.640388 72.204001) (xy 178.633001 72.128997) (xy 178.633001 72.12899) (xy 178.610906 71.904657) (xy 178.604034 71.882001) + (xy 178.523591 71.616816) (xy 178.472691 71.521589) (xy 178.381798 71.351541) (xy 178.190977 71.119025) (xy 178.132714 71.07121) + (xy 177.165504 70.104) (xy 178.132712 69.136791) (xy 178.190977 69.088975) (xy 178.381798 68.856459) (xy 178.523591 68.591184) + (xy 178.554424 68.48954) (xy 178.610906 68.303344) (xy 178.618573 68.225499) (xy 178.633001 68.07901) (xy 178.633001 68.079003) + (xy 178.640388 68.003999) (xy 178.633001 67.928995) (xy 178.633001 58.563005) (xy 178.640388 58.488001) (xy 178.633001 58.412997) + (xy 178.633001 58.41299) (xy 178.610906 58.188657) (xy 178.609826 58.185095) (xy 178.523591 57.900816) (xy 178.436999 57.738815) + (xy 178.381798 57.635541) (xy 178.190977 57.403025) (xy 178.132714 57.35521) (xy 176.667843 55.890339) (xy 176.666632 55.884253) + (xy 176.536447 55.569959) (xy 176.347448 55.287102) (xy 176.106898 55.046552) (xy 175.824041 54.857553) (xy 175.509747 54.727368) + (xy 175.176095 54.661) (xy 174.835905 54.661) (xy 174.502253 54.727368) (xy 174.187959 54.857553) (xy 174.1828 54.861) + (xy 172.2732 54.861) (xy 172.268041 54.857553) (xy 171.953747 54.727368) (xy 171.94766 54.726157) (xy 171.782798 54.561295) + (xy 171.734977 54.503025) (xy 171.502461 54.312204) (xy 171.237186 54.170411) (xy 170.949345 54.083096) (xy 170.725012 54.061001) + (xy 170.725002 54.061001) (xy 170.650001 54.053614) (xy 170.575 54.061001) (xy 163.613008 54.061001) (xy 163.537997 54.053613) + (xy 163.238652 54.083096) (xy 162.950812 54.170411) (xy 162.685537 54.312204) (xy 162.453021 54.503025) (xy 162.405205 54.561289) + (xy 159.501289 57.465206) (xy 159.443025 57.513022) (xy 159.395209 57.571286) (xy 159.395208 57.571287) (xy 159.252204 57.745538) + (xy 159.110411 58.010813) (xy 159.023096 58.298654) (xy 158.993613 58.597998) (xy 159.001001 58.673009) (xy 159.001 65.661496) + (xy 150.751497 73.911) (xy 144.926514 73.911) (xy 144.156806 73.141293) (xy 144.108986 73.083024) (xy 143.87647 72.892203) + (xy 143.611195 72.75041) (xy 143.323354 72.663095) (xy 143.099021 72.641) (xy 143.099011 72.641) (xy 143.02401 72.633613) + (xy 142.949009 72.641) (xy 140.7772 72.641) (xy 140.772041 72.637553) (xy 140.457747 72.507368) (xy 140.124095 72.441) + (xy 139.783905 72.441) (xy 139.450253 72.507368) (xy 139.440791 72.511287) (xy 138.292797 71.363293) (xy 138.244976 71.305024) + (xy 138.01246 71.114203) (xy 137.747185 70.97241) (xy 137.459344 70.885095) (xy 137.235011 70.863) (xy 137.235001 70.863) + (xy 137.16 70.855613) (xy 137.084999 70.863) (xy 134.998504 70.863) (xy 134.470206 70.334702) (xy 135.504903 70.334702) + (xy 135.576486 70.578671) (xy 135.831996 70.699571) (xy 136.106184 70.7683) (xy 136.388512 70.782217) (xy 136.66813 70.740787) + (xy 136.934292 70.645603) (xy 137.059514 70.578671) (xy 137.131097 70.334702) (xy 137.003286 70.206891) (xy 143.846519 70.206891) + (xy 143.943843 70.481252) (xy 144.092822 70.731355) (xy 144.287731 70.947588) (xy 144.52108 71.121641) (xy 144.783901 71.246825) + (xy 144.93111 71.291476) (xy 145.161 71.170155) (xy 145.161 69.977) (xy 143.967186 69.977) (xy 143.846519 70.206891) + (xy 137.003286 70.206891) (xy 136.318 69.521605) (xy 135.504903 70.334702) (xy 134.470206 70.334702) (xy 133.548016 69.412512) + (xy 134.877783 69.412512) (xy 134.919213 69.69213) (xy 135.014397 69.958292) (xy 135.081329 70.083514) (xy 135.325298 70.155097) + (xy 136.138395 69.342) (xy 136.497605 69.342) (xy 137.310702 70.155097) (xy 137.554671 70.083514) (xy 137.675571 69.828004) + (xy 137.7443 69.553816) (xy 137.758217 69.271488) (xy 137.716787 68.99187) (xy 137.621603 68.725708) (xy 137.554671 68.600486) + (xy 137.310702 68.528903) (xy 136.497605 69.342) (xy 136.138395 69.342) (xy 135.325298 68.528903) (xy 135.081329 68.600486) + (xy 134.960429 68.855996) (xy 134.8917 69.130184) (xy 134.877783 69.412512) (xy 133.548016 69.412512) (xy 132.979843 68.844339) + (xy 132.978632 68.838253) (xy 132.848447 68.523959) (xy 132.731743 68.349298) (xy 135.504903 68.349298) (xy 136.318 69.162395) + (xy 137.131097 68.349298) (xy 137.059514 68.105329) (xy 136.804004 67.984429) (xy 136.529816 67.9157) (xy 136.247488 67.901783) + (xy 135.96787 67.943213) (xy 135.701708 68.038397) (xy 135.576486 68.105329) (xy 135.504903 68.349298) (xy 132.731743 68.349298) + (xy 132.659448 68.241102) (xy 132.418898 68.000552) (xy 132.136041 67.811553) (xy 131.821747 67.681368) (xy 131.815661 67.680157) + (xy 128.386797 64.251294) (xy 128.338976 64.193024) (xy 128.10646 64.002203) (xy 127.841185 63.86041) (xy 127.553344 63.773095) + (xy 127.329011 63.751) (xy 127.329001 63.751) (xy 127.254 63.743613) (xy 127.178999 63.751) (xy 126.343385 63.751) + (xy 126.285505 63.703499) (xy 126.124464 63.61742) (xy 125.949724 63.564413) (xy 125.768 63.546515) (xy 125.396019 63.546515) + (xy 125.098504 63.249) (xy 128.194999 63.249) (xy 128.27 63.256387) (xy 128.345001 63.249) (xy 128.345011 63.249) + (xy 128.569344 63.226905) (xy 128.857185 63.13959) (xy 129.12246 62.997797) (xy 129.354976 62.806976) (xy 129.402797 62.748707) + (xy 130.009504 62.142) (xy 132.330515 62.142) (xy 132.330515 63.842) (xy 132.348413 64.023724) (xy 132.40142 64.198464) + (xy 132.487499 64.359505) (xy 132.585 64.478311) (xy 132.585 64.966998) (xy 132.577613 65.042) (xy 132.585 65.117001) + (xy 132.585 65.11701) (xy 132.607095 65.341343) (xy 132.69441 65.629184) (xy 132.836203 65.894459) (xy 133.027024 66.126976) + (xy 133.085293 66.174796) (xy 134.153217 67.242721) (xy 134.201034 67.300986) (xy 134.43355 67.491807) (xy 134.648325 67.606607) + (xy 134.698825 67.6336) (xy 134.986665 67.720915) (xy 135.013965 67.723604) (xy 135.210999 67.74301) (xy 135.211006 67.74301) + (xy 135.28601 67.750397) (xy 135.361014 67.74301) (xy 144.203509 67.74301) (xy 144.883472 68.422973) (xy 144.783901 68.453175) + (xy 144.52108 68.578359) (xy 144.287731 68.752412) (xy 144.092822 68.968645) (xy 143.943843 69.218748) (xy 143.846519 69.493109) + (xy 143.967186 69.723) (xy 145.161 69.723) (xy 145.161 69.703) (xy 145.415 69.703) (xy 145.415 69.723) + (xy 145.435 69.723) (xy 145.435 69.977) (xy 145.415 69.977) (xy 145.415 71.170155) (xy 145.64489 71.291476) + (xy 145.792099 71.246825) (xy 146.05492 71.121641) (xy 146.288269 70.947588) (xy 146.366336 70.86098) (xy 146.447714 70.982771) + (xy 146.695229 71.230286) (xy 146.986275 71.424757) (xy 147.309668 71.558711) (xy 147.652981 71.627) (xy 148.003019 71.627) + (xy 148.346332 71.558711) (xy 148.669725 71.424757) (xy 148.827221 71.319521) (xy 148.859341 71.358659) (xy 149.000495 71.474501) + (xy 149.161536 71.56058) (xy 149.336276 71.613587) (xy 149.518 71.631485) (xy 151.218 71.631485) (xy 151.399724 71.613587) + (xy 151.574464 71.56058) (xy 151.735505 71.474501) (xy 151.876659 71.358659) (xy 151.992501 71.217505) (xy 152.07858 71.056464) + (xy 152.131587 70.881724) (xy 152.149485 70.7) (xy 152.149485 69) (xy 152.131587 68.818276) (xy 152.07858 68.643536) + (xy 151.992501 68.482495) (xy 151.876659 68.341341) (xy 151.795 68.274325) (xy 151.795 65.615082) (xy 155.321267 62.088815) + (xy 155.462961 62.117) (xy 155.941039 62.117) (xy 156.40993 62.023732) (xy 156.851615 61.840779) (xy 157.249122 61.575174) + (xy 157.587174 61.237122) (xy 157.852779 60.839615) (xy 158.035732 60.39793) (xy 158.129 59.929039) (xy 158.129 59.450961) + (xy 158.035732 58.98207) (xy 157.852779 58.540385) (xy 157.587174 58.142878) (xy 157.249122 57.804826) (xy 156.851615 57.539221) + (xy 156.40993 57.356268) (xy 155.941039 57.263) (xy 155.462961 57.263) (xy 154.99407 57.356268) (xy 154.552385 57.539221) + (xy 154.154878 57.804826) (xy 153.816826 58.142878) (xy 153.551221 58.540385) (xy 153.368268 58.98207) (xy 153.275 59.450961) + (xy 153.275 59.929039) (xy 153.303185 60.070733) (xy 152.941409 60.432508) (xy 152.955732 60.39793) (xy 153.049 59.929039) + (xy 153.049 59.450961) (xy 152.955732 58.98207) (xy 152.772779 58.540385) (xy 152.507174 58.142878) (xy 152.169122 57.804826) + (xy 151.771615 57.539221) (xy 151.32993 57.356268) (xy 150.861039 57.263) (xy 150.382961 57.263) (xy 149.91407 57.356268) + (xy 149.472385 57.539221) (xy 149.074878 57.804826) (xy 148.736826 58.142878) (xy 148.471221 58.540385) (xy 148.288268 58.98207) + (xy 148.195 59.450961) (xy 148.195 59.929039) (xy 148.199721 59.952774) (xy 147.678261 60.474235) (xy 147.677 59.97575) + (xy 147.51825 59.817) (xy 145.669 59.817) (xy 145.669 61.66625) (xy 145.82775 61.825) (xy 146.326235 61.826261) + (xy 145.163497 62.989) (xy 141.891346 62.989) (xy 142.057448 62.822898) (xy 142.246447 62.540041) (xy 142.376632 62.225747) + (xy 142.443 61.892095) (xy 142.443 61.551905) (xy 142.376632 61.218253) (xy 142.36493 61.19) (xy 143.403928 61.19) + (xy 143.416188 61.314482) (xy 143.452498 61.43418) (xy 143.511463 61.544494) (xy 143.590815 61.641185) (xy 143.687506 61.720537) + (xy 143.79782 61.779502) (xy 143.917518 61.815812) (xy 144.042 61.828072) (xy 145.25625 61.825) (xy 145.415 61.66625) + (xy 145.415 59.817) (xy 143.56575 59.817) (xy 143.407 59.97575) (xy 143.403928 61.19) (xy 142.36493 61.19) + (xy 142.246447 60.903959) (xy 142.057448 60.621102) (xy 141.816898 60.380552) (xy 141.534041 60.191553) (xy 141.219747 60.061368) + (xy 141.213662 60.060158) (xy 139.343504 58.19) (xy 143.403928 58.19) (xy 143.407 59.40425) (xy 143.56575 59.563) + (xy 145.415 59.563) (xy 145.415 57.71375) (xy 145.669 57.71375) (xy 145.669 59.563) (xy 147.51825 59.563) + (xy 147.677 59.40425) (xy 147.680072 58.19) (xy 147.667812 58.065518) (xy 147.631502 57.94582) (xy 147.572537 57.835506) + (xy 147.493185 57.738815) (xy 147.396494 57.659463) (xy 147.28618 57.600498) (xy 147.166482 57.564188) (xy 147.042 57.551928) + (xy 145.82775 57.555) (xy 145.669 57.71375) (xy 145.415 57.71375) (xy 145.25625 57.555) (xy 144.042 57.551928) + (xy 143.917518 57.564188) (xy 143.79782 57.600498) (xy 143.687506 57.659463) (xy 143.590815 57.738815) (xy 143.511463 57.835506) + (xy 143.452498 57.94582) (xy 143.416188 58.065518) (xy 143.403928 58.19) (xy 139.343504 58.19) (xy 139.054796 57.901293) + (xy 139.006976 57.843024) (xy 138.850616 57.714702) (xy 139.902903 57.714702) (xy 139.974486 57.958671) (xy 140.229996 58.079571) + (xy 140.504184 58.1483) (xy 140.786512 58.162217) (xy 141.06613 58.120787) (xy 141.332292 58.025603) (xy 141.457514 57.958671) + (xy 141.529097 57.714702) (xy 140.716 56.901605) (xy 139.902903 57.714702) (xy 138.850616 57.714702) (xy 138.77446 57.652203) + (xy 138.509185 57.51041) (xy 138.221344 57.423095) (xy 137.997011 57.401) (xy 137.997001 57.401) (xy 137.922 57.393613) + (xy 137.846999 57.401) (xy 136.033898 57.401) (xy 135.923247 57.310191) (xy 135.596733 57.135667) (xy 135.242445 57.028195) + (xy 134.874 56.991906) (xy 134.505554 57.028195) (xy 134.151266 57.135667) (xy 133.824753 57.310191) (xy 133.538562 57.545062) + (xy 133.401029 57.712646) (xy 133.200923 57.552031) (xy 132.925094 57.408429) (xy 132.70698 57.337437) (xy 132.461 57.457406) + (xy 132.461 58.801) (xy 132.481 58.801) (xy 132.481 59.055) (xy 132.461 59.055) (xy 132.461 60.398594) + (xy 132.70698 60.518563) (xy 132.925094 60.447571) (xy 133.200923 60.303969) (xy 133.347 60.18672) (xy 133.347 60.581496) + (xy 133.085289 60.843208) (xy 133.027025 60.891024) (xy 132.836203 61.12354) (xy 132.69441 61.388815) (xy 132.686418 61.415162) + (xy 132.603341 61.483341) (xy 132.487499 61.624495) (xy 132.40142 61.785536) (xy 132.348413 61.960276) (xy 132.330515 62.142) + (xy 130.009504 62.142) (xy 130.820713 61.330791) (xy 130.878976 61.282976) (xy 131.069797 61.05046) (xy 131.21159 60.785185) + (xy 131.231382 60.719938) (xy 131.264005 60.702501) (xy 131.405159 60.586659) (xy 131.521001 60.445505) (xy 131.568445 60.356743) + (xy 131.742906 60.447571) (xy 131.96102 60.518563) (xy 132.207 60.398594) (xy 132.207 59.055) (xy 132.187 59.055) + (xy 132.187 58.801) (xy 132.207 58.801) (xy 132.207 57.457406) (xy 131.96102 57.337437) (xy 131.742906 57.408429) + (xy 131.568445 57.499257) (xy 131.521001 57.410495) (xy 131.405159 57.269341) (xy 131.264005 57.153499) (xy 131.102964 57.06742) + (xy 130.928224 57.014413) (xy 130.7465 56.996515) (xy 128.8415 56.996515) (xy 128.659776 57.014413) (xy 128.485036 57.06742) + (xy 128.323995 57.153499) (xy 128.182841 57.269341) (xy 128.066999 57.410495) (xy 127.98092 57.571536) (xy 127.927913 57.746276) + (xy 127.910015 57.928) (xy 127.910015 59.922482) (xy 127.637497 60.195) (xy 124.2672 60.195) (xy 124.262041 60.191553) + (xy 123.947747 60.061368) (xy 123.614095 59.995) (xy 123.273905 59.995) (xy 122.940253 60.061368) (xy 122.625959 60.191553) + (xy 122.343102 60.380552) (xy 122.102552 60.621102) (xy 121.913553 60.903959) (xy 121.786372 61.211) (xy 118.585945 61.211) + (xy 118.444094 61.094586) (xy 118.10238 60.911936) (xy 117.731599 60.799461) (xy 117.442628 60.771) (xy 115.729372 60.771) + (xy 115.440401 60.799461) (xy 115.06962 60.911936) (xy 114.727906 61.094586) (xy 114.428391 61.340391) (xy 114.182586 61.639906) + (xy 113.999936 61.98162) (xy 113.887461 62.352401) (xy 113.849483 62.738) (xy 109.918 62.738) (xy 109.918 57.714702) + (xy 122.630903 57.714702) (xy 122.702486 57.958671) (xy 122.957996 58.079571) (xy 123.232184 58.1483) (xy 123.514512 58.162217) + (xy 123.79413 58.120787) (xy 124.060292 58.025603) (xy 124.185514 57.958671) (xy 124.257097 57.714702) (xy 123.444 56.901605) + (xy 122.630903 57.714702) (xy 109.918 57.714702) (xy 109.918 56.792512) (xy 122.003783 56.792512) (xy 122.045213 57.07213) + (xy 122.140397 57.338292) (xy 122.207329 57.463514) (xy 122.451298 57.535097) (xy 123.264395 56.722) (xy 123.623605 56.722) + (xy 124.436702 57.535097) (xy 124.680671 57.463514) (xy 124.801571 57.208004) (xy 124.8703 56.933816) (xy 124.877265 56.792512) + (xy 139.275783 56.792512) (xy 139.317213 57.07213) (xy 139.412397 57.338292) (xy 139.479329 57.463514) (xy 139.723298 57.535097) + (xy 140.536395 56.722) (xy 140.895605 56.722) (xy 141.708702 57.535097) (xy 141.952671 57.463514) (xy 142.073571 57.208004) + (xy 142.1423 56.933816) (xy 142.156217 56.651488) (xy 142.114787 56.37187) (xy 142.019603 56.105708) (xy 141.952671 55.980486) + (xy 141.708702 55.908903) (xy 140.895605 56.722) (xy 140.536395 56.722) (xy 139.723298 55.908903) (xy 139.479329 55.980486) + (xy 139.358429 56.235996) (xy 139.2897 56.510184) (xy 139.275783 56.792512) (xy 124.877265 56.792512) (xy 124.884217 56.651488) + (xy 124.842787 56.37187) (xy 124.747603 56.105708) (xy 124.680671 55.980486) (xy 124.436702 55.908903) (xy 123.623605 56.722) + (xy 123.264395 56.722) (xy 122.451298 55.908903) (xy 122.207329 55.980486) (xy 122.086429 56.235996) (xy 122.0177 56.510184) + (xy 122.003783 56.792512) (xy 109.918 56.792512) (xy 109.918 55.729298) (xy 122.630903 55.729298) (xy 123.444 56.542395) + (xy 124.257097 55.729298) (xy 139.902903 55.729298) (xy 140.716 56.542395) (xy 141.529097 55.729298) (xy 141.457514 55.485329) + (xy 141.202004 55.364429) (xy 140.927816 55.2957) (xy 140.645488 55.281783) (xy 140.36587 55.323213) (xy 140.099708 55.418397) + (xy 139.974486 55.485329) (xy 139.902903 55.729298) (xy 124.257097 55.729298) (xy 124.185514 55.485329) (xy 123.930004 55.364429) + (xy 123.655816 55.2957) (xy 123.373488 55.281783) (xy 123.09387 55.323213) (xy 122.827708 55.418397) (xy 122.702486 55.485329) + (xy 122.630903 55.729298) (xy 109.918 55.729298) (xy 109.918 53.784) (xy 179.134001 53.784) + ) + ) + ) +) diff --git a/hardware/eezy_mk3_driver.pro b/hardware/eezy_mk3_driver.pro new file mode 100644 index 0000000..7993b8d --- /dev/null +++ b/hardware/eezy_mk3_driver.pro @@ -0,0 +1,281 @@ +update=Wed 26 Aug 2020 04:47:17 PM -03 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +[pcbnew] +version=1 +PageLayoutDescrFile= +LastNetListRead= +CopperLayerCount=2 +BoardThickness=1.6 +AllowMicroVias=0 +AllowBlindVias=0 +RequireCourtyardDefinitions=0 +ProhibitOverlappingCourtyards=1 +MinTrackWidth=0.7999999999999999 +MinViaDiameter=0.4 +MinViaDrill=0.3 +MinMicroViaDiameter=0.2 +MinMicroViaDrill=0.09999999999999999 +MinHoleToHole=0.25 +TrackWidth1=1 +ViaDiameter1=1 +ViaDrill1=0.4 +dPairWidth1=0.8 +dPairGap1=0.25 +dPairViaGap1=0.25 +SilkLineWidth=0.12 +SilkTextSizeV=1 +SilkTextSizeH=1 +SilkTextSizeThickness=0.15 +SilkTextItalic=0 +SilkTextUpright=1 +CopperLineWidth=0.2 +CopperTextSizeV=1.5 +CopperTextSizeH=1.5 +CopperTextThickness=0.3 +CopperTextItalic=0 +CopperTextUpright=1 +EdgeCutLineWidth=0.05 +CourtyardLineWidth=0.05 +OthersLineWidth=0.15 +OthersTextSizeV=1 +OthersTextSizeH=1 +OthersTextSizeThickness=0.15 +OthersTextItalic=0 +OthersTextUpright=1 +SolderMaskClearance=0.05 +SolderMaskMinWidth=0 +SolderPasteClearance=0 +SolderPasteRatio=-0 +[pcbnew/Layer.F.Cu] +Name=F.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.In1.Cu] +Name=In1.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In2.Cu] +Name=In2.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In3.Cu] +Name=In3.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In4.Cu] +Name=In4.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In5.Cu] +Name=In5.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In6.Cu] +Name=In6.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In7.Cu] +Name=In7.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In8.Cu] +Name=In8.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In9.Cu] +Name=In9.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In10.Cu] +Name=In10.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In11.Cu] +Name=In11.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In12.Cu] +Name=In12.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In13.Cu] +Name=In13.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In14.Cu] +Name=In14.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In15.Cu] +Name=In15.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In16.Cu] +Name=In16.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In17.Cu] +Name=In17.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In18.Cu] +Name=In18.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In19.Cu] +Name=In19.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In20.Cu] +Name=In20.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In21.Cu] +Name=In21.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In22.Cu] +Name=In22.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In23.Cu] +Name=In23.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In24.Cu] +Name=In24.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In25.Cu] +Name=In25.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In26.Cu] +Name=In26.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In27.Cu] +Name=In27.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In28.Cu] +Name=In28.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In29.Cu] +Name=In29.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In30.Cu] +Name=In30.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.B.Cu] +Name=B.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.B.Adhes] +Enabled=1 +[pcbnew/Layer.F.Adhes] +Enabled=1 +[pcbnew/Layer.B.Paste] +Enabled=1 +[pcbnew/Layer.F.Paste] +Enabled=1 +[pcbnew/Layer.B.SilkS] +Enabled=1 +[pcbnew/Layer.F.SilkS] +Enabled=1 +[pcbnew/Layer.B.Mask] +Enabled=1 +[pcbnew/Layer.F.Mask] +Enabled=1 +[pcbnew/Layer.Dwgs.User] +Enabled=1 +[pcbnew/Layer.Cmts.User] +Enabled=1 +[pcbnew/Layer.Eco1.User] +Enabled=1 +[pcbnew/Layer.Eco2.User] +Enabled=1 +[pcbnew/Layer.Edge.Cuts] +Enabled=1 +[pcbnew/Layer.Margin] +Enabled=1 +[pcbnew/Layer.B.CrtYd] +Enabled=1 +[pcbnew/Layer.F.CrtYd] +Enabled=1 +[pcbnew/Layer.B.Fab] +Enabled=1 +[pcbnew/Layer.F.Fab] +Enabled=1 +[pcbnew/Layer.Rescue] +Enabled=0 +[pcbnew/Netclasses] +[pcbnew/Netclasses/Default] +Name=Default +Clearance=0.7 +TrackWidth=1 +ViaDiameter=1 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.8 +dPairGap=0.25 +dPairViaGap=0.25 +[pcbnew/Netclasses/1] +Name=MOT_POWER +Clearance=0.7 +TrackWidth=1.8 +ViaDiameter=2.5 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.8 +dPairGap=0.25 +dPairViaGap=0.25 +[pcbnew/Netclasses/2] +Name=POWER +Clearance=0.5 +TrackWidth=1.2 +ViaDiameter=1.5 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.8 +dPairGap=0.25 +dPairViaGap=0.25 +[pcbnew/Netclasses/3] +Name=SIGNAL +Clearance=0.4 +TrackWidth=0.8 +ViaDiameter=0.8 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.8 +dPairGap=0.25 +dPairViaGap=0.25 +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName= +SpiceAjustPassiveValues=0 +LabSize=79 +ERC_TestSimilarLabels=1 diff --git a/hardware/eezy_mk3_driver.sch b/hardware/eezy_mk3_driver.sch new file mode 100644 index 0000000..3503d46 --- /dev/null +++ b/hardware/eezy_mk3_driver.sch @@ -0,0 +1,1148 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "Placa controladora de robot EEZYBOTARM MK3" +Date "2020-08-26" +Rev "v1.0" +Comp "Universidad Nacional de Cuyo" +Comment1 "Facultad de Ingeniería" +Comment2 "Microcontroladores y Electrónica de Potencia" +Comment3 "Gonzalo G. Fernández" +Comment4 "" +$EndDescr +$Comp +L Device:LED D9 +U 1 1 5F46E71D +P 5600 6650 +F 0 "D9" H 5750 6600 50 0000 C CNN +F 1 "LED" H 5750 6700 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 6650 50 0001 C CNN +F 3 "~" H 5600 6650 50 0001 C CNN + 1 5600 6650 + 1 0 0 1 +$EndComp +Wire Wire Line + 5450 6650 5100 6650 +Wire Wire Line + 5100 6650 5100 5850 +Connection ~ 5100 5850 +$Comp +L Device:LED D10 +U 1 1 5F46F812 +P 5600 6900 +F 0 "D10" H 5750 6850 50 0000 C CNN +F 1 "LED" H 5750 6950 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 6900 50 0001 C CNN +F 3 "~" H 5600 6900 50 0001 C CNN + 1 5600 6900 + 1 0 0 1 +$EndComp +$Comp +L Device:LED D11 +U 1 1 5F4700BD +P 5600 7150 +F 0 "D11" H 5750 7100 50 0000 C CNN +F 1 "LED" H 5750 7200 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 7150 50 0001 C CNN +F 3 "~" H 5600 7150 50 0001 C CNN + 1 5600 7150 + 1 0 0 1 +$EndComp +$Comp +L Device:LED D12 +U 1 1 5F470439 +P 5600 7400 +F 0 "D12" H 5750 7350 50 0000 C CNN +F 1 "LED" H 5750 7450 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 7400 50 0001 C CNN +F 3 "~" H 5600 7400 50 0001 C CNN + 1 5600 7400 + 1 0 0 1 +$EndComp +Wire Wire Line + 5450 6900 5000 6900 +Wire Wire Line + 5000 6900 5000 5950 +Connection ~ 5000 5950 +Wire Wire Line + 5450 7150 4900 7150 +Wire Wire Line + 4900 7150 4900 6050 +Connection ~ 4900 6050 +Wire Wire Line + 5450 7400 4800 7400 +Wire Wire Line + 4800 7400 4800 6150 +Connection ~ 4800 6150 +$Comp +L Device:R R9 +U 1 1 5F47189B +P 6100 6650 +F 0 "R9" V 6050 6850 50 0000 C CNN +F 1 "1k" V 6150 6850 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 6650 50 0001 C CNN +F 3 "~" H 6100 6650 50 0001 C CNN + 1 6100 6650 + 0 1 1 0 +$EndComp +$Comp +L Device:R R10 +U 1 1 5F4720CF +P 6100 6900 +F 0 "R10" V 6050 7100 50 0000 C CNN +F 1 "1k" V 6150 7100 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 6900 50 0001 C CNN +F 3 "~" H 6100 6900 50 0001 C CNN + 1 6100 6900 + 0 1 1 0 +$EndComp +$Comp +L Device:R R11 +U 1 1 5F47237A +P 6100 7150 +F 0 "R11" V 6050 7350 50 0000 C CNN +F 1 "1k" V 6150 7350 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 7150 50 0001 C CNN +F 3 "~" H 6100 7150 50 0001 C CNN + 1 6100 7150 + 0 1 1 0 +$EndComp +$Comp +L Device:R R12 +U 1 1 5F472613 +P 6100 7400 +F 0 "R12" V 6050 7600 50 0000 C CNN +F 1 "1k" V 6150 7600 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 7400 50 0001 C CNN +F 3 "~" H 6100 7400 50 0001 C CNN + 1 6100 7400 + 0 1 1 0 +$EndComp +Wire Wire Line + 5750 6650 5950 6650 +Wire Wire Line + 5750 6900 5950 6900 +Wire Wire Line + 5750 7150 5950 7150 +Wire Wire Line + 5750 7400 5950 7400 +$Comp +L Connector_Generic:Conn_01x05 J5 +U 1 1 5F4746C0 +P 5550 6050 +F 0 "J5" H 5630 6092 50 0000 L CNN +F 1 "OUT_STP3" H 5630 6001 50 0000 L CNN +F 2 "Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical" H 5550 6050 50 0001 C CNN +F 3 "~" H 5550 6050 50 0001 C CNN + 1 5550 6050 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5100 5850 5350 5850 +Wire Wire Line + 5000 5950 5350 5950 +Wire Wire Line + 4900 6050 5350 6050 +Wire Wire Line + 4800 6150 5350 6150 +$Comp +L power:+12V #PWR0103 +U 1 1 5F478470 +P 6550 6150 +F 0 "#PWR0103" H 6550 6000 50 0001 C CNN +F 1 "+12V" H 6565 6323 50 0000 C CNN +F 2 "" H 6550 6150 50 0001 C CNN +F 3 "" H 6550 6150 50 0001 C CNN + 1 6550 6150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6550 6150 6550 6450 +Wire Wire Line + 6550 7400 6250 7400 +Wire Wire Line + 6250 7150 6550 7150 +Connection ~ 6550 7150 +Wire Wire Line + 6550 7150 6550 7400 +Wire Wire Line + 6250 6900 6550 6900 +Connection ~ 6550 6900 +Wire Wire Line + 6550 6900 6550 7150 +Wire Wire Line + 6250 6650 6550 6650 +Connection ~ 6550 6650 +Wire Wire Line + 6550 6650 6550 6900 +Wire Wire Line + 5350 6250 5250 6250 +Wire Wire Line + 5250 6250 5250 6450 +Wire Wire Line + 5250 6450 6550 6450 +Connection ~ 6550 6450 +Wire Wire Line + 6550 6450 6550 6650 +$Comp +L Transistor_Array:ULN2003 U2 +U 1 1 5F4EAC1F +P 3400 3550 +F 0 "U2" H 3400 4217 50 0000 C CNN +F 1 "ULN2003" H 3400 4126 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm_LongPads" H 3450 3000 50 0001 L CNN +F 3 "http://www.ti.com/lit/ds/symlink/uln2003a.pdf" H 3500 3350 50 0001 C CNN + 1 3400 3550 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0104 +U 1 1 5F4EAC2C +P 3400 4250 +F 0 "#PWR0104" H 3400 4000 50 0001 C CNN +F 1 "GND" H 3405 4077 50 0000 C CNN +F 2 "" H 3400 4250 50 0001 C CNN +F 3 "" H 3400 4250 50 0001 C CNN + 1 3400 4250 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3400 4150 3400 4250 +NoConn ~ 3800 3950 +$Comp +L Device:LED D5 +U 1 1 5F4EAC40 +P 5600 4400 +F 0 "D5" H 5750 4350 50 0000 C CNN +F 1 "LED" H 5750 4450 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 4400 50 0001 C CNN +F 3 "~" H 5600 4400 50 0001 C CNN + 1 5600 4400 + 1 0 0 1 +$EndComp +Wire Wire Line + 5450 4400 5100 4400 +Wire Wire Line + 5100 4400 5100 3600 +$Comp +L Device:LED D6 +U 1 1 5F4EAC49 +P 5600 4650 +F 0 "D6" H 5750 4600 50 0000 C CNN +F 1 "LED" H 5750 4700 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 4650 50 0001 C CNN +F 3 "~" H 5600 4650 50 0001 C CNN + 1 5600 4650 + 1 0 0 1 +$EndComp +$Comp +L Device:LED D7 +U 1 1 5F4EAC4F +P 5600 4900 +F 0 "D7" H 5750 4850 50 0000 C CNN +F 1 "LED" H 5750 4950 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 4900 50 0001 C CNN +F 3 "~" H 5600 4900 50 0001 C CNN + 1 5600 4900 + 1 0 0 1 +$EndComp +$Comp +L Device:LED D8 +U 1 1 5F4EAC55 +P 5600 5150 +F 0 "D8" H 5750 5100 50 0000 C CNN +F 1 "LED" H 5750 5200 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 5150 50 0001 C CNN +F 3 "~" H 5600 5150 50 0001 C CNN + 1 5600 5150 + 1 0 0 1 +$EndComp +Wire Wire Line + 5450 4650 5000 4650 +Wire Wire Line + 5000 4650 5000 3700 +Connection ~ 5000 3700 +Wire Wire Line + 5450 4900 4900 4900 +Wire Wire Line + 4900 4900 4900 3800 +Connection ~ 4900 3800 +Wire Wire Line + 5450 5150 4800 5150 +Wire Wire Line + 4800 5150 4800 3900 +Connection ~ 4800 3900 +$Comp +L Device:R R5 +U 1 1 5F4EAC64 +P 6100 4400 +F 0 "R5" V 6050 4600 50 0000 C CNN +F 1 "1k" V 6150 4600 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 4400 50 0001 C CNN +F 3 "~" H 6100 4400 50 0001 C CNN + 1 6100 4400 + 0 1 1 0 +$EndComp +$Comp +L Device:R R6 +U 1 1 5F4EAC6A +P 6100 4650 +F 0 "R6" V 6050 4850 50 0000 C CNN +F 1 "1k" V 6150 4850 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 4650 50 0001 C CNN +F 3 "~" H 6100 4650 50 0001 C CNN + 1 6100 4650 + 0 1 1 0 +$EndComp +$Comp +L Device:R R7 +U 1 1 5F4EAC70 +P 6100 4900 +F 0 "R7" V 6050 5100 50 0000 C CNN +F 1 "1k" V 6150 5100 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 4900 50 0001 C CNN +F 3 "~" H 6100 4900 50 0001 C CNN + 1 6100 4900 + 0 1 1 0 +$EndComp +$Comp +L Device:R R8 +U 1 1 5F4EAC76 +P 6100 5150 +F 0 "R8" V 6050 5350 50 0000 C CNN +F 1 "1k" V 6150 5350 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 5150 50 0001 C CNN +F 3 "~" H 6100 5150 50 0001 C CNN + 1 6100 5150 + 0 1 1 0 +$EndComp +Wire Wire Line + 5750 4400 5950 4400 +Wire Wire Line + 5750 4650 5950 4650 +Wire Wire Line + 5750 4900 5950 4900 +Wire Wire Line + 5750 5150 5950 5150 +$Comp +L Connector_Generic:Conn_01x05 J4 +U 1 1 5F4EAC80 +P 5550 3800 +F 0 "J4" H 5630 3842 50 0000 L CNN +F 1 "OUT_STP2" H 5630 3751 50 0000 L CNN +F 2 "Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical" H 5550 3800 50 0001 C CNN +F 3 "~" H 5550 3800 50 0001 C CNN + 1 5550 3800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5100 3600 5350 3600 +Wire Wire Line + 5000 3700 5350 3700 +Wire Wire Line + 4900 3800 5350 3800 +Wire Wire Line + 4800 3900 5350 3900 +$Comp +L power:+12V #PWR0105 +U 1 1 5F4EAC8A +P 6550 3900 +F 0 "#PWR0105" H 6550 3750 50 0001 C CNN +F 1 "+12V" H 6565 4073 50 0000 C CNN +F 2 "" H 6550 3900 50 0001 C CNN +F 3 "" H 6550 3900 50 0001 C CNN + 1 6550 3900 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6550 3900 6550 4200 +Wire Wire Line + 6550 5150 6250 5150 +Wire Wire Line + 6250 4900 6550 4900 +Connection ~ 6550 4900 +Wire Wire Line + 6550 4900 6550 5150 +Wire Wire Line + 6250 4650 6550 4650 +Connection ~ 6550 4650 +Wire Wire Line + 6550 4650 6550 4900 +Wire Wire Line + 6250 4400 6550 4400 +Connection ~ 6550 4400 +Wire Wire Line + 6550 4400 6550 4650 +Wire Wire Line + 5350 4000 5250 4000 +Wire Wire Line + 5250 4000 5250 4200 +Wire Wire Line + 5250 4200 6550 4200 +Connection ~ 6550 4200 +Wire Wire Line + 6550 4200 6550 4400 +$Comp +L power:+12V #PWR0106 +U 1 1 5F4EACA0 +P 4000 3000 +F 0 "#PWR0106" H 4000 2850 50 0001 C CNN +F 1 "+12V" H 4015 3173 50 0000 C CNN +F 2 "" H 4000 3000 50 0001 C CNN +F 3 "" H 4000 3000 50 0001 C CNN + 1 4000 3000 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3800 3150 4000 3150 +Wire Wire Line + 4000 3150 4000 3000 +$Comp +L Transistor_Array:ULN2003 U1 +U 1 1 5F4F10A4 +P 3400 1700 +F 0 "U1" H 3400 2367 50 0000 C CNN +F 1 "ULN2003" H 3400 2276 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm_LongPads" H 3450 1150 50 0001 L CNN +F 3 "http://www.ti.com/lit/ds/symlink/uln2003a.pdf" H 3500 1500 50 0001 C CNN + 1 3400 1700 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0107 +U 1 1 5F4F10B1 +P 3400 2400 +F 0 "#PWR0107" H 3400 2150 50 0001 C CNN +F 1 "GND" H 3405 2227 50 0000 C CNN +F 2 "" H 3400 2400 50 0001 C CNN +F 3 "" H 3400 2400 50 0001 C CNN + 1 3400 2400 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3400 2300 3400 2400 +NoConn ~ 3800 2100 +$Comp +L Device:LED D1 +U 1 1 5F4F10C5 +P 5600 2300 +F 0 "D1" H 5750 2250 50 0000 C CNN +F 1 "LED" H 5750 2350 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 2300 50 0001 C CNN +F 3 "~" H 5600 2300 50 0001 C CNN + 1 5600 2300 + 1 0 0 1 +$EndComp +Wire Wire Line + 5450 2300 5100 2300 +Wire Wire Line + 5100 2300 5100 1500 +$Comp +L Device:LED D2 +U 1 1 5F4F10CE +P 5600 2550 +F 0 "D2" H 5750 2500 50 0000 C CNN +F 1 "LED" H 5750 2600 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 2550 50 0001 C CNN +F 3 "~" H 5600 2550 50 0001 C CNN + 1 5600 2550 + 1 0 0 1 +$EndComp +$Comp +L Device:LED D3 +U 1 1 5F4F10D4 +P 5600 2800 +F 0 "D3" H 5750 2750 50 0000 C CNN +F 1 "LED" H 5750 2850 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 2800 50 0001 C CNN +F 3 "~" H 5600 2800 50 0001 C CNN + 1 5600 2800 + 1 0 0 1 +$EndComp +$Comp +L Device:LED D4 +U 1 1 5F4F10DA +P 5600 3050 +F 0 "D4" H 5750 3000 50 0000 C CNN +F 1 "LED" H 5750 3100 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 5600 3050 50 0001 C CNN +F 3 "~" H 5600 3050 50 0001 C CNN + 1 5600 3050 + 1 0 0 1 +$EndComp +Wire Wire Line + 5450 2550 5000 2550 +Wire Wire Line + 5000 2550 5000 1600 +Wire Wire Line + 5450 2800 4900 2800 +Wire Wire Line + 4900 2800 4900 1700 +Wire Wire Line + 5450 3050 4800 3050 +Wire Wire Line + 4800 3050 4800 1800 +$Comp +L Device:R R1 +U 1 1 5F4F10E9 +P 6100 2300 +F 0 "R1" V 6050 2500 50 0000 C CNN +F 1 "1k" V 6150 2500 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 2300 50 0001 C CNN +F 3 "~" H 6100 2300 50 0001 C CNN + 1 6100 2300 + 0 1 1 0 +$EndComp +$Comp +L Device:R R2 +U 1 1 5F4F10EF +P 6100 2550 +F 0 "R2" V 6050 2750 50 0000 C CNN +F 1 "1k" V 6150 2750 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 2550 50 0001 C CNN +F 3 "~" H 6100 2550 50 0001 C CNN + 1 6100 2550 + 0 1 1 0 +$EndComp +$Comp +L Device:R R3 +U 1 1 5F4F10F5 +P 6100 2800 +F 0 "R3" V 6050 3000 50 0000 C CNN +F 1 "1k" V 6150 3000 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 2800 50 0001 C CNN +F 3 "~" H 6100 2800 50 0001 C CNN + 1 6100 2800 + 0 1 1 0 +$EndComp +$Comp +L Device:R R4 +U 1 1 5F4F10FB +P 6100 3050 +F 0 "R4" V 6050 3250 50 0000 C CNN +F 1 "1k" V 6150 3250 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 6030 3050 50 0001 C CNN +F 3 "~" H 6100 3050 50 0001 C CNN + 1 6100 3050 + 0 1 1 0 +$EndComp +Wire Wire Line + 5750 2300 5950 2300 +Wire Wire Line + 5750 2550 5950 2550 +Wire Wire Line + 5750 2800 5950 2800 +Wire Wire Line + 5750 3050 5950 3050 +$Comp +L Connector_Generic:Conn_01x05 J3 +U 1 1 5F4F1105 +P 5550 1700 +F 0 "J3" H 5630 1742 50 0000 L CNN +F 1 "OUT_STP1" H 5630 1651 50 0000 L CNN +F 2 "Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical" H 5550 1700 50 0001 C CNN +F 3 "~" H 5550 1700 50 0001 C CNN + 1 5550 1700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5100 1500 5350 1500 +Wire Wire Line + 5000 1600 5350 1600 +Wire Wire Line + 4900 1700 5350 1700 +Wire Wire Line + 4800 1800 5350 1800 +$Comp +L power:+12V #PWR0108 +U 1 1 5F4F110F +P 6550 1800 +F 0 "#PWR0108" H 6550 1650 50 0001 C CNN +F 1 "+12V" H 6565 1973 50 0000 C CNN +F 2 "" H 6550 1800 50 0001 C CNN +F 3 "" H 6550 1800 50 0001 C CNN + 1 6550 1800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6550 1800 6550 2100 +Wire Wire Line + 6550 3050 6250 3050 +Wire Wire Line + 6250 2800 6550 2800 +Connection ~ 6550 2800 +Wire Wire Line + 6550 2800 6550 3050 +Wire Wire Line + 6250 2550 6550 2550 +Connection ~ 6550 2550 +Wire Wire Line + 6550 2550 6550 2800 +Wire Wire Line + 6250 2300 6550 2300 +Connection ~ 6550 2300 +Wire Wire Line + 6550 2300 6550 2550 +Wire Wire Line + 5350 1900 5250 1900 +Wire Wire Line + 5250 1900 5250 2100 +Wire Wire Line + 5250 2100 6550 2100 +Connection ~ 6550 2100 +Wire Wire Line + 6550 2100 6550 2300 +$Comp +L power:+12V #PWR0109 +U 1 1 5F4F1125 +P 4000 1150 +F 0 "#PWR0109" H 4000 1000 50 0001 C CNN +F 1 "+12V" H 4015 1323 50 0000 C CNN +F 2 "" H 4000 1150 50 0001 C CNN +F 3 "" H 4000 1150 50 0001 C CNN + 1 4000 1150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3800 1300 4000 1300 +Wire Wire Line + 4000 1300 4000 1150 +NoConn ~ 3000 2100 +Wire Wire Line + 5100 3600 4700 3600 +Connection ~ 5100 3600 +NoConn ~ 3000 3950 +Wire Wire Line + 4700 3600 4700 1900 +Wire Wire Line + 4600 3700 4600 2000 +Wire Wire Line + 4600 3700 5000 3700 +Wire Wire Line + 4500 3800 4500 3350 +Wire Wire Line + 4500 3800 4900 3800 +Wire Wire Line + 4400 3900 4400 3450 +Wire Wire Line + 4400 3900 4800 3900 +Wire Wire Line + 4300 5850 4300 3550 +Wire Wire Line + 4300 5850 5100 5850 +Wire Wire Line + 4200 5950 4200 3650 +Wire Wire Line + 4200 5950 5000 5950 +Wire Wire Line + 4100 6050 4100 3750 +Wire Wire Line + 4100 6050 4900 6050 +Wire Wire Line + 3800 1500 5100 1500 +Connection ~ 5100 1500 +Wire Wire Line + 3800 1600 5000 1600 +Connection ~ 5000 1600 +Wire Wire Line + 3800 1700 4900 1700 +Connection ~ 4900 1700 +Wire Wire Line + 3800 1800 4800 1800 +Connection ~ 4800 1800 +Wire Wire Line + 3800 1900 4700 1900 +Wire Wire Line + 3800 2000 4600 2000 +Wire Wire Line + 3800 3350 4500 3350 +Wire Wire Line + 3800 3450 4400 3450 +Wire Wire Line + 3800 3550 4300 3550 +Wire Wire Line + 3800 3650 4200 3650 +Wire Wire Line + 3800 3750 4100 3750 +Wire Wire Line + 4000 6150 4000 3850 +Wire Wire Line + 4000 3850 3800 3850 +Wire Wire Line + 4000 6150 4800 6150 +Wire Wire Line + 1400 1500 3000 1500 +Wire Wire Line + 1400 1600 3000 1600 +Wire Wire Line + 1400 1700 3000 1700 +Wire Wire Line + 1400 1800 3000 1800 +Wire Wire Line + 1400 1900 3000 1900 +Wire Wire Line + 1400 2000 3000 2000 +Wire Wire Line + 3000 3350 2750 3350 +Wire Wire Line + 2750 3350 2750 2100 +Wire Wire Line + 2750 2100 1400 2100 +Wire Wire Line + 1400 2200 2650 2200 +Wire Wire Line + 2650 2200 2650 3450 +Wire Wire Line + 2650 3450 3000 3450 +Wire Wire Line + 3000 3550 2550 3550 +Wire Wire Line + 2550 3550 2550 2300 +Wire Wire Line + 2550 2300 1400 2300 +Wire Wire Line + 3000 3650 2450 3650 +Wire Wire Line + 2450 3650 2450 2400 +Wire Wire Line + 2450 2400 1400 2400 +Wire Wire Line + 3000 3750 2350 3750 +Wire Wire Line + 2350 3750 2350 2500 +Wire Wire Line + 2350 2500 1400 2500 +Wire Wire Line + 2250 3850 2250 2600 +Wire Wire Line + 2250 2600 1400 2600 +Wire Wire Line + 2250 3850 3000 3850 +$Comp +L power:GND #PWR0110 +U 1 1 5F8A567A +P 1800 3100 +F 0 "#PWR0110" H 1800 2850 50 0001 C CNN +F 1 "GND" H 1805 2927 50 0000 C CNN +F 2 "" H 1800 3100 50 0001 C CNN +F 3 "" H 1800 3100 50 0001 C CNN + 1 1800 3100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1800 3100 1800 2900 +Wire Wire Line + 1800 2900 1400 2900 +$Comp +L Connector_Generic:Conn_01x03 J2 +U 1 1 5F8C1480 +P 2750 6800 +F 0 "J2" H 2830 6842 50 0000 L CNN +F 1 "OUT_SERVO" H 2830 6751 50 0000 L CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 2750 6800 50 0001 C CNN +F 3 "~" H 2750 6800 50 0001 C CNN + 1 2750 6800 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0111 +U 1 1 5F8D31C2 +P 2250 7150 +F 0 "#PWR0111" H 2250 6900 50 0001 C CNN +F 1 "GND" H 2255 6977 50 0000 C CNN +F 2 "" H 2250 7150 50 0001 C CNN +F 3 "" H 2250 7150 50 0001 C CNN + 1 2250 7150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 2250 7150 2250 6900 +Wire Wire Line + 2250 6900 2550 6900 +$Comp +L power:+5V #PWR0112 +U 1 1 5F8EE112 +P 2250 6550 +F 0 "#PWR0112" H 2250 6400 50 0001 C CNN +F 1 "+5V" H 2265 6723 50 0000 C CNN +F 2 "" H 2250 6550 50 0001 C CNN +F 3 "" H 2250 6550 50 0001 C CNN + 1 2250 6550 + 1 0 0 -1 +$EndComp +Wire Wire Line + 2550 6800 2250 6800 +Wire Wire Line + 2250 6800 2250 6550 +Text GLabel 2050 6700 0 50 Input ~ 0 +SERVO_PWM +Wire Wire Line + 2050 6700 2550 6700 +Text GLabel 1650 2700 2 50 Input ~ 0 +SERVO_PWM +Wire Wire Line + 1400 2700 1650 2700 +Text GLabel 1650 2800 2 50 Input ~ 0 +5V_uC +Wire Wire Line + 1400 2800 1650 2800 +Text Notes 1750 850 0 118 ~ 24 +DRIVER MOTORES PASO A PASO MONOPOLARES +Text Notes 950 6000 0 118 ~ 24 +CONEXIÓN SERVO TOWER PRO +Wire Notes Line + 750 5700 3800 5700 +Wire Notes Line + 3800 5700 3800 7500 +Wire Notes Line + 3800 7500 750 7500 +Wire Notes Line + 750 7500 750 5700 +Text Notes 1000 6150 0 79 ~ 0 +Señal PWM desde el microcontrolador. +Text Notes 850 4900 0 79 ~ 0 +Drivers con ULN2003 para motores \npaso a paso 28BYJ-48. +Text Notes 7400 1050 0 118 ~ 24 +ALIMENTACIÓN DE 5V +Wire Notes Line + 7200 700 10900 700 +Text Notes 7400 4550 0 118 ~ 24 +ALIMENTACIÓN DE 12V +Wire Notes Line + 7200 4200 10900 4200 +Wire Notes Line + 10900 4200 10900 6250 +Wire Notes Line + 10900 6250 7200 6250 +Wire Notes Line + 7200 6250 7200 4200 +Text Notes 7100 6450 0 79 Italic 0 +Placa doble faz con componentes THT. +$Comp +L Regulator_Linear:LM7805_TO220 U3 +U 1 1 5FDBFB20 +P 9050 1800 +F 0 "U3" H 9050 2042 50 0000 C CNN +F 1 "LM7805_TO220" H 9050 1951 50 0000 C CNN +F 2 "Package_TO_SOT_THT:TO-220-3_Vertical" H 9050 2025 50 0001 C CIN +F 3 "http://www.fairchildsemi.com/ds/LM/LM7805.pdf" H 9050 1750 50 0001 C CNN + 1 9050 1800 + 1 0 0 -1 +$EndComp +$Comp +L power:+12V #PWR0116 +U 1 1 5FE0FDA1 +P 8050 1650 +F 0 "#PWR0116" H 8050 1500 50 0001 C CNN +F 1 "+12V" H 8065 1823 50 0000 C CNN +F 2 "" H 8050 1650 50 0001 C CNN +F 3 "" H 8050 1650 50 0001 C CNN + 1 8050 1650 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8050 1650 8050 1800 +Wire Wire Line + 8050 1800 8500 1800 +$Comp +L power:+5V #PWR0117 +U 1 1 5FE21598 +P 10000 1650 +F 0 "#PWR0117" H 10000 1500 50 0001 C CNN +F 1 "+5V" H 10015 1823 50 0000 C CNN +F 2 "" H 10000 1650 50 0001 C CNN +F 3 "" H 10000 1650 50 0001 C CNN + 1 10000 1650 + 1 0 0 -1 +$EndComp +Wire Wire Line + 10000 1650 10000 1800 +Wire Wire Line + 10000 1800 9600 1800 +$Comp +L power:GND #PWR0118 +U 1 1 5FE32D5C +P 9050 2500 +F 0 "#PWR0118" H 9050 2250 50 0001 C CNN +F 1 "GND" H 9055 2327 50 0000 C CNN +F 2 "" H 9050 2500 50 0001 C CNN +F 3 "" H 9050 2500 50 0001 C CNN + 1 9050 2500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9050 2500 9050 2350 +$Comp +L Device:C C5 +U 1 1 5FE42433 +P 8500 2100 +F 0 "C5" H 8615 2146 50 0000 L CNN +F 1 "0.33uF" H 8615 2055 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mm" H 8538 1950 50 0001 C CNN +F 3 "~" H 8500 2100 50 0001 C CNN + 1 8500 2100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8500 1950 8500 1800 +Connection ~ 8500 1800 +Wire Wire Line + 8500 1800 8750 1800 +Wire Wire Line + 8500 2250 8500 2350 +Wire Wire Line + 8500 2350 9050 2350 +Connection ~ 9050 2350 +Wire Wire Line + 9050 2350 9050 2100 +$Comp +L Device:C C6 +U 1 1 5FE5BBC2 +P 9600 2100 +F 0 "C6" H 9715 2146 50 0000 L CNN +F 1 "0.1uF" H 9715 2055 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mm" H 9638 1950 50 0001 C CNN +F 3 "~" H 9600 2100 50 0001 C CNN + 1 9600 2100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9600 1950 9600 1800 +Connection ~ 9600 1800 +Wire Wire Line + 9600 1800 9350 1800 +Wire Wire Line + 9600 2250 9600 2350 +Wire Wire Line + 9600 2350 9050 2350 +Text Notes 7450 1350 0 79 ~ 0 +La tensión de 5V se utiliza para alimentar\nel servomotor Tower Pro. +$Comp +L Connector:Conn_01x02_Male J8 +U 1 1 5F8B6AB3 +P 10100 3100 +F 0 "J8" V 10150 3150 50 0000 L CNN +F 1 "POWER_JUMPER_5V" V 10000 2700 50 0000 L CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" H 10100 3100 50 0001 C CNN +F 3 "~" H 10100 3100 50 0001 C CNN + 1 10100 3100 + 0 1 1 0 +$EndComp +Text GLabel 9800 3500 0 50 Input ~ 0 +5V_uC +Wire Wire Line + 9800 3500 10000 3500 +Wire Wire Line + 10000 3500 10000 3300 +$Comp +L power:+5V #PWR0113 +U 1 1 5F9AE2AA +P 10550 3300 +F 0 "#PWR0113" H 10550 3150 50 0001 C CNN +F 1 "+5V" H 10565 3473 50 0000 C CNN +F 2 "" H 10550 3300 50 0001 C CNN +F 3 "" H 10550 3300 50 0001 C CNN + 1 10550 3300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 10100 3300 10100 3500 +Wire Wire Line + 10100 3500 10550 3500 +Wire Wire Line + 10550 3500 10550 3300 +Text Notes 7450 3350 0 79 ~ 0 +Con jumper para alimentar \nmicrocontrolador con 5V. +Wire Notes Line + 7200 4050 10900 4050 +Wire Notes Line + 7200 700 7200 4050 +Wire Notes Line + 10900 700 10900 4050 +$Comp +L Connector_Generic:Conn_01x04 J1 +U 1 1 600478E4 +P 1200 1700 +F 0 "J1" H 1550 1600 50 0000 C CNN +F 1 "IN_STP1" H 1550 1700 50 0000 C CNN +F 2 "TerminalBlock:TerminalBlock_bornier-4_P5.08mm" H 1200 1700 50 0001 C CNN +F 3 "~" H 1200 1700 50 0001 C CNN + 1 1200 1700 + -1 0 0 1 +$EndComp +$Comp +L Connector_Generic:Conn_01x04 J6 +U 1 1 600498E2 +P 1200 2100 +F 0 "J6" H 1550 2000 50 0000 C CNN +F 1 "IN_STP2" H 1550 2100 50 0000 C CNN +F 2 "TerminalBlock:TerminalBlock_bornier-4_P5.08mm" H 1200 2100 50 0001 C CNN +F 3 "~" H 1200 2100 50 0001 C CNN + 1 1200 2100 + -1 0 0 1 +$EndComp +$Comp +L Connector_Generic:Conn_01x04 J9 +U 1 1 6004A19B +P 1200 2500 +F 0 "J9" H 1550 2400 50 0000 C CNN +F 1 "IN_STP3" H 1550 2500 50 0000 C CNN +F 2 "TerminalBlock:TerminalBlock_bornier-4_P5.08mm" H 1200 2500 50 0001 C CNN +F 3 "~" H 1200 2500 50 0001 C CNN + 1 1200 2500 + -1 0 0 1 +$EndComp +Connection ~ 9100 5650 +Wire Wire Line + 10050 5650 9100 5650 +Wire Wire Line + 10050 5500 10050 5650 +Wire Wire Line + 10050 5050 10050 5200 +Wire Wire Line + 9750 5050 10050 5050 +$Comp +L Device:LED D14 +U 1 1 5FA56A36 +P 10050 5350 +F 0 "D14" V 10100 5500 50 0000 C CNN +F 1 "LED" V 10000 5500 50 0000 C CNN +F 2 "LED_THT:LED_D5.0mm" H 10050 5350 50 0001 C CNN +F 3 "~" H 10050 5350 50 0001 C CNN + 1 10050 5350 + 0 -1 -1 0 +$EndComp +Connection ~ 9100 5050 +Wire Wire Line + 9100 5050 9450 5050 +$Comp +L Device:R R14 +U 1 1 5FA485FA +P 9600 5050 +F 0 "R14" V 9500 5050 50 0000 C CNN +F 1 "1k" V 9700 5050 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 9530 5050 50 0001 C CNN +F 3 "~" H 9600 5050 50 0001 C CNN + 1 9600 5050 + 0 -1 -1 0 +$EndComp +Connection ~ 8700 5650 +Wire Wire Line + 9100 5650 8700 5650 +Wire Wire Line + 9100 5500 9100 5650 +Connection ~ 8700 5050 +Wire Wire Line + 9100 5050 8700 5050 +Wire Wire Line + 9100 5200 9100 5050 +$Comp +L Device:CP C4 +U 1 1 5F4AA5B1 +P 9100 5350 +F 0 "C4" H 9250 5350 50 0000 L CNN +F 1 "10uF" H 9100 5250 50 0000 L CNN +F 2 "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" H 9138 5200 50 0001 C CNN +F 3 "~" H 9100 5350 50 0001 C CNN + 1 9100 5350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8400 5650 8400 5750 +Connection ~ 8400 5650 +Wire Wire Line + 8700 5650 8400 5650 +Wire Wire Line + 8700 5500 8700 5650 +Wire Wire Line + 8400 5050 8400 4900 +Connection ~ 8400 5050 +Wire Wire Line + 8700 5050 8400 5050 +Wire Wire Line + 8700 5200 8700 5050 +$Comp +L Device:C C2 +U 1 1 5F466489 +P 8700 5350 +F 0 "C2" H 8800 5350 50 0000 L CNN +F 1 "0.1uF" H 8700 5250 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mm" H 8738 5200 50 0001 C CNN +F 3 "~" H 8700 5350 50 0001 C CNN + 1 8700 5350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8400 5300 8400 5050 +$Comp +L power:+12V #PWR0102 +U 1 1 5F4638E0 +P 8400 4900 +F 0 "#PWR0102" H 8400 4750 50 0001 C CNN +F 1 "+12V" H 8415 5073 50 0000 C CNN +F 2 "" H 8400 4900 50 0001 C CNN +F 3 "" H 8400 4900 50 0001 C CNN + 1 8400 4900 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8400 5400 8400 5650 +$Comp +L power:GND #PWR0101 +U 1 1 5F46310C +P 8400 5750 +F 0 "#PWR0101" H 8400 5500 50 0001 C CNN +F 1 "GND" H 8405 5577 50 0000 C CNN +F 2 "" H 8400 5750 50 0001 C CNN +F 3 "" H 8400 5750 50 0001 C CNN + 1 8400 5750 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8250 5300 8400 5300 +Wire Wire Line + 8250 5400 8400 5400 +$Comp +L Connector_Generic:Conn_01x02 J7 +U 1 1 5F4619E5 +P 8050 5400 +F 0 "J7" H 7968 5075 50 0000 C CNN +F 1 "POWER_12V" H 7968 5166 50 0000 C CNN +F 2 "Connector_Phoenix_MSTB:PhoenixContact_MSTBVA_2,5_2-G-5,08_1x02_P5.08mm_Vertical" H 8050 5400 50 0001 C CNN +F 3 "~" H 8050 5400 50 0001 C CNN + 1 8050 5400 + -1 0 0 1 +$EndComp +$Comp +L Connector_Generic:Conn_01x03 J10 +U 1 1 60059553 +P 1200 2800 +F 0 "J10" H 1550 2750 50 0000 C CNN +F 1 "IN_SERVO" H 1550 2850 50 0000 C CNN +F 2 "TerminalBlock:TerminalBlock_bornier-3_P5.08mm" H 1200 2800 50 0001 C CNN +F 3 "~" H 1200 2800 50 0001 C CNN + 1 1200 2800 + -1 0 0 1 +$EndComp +Text Notes 700 3850 0 79 ~ 0 +Entrada señales, GND \ny alimentación desde\nmicrocontrolador. +Text Notes 5500 1400 0 79 ~ 0 +Conexión a motor 1\n28BYJ-48 +Text Notes 5500 3500 0 79 ~ 0 +Conexión a motor 2\n28BYJ-48 +Text Notes 5500 5750 0 79 ~ 0 +Conexión a motor 3\n28BYJ-48 +Wire Notes Line + 5350 6500 6450 6500 +Wire Notes Line + 6450 6500 6450 7550 +Wire Notes Line + 6450 7550 5350 7550 +Wire Notes Line + 5350 7550 5350 6500 +Text Notes 5200 7750 0 59 ~ 0 +LEDs indicadores de alimentación\nbobinas de motor. +$EndSCHEMATC From 196ce2df7eb51e00f13e39d514ee985ddabd1b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20G=2E=20Fern=C3=A1ndez?= Date: Thu, 10 Sep 2020 18:37:07 -0300 Subject: [PATCH 2/4] =?UTF-8?q?[update]=20actualizaci=C3=B3n=20general=20c?= =?UTF-8?q?on=20display=20y=20fix=20encoder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/config.mk | 3 ++ app/inc/FreeRTOSPriorities.h | 2 + app/inc/display_lcd.h | 28 +++++++++++ app/inc/stepper.h | 2 +- app/inc/uart.h | 9 ++++ app/src/app.c | 6 ++- app/src/display_lcd.c | 89 ++++++++++++++++++++++++++++++++++ app/src/encoder.c | 13 +++-- app/src/uart.c | 7 +-- docs/informe/bibliography.bib | 24 +++++++++ docs/informe/main.pdf | Bin 536052 -> 529353 bytes docs/informe/main.tex | 60 +++++++---------------- program.mk | 4 +- 13 files changed, 192 insertions(+), 55 deletions(-) create mode 100644 app/inc/display_lcd.h create mode 100644 app/src/display_lcd.c diff --git a/app/config.mk b/app/config.mk index 6fdbc10..4ee390d 100644 --- a/app/config.mk +++ b/app/config.mk @@ -11,6 +11,9 @@ USE_SAPI=y DEFINES+=SAPI_USE_INTERRUPTS DEFINES+=OVERRIDE_SAPI_HCSR04_GPIO_IRQ +# For LCD connected via I2C PCF8574T I/O expander +DEFINES+=LCD_HD44780_I2C_PCF8574T + # Use FreeRTOS USE_FREERTOS=y FREERTOS_HEAP_TYPE=1 diff --git a/app/inc/FreeRTOSPriorities.h b/app/inc/FreeRTOSPriorities.h index 87104af..a461250 100644 --- a/app/inc/FreeRTOSPriorities.h +++ b/app/inc/FreeRTOSPriorities.h @@ -22,4 +22,6 @@ #define priorityEncoderTask ( configMAX_PRIORITIES - 5 ) +#define priorityDisplayTask ( configMAX_PRIORITIES - 6 ) + #endif /* FREERTOSPRIORITIES_H_ */ diff --git a/app/inc/display_lcd.h b/app/inc/display_lcd.h new file mode 100644 index 0000000..d0637be --- /dev/null +++ b/app/inc/display_lcd.h @@ -0,0 +1,28 @@ +/*! \file display_lcd.h + \brief Descripción del archivo. + \author Gonzalo G. Fernández + \version 1.0 + \date Septiembre 2020 + + Detalle. +*/ + +#ifndef DISPLAY_LCD_H_ +#define DISPLAY_LCD_H_ + +/*! \var TaskHandle_t xDisplayTaskHandle + \brief Handle de la tarea de control del Display LCD. +*/ +extern TaskHandle_t xDisplayTaskHandle; + +/*! \fn void vDisplayTask( void *pvParameters ) + \brief Tarea para control de display LCD. +*/ +void vDisplayTask( void *pvParameters ); + +/*! \fn BaseType_t xDisplayInit( void ) + \brief Inicialización de módulo LCD +*/ +BaseType_t xDisplayInit( void ); + +#endif /* DISPLAY_LCD_H_ */ diff --git a/app/inc/stepper.h b/app/inc/stepper.h index bab9329..db9e8bb 100644 --- a/app/inc/stepper.h +++ b/app/inc/stepper.h @@ -16,7 +16,7 @@ /*! \def stepperAPP_NUM \brief Cantidad de motores en la aplicación */ -#define stepperAPP_NUM 3 +#define stepperAPP_NUM 2 /*! \def stepperTIMER_PERIOD \brief Periodo de pasos de los motores (velocidad del motor) diff --git a/app/inc/uart.h b/app/inc/uart.h index 79ff68f..04ea960 100644 --- a/app/inc/uart.h +++ b/app/inc/uart.h @@ -1,3 +1,12 @@ +/*! \file uart.h + \brief Descripción del archivo. + \author Gonzalo G. Fernández + \version 1.0 + \date Julio 2020 + + Detalle. +*/ + #ifndef UART_H #define UART_H diff --git a/app/src/app.c b/app/src/app.c index 3d4a89c..58f669e 100644 --- a/app/src/app.c +++ b/app/src/app.c @@ -25,6 +25,7 @@ #include "encoder.h" #include "stepper.h" #include "servo.h" +#include "display_lcd.h" /*! \def appQUEUE_MSG_LENGTH \brief Longitud de cola de mensajes recibidos. @@ -70,7 +71,7 @@ void vErrorNotifHandling( uint32_t ulNotifError ) } } -/*! \fn vAppSyncTask( void *pvParameters ) +/*! \fn void vAppSyncTask( void *pvParameters ) \brief Tarea de sincronización de mensajes. */ void vAppSyncTask( void *pvParameters ) @@ -174,6 +175,9 @@ int main( void ) /* Obtener información del espacio libre */ xPreviousSize = xPrintModuleSize( "Servo", xPreviousSize); + /* Inicialización de display LCD */ + xStatus = xDisplayInit(); configASSERT( xStatus == pdPASS ); + /* Creación de cola de mensajes recibidos */ xMsgQueue = xQueueCreate( appQUEUE_MSG_LENGTH, sizeof( char * ) ); /* Verificación de cola creada con éxito */ diff --git a/app/src/display_lcd.c b/app/src/display_lcd.c new file mode 100644 index 0000000..5bd30e4 --- /dev/null +++ b/app/src/display_lcd.c @@ -0,0 +1,89 @@ +/*! \file display_lcd.c + \brief Descripción del archivo. + \author Gonzalo G. Fernández + \version 1.0 + \date Septiembre 2020 + + Detalle. +*/ + +/* FreeRTOS includes */ +#include "FreeRTOS.h" +#include "FreeRTOSConfig.h" +#include "FreeRTOSPriorities.h" +#include "task.h" + +/* EDU-CIAA firmware_v3 includes */ +#include "sapi.h" + +/* Aplicación includes */ +#include "display_lcd.h" + +/*! \var TaskHandle_t xDisplayTaskHandle + \brief Handle de la tarea de control del Display LCD. +*/ +TaskHandle_t xDisplayTaskHandle; + +/*! \fn void vDisplayTask( void *pvParameters ) + \brief Tarea para control de display LCD. +*/ +void vDisplayTask( void *pvParameters ) +{ + + for ( ;; ) { + /* Esperar notificación desde encoder */ + ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); + printf("SW PRESSED\n"); + } +} + +/*! \fn BaseType_t xDisplayInit( void ) + \brief Inicialización de módulo LCD +*/ +BaseType_t xDisplayInit( void ) +{ + /* Inicialización de interfaz I2C */ + i2cInit( I2C0, 100000 ); + + /* Esperar que se estabilice la alimentación del LCD + * No utilizo la API vTaskDelay por ser un proceso a + * ejecutar antes de lanzar el Scheduler */ + //delay( LCD_STARTUP_WAIT_MS ); + + /* Inicialización del display */ + lcdInit( + 16, /*Ancho de línea */ + 2, /* Cantidad de líneas */ + 5, /* Ancho en pixeles de un caracter */ + 8 /* Altura en pixeles de un caracter */ + ); + + /* Apagar cursor (no es necesario en la aplicación) */ + lcdCursorSet( LCD_CURSOR_OFF ); + /* Limíar pantalla */ + lcdClear(); + + /* Colocar cursor en posición 0, 0 */ + lcdGoToXY( 0, 0 ); + /* Mensaje de inicialización */ + lcdSendStringRaw( "MyEP FIng UNCuyo" ); + + /* Creación de tarea para control de display LCD */ + BaseType_t xStatus; + xStatus = xTaskCreate( + /* Puntero a la función que implementa la tarea */ + vDisplayTask, + /* Nombre de la tarea amigable para el usuario */ + ( const char * ) "DisplayTask", + /* Tamaño de stack de la tarea */ + configMINIMAL_STACK_SIZE*2, + /* Parámetros de la tarea */ + NULL, + /* Prioridad de la tarea */ + priorityDisplayTask, + /* Handle de la tarea creada */ + &xDisplayTaskHandle + ); + + return xStatus; +} diff --git a/app/src/encoder.c b/app/src/encoder.c index 7719f20..1911540 100644 --- a/app/src/encoder.c +++ b/app/src/encoder.c @@ -23,6 +23,7 @@ /* Aplicación includes */ #include "encoder.h" #include "stepper.h" +#include "display_lcd.h" /*! \var SemaphoreHandle_t xEncoderPositivePulseSemaphore \brief Semáforo que guarda la cantidad de pulsos positivos @@ -66,7 +67,6 @@ void vEncoderCLK_IRQ_HANDLER( void ) */ void vEncoderSW_IRQ_HANDLER( void ) { - Chip_PININT_ClearIntStatus( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); BaseType_t xHigherPriorityTaskWoken = pdFALSE; /* Valor de selección del encoder */ uint8_t cValue; @@ -81,7 +81,14 @@ void vEncoderSW_IRQ_HANDLER( void ) printf("%d\n", cValue); /* Actualización del valor en mailbox */ xQueueOverwriteFromISR( xEncoderChoiceMailbox, &cValue, 0 ); - portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + + /* Notificación de selección a display */ + vTaskNotifyGiveFromISR( xDisplayTaskHandle, &xHigherPriorityTaskWoken ); + + Chip_PININT_ClearIntStatus( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); + Chip_PININT_ClearRiseStates( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); + + portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); } /*! \fn void vEncoderTask( void *pvParameters ) @@ -176,7 +183,7 @@ BaseType_t xEncoderInit( void ) /* Set edge interrupt mode */ Chip_PININT_SetPinModeEdge( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); /* Enable high edge gpio interrupt */ - Chip_PININT_EnableIntLow( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); + Chip_PININT_EnableIntHigh( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); /* Clear pending irq channel interrupts */ NVIC_ClearPendingIRQ( PIN_INT0_IRQn + PININT2_INDEX ); /* Enable irqChannel interrupt */ diff --git a/app/src/uart.c b/app/src/uart.c index 77c59bc..8d1fb5a 100644 --- a/app/src/uart.c +++ b/app/src/uart.c @@ -50,10 +50,7 @@ void vUartSendMsg( char *pcMsg ) */ void vSendCmd( char* pcBuffer, uint8_t cLength ) { - /* Asignación de memoria dinámica del mensaje */ - char *pcMsg; - pcMsg = ( char * ) pvPortMalloc( cLength * sizeof( char ) ); - pcMsg = pcBuffer; + char *pcMsg = pcBuffer; /* Delimitador final de string */ pcMsg[cLength] = '\0'; @@ -121,7 +118,7 @@ void vUartTxTask( void* pvParameters ) char *pcMsgToSend; for ( ;; ) { - /* Lectura de cola de recepción */ + /* Lectura de cola de transmisión */ xQueueReceive( /* Handle de la cola a leer */ xUartTxQueue, diff --git a/docs/informe/bibliography.bib b/docs/informe/bibliography.bib index 5309cf0..ea2b19c 100644 --- a/docs/informe/bibliography.bib +++ b/docs/informe/bibliography.bib @@ -3,4 +3,28 @@ @book{FreeRTOS author = {Richard Barry}, year = {2016}, keywords = {rtos} +} + +@online{ciaa-wiki, + author = "Proyecto CIAA", + title = "Framework para desarrollo de Firmware de Sistemas Embebidos en C/C++", + url = "https://github.com/epernia/firmware_v3/blob/master/documentation/firmware/readme/readme-es.md", + keywords = "ciaa, wiki" +} + +@book{misra-c, + title = {MISRA-C:2004 Guidelines for the use of the C language in critical systems}, + author = {MISRA}, + isbn = {9780952415640}, + year = {2004}, + publisher = {MIRA Limited}, + keywords = {misra, c} +} + +@online{circular-buffer, + author = "Phillip Johnston", + title = "Creating a Circular Buffer in C and C++", + url = "https://embeddedartistry.com/blog/2017/05/17/creating-a-circular-buffer-in-c-and-c/", + addendum = "(accessed: 04.09.2020)", + keywords = "c" } \ No newline at end of file diff --git a/docs/informe/main.pdf b/docs/informe/main.pdf index 68bc0818136fedb86935b95f6df6749a4f8b234b..2a3f38d7360760c23022fb5bc4d1165da8e8be94 100644 GIT binary patch delta 82833 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

-F-!fAK%HY5EYW1R>3xt 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

2=wSS|2n^W4#?;% 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�*{wF31S6-!O!C&qeNPJ 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�I5^qM`mKa>wT>`3E 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

  • y5V=M_xCe`I93m(1zCLH*1supt2^P&+x%uat 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 diff --git a/docs/informe/main.tex b/docs/informe/main.tex index 15d662e..6962915 100644 --- a/docs/informe/main.tex +++ b/docs/informe/main.tex @@ -18,7 +18,7 @@ \maketitle \begin{abstract} - Proyecto final de la cátedra Microcontroladores y Electrónica de Potencia de la Facultad de Ingeniería de la Universidad Nacional de Cuyo. Consiste en el diseño e implementación de un sistema embebido para el control de un accionamiento electromecánico básico, basado en el sistema operativo de tiempo real FreeRTOS, sobre la placa de desarrollo EDU-CIAA-NXP del proyecto CIAA. El principal objetivo del proyecto es la implementación y puesta en práctica de todas las características fundamentales del RTOS. + Proyecto final de la cátedra Microcontroladores y Electrónica de Potencia de la Facultad de Ingeniería de la Universidad Nacional de Cuyo. Consiste en el diseño e implementación de un sistema embebido para el control de un accionamiento electromecánico básico, basado en el sistema operativo de tiempo real FreeRTOS, sobre la placa de desarrollo EDU-CIAA-NXP del proyecto CIAA. El principal objetivo del proyecto es la implementación de todas las características fundamentales del RTOS. \end{abstract} \section{Introducción} @@ -27,13 +27,13 @@ \section{Introducción} Además, el proyecto también busca una introducción al flujo de trabajo del proyecto CIAA (Computadora Industrial Abierta Argentina). Salvo algunas excepciones, no se profundizó en la programación de los microcontroladores a nivel de registros, sino que se utilizó la capa de abstracción proveída por las librerías sAPI y LPCOpen, incluidas en el firmware de dicho proyecto CIAA. \section{Aplicaciones de tiempo real} -Previo al planteo de la elección de un sistema operativo de tiempo real como base en el diseño de una determinada aplicación, es importante definir cuándo una aplicación es ``de tiempo real''. Se dice que una aplicación es de tiempo real cuando posee características tales que en su ejecución debe cumplir distintos requisitos de tiempo. Es decir, el diseñador debe garantizar que ciertos eventos se desarrollarán en un tiempo establecido, decimos que la aplicación es \textbf{determinista}. +Previo al planteo de la elección de un sistema operativo de tiempo real como base en el diseño de una determinada aplicación, es importante definir cuándo una aplicación es ``de tiempo real''. Se dice que una aplicación es de tiempo real cuando posee características tales que en su ejecución debe cumplir distintos requisitos de tiempo. Es decir, el diseñador debe garantizar que ciertos eventos se desarrollarán en un tiempo establecido. Decimos que la aplicación es \textbf{determinista}. -Un sistema perfectamente determinista no experimenta variación en la sincronización de los eventos. Sin embargo, en el mundo real, hasta el sistema más determinista presentará una variación. La variación entre el tiempo especificado en que debe ejecutarse un evento y el tiempo real en que se ejecuta se denomina \textbf{jitter}. El \textit{jitter} ocurre tanto para un evento que se ejecuta después del tiempo establecido como para uno que se produce de manera temprana. +Un sistema perfectamente determinista no experimenta variación en la sincronización de los eventos. Sin embargo, en el mundo real, hasta el sistema más determinista presentará una variación. La variación entre el tiempo especificado en que debe ejecutarse un evento y el tiempo en que se ejecuta realmente se denomina \textbf{jitter}. El \textit{jitter} ocurre tanto para un evento que se ejecuta después del tiempo establecido como para uno que se produce de manera temprana. -La cantidad de \textit{jitter} que una aplicación puede tolerar sin dejar de cumplir los requisitos de tiempo define el \textit{jitter aceptable}. Teniendo en cuenta este concepto, ahora podemos clasificar las aplicaciones en sistemas de requisitos de tiempo tipo \textit{soft} (o su traducción al español como suave o blando) y requisitos de tiempo tipo \textit{hard} (o su traducción al español como duro). Gran parte de la bibliografía consultada concuerda en que los requisitos de tiempo \textit{soft} son aquellos que, de no cumplirse el tiempo especificado, tiene como consecuencia una disminución en la calidad del desempeño de la aplicación. Por el otro lado, los requisitos de tiempo \textit{hard} son aquellos que, de no cumplirse el tiempo especificado, resulta en una falla del sistema. Sin embargo, teniendo claro el concepto de \textit{jitter aceptable} podemos decir que requisitos de tiempo blandos se darán en sistemas con \textit{jitter aceptable} alto y, por el contrario, los requisitos de tiempo duros se darán en sistemas con \textit{jitter aceptable} bajo. +La cantidad de \textit{jitter} que una aplicación puede tolerar sin dejar de cumplir los requisitos de tiempo define el \textit{jitter aceptable}. Teniendo en cuenta este concepto, ahora podemos clasificar las aplicaciones en sistemas de requisitos de tiempo tipo \textit{soft} (o su traducción al español como suave o blando) y requisitos de tiempo tipo \textit{hard} (o su traducción al español como duro). Gran parte de la bibliografía consultada concuerda en que los requisitos de tiempo \textit{soft} son aquellos que, de no cumplirse el tiempo especificado, tiene como consecuencia una disminución en la calidad del desempeño de la aplicación; y por otro lado, los requisitos de tiempo \textit{hard} aquellos que, de no cumplirse el tiempo especificado, resulta en una falla del sistema. Sin embargo, teniendo claro el concepto de \textit{jitter aceptable} podemos decir que requisitos de tiempo blandos se darán en sistemas con \textit{jitter aceptable} alto y, por el contrario, los requisitos de tiempo duros se darán en sistemas con \textit{jitter aceptable} bajo. -Para clarificar la diferencia entre requisitos duros y blandos, ciertas fuentes suelen colocar como ejemplos de aplicaciones de tiempo real duro la navegación autónoma, marcapasos o instrumentación médica sensible, es decir, aplicaciones donde una falla es realmente crítica; y otros ejemplos donde solo se afecta la calidad, como servicios de chat y similares, como aplicaciones de tiempo real blando. Al realizar este trabajo, una de las conclusiones es que este tipo de ejemplos generan confusión, ya que quién se esta introduciendo en el concepto puede confundir la medida de qué tan duro es un requisito de tiempo con una medida de severidad de la falla de un sistema. +Para clarificar la diferencia entre requisitos duros y blandos, ciertas fuentes suelen colocar como ejemplos de aplicaciones de tiempo real duro la navegación autónoma, marcapasos o instrumentación médica sensible, es decir, aplicaciones donde una falla es realmente crítica; y otros ejemplos donde solo se afecta la calidad (servicios de chat y similares) como aplicaciones de tiempo real blando. Al realizar este trabajo, una de las conclusiones es que este tipo de ejemplos generan confusión, ya que quién se esta introduciendo en el concepto puede confundir la medida de qué tan duro es un requisito de tiempo con una medida de severidad de la falla de un sistema. Lo principal a tener en cuenta es que en última instancia, ante un determinado comportamiento de un sistema, quien establece el límite entre disminución en la calidad de desempeño y una falla es el diseñador. También es importante que, en general, no es todo el sistema el que posee estas restricciones de tiempo, sino un determinado aspecto en particular. Para resaltar esto, se puede utilizar como ejemplo el proyecto llevado a cabo, donde los motores deben moverse a posiciones definidas en un determinado lapso de tiempo (esto establece la velocidad de los motores), por lo que esa es una característica del sistema que requiere tiempo real (\textit{jitter} aceptable bajo); mientras que, por ejemplo, no tiene relevancia en qué momento en específico se expone el valor de posición del motor en un display (\textit{jitter} aceptable muy alto) (en otra aplicación diferente esto si puede llegar a ser una característica que en el diseño se contemple como de tiempo real duro). @@ -58,7 +58,7 @@ \section{Computadora Industrial Abierta Argentina} Además, se diseñó una versión educativa de la plataforma, denominada \textbf{EDU-CIAA}, más simple y de menor costo, para lograr un impacto en la enseñanza primaria, secundaria y universitaria. \subsection{Placa de desarrollo EDU-CIAA-NXP} -La EDU-CIAA-NXP (figura \ref{fig:edu-ciaa}) es entonces, una versión de bajo costo de la CIAA-NXP y es la utilizada para este proyecto. +La EDU-CIAA-NXP (figura \ref{fig:edu-ciaa}) es entonces, una versión de bajo costo de la CIAA-NXP y es la utilizada en este proyecto. \begin{figure}[ht] \centering @@ -67,37 +67,9 @@ \subsection{Placa de desarrollo EDU-CIAA-NXP} \label{fig:edu-ciaa} \end{figure} -Su microcontrolador es el LPC4337 (dual core ARM Cortex-M4F y Cortex-M0). La placa también cuenta con los siguientes módulos: +Su microcontrolador es el LPC4337 (dual core ARM Cortex-M4F y Cortex-M0). La placa también cuenta con los módulos que pueden observarse en la figura \ref{fig:edu-ciaa-modulos}. -\begin{itemize} - \item 2 puertos micro-USB (uno para aplicaciones y debugging, otro para alimentación). - \item 4 salidas digitales implementadas con leds RGB. - \item 4 entradas digitales con pulsadores. - \item 1 puerto de comunicaciones RS 485 con bornera. - \item 2 conectores de expansión: - \begin{itemize} - \item P1: - \begin{itemize} - \item 3 entradas analógicas (ADC0, 1, 2 y 3), - \item 1 salida analógica (DAC0), - \item 1 puerto I2C, - \item 1 puerto asincrónico full duplex (para RS-232). - \item 1 puerto CAN, - \item 1 conexión para un teclado de 3x4, - \end{itemize} - \item P2: - \begin{itemize} - \item 1 puerto Ethernet, - \item 1 puerto SPI, - \item 1 puerto para Display LCD con 4 bits de datos, Enable y RS. - \item 9 pines genéricos de I/O. - \end{itemize} - \end{itemize} -\end{itemize} - -En la figura \ref{fig:edu-ciaa-modulos} se presenta un diagrama de bloques con los módulos que posee la placa. - -\begin{figure} +\begin{figure}[ht] \centering \includegraphics[width=0.45\textwidth]{../modulos_edu_ciaa.jpg} \caption{Diagrama de bloques con módulos de placa EDU-CIAA-NXP} @@ -105,7 +77,7 @@ \subsection{Placa de desarrollo EDU-CIAA-NXP} \end{figure} \section{Accionamiento electromecánico: brazo robótico paralelo básico} -Para reflejar de una forma concreta las acciones ejecutadas en la electrónica del sistema, se optó por implementar el control de un brazo robótico paralelo básico. Su tamaño es reducido, ya que solo tiene un fin educacional, y por lo tanto los actuadores son sencillos y de poca potencia. El robot implementado es denominado EEZYBOTARM MK3, publicado por EEZYrobots y diseñado por Carlo Franciscone. +Para reflejar de una forma concreta las acciones ejecutadas en la electrónica del sistema (y también para tener objetivos definidos en su diseño), se optó por implementar el control de un brazo robótico paralelo básico. Su tamaño es reducido, ya que solo tiene un fin educacional, y por lo tanto los actuadores son sencillos y de poca potencia. El robot construído es denominado EEZYBOTARM MK3, publicado por EEZYrobots y diseñado por Carlo Franciscone. \begin{figure}[ht] \centering @@ -119,7 +91,9 @@ \section{Accionamiento electromecánico: brazo robótico paralelo básico} Además del brazo robótico con sus tres motores paso a paso y servo motor, la aplicación también tiene un display donde se observará la información del estado en que se encuentra el brazo. Las consignas que recibirán los motores será a través de protocolo UART desde PC o mediante un encoder rotativo. Como accesorio secundario en la aplicación se encuentran los LEDs de la placa EDU-CIAA como indicadores visuales y un buzzer como indicador auditivo. \section{Flujo de trabajo y herramientas utilizadas} -Todo el software se desarrolló en una PC con sistema operativo Linux. Para la programación en lenguaje C se utilizó el programa Eclipse IDE, configurado para compilar y cargar el programa a la placa desde el mismo entorno de desarrollo. Para completar el conjunto de herramientas se puede trabajar con OpenOCD como debugger, sin embargo en este proyecto no fue necesario su uso. Para la comunicación serial con la placa (UART) se utilizó el programa picocom, una herramienta sencilla por comando de línea. Para el control de versiones del proyecto, además del uso del firmware del proyecto CIAA, se utilizó git (con repositorio remoto en GitHub). +Todo el software se desarrolló en una PC con sistema operativo Linux. Para la programación en lenguaje C se utilizó el programa Eclipse IDE, configurado para compilar y cargar el programa a la placa desde el mismo entorno de desarrollo (ver documentación del firmware en la wiki del proyecto\cite{ciaa-wiki} en GitHub). Para completar el conjunto de herramientas se puede trabajar con OpenOCD como debugger, sin embargo en este proyecto no fue necesario su uso. Para la comunicación serial con la placa (UART) se utilizó el programa picocom, una herramienta sencilla por comando de línea. Para el control de versiones del proyecto, además del uso del firmware del proyecto CIAA, se utilizó git (con repositorio remoto en GitHub). + +En cuánto a FreeRTOS, el port para la placa de desarrollo EDU-CIAA se encuentra dentro del firmware, por lo tanto no es necesario descargarlo desde ningun sitio externo al proyecto CIAA. Su configuración está dada por el archivo \textit{config.mk} (definiciones de la compilación propias de la aplicación desarrollada) y principalmente por el archivo \textit{FreeRTOSConfig.h} dentro de la carpeta de \textit{headers} de la aplicación. \section{Componentes fundamentales de FreeRTOS} A continuación se describe brevemente los diferentes componentes escenciales de FreeRTOS según el libro \textit{Mastering the FreeRTOS Real Time Kernel}, y su uso dentro de la aplicación. @@ -146,7 +120,7 @@ \subsection{Asignación de memoria dinámica} \item \textit{Heap 5}: La única diferencia con el 4, es que no esta limitado a la asignación de memoria partiendo de un único array asignado estáticamente. \end{itemize} -En el proyecto no se utiliza asignación de memoria dinámica, ya que es desaconsejada en microcontroladores y sistemas críticos (regla MISRA 20.4) se optó por utilizar un esquema \textit{heap 1}. +En el proyecto no se utiliza asignación de memoria dinámica, ya que es desaconsejada en microcontroladores y sistemas críticos (regla MISRA 20.4, ver \textcite{misra-c}) se optó por utilizar un esquema \textit{heap 1}. \subsection{Tareas} Las tareas son básicamente funciones implementadas en C y son programas en sí mismas. Su estructura es similar a la de una función \textit{main()} típica en sistemas embebidos, con un bucle que debe ejecutarse de forma infinita. Cada tarea se ejecuta de forma independiente en \textit{pseudoparalelismo}, y al crearse se les asigna automáticamente su propia pila de memoria. @@ -161,12 +135,12 @@ \subsection{Tareas} El cambio de estado en una tarea es únicamente dirigido por el \textit{scheduler} de FreeRTOS. Para definir cuál tarea tiene más importancia de ejecución sobre otra, existe el concepcto de prioridad: cuándo el \textit{scheduler} deba decidir cuál es la próxima tarea a colocar en estado \textit{running} deberá observar cuál es la de mayor prioridad. -Para seleccionar esa próxima tarea a ejecutar, el \textit{scheduler} se ejecuta mediante una interrupción periódica denominada \textit{tick interrupt}. En el proyecto la frecuencia de dicha interrupción es de 1000Hz. +Para seleccionar esa próxima tarea a ejecutar, el \textit{scheduler} se ejecuta mediante una interrupción periódica denominada \textit{tick interrupt}. En el proyecto la frecuencia de dicha interrupción es de 1000 Hz. No es necesario especificar un ejemplo de tarea ya que se utilizan en prácticamente todos los aspectos del trabajo. \subsection{Algoritmos de \textit{scheduler}} -El algoritmo del \textit{scheduler} es el que decidirá qué tarea ejecutará de entre la lista de tareas en estado listas o \textit{ready}. +El algoritmo del \textit{scheduler} es el que decidirá qué tarea ejecutará de entre la lista de tareas en estado listas o \textit{ready} y cuándo cambiar de una a otra. El tipo de algoritmo a utilizar se configura con dos variables: uso de \textbf{preemption} y uso de \textbf{time slicing}: @@ -219,14 +193,14 @@ \subsection{Timers por software} Esto es importante, ya que entonces no se debe utilizar APIs dentro de las funciones de \textit{callback} que puedan generar un cambio de contexto, es decir, que bloqueen el RTOS \textit{daemon}. Por ejemplo, se puede llamar \textit{xQueueReceive()} pero solo si el parámetro \textit{xTicksToWait} esta seteado en 0. -En el proyecto hay tres instancias de timers por software, y son los encargados del movimiento de los motores paso a paso (ver figura \ref{fig:diagrama-stepper}). +En el proyecto hay tres instancias de timers por software, y son los encargados del movimiento de los motores paso a paso (ver figura \ref{fig:diagrama-stepper}). Es importante aclarar que el uso de un \textit{timer} por software para el control de un motor paso a paso dista mucho de ser la solución más óptima. Se los utiliza en este trabajo solo como ejercicio para poner en práctica su uso. \subsection{Uso de FreeRTOS desde una rutina de interrupción} Dado que muchas veces es necesario el uso de funcionalidades del RTOS dentro de una rutina de interrupción, y teniendo en cuenta que al ejecutarse una rutina de interrupción estamos saliendo del control del sistema operativo en tiempo real, FreeRTOS provee una versión de las APIs convencionales pero para ser ejecutadas en estas circunstancias. Todas aquellas APIs terminadas en ``FromISR'' son de este tipo. Por este mismo motivo es muy aconsejable que las rutinas de interrupción sean cortas, y que si es necesario realizar un procesamiento considerable, dirigirlo a una tarea para que lo realice y finalizar la rutina de interrupción. Para sincronizar las interrupciones con las tareas que ejecutarán el procesamiento vinculado a ellas, se utilizan objetos como semáforos y colas. -En el proyecto se utilizaron APIs de FreeRTOS dentro de rutinas de interrupción como las de UART o las de entradas/salidas de propósito general utilizadas por el encoder (ver figuras \ref{fig:diagrama-uart} y \ref{fig:diagrama-encoder}). +En el proyecto se utilizaron APIs de FreeRTOS dentro de rutinas de interrupción como las de UART o las de entradas utilizadas por el encoder (ver figuras \ref{fig:diagrama-uart} y \ref{fig:diagrama-encoder}). \subsection{Semáforos} Los semáforos son objetos de comunicación que permiten la sincronización entre interrupciones y tareas, aunque su uso no se restringe solamente a éste. Su funcionamiento consiste en bloquear a la tarea hasta que desde la interrupción se realice la acción de ``dar'' el semáforo y la tarea pueda ``tomarlo''. diff --git a/program.mk b/program.mk index 4d399dc..2b749d6 100644 --- a/program.mk +++ b/program.mk @@ -1,4 +1,4 @@ -#PROGRAM_PATH = examples -#PROGRAM_NAME = simple_stepper +#PROGRAM_PATH = firmware_v3-r1.3.0/examples/c/sapi/lcd +#PROGRAM_NAME = lcd_i2c PROGRAM_PATH = ./ PROGRAM_NAME = app \ No newline at end of file From 75cce7e3e1e6c4325d19d92328bfed31ba45781d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20G=2E=20Fern=C3=A1ndez?= Date: Thu, 10 Sep 2020 19:28:45 -0300 Subject: [PATCH 3/4] [update] encoder actualiza seleccion en display --- app/inc/encoder.h | 6 ++++++ app/src/display_lcd.c | 38 ++++++++++++++++++++++++++++++++++++-- app/src/encoder.c | 9 +++++---- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/app/inc/encoder.h b/app/inc/encoder.h index 3c34309..a389332 100644 --- a/app/inc/encoder.h +++ b/app/inc/encoder.h @@ -81,6 +81,12 @@ #define vEncoderSW_IRQ_HANDLER GPIO2_IRQHandler // GPIO interrupt IRQ function name #define PININT2_NVIC_NAME PIN_INT2_IRQn // GPIO interrupt NVIC interrupt name +/*! \var QueueHandle_t xEncoderChoiceMailbox + \brief Mailbox con la selección actual de motor mediante + pulsador de encoder. +*/ +extern QueueHandle_t xEncoderChoiceMailbox; + /*! \fn BaseType_t xEncoderInit( void ) \brief Inicialización de encoder rotativo de la aplicación. */ diff --git a/app/src/display_lcd.c b/app/src/display_lcd.c index 5bd30e4..6069cb6 100644 --- a/app/src/display_lcd.c +++ b/app/src/display_lcd.c @@ -18,22 +18,56 @@ /* Aplicación includes */ #include "display_lcd.h" +#include "encoder.h" /*! \var TaskHandle_t xDisplayTaskHandle \brief Handle de la tarea de control del Display LCD. */ TaskHandle_t xDisplayTaskHandle; +/*! \fn void vUpdateSelection( uint8_t cSelection ) + \brief Actualizar selección en el displat LCD. + \param cSel Entero con el índice de la selección. +*/ +void vUpdateSelection( uint8_t cSelection ) +{ + /* Colocar cursor en posición 0, 1 */ + lcdGoToXY( 0, 1 ); + + switch ( cSelection ) { + case 0: + lcdSendStringRaw( "STEPPER 1:" ); + break; + case 1: + lcdSendStringRaw( "STEPPER 2:" ); + break; + case 2: + lcdSendStringRaw( "STEPPER 3:" ); + break; + case 3: + lcdSendStringRaw( "SERVO EXT:" ); + break; + default: + lcdSendStringRaw( "EDU-CIAA RTOS" ); + break; + } +} + /*! \fn void vDisplayTask( void *pvParameters ) \brief Tarea para control de display LCD. */ void vDisplayTask( void *pvParameters ) { + /* Índice selección de motor */ + uint8_t cValue = 0; for ( ;; ) { /* Esperar notificación desde encoder */ ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); - printf("SW PRESSED\n"); + /* Lectura de selección de motor en mailbox */ + xQueuePeek( xEncoderChoiceMailbox, &cValue, portMAX_DELAY ); + /* Actualización de selección en display */ + vUpdateSelection( cValue ); } } @@ -60,7 +94,7 @@ BaseType_t xDisplayInit( void ) /* Apagar cursor (no es necesario en la aplicación) */ lcdCursorSet( LCD_CURSOR_OFF ); - /* Limíar pantalla */ + /* Limpiar pantalla */ lcdClear(); /* Colocar cursor en posición 0, 0 */ diff --git a/app/src/encoder.c b/app/src/encoder.c index 1911540..570c725 100644 --- a/app/src/encoder.c +++ b/app/src/encoder.c @@ -72,10 +72,10 @@ void vEncoderSW_IRQ_HANDLER( void ) uint8_t cValue; /* Lectura del valor actual en mailbox */ xQueuePeekFromISR( xEncoderChoiceMailbox, &cValue ); - //cValue++; - if ( cValue == 0 ) { - cValue = 1; - } else if ( cValue == 1 ) { + /* Incremento en la selección */ + cValue++; + /* Vuelta a cero por Overflow del menu */ + if ( cValue > stepperAPP_NUM + 1 ) { cValue = 0; } printf("%d\n", cValue); @@ -85,6 +85,7 @@ void vEncoderSW_IRQ_HANDLER( void ) /* Notificación de selección a display */ vTaskNotifyGiveFromISR( xDisplayTaskHandle, &xHigherPriorityTaskWoken ); + /* Limpieza de estado de interrupción y flanco */ Chip_PININT_ClearIntStatus( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); Chip_PININT_ClearRiseStates( LPC_GPIO_PIN_INT, PININTCH( PININT2_INDEX ) ); From 9b8ed728a9e7b3360fcc403c299f8c2f9e46856d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20G=2E=20Fern=C3=A1ndez?= Date: Fri, 11 Sep 2020 23:31:11 -0300 Subject: [PATCH 4/4] [new] circular buffer not working --- app/inc/buffer.h | 111 ++++++++++++++ app/src/app.c | 35 ++--- app/src/buffer.c | 335 ++++++++++++++++++++++++++++++++++++++++++ app/src/display_lcd.c | 1 + app/src/encoder.c | 1 + app/src/servo.c | 2 + app/src/stepper.c | 1 + app/src/uart.c | 24 +-- 8 files changed, 468 insertions(+), 42 deletions(-) create mode 100644 app/inc/buffer.h create mode 100644 app/src/buffer.c diff --git a/app/inc/buffer.h b/app/inc/buffer.h new file mode 100644 index 0000000..19180c6 --- /dev/null +++ b/app/inc/buffer.h @@ -0,0 +1,111 @@ +/*! \file buffer.h + \brief Descripción del archivo. + \author Gonzalo G. Fernández + \version 1.0 + \date Septiembre 2020 + + Detalle. +*/ + +#ifndef BUFFER_H_ +#define BUFFER_H_ + +/*! \def bufferLENGTH + \brief Cantidad de mensajes que puede guardar el buffer circular. +*/ +#define bufferLENGTH 10 + +/*! \def bufferMSG_LENGTH + \brief Cantidad máxima de caracteres que puede tener un mensaje. +*/ +#define bufferMSG_LENGTH 10 + +/*! \typedef xBuffer_t + \brief Estructura del buffer circular. +*/ +typedef struct xBuffer_t xBuffer_t; + +/*! \typedef xBufferHandle_t + \brief Handle para permitir la interacción del usuario + con la API. +*/ +typedef xBuffer_t* xBufferHandle_t; + +/*! \fn BaseType_t xBufferCreate( void ) + \brief Creación de buffer circular para mensajes de la + aplicación. + \return pdPASS si la creación se realizó con éxito. +*/ +BaseType_t xBufferCreate( void ); + +/*! \fn xBufferHandle_t xBufferInit(uint8_t* pcBuffer, size_t size) + \brief Inicialización del buffer circular. + \param ppcBuffer + \param xSize + \return Handle del buffer circular +*/ +xBufferHandle_t xBufferInit( uint8_t** ppcBuffer, size_t xSize ); + +/*! \fn void vBufferFree( xBufferHandle_t xBuffer ) + \brief Eliminación del buffer circular. + Liberación de memoria. + \param xBufferHandle Handle del buffer a eliminar. +*/ +void vBufferFree( xBufferHandle_t xBufferHandle ); + +/*! \fn void vBufferReset( xBufferHandle_t xBuffer ) + \brief Reseteo del buffer circular para vaciarlo. + (head == tail). + \param xBufferHandle Handle del buffer a resetear. +*/ +void vBufferReset( xBufferHandle_t xBufferHandle ); + +/*! \fn BaseType_t xBufferPut( xBufferHandle_t xBufferHandle, uint8_t *pcData ) + \brief Colocar elemento en el buffer circular. + \param xBufferHandle Handle de buffer a modificar. + \param pcData Elemento a escribir en el buffer. + \return pdFAIL si el buffer se encuentra lleno (no se produce escritura). +*/ +BaseType_t xBufferPut( xBufferHandle_t xBufferHandle, uint8_t *pcData ); + +/*! \fn BaseType_t xBufferGet( xBufferHandle_t xBufferHandle, uint8_t *pcData ) + \brief Leer elemento del buffer circular. + \param xBufferHandle Handle de buffer a modificar. + \param pcData Elemento a leer del buffer. + \return pdFAIL si el buffer se encuentra vacío (no se produce escritura). +*/ +BaseType_t xBufferGet( xBufferHandle_t xBufferHandle, uint8_t* pcData ); + +/*! \fn BaseType_t xBufferEmpty( xBufferHandle_t xBufferHandle ) + \brief Verificación de buffer circular vacío. + \param xBufferHandle Handle de buffer a verificar. + \return Verdadero si el buffer esta vacío. +*/ +BaseType_t xBufferEmpty( xBufferHandle_t xBufferHandle ); + +/*! \fn BaseType_t xBufferFull( xBufferHandle_t xBuffer ) + \brief Verificación de buffer circular lleno. + \param xBufferHandle Handle de buffer a verificar. + \return Verdadero si el buffer esta lleno. +*/ +BaseType_t xBufferFull( xBufferHandle_t xBufferHandle ); + +/*! \fn size_t xBufferCapacity( xBufferHandle_t xBufferHandle ) + \brief Obtener capacidad del buffer circular. + \param xBufferHandle Handle de buffer a verificar. + \return Capacidad del buffer (size_t) +*/ +size_t xBufferCapacity( xBufferHandle_t xBufferHandle ); + +/*! \fn size_t xBufferSize( xBufferHandle_t xBufferHandle ) + \brief Obtener cantidad de elementos en el buffer. + \param xBufferHandle Handle de buffer a verificar. + \return Cantidad de elementos en buffer (size_t) +*/ +size_t xBufferSize( xBufferHandle_t xBufferHandle ); + +void vBufferReadMsg( char* pcMsgToRead ); + +void vBufferWriteMsg( char* pcMsgToWrite ); + +#endif /* APP_INC_BUFFER_H_ */ diff --git a/app/src/app.c b/app/src/app.c index 58f669e..1c3730a 100644 --- a/app/src/app.c +++ b/app/src/app.c @@ -15,33 +15,23 @@ #include "FreeRTOSConfig.h" #include "FreeRTOSPriorities.h" #include "task.h" -#include "queue.h" /* EDU-CIAA firmware_v3 includes */ #include "sapi.h" /* Aplicación includes */ #include "uart.h" +#include "buffer.h" #include "encoder.h" #include "stepper.h" #include "servo.h" #include "display_lcd.h" -/*! \def appQUEUE_MSG_LENGTH - \brief Longitud de cola de mensajes recibidos. -*/ -#define appQUEUE_MSG_LENGTH 50 - /*! \var TaskHandle_t xAppSyncTaskHandle \brief Handle de la tarea que sincroniza mensajes. */ TaskHandle_t xAppSyncTaskHandle = NULL; -/*! \var QueueHandle_t xMsgQueue - \brief Cola de mensajes recibidos. -*/ -QueueHandle_t xMsgQueue; - /*! \fn vErrorNotifHandling( uint32_t ulNotifError ) \brief Gestió de errores obtenidos por notificación de tarea. */ @@ -84,15 +74,9 @@ void vAppSyncTask( void *pvParameters ) char *pcErrorMsg = "Error en mensaje previo"; for ( ;; ) { - xQueueReceive( - /* Handle de la cola a leer */ - xMsgQueue, - /* Puntero a la memoria donde guardar lectura */ - &pcMsgReceived, - /* Máximo tiempo que la tarea puede estar bloqueada - esperando que haya información a leer */ - portMAX_DELAY - ); + printf("APP"); + /* Lectura de mensaje recibido */ + vBufferReadMsg( pcMsgReceived ); /* Verificación de inicio de trama */ if ( pcMsgReceived[0] != ':' ) { @@ -125,6 +109,7 @@ void vAppSyncTask( void *pvParameters ) void vLedBlinkTask( void *pvParameters ) { for ( ;; ) { + printf("BLINK"); /* Indicador en LED1 */ gpioToggle( LED1 ); /* Parpadeo de medio segundo */ @@ -177,11 +162,13 @@ int main( void ) /* Inicialización de display LCD */ xStatus = xDisplayInit(); configASSERT( xStatus == pdPASS ); + xPreviousSize = xPrintModuleSize( "Display", xPreviousSize); + + /* Creación de buffer circular para los mensajes de la aplicación */ + xStatus = xBufferCreate(); configASSERT( xStatus == pdPASS ); + xPreviousSize = xPrintModuleSize( "Buffer", xPreviousSize); - /* Creación de cola de mensajes recibidos */ - xMsgQueue = xQueueCreate( appQUEUE_MSG_LENGTH, sizeof( char * ) ); - /* Verificación de cola creada con éxito */ - configASSERT( xMsgQueue != NULL ); + printf( "Espacio disponible: %d\n", xPreviousSize ); /* Creación de tarea de control de flujo de trabajo del programa */ xStatus = xTaskCreate( diff --git a/app/src/buffer.c b/app/src/buffer.c new file mode 100644 index 0000000..a01efad --- /dev/null +++ b/app/src/buffer.c @@ -0,0 +1,335 @@ +/*! \file buffer.c + \brief Descripción del archivo. + \author Gonzalo G. Fernández + \version 1.0 + \date Septiembre 2020 + + Detalle. +*/ + +/* FreeRTOS includes */ +#include "FreeRTOS.h" +#include "semphr.h" +#include "queue.h" + +/* Aplicación includes */ +#include "buffer.h" +#include "uart.h" + +/*! \struct xBuffer_t + \brief Definición de estructura del buffer circular, + oculta al usuario. +*/ +struct xBuffer_t { + uint8_t** ppcBuffer; + size_t xHead; + size_t xTail; + size_t xMax; //of the buffer + /* Booleano para verificar si el buffer esta completo */ + BaseType_t xFull; +}; + +/*! \var uint8_t **ppcBufferCircular + \brief Puntero a bloque de memoria destinado a buffer + circular para mensajes de la aplicación. +*/ +uint8_t **ppcBufferCircular; + +/*! \var xBufferHandle_t xBufferMsgHandle + \brief Handle del buffer circular para mensajes de la + aplicación. +*/ +xBufferHandle_t xBufferMsgHandle; + +/*! +*/ +SemaphoreHandle_t xBufferMutex; + +/*! \var QueueHandle_t xMsgQueue + \brief Cola de mensajes recibidos. +*/ +QueueHandle_t xBufferMsgQueue; + +/************************************************ + * CREACIÓN DE BUFFER + ***********************************************/ + +/*! \fn BaseType_t xBufferCreate( void ) + \brief Creación de buffer circular para mensajes de la + aplicación. + \return pdPASS si la creación se realizó con éxito. +*/ +BaseType_t xBufferCreate( void ) +{ + /* Asignación de memoria del buffer */ + //ppcBufferCircular = pvPortMalloc( bufferLENGTH * sizeof( uint8_t* ) ); + //for ( uint8_t i=0; ippcBuffer = ppcBuffer; + xBufferHandle->xMax = xSize; + + /* Limpieza del buffer reseteándolo */ + vBufferReset( xBufferHandle ); + + configASSERT( xBufferEmpty( xBufferHandle ) ); + + return xBufferHandle; +} + +/*! \fn void vBufferReset( xBufferHandle_t xBuffer ) + \brief Reseteo del buffer circular para vaciarlo. + (head == tail). + \param xBufferHandle Handle del buffer a resetear. +*/ +void vBufferReset( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a resetear existe */ + configASSERT( xBufferHandle ); + + /* Reinicialización del buffer circular */ + xBufferHandle->xHead = 0; + xBufferHandle->xTail = 0; + xBufferHandle->xFull = pdFALSE; +} + +/*! \fn void vBufferFree( xBufferHandle_t xBuffer ) + \brief Eliminación del buffer circular. + Liberación de memoria. + \param xBufferHandle Handle del buffer a eliminar. +*/ +void vBufferFree( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a eliminar existe */ + configASSERT( xBufferHandle ); + + /* Liberación de memoria */ + vPortFree( xBufferHandle ); +} + +/************************************************ + * CHEQUEO DE ESTADO + ***********************************************/ + +/*! \fn BaseType_t xBufferFull( xBufferHandle_t xBuffer ) + \brief Verificación de buffer circular lleno. + \param xBufferHandle Handle de buffer a verificar. + \return Verdadero si el buffer esta lleno. +*/ +BaseType_t xBufferFull( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a analizar existe */ + configASSERT( xBufferHandle ); + + return xBufferHandle->xFull; +} + +/*! \fn BaseType_t xBufferEmpty( xBufferHandle_t xBufferHandle ) + \brief Verificación de buffer circular vacío. + \param xBufferHandle Handle de buffer a verificar. + \return Verdadero si el buffer esta vacío. +*/ +BaseType_t xBufferEmpty( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a analizar existe */ + configASSERT( xBufferHandle ); + + return ( !xBufferHandle->xFull && + ( xBufferHandle->xHead == xBufferHandle->xTail ) ); +} + +/*! \fn size_t xBufferCapacity( xBufferHandle_t xBufferHandle ) + \brief Obtener capacidad del buffer circular. + \param xBufferHandle Handle de buffer a verificar. + \return Capacidad del buffer (size_t) +*/ +size_t xBufferCapacity( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a analizar existe */ + configASSERT( xBufferHandle ); + + return xBufferHandle->xMax; +} + +/*! \fn size_t xBufferSize( xBufferHandle_t xBufferHandle ) + \brief Obtener cantidad de elementos en el buffer. + \param xBufferHandle Handle de buffer a verificar. + \return Cantidad de elementos en buffer (size_t) +*/ +size_t xBufferSize( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a analizar existe */ + configASSERT( xBufferHandle ); + + size_t xSize = xBufferHandle->xMax; + + if ( !xBufferHandle->xFull ) { + if ( xBufferHandle->xHead >= xBufferHandle->xTail ) { + xSize = ( xBufferHandle->xHead - xBufferHandle->xTail ); + } else { + xSize = ( xBufferHandle->xMax + xBufferHandle->xHead - xBufferHandle->xTail ); + } + } + + return xSize; +} + +/************************************************ + * AÑADIR Y ELIMINAR INFORMACIÓN + ***********************************************/ + +/*! \fn void vBufferAdvancePointer( xBufferHandle_t xBufferHandle ) + \brief Función interna para avanzar puntero. + \param xBufferHandle Handle de buffer a modificar. +*/ +static void prvBufferAdvancePointer( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a modificar existe */ + configASSERT( xBufferHandle ); + + if ( xBufferHandle->xFull ) { + xBufferHandle->xTail = ( xBufferHandle->xTail + 1 ) % xBufferHandle->xMax; + } + + xBufferHandle->xHead = ( xBufferHandle->xHead + 1 ) % xBufferHandle->xMax; + xBufferHandle->xFull = ( xBufferHandle->xHead == xBufferHandle->xTail ); +} + +/*! \fn void prvBufferRetreatPointer( xBufferHandle_t xBufferHandle ) + \brief Función interna para retroceder puntero. + \param xBufferHandle Handle de buffer a modificar. +*/ +static void prvBufferRetreatPointer( xBufferHandle_t xBufferHandle ) +{ + /* Verificación de que el buffer a modificar existe */ + configASSERT( xBufferHandle ); + + xBufferHandle->xFull = pdFALSE; + xBufferHandle->xTail = ( xBufferHandle->xTail + 1 ) % xBufferHandle->xMax; +} + +/*! \fn BaseType_t xBufferPut( xBufferHandle_t xBufferHandle, uint8_t *pcData ) + \brief Colocar elemento en el buffer circular. + \param xBufferHandle Handle de buffer a modificar. + \param pcData Elemento a escribir en el buffer. + \return pdFAIL si el buffer se encuentra lleno (no se produce escritura). +*/ +BaseType_t xBufferPut( xBufferHandle_t xBufferHandle, uint8_t *pcData ) +{ + BaseType_t xStatus = pdFAIL; + + /* Verificación de que el buffer a escribir existe */ + configASSERT( xBufferHandle && xBufferHandle->ppcBuffer ); + + if ( !xBufferFull( xBufferHandle ) ) { + /* Escritua de elemento en el buffer */ + xBufferHandle->ppcBuffer[xBufferHandle->xHead] = pcData; + /* Avanzar puntero del buffer */ + prvBufferAdvancePointer( xBufferHandle ); + + xStatus = pdPASS; + } + + return xStatus; +} + +/*! \fn BaseType_t xBufferGet( xBufferHandle_t xBufferHandle, uint8_t *pcData ) + \brief Leer elemento del buffer circular. + \param xBufferHandle Handle de buffer a modificar. + \param pcData Elemento a leer del buffer. + \return pdFAIL si el buffer se encuentra vacío (no se produce escritura). +*/ +BaseType_t xBufferGet( xBufferHandle_t xBufferHandle, uint8_t* pcData ) +{ + /* Verificación de que el buffer a leer existe */ + configASSERT( xBufferHandle && xBufferHandle->ppcBuffer ); + + BaseType_t xStatus = pdFAIL; + + if ( !xBufferEmpty( xBufferHandle ) ) { + /* Lectura de elemento en el buffer */ + pcData = xBufferHandle->ppcBuffer[xBufferHandle->xTail]; + /* Retroceder puntero del buffer */ + prvBufferRetreatPointer( xBufferHandle ); + + xStatus = pdPASS; + } + + return xStatus; +} + +/************************************************ + * ESCRITURA Y LECTURA DE MENSAJES + ***********************************************/ + +void vBufferReadMsg( char* pcMsgToRead ) +{ + //xSemaphoreTake( xBufferMutex, portMAX_DELAY ); + //xBufferGet( xBufferMsgHandle, pcMsgToRead ); + //xSemaphoreGive( xBufferMutex ); + xQueueReceive( + /* Handle de la cola a leer */ + xBufferMsgQueue, + /* Puntero a la memoria donde guardar lectura */ + &pcMsgToRead, + /* Máximo tiempo que la tarea puede estar bloqueada + esperando que haya información a leer */ + portMAX_DELAY + ); +} + +void vBufferWriteMsg( char* pcMsgToWrite ) +{ + //xSemaphoreTake( xBufferMutex, portMAX_DELAY ); + //xBufferPut( xBufferMsgHandle, pcMsgToWrite ); + //xSemaphoreGive( xBufferMutex ); + xQueueSendToBack( + /* Handle de la cola a escribir */ + xBufferMsgQueue, + /* Puntero al dato a escribir */ + &pcMsgToWrite, + /* Máximo tiempo a esperar una escritura */ + portMAX_DELAY + ); +} diff --git a/app/src/display_lcd.c b/app/src/display_lcd.c index 6069cb6..78b8240 100644 --- a/app/src/display_lcd.c +++ b/app/src/display_lcd.c @@ -62,6 +62,7 @@ void vDisplayTask( void *pvParameters ) uint8_t cValue = 0; for ( ;; ) { + printf("DISPLAY"); /* Esperar notificación desde encoder */ ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); /* Lectura de selección de motor en mailbox */ diff --git a/app/src/encoder.c b/app/src/encoder.c index 570c725..d77f9bf 100644 --- a/app/src/encoder.c +++ b/app/src/encoder.c @@ -114,6 +114,7 @@ void vEncoderTask( void *pvParameters ) char *pcMsgToSend = ( char * ) pvPortMalloc( 10 * sizeof( char ) ); for ( ;; ) { + printf("ENCODER"); /* Lectura de selección de motor en mailbox */ xQueuePeek( xEncoderChoiceMailbox, &cValue, portMAX_DELAY ); /* Inicio de mensaje */ diff --git a/app/src/servo.c b/app/src/servo.c index f92532e..8b9380f 100644 --- a/app/src/servo.c +++ b/app/src/servo.c @@ -22,6 +22,7 @@ /* Aplicación includes */ #include "servo.h" +#include "uart.h" /*! \var TaskHandle_t xAppSyncTaskHandle \brief Handle de la tarea que sincroniza mensajes. @@ -109,6 +110,7 @@ void vServoControlTask( void *pvParameters ) xServoAbsoluteSetPoint( 0 ); for ( ;; ) { + printf("SERVO"); /* Lectura de cola de consignas */ xQueueReceive( /* Handle de la cola a leer */ diff --git a/app/src/stepper.c b/app/src/stepper.c index 881822e..327bd71 100644 --- a/app/src/stepper.c +++ b/app/src/stepper.c @@ -179,6 +179,7 @@ void vStepperControlTask( void *pvParameters ) uint8_t cErrorHandle = 0; for ( ;; ) { + printf("STEPPER"); /* Lectura de cola de consignas */ xQueueReceive( /* Handle de la cola a leer */ diff --git a/app/src/uart.c b/app/src/uart.c index 8d1fb5a..a867bbf 100644 --- a/app/src/uart.c +++ b/app/src/uart.c @@ -8,6 +8,7 @@ */ #include "uart.h" +#include "buffer.h" /*! \var QueueHandle_t xUartTxQueue \brief Declaración global de cola de recepción de @@ -21,11 +22,6 @@ QueueHandle_t xUartRxQueue; */ QueueHandle_t xUartTxQueue; -/*! \var QueueHandle_t xMsgQueue - \brief Cola de mensajes recibidos. -*/ -extern QueueHandle_t xMsgQueue; - /*! \fn void vUartSendMsg( char *pcMsg ) \brief Enviar mensaje a la cola de transmisión. \param pcMsg Puntero al string mensaje. @@ -43,26 +39,17 @@ void vUartSendMsg( char *pcMsg ) ); } -/*! \fn void vSendCmd( char* pcBuffer, uint8_t cLength ) +/*! \fn void vUartSendCmd( char* pcBuffer, uint8_t cLength ) \brief Enviar comando a cola de mensajes recibidos. \param pcBuffer Puntero al inicio del buffer. \param cLength Longitud del buffer (cantidad de caracteres). */ -void vSendCmd( char* pcBuffer, uint8_t cLength ) +void vUartSendCmd( char* pcBuffer, uint8_t cLength ) { char *pcMsg = pcBuffer; /* Delimitador final de string */ pcMsg[cLength] = '\0'; - - /* Escribir caracter en cola de recepción */ - xQueueSendToBack( - /* Handle de la cola a escribir */ - xMsgQueue, - /* Puntero al dato a escribir */ - &pcMsg, - /* Máximo tiempo a esperar una escritura */ - portMAX_DELAY - ); + vBufferWriteMsg( pcMsg ); } /*! \fn void vUartRxTask( void* pvParameters ) @@ -91,10 +78,11 @@ void vUartRxTask( void* pvParameters ) esperando que haya información a leer */ portMAX_DELAY // Tiempo de espera indefinido ); + printf("CHECK"); if ( cRx == '\n' ) { // Rutina de comunicación de comando - vSendCmd( pcBufferRx, cIndex ); + vUartSendCmd( pcBufferRx, cIndex ); cIndex = 0; } else { // Guardar dato en buffer