├── nixie-pipe-pcb.stl
├── pcb
└── kicad
│ ├── nixie-pipe.pdf
│ ├── fp-lib-table
│ ├── sym-lib-table
│ ├── LICENSE
│ ├── WS2812B.pretty
│ ├── Touch_Button.kicad_mod
│ ├── LED_WS2812B-PLCC4.kicad_mod
│ ├── jbr_logo_24.kicad_mod
│ ├── jbr_logo.kicad_mod
│ └── np_logo.kicad_mod
│ ├── nixie-pipe.pro
│ ├── nixie-pipe-cache.lib
│ └── nixie-pipe.net
├── firmware
├── ftx_script.sh
├── np-serial
│ ├── Makefile
│ ├── npboard.txt
│ └── np-serial.ino
├── np-clock
│ ├── Makefile
│ ├── serial.h
│ ├── npboard.txt
│ ├── state_machine.h
│ └── np-clock.ino
├── np-weather
│ ├── Makefile
│ ├── npboard.txt
│ └── np-weather.ino
└── burn-test
│ ├── Makefile
│ └── npboard.txt
├── .gitignore
├── README.md
└── nixiepipe.scad
/nixie-pipe-pcb.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tuna-f1sh/nixiepipe-hardware/HEAD/nixie-pipe-pcb.stl
--------------------------------------------------------------------------------
/pcb/kicad/nixie-pipe.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tuna-f1sh/nixiepipe-hardware/HEAD/pcb/kicad/nixie-pipe.pdf
--------------------------------------------------------------------------------
/pcb/kicad/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name WS2812B)(type KiCad)(uri ${KIPRJMOD}/WS2812B.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/pcb/kicad/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name nixie-pipe-rescue)(type Legacy)(uri ${KIPRJMOD}/nixie-pipe-rescue.lib)(options "")(descr ""))
3 | (lib (name jbr-ics)(type Legacy)(uri ${USRMOD}/tunaf1sh/jbr-ics.lib)(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/firmware/ftx_script.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo 'JBR Nixie Pipe FTDI Programmer'
4 | # ftx_unload
5 | ftx_prog --manufacturer "JBR Engineering"
6 | ftx_prog --product "Nixie Pipe Master"
7 | # ftx_prog --new-serial-number JBRNP04HGFB
8 | echo $(ftx_prog --dump) >> devices
9 |
--------------------------------------------------------------------------------
/pcb/kicad/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright JBR Engineering Research Ltd - 2016 - www.jbrengineering.co.uk
2 | **THIS FILE MUST BE REDISTRIBUTED WITH CODE*
3 |
4 | This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
5 | International License. To view a copy of this license, visit
6 | http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative
7 | Commons, PO Box 1866, Mountain View, CA 94042, USA.
8 |
--------------------------------------------------------------------------------
/firmware/np-serial/Makefile:
--------------------------------------------------------------------------------
1 | BOARDS_TXT = npboard.txt
2 | BOARD_TAG = nixiepipe
3 | ISP_PROG = usbasp
4 |
5 | MCU = atmega328p
6 | F_CPU = 16000000
7 | # MONITOR_PORT = /dev/tty.SLAB*
8 |
9 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe
10 | AVRDUDE_OPTS = -V
11 |
12 | # compiler flags for FastLED lib
13 | CXXFLAGS_STD = -std=gnu++11
14 | CXXFLAGS += -fno-threadsafe-statics
15 |
16 |
17 | # ARDUINO_QUIET = 1
18 |
19 | include ${ARDMK_DIR}/Arduino.mk
20 |
--------------------------------------------------------------------------------
/firmware/np-clock/Makefile:
--------------------------------------------------------------------------------
1 | BOARDS_TXT = npboard.txt
2 | BOARD_TAG = nixiepipe
3 | ISP_PROG = usbasp
4 |
5 | #MCU = atmega328p
6 | # F_CPU = 16000000
7 | # MONITOR_PORT = /dev/tty.SLAB*
8 |
9 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe
10 | AVRDUDE_OPTS = -V
11 |
12 | # compiler flags for FastLED lib
13 | CXXFLAGS_STD = -std=gnu++11
14 | CXXFLAGS += -fno-threadsafe-statics
15 |
16 |
17 | # ARDUINO_QUIET = 1
18 |
19 | include ${ARDMK_DIR}/Arduino.mk
20 |
--------------------------------------------------------------------------------
/firmware/np-weather/Makefile:
--------------------------------------------------------------------------------
1 | BOARDS_TXT = npboard.txt
2 | BOARD_TAG = nixiepipe
3 | ISP_PROG = usbasp
4 |
5 | MCU = atmega328p
6 | F_CPU = 16000000
7 | # MONITOR_PORT = /dev/tty.SLAB*
8 |
9 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe
10 | AVRDUDE_OPTS = -V
11 |
12 | # compiler flags for FastLED lib
13 | CXXFLAGS_STD = -std=gnu++11
14 | CXXFLAGS += -fno-threadsafe-statics
15 |
16 |
17 | # ARDUINO_QUIET = 1
18 |
19 | include ${ARDMK_DIR}/Arduino.mk
20 |
--------------------------------------------------------------------------------
/pcb/kicad/WS2812B.pretty/Touch_Button.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Touch_Button (layer F.Cu) (tedit 57A607A4)
2 | (fp_text reference P6 (at 0 6) (layer F.SilkS)
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value CONN_01X02 (at 0 -6) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (pad 2 smd oval (at 0 2.5) (size 8 4.5) (layers F.Cu F.Mask))
9 | (pad 1 smd oval (at 0 -2.5) (size 8 4.5) (layers F.Cu F.Mask))
10 | )
11 |
--------------------------------------------------------------------------------
/firmware/burn-test/Makefile:
--------------------------------------------------------------------------------
1 | BOARDS_TXT = npboard.txt
2 | BOARD_TAG = nixiepipe
3 | ISP_PROG = usbasp
4 | # BOARD_TAG = uno
5 |
6 | MCU = atmega328p
7 | F_CPU = 16000000
8 | # MONITOR_PORT = /dev/tty.SLAB*
9 |
10 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe
11 | AVRDUDE_OPTS = -V
12 |
13 | # compiler flags for FastLED lib
14 | CXXFLAGS_STD = -std=gnu++11
15 | CXXFLAGS += -fno-threadsafe-statics
16 |
17 |
18 | # ARDUINO_QUIET = 1
19 |
20 | include ${ARDMK_DIR}/Arduino.mk
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | supporting/
2 | website/
3 | np-usb/
4 |
5 | # Output folders
6 | Gerber/
7 | exports/
8 | build*
9 | shapes3d/
10 | dist/
11 | *.egg-info
12 | media/
13 | *.xml
14 |
15 | *.bmp
16 | *.png
17 | *.ycm*
18 |
19 | # Compiled Object files
20 | *.slo
21 | *.lo
22 | *.o
23 | *.obj
24 | *.pyc
25 |
26 | # Precompiled Headers
27 | *.gch
28 | *.pch
29 |
30 | # Compiled Dynamic libraries
31 | *.so
32 | *.dylib
33 | *.dll
34 |
35 | # Fortran module files
36 | *.mod
37 |
38 | # Compiled Static libraries
39 | *.lai
40 | *.la
41 | *.a
42 | *.lib
43 |
44 | # Executables
45 | *.exe
46 | *.out
47 | *.app
48 |
49 | # Temp
50 | _saved_*
51 | tags
52 | .tags
53 | *~
54 | *.swp
55 | *DS_Store
56 | *.pdsbak
57 | *.workspace
58 | *.zip
59 | *CADCAM
60 | *-bak
61 | *.bak
62 | _autosave*
63 |
--------------------------------------------------------------------------------
/pcb/kicad/nixie-pipe.pro:
--------------------------------------------------------------------------------
1 | update=Thursday, 06 September 2018 at 07:49:22
2 | version=1
3 | last_client=kicad
4 | [pcbnew]
5 | version=1
6 | LastNetListRead=
7 | UseCmpFile=1
8 | PadDrill=0.600000000000
9 | PadDrillOvalY=0.600000000000
10 | PadSizeH=1.500000000000
11 | PadSizeV=1.500000000000
12 | PcbTextSizeV=1.500000000000
13 | PcbTextSizeH=1.500000000000
14 | PcbTextThickness=0.300000000000
15 | ModuleTextSizeV=1.000000000000
16 | ModuleTextSizeH=1.000000000000
17 | ModuleTextSizeThickness=0.150000000000
18 | SolderMaskClearance=0.000000000000
19 | SolderMaskMinWidth=0.000000000000
20 | DrawSegmentWidth=0.200000000000
21 | BoardOutlineThickness=0.100000000000
22 | ModuleOutlineThickness=0.150000000000
23 | [cvpcb]
24 | version=1
25 | NetIExt=net
26 | [general]
27 | version=1
28 | [eeschema]
29 | version=1
30 | LibDir=
31 |
--------------------------------------------------------------------------------
/firmware/np-clock/serial.h:
--------------------------------------------------------------------------------
1 | #define BAUD 57600
2 | #define NP_SET_NUMBER 0x40
3 | #define NP_SET_PIPE_NUMBER 0x41
4 | #define NP_SET_COLOUR 0x42
5 | #define NP_SET_PIPE_COLOUR 0x43
6 | #define NP_SET_BRIGHTNESS 0x44
7 | #define NP_SET_CLEAR 0x45
8 | #define NP_SET_CLEAR_PIPE 0x46
9 | #define NP_GET_NUMBER 0x47
10 | #define NP_SET_CONNECT 0x48
11 | #define NP_SET_UNITS 0x49
12 | #define NP_SET_SHOW 0x50
13 | #define NP_SET_WEATHER 0x51
14 | #define NP_SET_TIME 0x52
15 |
16 | #define MAX_PACKET 18
17 | #define MAX_MESSAGE MAX_PACKET - 2
18 |
19 | #define VERSION_MINOR 8
20 | #define VERSION_MAJOR 1
21 |
22 | #define SERIAL_UINT16(LSB,MSB) (( (short) LSB & 0xFF) | (( (short) MSB & 0xFF) << 8))
23 | #define SERIAL_UINT32(B0,B1,B2,B3) ( (long) B0 | ( (long) B1 << 8 ) | ( (long) B2 << 16 ) | ( (long) B3 << 24 ) )
24 |
25 | typedef union {
26 | struct {
27 | byte size;
28 | byte command;
29 | byte message[MAX_MESSAGE];
30 | } data;
31 | byte bytes[MAX_PACKET];
32 | } Packet_t;
33 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Nixie Pipe Hardware
2 |
3 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CFA7TQXNFURLQ)
4 |
5 | This repository contains design files for my [Nixie
6 | Pipe](http://www.nixiepipe.com) modules. Contained with:
7 |
8 | * OpenSCAD mechanical design script.
9 | * KiCAD PCB design
10 | * Arduino/C++ firmware
11 |
12 | ## Supporting Repositories
13 |
14 | * [Arduino Library](https://github.com/tuna-f1sh/NixiePipe)
15 | * [Node module](https://github.com/tuna-f1sh/node-nixiepipe)
16 | * [Python Package](https://github.com/tuna-f1sh/py-nixiepipe)
17 | * [Electron GUI app](https://github.com/tuna-f1sh/electron-nixiepipe)
18 |
19 | ## Supporting the Project and Attribution
20 |
21 | If you do make your own Nixie Pipe and wish to offer some gratitude, please
22 | feel free to donate any amount to me using the button at the top of the
23 | repository.
24 |
25 | **Software** is [](http://www.gnu.org/licenses/gpl-3.0)
26 |
27 | **Hardware (KiCad, OpenSCAD, design exports etc.)** is [](http://creativecommons.org/licenses/by-sa/4.0/)
28 |
29 | I make many of my projects Open Source so others can learn as I have, but please remember
30 | to follow the license terms and attribute any derivations or code reuse.
31 | Please link back to the project, [www.nixiepipe.com](www.nixiepipe.com) and
32 | [www.jbrengineering.co.uk](www.jbrengineering.co.uk).
33 |
--------------------------------------------------------------------------------
/firmware/burn-test/npboard.txt:
--------------------------------------------------------------------------------
1 | ##############################################################
2 |
3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock)
4 |
5 | nixiepipe.vid.0=0x2341
6 | nixiepipe.pid.0=0x0043
7 | nixiepipe.vid.1=0x2341
8 | nixiepipe.pid.1=0x0001
9 | nixiepipe.vid.2=0x2A03
10 | nixiepipe.pid.2=0x0043
11 | nixiepipe.vid.3=0x2341
12 | nixiepipe.pid.3=0x0243
13 |
14 | nixiepipe.upload.tool=avrdude
15 | nixiepipe.upload.protocol=arduino
16 | nixiepipe.upload.maximum_size=32256
17 | nixiepipe.upload.maximum_data_size=2048
18 | nixiepipe.upload.speed=115200
19 |
20 | nixiepipe.bootloader.tool=avrdude
21 | nixiepipe.bootloader.low_fuses=0xFF
22 | nixiepipe.bootloader.high_fuses=0xDE
23 | nixiepipe.bootloader.extended_fuses=0x05
24 | nixiepipe.bootloader.unlock_bits=0x3F
25 | nixiepipe.bootloader.lock_bits=0x0F
26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex
27 |
28 | nixiepipe.build.mcu=atmega328p
29 | nixiepipe.build.f_cpu=16000000L
30 | nixiepipe.build.board=AVR_UNO
31 | nixiepipe.build.core=arduino
32 | nixiepipe.build.variant=standard
33 |
34 | ##############################################################
35 |
36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock)
37 |
38 | nixiepipe8.upload.protocol=arduino
39 | nixiepipe8.upload.maximum_size=30720
40 | nixiepipe8.upload.speed=57600
41 |
42 | nixiepipe8.bootloader.low_fuses=0xE2
43 | nixiepipe8.bootloader.high_fuses=0xDA
44 | nixiepipe8.bootloader.extended_fuses=0x05
45 |
46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
47 | nixiepipe8.bootloader.unlock_bits=0x3F
48 | nixiepipe8.bootloader.lock_bits=0x0F
49 |
50 | nixiepipe8.build.mcu=atmega328p
51 | nixiepipe8.build.f_cpu=8000000L
52 | nixiepipe8.build.core=arduino
53 | nixiepipe8.build.variant=standard
54 |
55 | nixiepipe8.bootloader.tool=avrdude
56 | nixiepipe8.upload.tool=avrdude
57 |
--------------------------------------------------------------------------------
/firmware/np-clock/npboard.txt:
--------------------------------------------------------------------------------
1 | ##############################################################
2 |
3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock)
4 |
5 | nixiepipe.vid.0=0x2341
6 | nixiepipe.pid.0=0x0043
7 | nixiepipe.vid.1=0x2341
8 | nixiepipe.pid.1=0x0001
9 | nixiepipe.vid.2=0x2A03
10 | nixiepipe.pid.2=0x0043
11 | nixiepipe.vid.3=0x2341
12 | nixiepipe.pid.3=0x0243
13 |
14 | nixiepipe.upload.tool=avrdude
15 | nixiepipe.upload.protocol=arduino
16 | nixiepipe.upload.maximum_size=32256
17 | nixiepipe.upload.maximum_data_size=2048
18 | nixiepipe.upload.speed=115200
19 |
20 | nixiepipe.bootloader.tool=avrdude
21 | nixiepipe.bootloader.low_fuses=0xFF
22 | nixiepipe.bootloader.high_fuses=0xDE
23 | nixiepipe.bootloader.extended_fuses=0x05
24 | nixiepipe.bootloader.unlock_bits=0x3F
25 | nixiepipe.bootloader.lock_bits=0x0F
26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex
27 |
28 | nixiepipe.build.mcu=atmega328p
29 | nixiepipe.build.f_cpu=16000000L
30 | nixiepipe.build.board=AVR_UNO
31 | nixiepipe.build.core=arduino
32 | nixiepipe.build.variant=standard
33 |
34 | ##############################################################
35 |
36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock)
37 |
38 | nixiepipe8.upload.protocol=arduino
39 | nixiepipe8.upload.maximum_size=30720
40 | nixiepipe8.upload.speed=57600
41 |
42 | nixiepipe8.bootloader.low_fuses=0xE2
43 | nixiepipe8.bootloader.high_fuses=0xDA
44 | nixiepipe8.bootloader.extended_fuses=0x05
45 |
46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
47 | nixiepipe8.bootloader.unlock_bits=0x3F
48 | nixiepipe8.bootloader.lock_bits=0x0F
49 |
50 | nixiepipe8.build.mcu=atmega328p
51 | nixiepipe8.build.f_cpu=8000000L
52 | nixiepipe8.build.core=arduino
53 | nixiepipe8.build.variant=standard
54 |
55 | nixiepipe8.bootloader.tool=avrdude
56 | nixiepipe8.upload.tool=avrdude
57 |
--------------------------------------------------------------------------------
/firmware/np-serial/npboard.txt:
--------------------------------------------------------------------------------
1 | ##############################################################
2 |
3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock)
4 |
5 | nixiepipe.vid.0=0x2341
6 | nixiepipe.pid.0=0x0043
7 | nixiepipe.vid.1=0x2341
8 | nixiepipe.pid.1=0x0001
9 | nixiepipe.vid.2=0x2A03
10 | nixiepipe.pid.2=0x0043
11 | nixiepipe.vid.3=0x2341
12 | nixiepipe.pid.3=0x0243
13 |
14 | nixiepipe.upload.tool=avrdude
15 | nixiepipe.upload.protocol=arduino
16 | nixiepipe.upload.maximum_size=32256
17 | nixiepipe.upload.maximum_data_size=2048
18 | nixiepipe.upload.speed=115200
19 |
20 | nixiepipe.bootloader.tool=avrdude
21 | nixiepipe.bootloader.low_fuses=0xFF
22 | nixiepipe.bootloader.high_fuses=0xDE
23 | nixiepipe.bootloader.extended_fuses=0x05
24 | nixiepipe.bootloader.unlock_bits=0x3F
25 | nixiepipe.bootloader.lock_bits=0x0F
26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex
27 |
28 | nixiepipe.build.mcu=atmega328p
29 | nixiepipe.build.f_cpu=16000000L
30 | nixiepipe.build.board=AVR_UNO
31 | nixiepipe.build.core=arduino
32 | nixiepipe.build.variant=standard
33 |
34 | ##############################################################
35 |
36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock)
37 |
38 | nixiepipe8.upload.protocol=arduino
39 | nixiepipe8.upload.maximum_size=30720
40 | nixiepipe8.upload.speed=57600
41 |
42 | nixiepipe8.bootloader.low_fuses=0xE2
43 | nixiepipe8.bootloader.high_fuses=0xDA
44 | nixiepipe8.bootloader.extended_fuses=0x05
45 |
46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
47 | nixiepipe8.bootloader.unlock_bits=0x3F
48 | nixiepipe8.bootloader.lock_bits=0x0F
49 |
50 | nixiepipe8.build.mcu=atmega328p
51 | nixiepipe8.build.f_cpu=8000000L
52 | nixiepipe8.build.core=arduino
53 | nixiepipe8.build.variant=standard
54 |
55 | nixiepipe8.bootloader.tool=avrdude
56 | nixiepipe8.upload.tool=avrdude
57 |
--------------------------------------------------------------------------------
/firmware/np-weather/npboard.txt:
--------------------------------------------------------------------------------
1 | ##############################################################
2 |
3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock)
4 |
5 | nixiepipe.vid.0=0x2341
6 | nixiepipe.pid.0=0x0043
7 | nixiepipe.vid.1=0x2341
8 | nixiepipe.pid.1=0x0001
9 | nixiepipe.vid.2=0x2A03
10 | nixiepipe.pid.2=0x0043
11 | nixiepipe.vid.3=0x2341
12 | nixiepipe.pid.3=0x0243
13 |
14 | nixiepipe.upload.tool=avrdude
15 | nixiepipe.upload.protocol=arduino
16 | nixiepipe.upload.maximum_size=32256
17 | nixiepipe.upload.maximum_data_size=2048
18 | nixiepipe.upload.speed=115200
19 |
20 | nixiepipe.bootloader.tool=avrdude
21 | nixiepipe.bootloader.low_fuses=0xFF
22 | nixiepipe.bootloader.high_fuses=0xDE
23 | nixiepipe.bootloader.extended_fuses=0x05
24 | nixiepipe.bootloader.unlock_bits=0x3F
25 | nixiepipe.bootloader.lock_bits=0x0F
26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex
27 |
28 | nixiepipe.build.mcu=atmega328p
29 | nixiepipe.build.f_cpu=16000000L
30 | nixiepipe.build.board=AVR_UNO
31 | nixiepipe.build.core=arduino
32 | nixiepipe.build.variant=standard
33 |
34 | ##############################################################
35 |
36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock)
37 |
38 | nixiepipe8.upload.protocol=arduino
39 | nixiepipe8.upload.maximum_size=30720
40 | nixiepipe8.upload.speed=57600
41 |
42 | nixiepipe8.bootloader.low_fuses=0xE2
43 | nixiepipe8.bootloader.high_fuses=0xDA
44 | nixiepipe8.bootloader.extended_fuses=0x05
45 |
46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
47 | nixiepipe8.bootloader.unlock_bits=0x3F
48 | nixiepipe8.bootloader.lock_bits=0x0F
49 |
50 | nixiepipe8.build.mcu=atmega328p
51 | nixiepipe8.build.f_cpu=8000000L
52 | nixiepipe8.build.core=arduino
53 | nixiepipe8.build.variant=standard
54 |
55 | nixiepipe8.bootloader.tool=avrdude
56 | nixiepipe8.upload.tool=avrdude
57 |
--------------------------------------------------------------------------------
/firmware/np-clock/state_machine.h:
--------------------------------------------------------------------------------
1 | #define ST_ANY -1
2 | #define ST_CLOCK 0
3 | #define ST_SETTIME 1
4 | #define ST_SETALARM 2
5 | #define ST_SETCOLOUR 3
6 | #define ST_SETCOUNT 4
7 | #define ST_COUNTER 5
8 | #define ST_CUPDATE 6
9 | #define ST_RTCFAIL 7
10 | #define ST_FLASH 8
11 | #define ST_DIM 9
12 | #define ST_TERM 10
13 |
14 | #define EV_ANY -1
15 | #define EV_NONE 0
16 | #define EV_TB0_PRESS 10
17 | #define EV_TB1_PRESS 11
18 | #define EV_TB0_HOLD 12
19 | #define EV_TB1_HOLD 13
20 | #define EV_COUNTEND 14
21 | #define EV_RTCFAIL 15
22 | #define EV_ALARM 16
23 |
24 | typedef struct {
25 | int st;
26 | int ev;
27 | /* int (*fn)(void);*/
28 | int nst;
29 | } tTransition;
30 |
31 | tTransition trans[] = {
32 | { ST_CLOCK, EV_TB0_PRESS, ST_SETTIME },
33 | { ST_CLOCK, EV_TB0_HOLD, ST_SETCOLOUR },
34 | { ST_CLOCK, EV_TB1_PRESS, ST_SETCOUNT },
35 | { ST_CLOCK, EV_TB1_HOLD, ST_SETALARM },
36 | { ST_CLOCK, EV_RTCFAIL, ST_RTCFAIL },
37 | { ST_CLOCK, EV_ALARM, ST_FLASH },
38 | { ST_CLOCK, EV_COUNTEND, ST_FLASH },
39 | { ST_FLASH, EV_NONE, ST_CLOCK },
40 | { ST_FLASH, EV_TB0_PRESS, ST_CLOCK },
41 | { ST_FLASH, EV_TB0_HOLD, ST_CLOCK },
42 | { ST_FLASH, EV_TB1_PRESS, ST_CLOCK },
43 | { ST_FLASH, EV_TB1_HOLD, ST_CLOCK },
44 | { ST_RTCFAIL, EV_NONE, ST_CLOCK },
45 | { ST_SETTIME, EV_ANY, ST_CLOCK },
46 | { ST_SETALARM, EV_ANY, ST_CLOCK },
47 | { ST_SETCOUNT, EV_ANY, ST_COUNTER },
48 | { ST_SETCOLOUR, EV_ANY, ST_CLOCK },
49 | { ST_COUNTER, EV_COUNTEND, ST_CLOCK },
50 | { ST_COUNTER, EV_TB0_PRESS, ST_CLOCK },
51 | { ST_COUNTER, EV_TB0_HOLD, ST_CLOCK },
52 | { ST_COUNTER, EV_TB1_PRESS, ST_CUPDATE },
53 | { ST_COUNTER, EV_TB1_HOLD, ST_CLOCK },
54 | { ST_CUPDATE, EV_ANY, ST_COUNTER },
55 | };
56 |
57 | #define TRANS_COUNT (sizeof(trans)/sizeof(*trans))
58 |
--------------------------------------------------------------------------------
/pcb/kicad/WS2812B.pretty/LED_WS2812B-PLCC4.kicad_mod:
--------------------------------------------------------------------------------
1 | (module LED_WS2812B-PLCC4 (layer F.Cu) (tedit 56C9C7F7)
2 | (descr http://www.world-semi.com/uploads/soft/150522/1-150522091P5.pdf)
3 | (tags "LED NeoPixel")
4 | (attr smd)
5 | (fp_text reference U3 (at 0 -3.5) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value WS2812B (at 0 4) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 3.75 -2.85) (end -3.75 -2.85) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 3.75 2.85) (end 3.75 -2.85) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -3.75 2.85) (end 3.75 2.85) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -3.75 -2.85) (end -3.75 2.85) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer Dwgs.User) (width 0.1))
16 | (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer Dwgs.User) (width 0.1))
17 | (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer Dwgs.User) (width 0.1))
18 | (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer Dwgs.User) (width 0.1))
19 | (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer Dwgs.User) (width 0.1))
20 | (fp_line (start -3.5 -2.6) (end 3.5 -2.6) (layer F.SilkS) (width 0.15))
21 | (fp_line (start -3.5 2.6) (end 3.5 2.6) (layer F.SilkS) (width 0.15))
22 | (fp_line (start 3.5 2.6) (end 3.5 1.6) (layer F.SilkS) (width 0.15))
23 | (fp_circle (center 0 0) (end 0 -2) (layer Dwgs.User) (width 0.1))
24 | (pad 3 smd rect (at 2.5 1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask))
25 | (pad 4 smd rect (at 2.5 -1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask))
26 | (pad 2 smd rect (at -2.5 1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask))
27 | (pad 1 smd rect (at -2.5 -1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask))
28 | (model ${KIPRJMOD}/WS2812B.pretty/3dpackages/WS2812B_NICE.wrl
29 | (at (xyz 0 0 0.004))
30 | (scale (xyz 0.385 0.385 0.385))
31 | (rotate (xyz 0 0 90))
32 | )
33 | )
34 |
--------------------------------------------------------------------------------
/firmware/np-serial/np-serial.ino:
--------------------------------------------------------------------------------
1 | /*
2 | // GPL 3.0 License
3 |
4 | // Copyright (c) 2016 John Whittington www.jbrengineering.co.uk
5 |
6 | // This program is free software: you can redistribute it and/or modify
7 | // it under the terms of the GNU General Public License as published by
8 | // the Free Software Foundation, either version 3 of the License, or
9 | // (at your option) any later version.
10 |
11 | // This program is distributed in the hope that it will be useful,
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | // GNU General Public License for more details.
15 |
16 | // You should have received a copy of the GNU General Public License
17 | // along with this program. If not, see .
18 | */
19 |
20 | #include
21 | #include
22 |
23 | #define LED_PIN 6
24 | #define NUM_PIPES 8
25 | #define NUM_UNITS 0
26 | #define BRIGHTNESS 255
27 |
28 | #define BAUD 57600
29 | #define NP_SET_NUMBER 0x40
30 | #define NP_SET_PIPE_NUMBER 0x41
31 | #define NP_SET_COLOUR 0x42
32 | #define NP_SET_PIPE_COLOUR 0x43
33 | #define NP_SET_BRIGHTNESS 0x44
34 | #define NP_SET_CLEAR 0x45
35 | #define NP_SET_CLEAR_PIPE 0x46
36 | #define NP_GET_NUMBER 0x47
37 | #define NP_SET_CONNECT 0x48
38 | #define NP_SET_UNITS 0x49
39 | #define NP_SET_SHOW 0x50
40 |
41 | #define MAX_PACKET 18
42 | #define MAX_MESSAGE MAX_PACKET - 2
43 |
44 | #define VERSION_MINOR 1
45 | #define VERSION_MAJOR 1
46 |
47 | #define SERIAL_UINT16(LSB,MSB) (( (short) LSB & 0xFF) | (( (short) MSB & 0xFF) << 8))
48 | #define SERIAL_UINT32(B0,B1,B2,B3) ( (long) B0 | ( (long) B1 << 8 ) | ( (long) B2 << 16 ) | ( (long) B3 << 24 ) )
49 |
50 | NixiePipe pipes = NixiePipe(NUM_PIPES,NUM_UNITS);
51 |
52 | typedef union {
53 | struct {
54 | byte size;
55 | byte command;
56 | byte message[MAX_MESSAGE];
57 | } data;
58 | byte bytes[MAX_PACKET];
59 | } Packet_t;
60 |
61 | bool gConnected = false;
62 |
63 | static Packet_t processInput(void) {
64 | Packet_t packet;
65 | unsigned long timeout;
66 | byte i = 0;
67 |
68 | packet.data.size = Serial.read();
69 | delay(1);
70 | packet.data.command = Serial.read();
71 |
72 | timeout = millis();
73 |
74 | if (packet.data.size < MAX_MESSAGE) {
75 | while ( (i < (packet.data.size)) && ( (millis() - timeout) < 10) ) {
76 | packet.data.message[i++] = Serial.read();
77 | timeout = millis();
78 | }
79 | }
80 |
81 | return packet;
82 | }
83 |
84 | static void getColourPacket(byte *pmessage, CRGB *prgb) {
85 | prgb->r = pmessage[0];
86 | prgb->g = pmessage[1];
87 | prgb->b = pmessage[2];
88 | }
89 |
90 | static void packValue(Packet_t *pres, uint32_t value) {
91 |
92 | for (int i = 0; i < 4; ++i) {
93 | pres->data.message[i] = (byte) ((value >> (8 * i)) & 0xFF);
94 | }
95 |
96 | pres->data.size = 4;
97 | }
98 |
99 | static void processPacket(Packet_t *ppack) {
100 | CRGB rgb;
101 | byte pipe = ppack->data.message[0];
102 | Packet_t res;
103 |
104 | res.data.command = ppack->data.command;
105 | res.data.size = 1;
106 | res.data.message[0] = 0x00;
107 |
108 | switch (ppack->data.command) {
109 | case (NP_SET_CONNECT):
110 | if (ppack->data.size >= 2) {
111 | if ((ppack->data.message[0] == 0x4E /*N*/) && (ppack->data.message[1] == 0x50 /*P*/)) {
112 | res.data.command = ppack->data.command;
113 | res.data.size = 2;
114 | res.data.message[0] = VERSION_MINOR;
115 | res.data.message[1] = VERSION_MAJOR;
116 | gConnected = true;
117 | }
118 | }
119 | break;
120 | case (NP_SET_NUMBER):
121 | if (ppack->data.size >= 4) {
122 | pipes.setNumber((long) SERIAL_UINT32(ppack->data.message[0],ppack->data.message[1],ppack->data.message[2],ppack->data.message[3]));
123 | }
124 | break;
125 | case (NP_SET_PIPE_NUMBER):
126 | if (ppack->data.size >= 2) {
127 | pipes.setPipeNumber(pipe,ppack->data.message[1]);
128 | }
129 | break;
130 | case (NP_SET_COLOUR):
131 | if (ppack->data.size >= 3) {
132 | getColourPacket(&ppack->data.message[0],&rgb);
133 | pipes.setPipeColour(rgb);
134 | }
135 | break;
136 | case (NP_SET_PIPE_COLOUR):
137 | if (ppack->data.size >= 4) {
138 | getColourPacket(&ppack->data.message[1],&rgb);
139 | pipes.setPipeColour(pipe,rgb);
140 | }
141 | break;
142 | case (NP_SET_BRIGHTNESS):
143 | if (ppack->data.size >= 1) {
144 | pipes.setBrightness(ppack->data.message[0]);
145 | }
146 | break;
147 | case (NP_SET_CLEAR):
148 | if (ppack->data.message[0]) {
149 | pipes.clear();
150 | }
151 | break;
152 | case (NP_SET_CLEAR_PIPE):
153 | if (ppack->data.size >= 1) {
154 | pipes.clearPipe(pipe);
155 | }
156 | break;
157 | case (NP_SET_UNITS):
158 | if (ppack->data.size >= 1) {
159 | pipes.setNumberUnits(ppack->data.message[0]);
160 | }
161 | break;
162 | case (NP_SET_SHOW):
163 | if (ppack->data.message[0]) {
164 | pipes.write();
165 | pipes.show();
166 | }
167 | break;
168 | case (NP_GET_NUMBER):
169 | if (ppack->data.message[0]) {
170 | packValue(&res, pipes.getNumber());
171 | }
172 | break;
173 | default:
174 | pipes.writeSolid(CRGB::Red);
175 | pipes.show();
176 | res.data.message[0] = 0x3F;
177 | break;
178 | }
179 |
180 | Serial.write(res.bytes,res.data.size+2);
181 | }
182 |
183 | void setup()
184 | {
185 | Serial.begin(BAUD);
186 | while (!Serial);
187 |
188 | pipes.begin();
189 | pipes.setPipeNumber(0,VERSION_MINOR);
190 | pipes.setPipeNumber(1,VERSION_MAJOR);
191 | pipes.write();
192 | pipes.show();
193 | }
194 |
195 | void loop()
196 | {
197 | Packet_t packet;
198 |
199 | if (Serial.available()) {
200 | packet = processInput();
201 | processPacket(&packet);
202 | }
203 |
204 | }
205 |
--------------------------------------------------------------------------------
/pcb/kicad/nixie-pipe-cache.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # Device:C
5 | #
6 | DEF Device:C C 0 10 N Y 1 F N
7 | F0 "C" 25 100 50 H V L CNN
8 | F1 "Device:C" 25 -100 50 H V L CNN
9 | F2 "" 38 -150 50 H I C CNN
10 | F3 "" 0 0 50 H I C CNN
11 | $FPLIST
12 | C_*
13 | $ENDFPLIST
14 | DRAW
15 | P 2 0 1 20 -80 -30 80 -30 N
16 | P 2 0 1 20 -80 30 80 30 N
17 | X ~ 1 0 150 110 D 50 50 1 1 P
18 | X ~ 2 0 -150 110 U 50 50 1 1 P
19 | ENDDRAW
20 | ENDDEF
21 | #
22 | # Device:CP1
23 | #
24 | DEF Device:CP1 C 0 10 N N 1 F N
25 | F0 "C" 25 100 50 H V L CNN
26 | F1 "Device:CP1" 25 -100 50 H V L CNN
27 | F2 "" 0 0 50 H I C CNN
28 | F3 "" 0 0 50 H I C CNN
29 | $FPLIST
30 | CP_*
31 | $ENDFPLIST
32 | DRAW
33 | A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50
34 | P 2 0 1 20 -80 30 80 30 N
35 | P 2 0 1 0 -70 90 -30 90 N
36 | P 2 0 1 0 -50 70 -50 110 N
37 | X ~ 1 0 150 110 D 50 50 1 1 P
38 | X ~ 2 0 -150 130 U 50 50 1 1 P
39 | ENDDRAW
40 | ENDDEF
41 | #
42 | # Device:Crystal_Small
43 | #
44 | DEF Device:Crystal_Small Y 0 40 N N 1 F N
45 | F0 "Y" 0 100 50 H V C CNN
46 | F1 "Device:Crystal_Small" 0 -100 50 H V C CNN
47 | F2 "" 0 0 50 H I C CNN
48 | F3 "" 0 0 50 H I C CNN
49 | $FPLIST
50 | Crystal*
51 | $ENDFPLIST
52 | DRAW
53 | S -30 -60 30 60 0 1 0 N
54 | P 2 0 1 15 -50 -30 -50 30 N
55 | P 2 0 1 15 50 -30 50 30 N
56 | X 1 1 -100 0 50 R 50 50 1 1 P
57 | X 2 2 100 0 50 L 50 50 1 1 P
58 | ENDDRAW
59 | ENDDEF
60 | #
61 | # Device:D_Schottky
62 | #
63 | DEF Device:D_Schottky D 0 40 N N 1 F N
64 | F0 "D" 0 100 50 H V C CNN
65 | F1 "Device:D_Schottky" 0 -100 50 H V C CNN
66 | F2 "" 0 0 50 H I C CNN
67 | F3 "" 0 0 50 H I C CNN
68 | $FPLIST
69 | TO-???*
70 | *_Diode_*
71 | *SingleDiode*
72 | D_*
73 | $ENDFPLIST
74 | DRAW
75 | P 2 0 1 0 50 0 -50 0 N
76 | P 4 0 1 8 50 50 50 -50 -50 0 50 50 N
77 | P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N
78 | X K 1 -150 0 100 R 50 50 1 1 P
79 | X A 2 150 0 100 L 50 50 1 1 P
80 | ENDDRAW
81 | ENDDEF
82 | #
83 | # Device:R
84 | #
85 | DEF Device:R R 0 0 N Y 1 F N
86 | F0 "R" 80 0 50 V V C CNN
87 | F1 "Device:R" 0 0 50 V V C CNN
88 | F2 "" -70 0 50 V I C CNN
89 | F3 "" 0 0 50 H I C CNN
90 | $FPLIST
91 | R_*
92 | $ENDFPLIST
93 | DRAW
94 | S -40 -100 40 100 0 1 10 N
95 | X ~ 1 0 150 50 D 50 50 1 1 P
96 | X ~ 2 0 -150 50 U 50 50 1 1 P
97 | ENDDRAW
98 | ENDDEF
99 | #
100 | # jbr-ics:DS3231_8
101 | #
102 | DEF jbr-ics:DS3231_8 U 0 40 Y Y 1 F N
103 | F0 "U" -850 550 60 H V C CNN
104 | F1 "jbr-ics:DS3231_8" 0 200 60 H V C CNN
105 | F2 "" 0 -100 60 H V C CNN
106 | F3 "" 0 -100 60 H V C CNN
107 | $FPLIST
108 | W16#H2
109 | $ENDFPLIST
110 | DRAW
111 | S -900 500 850 -100 0 1 0 N
112 | X 32kHz 1 1150 200 300 L 60 60 1 1 B
113 | X VCC 2 0 800 300 D 60 60 1 1 W
114 | X ~INT~/SQW 3 1150 300 300 L 60 60 1 1 B
115 | X ~RST 4 -1200 100 300 R 60 60 1 1 B
116 | X GND 5 0 -400 300 U 60 60 1 1 W
117 | X V.BAT 6 1150 100 300 L 60 60 1 1 W
118 | X SDA 7 -1200 200 300 R 60 60 1 1 B
119 | X SCL 8 -1200 300 300 R 60 60 1 1 B
120 | ENDDRAW
121 | ENDDEF
122 | #
123 | # nixie-pipe-rescue:ATMEGA328P-A
124 | #
125 | DEF nixie-pipe-rescue:ATMEGA328P-A IC 0 40 Y Y 1 F N
126 | F0 "IC" -750 1250 50 H V L BNN
127 | F1 "nixie-pipe-rescue:ATMEGA328P-A" 400 -1400 50 H V L BNN
128 | F2 "TQFP32" 0 0 50 H V C CIN
129 | F3 "" 0 0 50 H V C CNN
130 | DRAW
131 | S -750 1200 850 -1300 0 1 10 f
132 | X (PCINT19/OC2B/INT1)PD3 1 1000 -800 150 L 40 40 1 1 B
133 | X (PCINT22/OC0A/AIN0)PD6 10 1000 -1100 150 L 40 40 1 1 B
134 | X (PCINT23/AIN1)PD7 11 1000 -1200 150 L 40 40 1 1 B
135 | X (PCINT0/CLKO/ICP1)PB0 12 1000 1100 150 L 40 40 1 1 B
136 | X (PCINT1/OC1A)PB1 13 1000 1000 150 L 40 40 1 1 B
137 | X (PCINT2/OC1B/~SS~)PB2 14 1000 900 150 L 40 40 1 1 B
138 | X (PCINT3/OC2A/MOSI)PB3 15 1000 800 150 L 40 40 1 1 B
139 | X (PCINT4/MISO)PB4 16 1000 700 150 L 40 40 1 1 B
140 | X (PCINT5/SCK)PB5 17 1000 600 150 L 40 40 1 1 B
141 | X AVCC 18 -900 800 150 R 40 40 1 1 W
142 | X ADC6 19 -900 -250 150 R 40 40 1 1 I
143 | X (PCINT20/XCK/T0)PD4 2 1000 -900 150 L 40 40 1 1 B
144 | X AREF 20 -900 500 150 R 40 40 1 1 B
145 | X GND 21 -900 -1000 150 R 40 40 1 1 W
146 | X ADC7 22 -900 -350 150 R 40 40 1 1 I
147 | X (PCINT8/ADC0)PC0 23 1000 250 150 L 40 40 1 1 B
148 | X (PCINT9/ADC1)PC1 24 1000 150 150 L 40 40 1 1 B
149 | X (PCINT10/ADC2)PC2 25 1000 50 150 L 40 40 1 1 B
150 | X (PCINT11/ADC3)PC3 26 1000 -50 150 L 40 40 1 1 B
151 | X (PCINT12/SDA/ADC4)PC4 27 1000 -150 150 L 40 40 1 1 B
152 | X (PCINT13/SCL/ADC5)PC5 28 1000 -250 150 L 40 40 1 1 B
153 | X (PCINT14/~RESET~)PC6 29 1000 -350 150 L 40 40 1 1 B
154 | X GND 3 -900 -1200 150 R 40 40 1 1 W
155 | X (PCINT16/RXD)PD0 30 1000 -500 150 L 40 40 1 1 B
156 | X (PCINT17/TXD)PD1 31 1000 -600 150 L 40 40 1 1 B
157 | X (PCINT18/INT0)PD2 32 1000 -700 150 L 40 40 1 1 B
158 | X VCC 4 -900 1100 150 R 40 40 1 1 W
159 | X GND 5 -900 -1100 150 R 40 40 1 1 W
160 | X VCC 6 -900 1000 150 R 40 40 1 1 W
161 | X (PCINT6/XTAL1/TOSC1)PB6 7 1000 500 150 L 40 40 1 1 B
162 | X (PCINT7/XTAL2/TOSC2)PB7 8 1000 400 150 L 40 40 1 1 B
163 | X (PCINT21/OC0B/T1)PD5 9 1000 -1000 150 L 40 40 1 1 B
164 | ENDDRAW
165 | ENDDEF
166 | #
167 | # nixie-pipe-rescue:AVR-ISP-6
168 | #
169 | DEF nixie-pipe-rescue:AVR-ISP-6 CON 0 40 Y Y 1 F N
170 | F0 "CON" -105 240 50 H V C CNN
171 | F1 "nixie-pipe-rescue:AVR-ISP-6" -265 -230 50 H V L BNN
172 | F2 "AVR-ISP-6" -520 40 50 V I C CNN
173 | F3 "" -25 0 50 H V C CNN
174 | DRAW
175 | T 0 -315 5 45 0 0 0 SCK Normal 1 C C
176 | T 0 275 110 45 0 0 0 VCC Normal 1 C C
177 | T 0 285 -105 45 0 1 0 GND Normal 1 C C
178 | T 0 -333 102 45 0 1 0 MISO Normal 1 C C
179 | T 0 307 -2 45 0 1 0 MOSI Normal 1 C C
180 | T 0 -315 -100 45 0 1 0 RST Normal 1 C C
181 | S -205 -140 165 -160 0 1 0 F
182 | S -205 200 155 180 0 1 0 F
183 | S -200 -160 -220 -40 0 1 0 F
184 | S -200 200 -220 40 0 1 0 F
185 | S 155 200 175 -160 0 1 0 F
186 | X ~ 1 -150 100 100 R 40 40 1 1 P
187 | X ~ 2 100 100 100 L 40 40 1 1 P
188 | X ~ 3 -150 0 100 R 40 40 1 1 P
189 | X ~ 4 100 0 100 L 40 40 1 1 P
190 | X ~ 5 -150 -100 100 R 40 40 1 1 P
191 | X ~ 6 100 -100 100 L 40 40 1 1 P
192 | ENDDRAW
193 | ENDDEF
194 | #
195 | # nixie-pipe-rescue:CONN_01X02
196 | #
197 | DEF nixie-pipe-rescue:CONN_01X02 P 0 40 Y N 1 F N
198 | F0 "P" 0 150 50 H V C CNN
199 | F1 "nixie-pipe-rescue:CONN_01X02" 100 0 50 V V C CNN
200 | F2 "" 0 0 50 H V C CNN
201 | F3 "" 0 0 50 H V C CNN
202 | $FPLIST
203 | Pin_Header_Straight_1X02
204 | Pin_Header_Angled_1X02
205 | Socket_Strip_Straight_1X02
206 | Socket_Strip_Angled_1X02
207 | $ENDFPLIST
208 | DRAW
209 | S -50 -45 10 -55 0 1 0 N
210 | S -50 55 10 45 0 1 0 N
211 | S -50 100 50 -100 0 1 0 N
212 | X P1 1 -200 50 150 R 50 50 1 1 P
213 | X P2 2 -200 -50 150 R 50 50 1 1 P
214 | ENDDRAW
215 | ENDDEF
216 | #
217 | # nixie-pipe-rescue:CONN_01X03
218 | #
219 | DEF nixie-pipe-rescue:CONN_01X03 P 0 40 Y N 1 F N
220 | F0 "P" 0 200 50 H V C CNN
221 | F1 "nixie-pipe-rescue:CONN_01X03" 100 0 50 V V C CNN
222 | F2 "" 0 0 50 H V C CNN
223 | F3 "" 0 0 50 H V C CNN
224 | $FPLIST
225 | Pin_Header_Straight_1X03
226 | Pin_Header_Angled_1X03
227 | Socket_Strip_Straight_1X03
228 | Socket_Strip_Angled_1X03
229 | $ENDFPLIST
230 | DRAW
231 | S -50 -95 10 -105 0 1 0 N
232 | S -50 5 10 -5 0 1 0 N
233 | S -50 105 10 95 0 1 0 N
234 | S -50 150 50 -150 0 1 0 N
235 | X P1 1 -200 100 150 R 50 50 1 1 P
236 | X P2 2 -200 0 150 R 50 50 1 1 P
237 | X P3 3 -200 -100 150 R 50 50 1 1 P
238 | ENDDRAW
239 | ENDDEF
240 | #
241 | # nixie-pipe-rescue:CONN_01X05
242 | #
243 | DEF nixie-pipe-rescue:CONN_01X05 P 0 40 Y N 1 F N
244 | F0 "P" 0 300 50 H V C CNN
245 | F1 "nixie-pipe-rescue:CONN_01X05" 100 0 50 V V C CNN
246 | F2 "" 0 0 50 H V C CNN
247 | F3 "" 0 0 50 H V C CNN
248 | $FPLIST
249 | Pin_Header_Straight_1X05
250 | Pin_Header_Angled_1X05
251 | Socket_Strip_Straight_1X05
252 | Socket_Strip_Angled_1X05
253 | $ENDFPLIST
254 | DRAW
255 | S -50 -195 10 -205 0 1 0 N
256 | S -50 -95 10 -105 0 1 0 N
257 | S -50 5 10 -5 0 1 0 N
258 | S -50 105 10 95 0 1 0 N
259 | S -50 205 10 195 0 1 0 N
260 | S -50 250 50 -250 0 1 0 N
261 | X P1 1 -200 200 150 R 50 50 1 1 P
262 | X P2 2 -200 100 150 R 50 50 1 1 P
263 | X P3 3 -200 0 150 R 50 50 1 1 P
264 | X P4 4 -200 -100 150 R 50 50 1 1 P
265 | X P5 5 -200 -200 150 R 50 50 1 1 P
266 | ENDDRAW
267 | ENDDEF
268 | #
269 | # nixie-pipe-rescue:FT230XS
270 | #
271 | DEF nixie-pipe-rescue:FT230XS U 0 40 Y Y 1 F N
272 | F0 "U" -550 600 50 H V L CNN
273 | F1 "nixie-pipe-rescue:FT230XS" 300 600 50 H V L CNN
274 | F2 "SSOP-16" 0 0 50 H V C CNN
275 | F3 "" 0 0 50 H V C CNN
276 | $FPLIST
277 | SSOP*
278 | $ENDFPLIST
279 | DRAW
280 | S -550 550 550 -550 0 1 10 f
281 | X TXD 1 700 400 150 L 50 50 1 1 O
282 | X 3V3OUT 10 -700 400 150 R 50 50 1 1 w
283 | X ~RESET 11 -700 -200 150 R 50 50 1 1 I
284 | X VCC 12 -100 700 150 D 50 50 1 1 W
285 | X GND 13 100 -700 150 U 50 50 1 1 W
286 | X CBUS1 14 700 -200 150 L 50 50 1 1 B
287 | X CBUS0 15 700 -100 150 L 50 50 1 1 B
288 | X CBUS3 16 700 -400 150 L 50 50 1 1 B
289 | X ~RTS 2 700 200 150 L 50 50 1 1 I
290 | X VCCIO 3 100 700 150 D 50 50 1 1 W
291 | X RXD 4 700 300 150 L 50 50 1 1 I
292 | X GND 5 -100 -700 150 U 50 50 1 1 W
293 | X ~CTS 6 700 100 150 L 50 50 1 1 I
294 | X CBUS2 7 700 -300 150 L 50 50 1 1 B
295 | X USBDP 8 -700 0 150 R 50 50 1 1 B
296 | X USBDM 9 -700 100 150 R 50 50 1 1 B
297 | ENDDRAW
298 | ENDDEF
299 | #
300 | # nixie-pipe-rescue:INDUCTOR_SMALL
301 | #
302 | DEF nixie-pipe-rescue:INDUCTOR_SMALL L 0 0 N N 1 F N
303 | F0 "L" 0 100 50 H V C CNN
304 | F1 "nixie-pipe-rescue:INDUCTOR_SMALL" 0 -50 50 H V C CNN
305 | F2 "" 0 0 50 H V C CNN
306 | F3 "" 0 0 50 H V C CNN
307 | DRAW
308 | A -150 0 50 1 1799 0 1 0 N -100 0 -200 0
309 | A -50 0 50 1 1799 0 1 0 N 0 0 -100 0
310 | A 50 0 50 1 1799 0 1 0 N 100 0 0 0
311 | A 150 0 50 1 1799 0 1 0 N 200 0 100 0
312 | X 1 1 -250 0 50 R 30 30 1 1 I
313 | X 2 2 250 0 50 L 30 30 1 1 I
314 | ENDDRAW
315 | ENDDEF
316 | #
317 | # nixie-pipe-rescue:USB_OTG-RESCUE-nixie-pipe
318 | #
319 | DEF nixie-pipe-rescue:USB_OTG-RESCUE-nixie-pipe P 0 40 Y Y 1 F N
320 | F0 "P" 325 -125 50 H V C CNN
321 | F1 "nixie-pipe-rescue:USB_OTG-RESCUE-nixie-pipe" 0 200 50 H V C CNN
322 | F2 "" -50 -100 50 V V C CNN
323 | F3 "" -50 -100 50 V V C CNN
324 | $FPLIST
325 | USB*
326 | $ENDFPLIST
327 | DRAW
328 | S -250 -150 250 150 0 1 0 N
329 | S -205 -150 -195 -120 0 1 0 N
330 | S -105 -150 -95 -120 0 1 0 N
331 | S -5 -150 5 -120 0 1 0 N
332 | S 95 -150 105 -120 0 1 0 N
333 | S 195 -150 205 -120 0 1 0 N
334 | X VCC 1 -200 -300 150 U 50 50 1 1 w
335 | X D- 2 -100 -300 150 U 50 50 1 1 P
336 | X D+ 3 0 -300 150 U 50 50 1 1 P
337 | X ID 4 100 -300 150 U 50 50 1 1 W
338 | X GND 5 200 -300 150 U 50 50 1 1 W
339 | X shield 6 400 100 150 L 50 50 1 1 P
340 | ENDDRAW
341 | ENDDEF
342 | #
343 | # nixie-pipe-rescue:WS2812B
344 | #
345 | DEF nixie-pipe-rescue:WS2812B U 0 40 Y Y 1 F N
346 | F0 "U" 0 100 60 H V C CNN
347 | F1 "nixie-pipe-rescue:WS2812B" 0 0 60 H V C CNN
348 | F2 "" 0 0 60 H V C CNN
349 | F3 "" 0 0 60 H V C CNN
350 | DRAW
351 | S -250 -100 250 -300 0 1 0 N
352 | S 100 -350 100 -350 0 1 0 N
353 | X VDD 1 -550 -150 300 R 50 50 1 1 W
354 | X DOUT 2 550 -250 300 L 50 50 1 1 O
355 | X GND 3 550 -150 300 L 50 50 1 1 W
356 | X DIN 4 -550 -250 300 R 50 50 1 1 I
357 | ENDDRAW
358 | ENDDEF
359 | #
360 | # nixie-pipe-rescue:ZENERsmall
361 | #
362 | DEF nixie-pipe-rescue:ZENERsmall D 0 40 N N 1 F N
363 | F0 "D" 0 100 50 H V C CNN
364 | F1 "nixie-pipe-rescue:ZENERsmall" 0 -100 50 H V C CNN
365 | F2 "" 0 0 50 H V C CNN
366 | F3 "" 0 0 50 H V C CNN
367 | $FPLIST
368 | D?
369 | SO*
370 | SM*
371 | $ENDFPLIST
372 | DRAW
373 | P 4 0 1 8 -60 40 -40 20 -40 -20 -20 -40 N
374 | P 4 0 1 0 40 40 -40 0 40 -40 40 40 F
375 | X K 1 -100 0 60 R 40 40 1 1 P
376 | X A 2 100 0 60 L 40 40 1 1 P
377 | ENDDRAW
378 | ENDDEF
379 | #
380 | # power:GND
381 | #
382 | DEF power:GND #PWR 0 0 Y Y 1 F P
383 | F0 "#PWR" 0 -250 50 H I C CNN
384 | F1 "power:GND" 0 -150 50 H V C CNN
385 | F2 "" 0 0 50 H I C CNN
386 | F3 "" 0 0 50 H I C CNN
387 | DRAW
388 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
389 | X GND 1 0 0 0 D 50 50 1 1 W N
390 | ENDDRAW
391 | ENDDEF
392 | #
393 | # power:PWR_FLAG
394 | #
395 | DEF power:PWR_FLAG #FLG 0 0 N N 1 F P
396 | F0 "#FLG" 0 75 50 H I C CNN
397 | F1 "power:PWR_FLAG" 0 150 50 H V C CNN
398 | F2 "" 0 0 50 H I C CNN
399 | F3 "" 0 0 50 H I C CNN
400 | DRAW
401 | P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
402 | X pwr 1 0 0 0 U 50 50 0 0 w
403 | ENDDRAW
404 | ENDDEF
405 | #
406 | # power:VCC
407 | #
408 | DEF power:VCC #PWR 0 0 Y Y 1 F P
409 | F0 "#PWR" 0 -150 50 H I C CNN
410 | F1 "power:VCC" 0 150 50 H V C CNN
411 | F2 "" 0 0 50 H I C CNN
412 | F3 "" 0 0 50 H I C CNN
413 | DRAW
414 | C 0 75 25 0 1 0 N
415 | P 2 0 1 0 0 0 0 50 N
416 | X VCC 1 0 0 0 U 50 50 1 1 W N
417 | ENDDRAW
418 | ENDDEF
419 | #
420 | #End Library
421 |
--------------------------------------------------------------------------------
/firmware/np-weather/np-weather.ino:
--------------------------------------------------------------------------------
1 | /*
2 | // GPL 3.0 License
3 |
4 | // Copyright (c) 2016 John Whittington www.jbrengineering.co.uk
5 |
6 | // This program is free software: you can redistribute it and/or modify
7 | // it under the terms of the GNU General Public License as published by
8 | // the Free Software Foundation, either version 3 of the License, or
9 | // (at your option) any later version.
10 |
11 | // This program is distributed in the hope that it will be useful,
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | // GNU General Public License for more details.
15 |
16 | // You should have received a copy of the GNU General Public License
17 | // along with this program. If not, see .
18 | */
19 |
20 | #include
21 | #include
22 |
23 | #include
24 |
25 | #define LED_PIN 6
26 | #define NUM_PIPES 3
27 | #define NUM_UNITS 1
28 | #define BRIGHTNESS 255
29 |
30 | #define BAUD 57600
31 | #define NP_SET_NUMBER 0x40
32 | #define NP_SET_PIPE_NUMBER 0x41
33 | #define NP_SET_COLOUR 0x42
34 | #define NP_SET_PIPE_COLOUR 0x43
35 | #define NP_SET_BRIGHTNESS 0x44
36 | #define NP_SET_CLEAR 0x45
37 | #define NP_SET_CLEAR_PIPE 0x46
38 | #define NP_GET_NUMBER 0x47
39 | #define NP_SET_CONNECT 0x48
40 | #define NP_SET_UNITS 0x49
41 | #define NP_SET_SHOW 0x50
42 | #define NP_SET_WEATHER 0x51
43 | #define NP_SET_TIME 0x52
44 |
45 | #define MAX_PACKET 18
46 | #define MAX_MESSAGE MAX_PACKET - 2
47 |
48 | #define VERSION_MINOR 0
49 | #define VERSION_MAJOR 1
50 |
51 | #define DEBOUNCE 300
52 | #define DISPLAY_MODES 6
53 | #define OUTSIDE_WEATHER 0
54 | #define HUMIDITY 1
55 | #define WIND_SPEED 2
56 | #define INSIDE_TEMP 3
57 | #define DISPLAY_TIME 4
58 | #define CYCLE_MODES 5
59 | #define DISPLAY_UPDATE DISPLAY_MODES // roll over to no display to issue refresh
60 |
61 | #define SERIAL_UINT16(LSB,MSB) (( (short) LSB & 0xFF) | (( (short) MSB & 0xFF) << 8))
62 | #define SERIAL_UINT32(B0,B1,B2,B3) ( (long) B0 | ( (long) B1 << 8 ) | ( (long) B2 << 16 ) | ( (long) B3 << 24 ) )
63 |
64 | NixiePipe pipes = NixiePipe(NUM_PIPES,NUM_UNITS);
65 |
66 | uint8_t gDisplayMode = 0;
67 | CRGB gMainColour = CRGB::White;
68 | tmElements_t gTm; // time struct holder
69 | CRGBPalette16 gPal = CRGBPalette16( CRGB::Blue, CRGB::Cyan, CRGB::Yellow, CRGB::Red);
70 |
71 | typedef union {
72 | struct {
73 | byte size;
74 | byte command;
75 | byte message[MAX_MESSAGE];
76 | } data;
77 | byte bytes[MAX_PACKET];
78 | } Packet_t;
79 |
80 | typedef struct {
81 | byte outside;
82 | byte symbol;
83 | byte wind;
84 | byte humidity;
85 | byte inside;
86 | } weather_t;
87 |
88 | weather_t gWeather = {
89 | .outside = 0,
90 | .symbol = 0,
91 | .wind = 0,
92 | .humidity = 0,
93 | .inside = 0,
94 | };
95 |
96 | bool gConnected = false;
97 |
98 | static Packet_t processInput(void) {
99 | Packet_t packet;
100 | unsigned long timeout;
101 | byte i = 0;
102 |
103 | packet.data.size = Serial.read();
104 | delay(1);
105 | packet.data.command = Serial.read();
106 |
107 | timeout = millis();
108 |
109 | if (packet.data.size < MAX_MESSAGE) {
110 | while ( (i < (packet.data.size)) && ( (millis() - timeout) < 10) ) {
111 | packet.data.message[i++] = Serial.read();
112 | timeout = millis();
113 | }
114 | }
115 |
116 | return packet;
117 | }
118 |
119 | static void getColourPacket(byte *pmessage, CRGB *prgb) {
120 | prgb->r = pmessage[0];
121 | prgb->g = pmessage[1];
122 | prgb->b = pmessage[2];
123 | }
124 |
125 | static void packValue(Packet_t *pres, uint32_t value) {
126 |
127 | for (int i = 0; i < 4; ++i) {
128 | pres->data.message[i] = (byte) ((value >> (8 * i)) & 0xFF);
129 | }
130 |
131 | pres->data.size = 4;
132 | }
133 |
134 | static void processPacket(Packet_t *ppack) {
135 | CRGB rgb;
136 | byte pipe = ppack->data.message[0];
137 | Packet_t res;
138 |
139 | res.data.command = ppack->data.command;
140 | res.data.size = 1;
141 | res.data.message[0] = 0x00;
142 |
143 | switch (ppack->data.command) {
144 | case (NP_SET_CONNECT):
145 | if (ppack->data.size >= 2) {
146 | if ((ppack->data.message[0] == 0x4E /*N*/) && (ppack->data.message[1] == 0x50 /*P*/)) {
147 | res.data.command = ppack->data.command;
148 | res.data.size = 2;
149 | res.data.message[0] = VERSION_MINOR;
150 | res.data.message[1] = VERSION_MAJOR;
151 | gConnected = true;
152 | }
153 | }
154 | break;
155 | case (NP_SET_NUMBER):
156 | if (ppack->data.size >= 4) {
157 | pipes.setNumber((long) SERIAL_UINT32(ppack->data.message[0],ppack->data.message[1],ppack->data.message[2],ppack->data.message[3]));
158 | }
159 | break;
160 | case (NP_SET_PIPE_NUMBER):
161 | if (ppack->data.size >= 2) {
162 | pipes.setPipeNumber(pipe,ppack->data.message[1]);
163 | }
164 | break;
165 | case (NP_SET_COLOUR):
166 | if (ppack->data.size >= 3) {
167 | getColourPacket(&ppack->data.message[0],&rgb);
168 | pipes.setPipeColour(rgb);
169 | }
170 | break;
171 | case (NP_SET_PIPE_COLOUR):
172 | if (ppack->data.size >= 4) {
173 | getColourPacket(&ppack->data.message[1],&rgb);
174 | pipes.setPipeColour(pipe,rgb);
175 | }
176 | break;
177 | case (NP_SET_BRIGHTNESS):
178 | if (ppack->data.size >= 1) {
179 | pipes.setBrightness(ppack->data.message[0]);
180 | }
181 | break;
182 | case (NP_SET_CLEAR):
183 | if (ppack->data.message[0]) {
184 | pipes.clear();
185 | }
186 | break;
187 | case (NP_SET_CLEAR_PIPE):
188 | if (ppack->data.size >= 1) {
189 | pipes.clearPipe(pipe);
190 | }
191 | break;
192 | case (NP_SET_UNITS):
193 | if (ppack->data.size >= 1) {
194 | pipes.setNumberUnits(ppack->data.message[0]);
195 | }
196 | break;
197 | case (NP_SET_SHOW):
198 | if (ppack->data.message[0]) {
199 | pipes.write();
200 | pipes.show();
201 | }
202 | break;
203 | case (NP_GET_NUMBER):
204 | if (ppack->data.message[0]) {
205 | packValue(&res, pipes.getNumber());
206 | }
207 | break;
208 | case (NP_SET_WEATHER):
209 | if (ppack->data.size >= 1) {
210 | packValue(&res, pipes.getNumber());
211 | gWeather.outside = ppack->data.message[0];
212 | gWeather.symbol = ppack->data.message[1];
213 | gWeather.wind = ppack->data.message[2] * 3.6; // convert from m/s to km/h
214 | gWeather.humidity = ppack->data.message[3];
215 | gWeather.inside = RTC.temperature() / 4;
216 | // Clip humidity if display not large enough
217 | if (NUM_PIPES < 4)
218 | if (gWeather.humidity == 100) gWeather.humidity = 99;
219 | }
220 | break;
221 | case (NP_SET_TIME):
222 | if (ppack->data.size >= 1) {
223 | packValue(&res, pipes.getNumber());
224 | gTm.Hour = ppack->data.message[0];
225 | gTm.Minute = ppack->data.message[1];
226 | RTC.write(gTm);
227 | }
228 | break;
229 | default:
230 | pipes.writeSolid(CRGB::Red);
231 | pipes.show();
232 | res.data.message[0] = 0x3F;
233 | break;
234 | }
235 |
236 | Serial.write(res.bytes,res.data.size+2);
237 | }
238 |
239 | void setup()
240 | {
241 | pinMode(PIPE_TB0,INPUT); // TB0
242 | pinMode(PIPE_TB1,INPUT); // TB1
243 |
244 | Serial.begin(BAUD);
245 | while (!Serial);
246 |
247 | pipes.begin();
248 | pipes.setNumberUnits(NUM_UNITS);
249 | pipes.setPipeColour(CRGB::Magenta);
250 | pipes.setPipeNumber(0,VERSION_MINOR);
251 | pipes.setPipeNumber(2,VERSION_MAJOR);
252 | pipes.write();
253 | pipes.show();
254 | pipes.setPipeColour(gMainColour);
255 | }
256 |
257 | void loop()
258 | {
259 | static unsigned long tb0db = 0;
260 | unsigned long tb0int = millis();
261 | static unsigned long tb1db = 0;
262 | unsigned long tb1int = millis();
263 | Packet_t packet;
264 | static uint8_t lastDisplay = gDisplayMode;
265 | static CEveryNSeconds everySecond(1);
266 | static CEveryNSeconds every60Second(60);
267 | static CEveryNSeconds every10Second(10);
268 | uint8_t colourIndex;
269 | static bool cycleDisplay = false;
270 |
271 | // RH
272 | if (~digitalRead(PIPE_TB0) & (tb0int - tb0db > DEBOUNCE)) {
273 | if (cycleDisplay) {
274 | cycleDisplay = false;
275 | } else {
276 | if (gDisplayMode < (DISPLAY_MODES - 1))
277 | ++gDisplayMode;
278 | }
279 | tb0db = tb0int;
280 | }
281 |
282 | // LH
283 | if (~digitalRead(PIPE_TB1) & (tb1int - tb1db > DEBOUNCE)) {
284 | if (cycleDisplay) {
285 | cycleDisplay = false;
286 | } else {
287 | if (gDisplayMode > 0)
288 | --gDisplayMode;
289 | }
290 | tb1db = tb1int;
291 | }
292 |
293 | if (every10Second && cycleDisplay) {
294 | if (gDisplayMode < (DISPLAY_MODES - 2))
295 | ++gDisplayMode;
296 | else
297 | gDisplayMode = 0;
298 | }
299 |
300 | // If user buttons changed mode and a value has been set
301 | if ((lastDisplay != gDisplayMode)) {
302 | lastDisplay = gDisplayMode;
303 | switch (gDisplayMode) {
304 | case (OUTSIDE_WEATHER):
305 | colourIndex = map(gWeather.outside, -10, 40, 0, 255);
306 | pipes.setPipeColour(ColorFromPalette(gPal, colourIndex));
307 | /*pipes.setPipeColour(CRGB::White);*/
308 | pipes.setNumber(gWeather.outside);
309 | pipes.setPipeNumber(0,gWeather.symbol);
310 | pipes.setPipeColour(0,CRGB::OrangeRed);
311 | pipes.write();
312 | pipes.show();
313 | break;
314 | case (HUMIDITY):
315 | pipes.setPipeColour(CRGB::White);
316 | pipes.setNumber(gWeather.humidity);
317 | pipes.setPipeNumber(0,Weather::Percent);
318 | pipes.setPipeColour(0,CRGB::Cyan);
319 | pipes.write();
320 | pipes.show();
321 | break;
322 | case (WIND_SPEED):
323 | pipes.setPipeColour(CRGB::White);
324 | pipes.setNumber(gWeather.wind);
325 | pipes.setPipeNumber(0,Weather::Wind);
326 | pipes.setPipeColour(0,CRGB::White);
327 | pipes.write();
328 | pipes.show();
329 | break;
330 | case (INSIDE_TEMP):
331 | gWeather.inside = RTC.temperature() / 4;
332 | colourIndex = map(gWeather.inside, 0, 30, 0, 255);
333 | pipes.setPipeColour(ColorFromPalette(gPal, colourIndex));
334 | /*pipes.setPipeColour(CRGB::White);*/
335 | pipes.setNumber(gWeather.inside);
336 | pipes.write();
337 | pipes.clearPipe(0);
338 | pipes.show();
339 | break;
340 | case (DISPLAY_TIME):
341 | RTC.read(gTm);
342 | pipes.setPipeColour(CRGB::OrangeRed);
343 | pipes.setPipeColour(0, CRGB::Black);
344 | pipes.setNumber(gTm.Hour * 100 + gTm.Minute);
345 | pipes.write();
346 | /*pipes.writePipeFill(0,CRGB::OrangeRed);*/ // all on but gets hot
347 | pipes.show();
348 | break;
349 | case (CYCLE_MODES):
350 | pipes.setPipeColour(CRGB::Green);
351 | pipes.write();
352 | pipes.show();
353 | cycleDisplay = true;
354 | break;
355 | default:
356 | break;
357 | }
358 | }
359 |
360 | // Check for new data
361 | if (Serial.available()) {
362 | packet = processInput();
363 | processPacket(&packet);
364 | lastDisplay = DISPLAY_UPDATE;
365 | }
366 |
367 | // Update internal temp
368 | if (every60Second) {
369 | if (gDisplayMode == INSIDE_TEMP) {
370 | lastDisplay = DISPLAY_UPDATE;
371 | gWeather.inside = RTC.temperature() / 4;
372 | }
373 | }
374 |
375 | /*for (int i = 0; i < 255; i++) {*/
376 | /*pipes.setPipeColour(ColorFromPalette(gPal, i));*/
377 | /*pipes.write();*/
378 | /*pipes.show();*/
379 | /*}*/
380 |
381 | // Update time
382 | if (everySecond) {
383 | if (gDisplayMode == DISPLAY_TIME) {
384 | lastDisplay = DISPLAY_UPDATE;
385 | if (RTC.read(gTm) != 0) {
386 | pipes.setPipeColour(CRGB::Red);
387 | }
388 | }
389 | }
390 | }
391 |
--------------------------------------------------------------------------------
/nixiepipe.scad:
--------------------------------------------------------------------------------
1 | /*
2 | *Copyright JBR Engineering Research Ltd - 2016 - www.jbrengineering.co.uk
3 | *
4 | *This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
5 | *International License. To view a copy of this license, visit
6 | *http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative
7 | *Commons, PO Box 1866, Mountain View, CA 94042, USA. Please include this
8 | *header with modifaction
9 | */
10 |
11 | include
12 | include
13 | include
14 | $fn=50;
15 |
16 | export = true;
17 | enumbers = false;
18 | eblank = false;
19 | pcb = false;
20 |
21 | teeth = false;
22 | node = true;
23 |
24 | LBD=0.23; // general kerf diameter
25 | LBD_ACRY=0.43; // acrylic kerf diameter
26 | MATZ=3.00; // acrylic thickness
27 | WOODZ=3.15; // wood thickness
28 |
29 | WS2812 = 5;
30 | WS_BORDER = 3;
31 | WS_SPACE = WS2812 + WS_BORDER;
32 | WS_PIPEH = 4;
33 | WS_H = 1.6;
34 |
35 | /* PCBZ = 1.68; */ // actual for metal
36 | PCBZ = 1.60;
37 | SOFF = 4;
38 | pcbh = PCBZ + SOFF + WS_H;
39 | PCB_TABZ = 10;
40 | bspace = 8;
41 | tab = true;
42 |
43 | SCREWDIA = 3 + 0.2;
44 | STUDDIA = 2.6; // thread it instead of stud
45 |
46 | number=10;
47 | WIDTH = 40 + (WS_SPACE);
48 | HEIGHT = WIDTH + 10;
49 | DEPTH = ((number+1) * MATZ) + (2 * WOODZ);
50 |
51 | ht = HEIGHT + LBD;
52 | wd = WIDTH + LBD;
53 | dp = DEPTH + LBD;
54 | // Slot
55 | // Tweak these till it looks right
56 | XSlots = 6; // number of slots in base
57 | YSlots = 6; // number of slots on sides
58 | ZSlots = 4;
59 | // dent dia in each axis
60 | DLX = (ht / XSlots);
61 | DLY = (wd / YSlots);
62 | DLZ = (dp / ZSlots);
63 |
64 | if (!export) {
65 | /* diffuser(-1); */
66 | /* translate([0,0,MATZ]) stack(number); */
67 | translate([0,0,MATZ*(number+1)]) face(1);
68 | /* translate([0,0,-WOODZ]) face(0); */
69 | /* translate([wd/2+MATZ/2,5+WS_PIPEH/2+LBD,dp/2-MATZ*3/2]) rotate([0,90,0]) side();*/
70 | /* translate([0,0,MATZ*(number)]) diffuser(-1); */
71 | /* translate([-wd/2-MATZ/2,5+WS_PIPEH/2+LBD,dp/2-MATZ*3/2]) rotate([0,90,0]) side();*/
72 | /* translate([0,ht/2+WS_PIPEH+pcbh+MATZ/2,dp/2-MATZ*3/2]) rotate([90,0,0]) base();*/
73 | /* translate([0,ht/2+WS_PIPEH+WS_H/2]) rotate([90,0,0]) pixel();*/
74 | /* translate([0,ht/2+WS_PIPEH+WS_H,dp/2-MATZ*3/2]) rotate([90,180,0]) pcb(); */
75 | /* translate([148.5,45,-89.2]) rotate([90,180,0]) import("nixie-pipe-pcb.stl");*/
76 | echo ("Height:",ht,"Width:",wd,"Depth:",dp);
77 | } else {
78 | if (enumbers) {
79 | translate([0,0,0]) projection() diffuser(-1);
80 | for (x = [1:1:number]) {
81 | translate([(wd+2)*(x),0,0]) projection() diffuser(x);
82 | }
83 | } else if (eblank) {
84 | projection() diffuser(-1);
85 | } else if (pcb) {
86 | projection() pcb();
87 |
88 | } else {
89 | if (teeth) {
90 | projection() side();
91 | translate([dp+1,0,0]) {
92 | projection() side();
93 | translate([(dp+1)+MATZ*2+1,0,0]) {
94 | projection() face(0);
95 | translate([wd+1+MATZ*2,0,0]) projection() face(1);
96 | }
97 | }
98 | } else {
99 | projection() face(0);
100 | translate([wd+1,0,0]) projection() face(1);
101 | }
102 | }
103 | }
104 |
105 | module middle() {
106 | translate([0,ht/2,0]) hexagon(WS_PIPEH*2,MATZ);
107 | }
108 |
109 | module left() {
110 | translate([-WS_SPACE/2,ht/2,0]) hexagon(WS_PIPEH*2,MATZ);
111 | }
112 |
113 | module right() {
114 | translate([WS_SPACE/2,ht/2,0]) hexagon(WS_PIPEH*2,MATZ);
115 | }
116 |
117 | module diffuser(number) {
118 | difference() {
119 | union() {
120 | roundedBox([wd,ht,MATZ],5);
121 | if (number % 2 && number > 0) {
122 | left();
123 | }
124 | else if ( number > 0 ) {
125 | right();
126 | }
127 | }
128 | if (number == 1) {
129 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("1",size=38,halign="center",valign="center");
130 | } else if (number == 2) {
131 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("2",size=38,halign="center",valign="center");
132 | } else if (number == 3) {
133 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("3",size=38,halign="center",valign="center");
134 | } else if (number == 4) {
135 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("4",size=38,halign="center",valign="center");
136 | } else if (number == 5) {
137 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("5",size=38,halign="center",valign="center");
138 | } else if (number == 6) {
139 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("6",size=38,halign="center",valign="center");
140 | } else if (number == 7) {
141 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("7",size=38,halign="center",valign="center");
142 | } else if (number == 8) {
143 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("8",size=38,halign="center",valign="center");
144 | } else if (number == 9) {
145 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("9",size=38,halign="center",valign="center");
146 | } else if (number == 10) {
147 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("0",size=38,halign="center",valign="center");
148 | }
149 | if ((abs(number) >= 1)) {
150 | if (!teeth) {
151 | screw_holes(SCREWDIA);
152 | }
153 | }
154 | }
155 | }
156 |
157 | module pcb() {
158 | pcbd = dp - (WOODZ * 2) - LBD;
159 | difference() {
160 | union() {
161 | roundedBox([wd,pcbd,PCBZ],2);
162 | if (tab) {
163 | translate([0,-pcbd/2-PCB_TABZ/2,0]) roundedBox([wd-10,WOODZ*2+PCB_TABZ,PCBZ],2);
164 | } else {
165 | translate([0,-pcbd/2,0]) roundedBox([wd-10,WOODZ*2,PCBZ],0.5);
166 | }
167 | translate([0,pcbd/2,0]) roundedBox([wd-10,WOODZ*2,PCBZ],0.5);
168 | }
169 | translate([0,-pcbd/2+MATZ*3/2,0]) {
170 | for (x = [1:1:number]) {
171 | translate([0,+MATZ*(x-1),0]) {
172 | if (x % 2) {
173 | translate([WS_SPACE/2,0,0]) cube([WS2812,WS2812,PCBZ],center=true);
174 | } else {
175 | translate([-WS_SPACE/2,0,0]) cube([WS2812,WS2812,PCBZ],center=true);
176 | }
177 | }
178 | }
179 | }
180 | }
181 | }
182 |
183 | module face(front) {
184 | WEnd = wd;
185 | HFace = ht+WS_PIPEH+pcbh - 5;
186 | HTY = HFace / XSlots;
187 | difference() {
188 | union() {
189 | diffuser(0);
190 | if (teeth) {
191 | translate([0,ht/2,0]) cube([wd,WS_PIPEH*2+pcbh*2,MATZ],center=true);
192 | } else {
193 | translate([0,ht/2,0]) roundedBox([wd,WS_PIPEH*2+pcbh*2+bspace,MATZ],5);
194 | }
195 | if (teeth) {
196 | translate([-wd/2,ht/2+WS_PIPEH+pcbh,0]) {
197 | for (x = [DLY:DLY*2:WEnd]) {
198 | translate([x,0,0]) tooth(DLY,1,LBD,WOODZ);
199 | }
200 | }
201 | translate([0,-ht/2+5,0]) {
202 | for (y = [HTY:HTY*2:ht]) {
203 | translate([-wd/2,y,0]) tooth(HTY,2,LBD,WOODZ);
204 | translate([wd/2,y,0]) tooth(HTY,2,LBD,WOODZ);
205 | }
206 | }
207 | }
208 | if (front == 0 && node) {
209 | translate([0,10,0]) node(0);
210 | translate([0,-10,0]) node(0);
211 | }
212 | }
213 | if (front) {
214 | scale([0.8,0.8,2]) diffuser(0);
215 | }
216 | // pcb slot
217 | if (front) {
218 | translate([0,ht/2+WS_PIPEH+WS_H+1,0]) {
219 | cube([wd-10+LBD,PCBZ-LBD,MATZ],center=true);
220 | // holes on edge provide strain relief
221 | translate([(wd-10)/2,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2);
222 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2);
223 | translate([(wd-10)/2,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2);
224 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2);
225 | }
226 | } else { // slightly larger for rear acrylic
227 | translate([0,ht/2+WS_PIPEH+WS_H+1,0]) {
228 | cube([wd-10+LBD,PCBZ-LBD_ACRY,MATZ],center=true);
229 | // holes on edge provide strain relief
230 | translate([(wd-10)/2,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2);
231 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2);
232 | translate([(wd-10)/2,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2);
233 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2);
234 | }
235 | if (node) {
236 | translate([0,10,0]) node(1);
237 | translate([0,-10,0]) node(1);
238 | /* translate([0,10,0]) magnet(1);*/
239 | /* translate([0,-10,0]) magnet(1);*/
240 | /* translate([0,10,0]) magnet(0);*/
241 | /* translate([0,-10,0]) magnet(0);*/
242 | }
243 | }
244 |
245 | if (!teeth) {
246 | if (front) {
247 | screw_holes(SCREWDIA);
248 | } else {
249 | screw_holes(STUDDIA);
250 | }
251 | }
252 | }
253 | }
254 |
255 | module side() {
256 | HFace = ht+WS_PIPEH+pcbh - 5;
257 | HTY = HFace / XSlots;
258 | union() {
259 | difference () {
260 | cube([dp,HFace,WOODZ],center=true);
261 | if (teeth) {
262 | translate([0,-HFace/2,0]) {
263 | for (y = [HTY:HTY*2:HFace]) {
264 | translate([dp/2,y,0]) dent(HTY,2,LBD,WOODZ);
265 | translate([-dp/2,y,0]) dent(HTY,2,LBD,WOODZ);
266 | }
267 | }
268 | }
269 | }
270 | if (teeth) {
271 | translate([-dp/2,0,0]) {
272 | for (y = [DLZ:DLZ*2:dp]) {
273 | translate([y,HFace/2,0]) tooth(DLZ,1,LBD,WOODZ);
274 | }
275 | }
276 | }
277 | }
278 | }
279 |
280 | module base() {
281 | baseW = wd+WOODZ*2;
282 | difference() {
283 | cube([baseW,dp,WOODZ],center=true);
284 | if (teeth) {
285 | translate([-wd/2,0,0]) {
286 | for (x = [DLY:DLY*2:baseW]) {
287 | translate([x,-dp/2,0]) tooth(DLY,1,LBD,WOODZ);
288 | translate([x,dp/2,0]) tooth(DLY,1,LBD,WOODZ);
289 | }
290 | }
291 | }
292 | if (teeth) {
293 | translate([0,-dp/2,0]) {
294 | for (y = [DLZ:DLZ*2:dp]) {
295 | translate([-baseW/2,y,0]) dent(DLZ,2,LBD,WOODZ);
296 | translate([baseW/2,y,0]) dent(DLZ,2,LBD,WOODZ);
297 | }
298 | }
299 | }
300 | }
301 | }
302 |
303 | module pixel() {
304 | difference() {
305 | cube([WS2812,WS2812,WS_H],center=true);
306 | translate([0,0,0.5]) cylinder(r=1.5,h=WS_H-1);
307 | }
308 | }
309 |
310 | module stack(number) {
311 | for (x = [1:1:number]) {
312 | translate([0,0,MATZ*(number-x)]) diffuser(x);
313 | }
314 | }
315 |
316 | module frame(front) {
317 | difference() {
318 | /* roundedBox([(WIDTH*4)-LBD,ht,MATZ],5);*/
319 | /* scale([0.95,0.8,2]) roundedBox([(WIDTH*4)-LBD,ht,MATZ],5);*/
320 | /* translate([0,-37,0]) face(1);*/
321 | roundedBox([(WIDTH*4)-LBD,pcbh*2,MATZ],5);
322 | translate([5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false);
323 | translate([WIDTH+5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false);
324 | /* translate([-5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false);*/
325 | translate([-WIDTH+5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false);
326 | }
327 | }
328 |
329 |
330 | module screw_holes(dia) {
331 | hloc = (5+3.2-LBD) / 2;
332 | translate([wd/2-hloc,ht/2-hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true);
333 | translate([-wd/2+hloc,-ht/2+hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true);
334 | translate([wd/2-hloc,-ht/2+hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true);
335 | translate([-wd/2+hloc,ht/2-hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true);
336 | }
337 |
338 | module node(cut) {
339 | if (cut) {
340 | translate([wd/2-2,0,0]) {
341 | translate([1,0,0]) cube([2,2.1-LBD,MATZ],center=true);
342 | translate([0,0,-MATZ]) cylinder(r=2.1-LBD/2,h=MATZ*2);
343 | translate([-0.5,0,0]) cube([1,4.2-LBD,MATZ],center=true);
344 | translate([-1,0,-MATZ]) cylinder(r=2.1-LBD/2,h=MATZ*2);
345 | }
346 | } else {
347 | translate([-wd/2-2,0,0]) {
348 | translate([1,0,0]) cube([2,2+LBD/2,MATZ],center=true);
349 | cylinder(r=2,h=MATZ);
350 | }
351 | }
352 | }
353 |
354 | module magnet(cut) {
355 | if (cut) {
356 | translate([wd/2-2+LBD,0,0]) {
357 | translate([1,0,0]) cube([2,2-LBD,MATZ],center=true);
358 | translate([0,0,-MATZ]) cylinder(r=2-LBD/2,h=MATZ*2);
359 | }
360 | } else {
361 | translate([-wd/2+2-LBD,0,0]) {
362 | translate([-1,0,0]) cube([2,2-LBD,MATZ],center=true);
363 | translate([0,0,-MATZ]) cylinder(r=2-LBD/2,h=MATZ*2);
364 | }
365 | }
366 | }
367 |
--------------------------------------------------------------------------------
/firmware/np-clock/np-clock.ino:
--------------------------------------------------------------------------------
1 | /*
2 | // GPL 3.0 License
3 |
4 | // Copyright (c) 2016 John Whittington www.jbrengineering.co.uk
5 |
6 | // This program is free software: you can redistribute it and/or modify
7 | // it under the terms of the GNU General Public License as published by
8 | // the Free Software Foundation, either version 3 of the License, or
9 | // (at your option) any later version.
10 |
11 | // This program is distributed in the hope that it will be useful,
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | // GNU General Public License for more details.
15 |
16 | // You should have received a copy of the GNU General Public License
17 | // along with this program. If not, see .
18 | */
19 |
20 | #include
21 | #include
22 | #include
23 | #include
24 |
25 | #include
26 |
27 | #include "state_machine.h"
28 | #include "serial.h"
29 |
30 | #define LED_PIN 6
31 | #define NUM_PIPES 4
32 | #define BRIGHTNESS 255
33 | #define MAIN_RGB CRGB::OrangeRed
34 | #define DEBOUNCE 200
35 |
36 | #define RAINBOW false
37 |
38 | CRGB gMainRGB = MAIN_RGB;
39 | uint8_t gHue = 0;
40 |
41 | int8_t gState = ST_CLOCK;
42 | int8_t gEvent = EV_NONE;
43 | bool gConnected = false;
44 |
45 | NixiePipe pipes = NixiePipe(NUM_PIPES);
46 |
47 | static Packet_t processInput(void) {
48 | Packet_t packet;
49 | unsigned long timeout;
50 | byte i = 0;
51 |
52 | packet.data.size = Serial.read();
53 | delay(1);
54 | packet.data.command = Serial.read();
55 |
56 | timeout = millis();
57 |
58 | if (packet.data.size < MAX_MESSAGE) {
59 | while ( (i < (packet.data.size)) && ( (millis() - timeout) < 10) ) {
60 | packet.data.message[i++] = Serial.read();
61 | timeout = millis();
62 | }
63 | }
64 |
65 | return packet;
66 | }
67 |
68 | static void getColourPacket(byte *pmessage, CRGB *prgb) {
69 | prgb->r = pmessage[0];
70 | prgb->g = pmessage[1];
71 | prgb->b = pmessage[2];
72 | }
73 |
74 | static void packValue(Packet_t *pres, uint32_t value) {
75 |
76 | for (int i = 0; i < 4; ++i) {
77 | pres->data.message[i] = (byte) ((value >> (8 * i)) & 0xFF);
78 | }
79 |
80 | pres->data.size = 4;
81 | }
82 |
83 | static void processPacket(Packet_t *ppack) {
84 | CRGB rgb;
85 | byte pipe = ppack->data.message[0];
86 | Packet_t res;
87 | static tmElements_t tm; // time struct holder to set time
88 |
89 | res.data.command = ppack->data.command;
90 | res.data.size = 1;
91 | res.data.message[0] = 0x00;
92 |
93 | switch (ppack->data.command) {
94 | case (NP_SET_CONNECT):
95 | if (ppack->data.size >= 2) {
96 | if ((ppack->data.message[0] == 0x4E /*N*/) && (ppack->data.message[1] == 0x50 /*P*/)) {
97 | res.data.command = ppack->data.command;
98 | res.data.size = 2;
99 | res.data.message[0] = VERSION_MINOR;
100 | res.data.message[1] = VERSION_MAJOR;
101 | gConnected = true;
102 | }
103 | }
104 | break;
105 | case (NP_SET_NUMBER):
106 | if (ppack->data.size >= 4) {
107 | pipes.setNumber((long) SERIAL_UINT32(ppack->data.message[0],ppack->data.message[1],ppack->data.message[2],ppack->data.message[3]));
108 | }
109 | break;
110 | case (NP_SET_PIPE_NUMBER):
111 | if (ppack->data.size >= 2) {
112 | pipes.setPipeNumber(pipe,ppack->data.message[1]);
113 | }
114 | break;
115 | case (NP_SET_COLOUR):
116 | if (ppack->data.size >= 3) {
117 | getColourPacket(&ppack->data.message[0],&rgb);
118 | pipes.setPipeColour(rgb);
119 | }
120 | break;
121 | case (NP_SET_PIPE_COLOUR):
122 | if (ppack->data.size >= 4) {
123 | getColourPacket(&ppack->data.message[1],&rgb);
124 | pipes.setPipeColour(pipe,rgb);
125 | }
126 | break;
127 | case (NP_SET_BRIGHTNESS):
128 | if (ppack->data.size >= 1) {
129 | pipes.setBrightness(ppack->data.message[0]);
130 | }
131 | break;
132 | case (NP_SET_CLEAR):
133 | if (ppack->data.message[0]) {
134 | pipes.clear();
135 | }
136 | break;
137 | case (NP_SET_CLEAR_PIPE):
138 | if (ppack->data.size >= 1) {
139 | pipes.clearPipe(pipe);
140 | }
141 | break;
142 | case (NP_SET_UNITS):
143 | if (ppack->data.size >= 1) {
144 | pipes.setNumberUnits(ppack->data.message[0]);
145 | }
146 | break;
147 | case (NP_SET_SHOW):
148 | if (ppack->data.message[0]) {
149 | pipes.write();
150 | pipes.show();
151 | }
152 | break;
153 | case (NP_GET_NUMBER):
154 | if (ppack->data.message[0]) {
155 | packValue(&res, pipes.getNumber());
156 | }
157 | break;
158 | case (NP_SET_TIME):
159 | if (ppack->data.size >= 1) {
160 | packValue(&res, pipes.getNumber());
161 | tm.Hour = ppack->data.message[0];
162 | tm.Minute = ppack->data.message[1];
163 | RTC.write(tm);
164 | }
165 | break;
166 | default:
167 | /* pipes.writeSolid(CRGB::Red);*/
168 | /* pipes.show();*/
169 | /* res.data.message[0] = 0x3F;*/
170 | break;
171 | }
172 |
173 | Serial.write(res.bytes,res.data.size+2);
174 | }
175 |
176 | static int8_t processTB0(void) {
177 | uint32_t hold = millis();
178 | int8_t event = EV_NONE;
179 |
180 | while (!digitalRead(PIPE_TB0) && (event != EV_TB0_HOLD) ) {
181 | if ((millis() - hold < 4000) && (millis() - hold > 200)) {
182 | event = EV_TB0_PRESS;
183 | } else if ((millis() - hold > 4000)) {
184 | event = EV_TB0_HOLD;
185 | }
186 | }
187 |
188 | return event;
189 | }
190 |
191 | static int8_t processTB1(void) {
192 | uint32_t hold = millis();
193 | int8_t event = EV_NONE;
194 |
195 | while (!digitalRead(PIPE_TB1) && (event != EV_TB1_HOLD) ) {
196 | if ((millis() - hold < 4000) && (millis() - hold > 200)) {
197 | event = EV_TB1_PRESS;
198 | } else if ((millis() - hold > 4000)) {
199 | event = EV_TB1_HOLD;
200 | }
201 | }
202 |
203 | return event;
204 | }
205 |
206 | static inline void writeTime(tmElements_t tm) {
207 | uint32_t time_val;
208 |
209 | // show seconds with more than 6 pipes
210 | if (NUM_PIPES > 5) {
211 | time_val = tm.Hour;
212 | time_val *= 10000;
213 | time_val += tm.Minute * 100;
214 | time_val += tm.Second;
215 | // otherwise just hours and minutes
216 | } else {
217 | time_val = tm.Hour * 100;
218 | time_val += tm.Minute;
219 | }
220 |
221 | pipes.setNumber(time_val);
222 | }
223 |
224 | static void changeTime(tmElements_t *ptm, int8_t dir) {
225 | // set seconds to zero as we're not able to move them with buttons
226 | ptm->Second = 0;
227 |
228 | for (int i = 0; i < abs(dir); ++i) {
229 | // UP
230 | if (dir >= 0) {
231 | if (ptm->Minute == 59) {
232 | ptm->Minute = 0;
233 | if (ptm->Hour == 23) {
234 | ptm->Hour = 0;
235 | } else {
236 | ++(ptm->Hour);
237 | }
238 | } else {
239 | ++(ptm->Minute);
240 | }
241 | // DOWN
242 | } else {
243 | if (ptm->Minute == 0) {
244 | ptm->Minute = 59;
245 | if (ptm->Hour == 0) {
246 | ptm->Hour = 23;
247 | } else {
248 | --(ptm->Hour);
249 | }
250 | } else {
251 | --(ptm->Minute);
252 | }
253 | }
254 | }
255 | }
256 |
257 |
258 | static int8_t setTime(tmElements_t &tm) {
259 | uint32_t entry = millis(); // entry time - reset each button press
260 | uint32_t hold = millis(); // hold timer to increase time change
261 | uint32_t debounce = 0; // debouce holder
262 | uint8_t dperiod = DEBOUNCE; // debouce period
263 |
264 | writeTime(tm);
265 | pipes.show();
266 |
267 | // run for 5s then save the time to RTC
268 | while (millis() - entry < 5000) {
269 |
270 | // Set pipes red to show setting clock
271 | pipes.writeSolid(CRGB::Red);
272 |
273 | if (!digitalRead(PIPE_TB0)) {
274 | if (millis() - hold > 1000) {
275 | dperiod = 10;
276 | } else {
277 | dperiod = DEBOUNCE;
278 | }
279 |
280 | // increment time up
281 | if ((millis() - debounce) > dperiod ) {
282 | entry = millis();
283 | changeTime(&tm, 1);
284 | debounce = entry;
285 | }
286 | } else if (!digitalRead(PIPE_TB1)) {
287 | if (millis() - hold > 1000) {
288 | dperiod = 10;
289 | } else {
290 | dperiod = DEBOUNCE;
291 | }
292 |
293 | // increment time down
294 | if ((millis() - debounce) > dperiod ) {
295 | entry = millis();
296 | changeTime(&tm, -1);
297 | debounce = entry;
298 | }
299 |
300 | } else {
301 | hold = millis(); // reset the hold button as hasn't been pressed
302 | }
303 |
304 | writeTime(tm);
305 | pipes.show();
306 | }
307 |
308 | // save to RTC
309 | RTC.write(tm);
310 |
311 | return ST_CLOCK;
312 |
313 | }
314 |
315 | static int8_t setAlarm(tmElements_t tm) {
316 | uint32_t entry = millis(); // entry time - reset each button press
317 | uint32_t hold = millis(); // hold timer to increase time change
318 | uint32_t debounce = 0; // debouce holder
319 | uint8_t dperiod = DEBOUNCE; // debouce period
320 | tmElements_t alarm;
321 |
322 | // start from current time + 10min
323 | alarm = tm;
324 | changeTime(&alarm,10);
325 | writeTime(alarm);
326 | pipes.show();
327 |
328 | // run for 5s then save the time to RTC
329 | while (millis() - entry < 5000) {
330 |
331 | // Set pipes red to show setting clock
332 | pipes.writeSolid(CRGB::Orange);
333 |
334 | if (!digitalRead(PIPE_TB0)) {
335 | if (millis() - hold > 1000) {
336 | dperiod = 10;
337 | } else {
338 | dperiod = DEBOUNCE;
339 | }
340 |
341 | if ((millis() - debounce) > dperiod ) {
342 | entry = millis();
343 | changeTime(&alarm,1);
344 | debounce = entry;
345 | }
346 | } else if (!digitalRead(PIPE_TB1)) {
347 | if (millis() - hold > 1000) {
348 | dperiod = 10;
349 | } else {
350 | dperiod = DEBOUNCE;
351 | }
352 |
353 | if ((millis() - debounce) > dperiod ) {
354 | entry = millis();
355 | changeTime(&alarm, -1);
356 | debounce = entry;
357 | }
358 |
359 | } else {
360 | hold = millis(); // reset the hold button as hasn't been pressed
361 | }
362 |
363 | writeTime(alarm);
364 | pipes.show();
365 | }
366 |
367 | // save to RTC
368 | RTC.setAlarm(ALM1_MATCH_HOURS, 0, alarm.Minute, alarm.Hour, 0);
369 |
370 | return ST_CLOCK;
371 |
372 | }
373 |
374 | static int8_t setColour(void) {
375 | uint32_t entry = millis(); // entry time - reset each button press
376 | uint32_t debouce = 0;
377 | uint8_t hue = 0;
378 | uint8_t sat = 255;
379 | CHSV hsv(hue,sat,255);
380 |
381 | while(millis() - entry < 5000) {
382 | if (!digitalRead(PIPE_TB0)) {
383 | if ((millis() - debouce) > 10) {
384 | entry = millis();
385 |
386 | hsv2rgb_rainbow(hsv,gMainRGB);
387 | pipes.writeSolid(gMainRGB);
388 | pipes.show();
389 | hsv.hue = ++hue;
390 |
391 | debouce = millis();
392 | }
393 | } else if (!digitalRead(PIPE_TB1)) {
394 | if ((millis() - debouce) > 10) {
395 | entry = millis();
396 |
397 | hsv2rgb_rainbow(hsv,gMainRGB);
398 | pipes.writeSolid(gMainRGB);
399 | pipes.show();
400 | hsv.sat = --sat;
401 |
402 | debouce = millis();
403 | }
404 | }
405 | }
406 |
407 | return ST_CLOCK;
408 | }
409 |
410 | static int8_t setCounter(void) {
411 | uint32_t entry = millis(); // entry time - reset each button press
412 | uint32_t hold = millis(); // hold timer to increase time change
413 | uint32_t debounce = 0; // debouce holder
414 | uint16_t dperiod = DEBOUNCE; // debouce period
415 | Packet_t packet;
416 |
417 | // blank the counter if it isn't running
418 | if (gState != ST_CUPDATE)
419 | pipes.setNumber(1);
420 |
421 | // Set pipes red to show setting clock
422 | pipes.writeSolid(CRGB::Green);
423 | pipes.show();
424 |
425 | // run for 30s then escape
426 | while ( (millis() - entry) < 30000) {
427 |
428 | if (!digitalRead(PIPE_TB0)) {
429 | if (millis() - hold > 1000) {
430 | if ((pipes.getNumber() % 30) == 0)
431 | dperiod = 500;
432 | else
433 | dperiod = 60;
434 | } else {
435 | dperiod = DEBOUNCE;
436 | }
437 |
438 | if ((millis() - debounce) > dperiod ) {
439 | entry = millis();
440 | // jump to 1/2 minutes if we hit minutes whilst held down
441 | if ( ((pipes.getNumber() % 30) == 0) && (millis() - hold > 1000) ) {
442 | pipes.setNumber(pipes.getNumber() + 30);
443 | // otherwise increment
444 | } else {
445 | ++pipes;
446 | }
447 | debounce = entry;
448 | }
449 |
450 | // show the changes
451 | pipes.write();
452 | pipes.show();
453 |
454 | } else if (!digitalRead(PIPE_TB1)) {
455 | if ((millis() - entry) > 1000 ) {
456 | // escape while statement
457 | entry = millis() + 30001;
458 | // hold until exit to prevent re-trigger
459 | while(!digitalRead(PIPE_TB1));
460 | }
461 | } else {
462 | hold = millis(); // reset the hold button as hasn't been pressed
463 | }
464 |
465 | // check for serial request in this mode too and exit if we get connect packet
466 | if (Serial.available()) {
467 | packet = processInput();
468 | processPacket(&packet);
469 | return ST_CLOCK;
470 | }
471 |
472 | }
473 |
474 | pipes.setPipeColour(gMainRGB);
475 | pipes.show();
476 |
477 | return ST_COUNTER;
478 | }
479 |
480 | static inline void startUpDisplay() {
481 | uint16_t entry = millis();
482 |
483 | for (int p = 0; p < NUM_PIPES; p++) {
484 | for (int i = 0; i < 10; i++) {
485 | pipes.setPipeNumber(p,i);
486 | entry = millis();
487 | while( (millis() - entry ) < 60) {
488 | pipes.writeFade(32);
489 | pipes.show();
490 | }
491 | }
492 | }
493 | for (int p = 0; p < NUM_PIPES; p++) {
494 | for (int i = 9; i >= 0; i--) {
495 | pipes.setPipeNumber(p,i);
496 | entry = millis();
497 | while( (millis() - entry ) < 60) {
498 | pipes.writeFade(32);
499 | pipes.show();
500 | }
501 | }
502 | }
503 |
504 | pipes.writeNumber(0);
505 | pipes.clear();
506 | pipes.show();
507 | }
508 |
509 | void setup() {
510 | Packet_t packet;
511 | uint16_t entry = millis();
512 |
513 | Serial.begin(BAUD);
514 | /* pipes.passSerial(Serial);*/
515 |
516 | pipes.begin();
517 | pipes.clear();
518 | pipes.setBrightness(BRIGHTNESS);
519 | pipes.setPipeColour(CRGB::White);
520 | pipes.writeNumber( (VERSION_MAJOR * 100) + VERSION_MINOR);
521 | pipes.show();
522 |
523 | pinMode(PIPE_TB0,INPUT); // TB0
524 | pinMode(PIPE_TB1,INPUT); // TB1
525 |
526 | // brief wait at boot for connection attempt as RTS resets on port open
527 | // show firmware version whilst we are at it
528 | while ( (millis() - entry) < 2500) {
529 | if (Serial.available()) {
530 | packet = processInput();
531 | processPacket(&packet);
532 | }
533 | }
534 |
535 | pipes.setPipeColour(gMainRGB);
536 | if (!gConnected) {
537 | startUpDisplay();
538 | }
539 | }
540 |
541 | static int8_t getEvent(tmElements_t *ptm) {
542 | static unsigned long tb0db = 0;
543 | unsigned long tb0int = millis();
544 | static unsigned long tb1db = 0;
545 | unsigned long tb1int = millis();
546 | int8_t event = EV_NONE;
547 |
548 | static bool alarmFlag = false;
549 | static bool counterFlag = false;
550 | static uint8_t counterSeconds = 0;
551 |
552 | // Buttons clear flags and set event
553 | if (!digitalRead(PIPE_TB0) & (tb0int - tb0db > DEBOUNCE)) {
554 | event = processTB0();
555 | tb0db = millis();
556 | alarmFlag = false; counterFlag = false;
557 | } else if (!digitalRead(PIPE_TB1) & (tb1int - tb1db > DEBOUNCE)) {
558 | event = processTB1();
559 | tb1db = millis();
560 | alarmFlag = false; counterFlag = false;
561 | }
562 |
563 | // RTC chip not present or failing to operate
564 | if (RTC.read(*ptm) != 0) {
565 | event = EV_RTCFAIL;
566 | }
567 |
568 | // Counter has finished. Set flag for 30s to flash display for this period
569 | if ((gState == ST_COUNTER) && (pipes.getNumber() == 0)) {
570 | event = EV_COUNTEND;
571 | counterFlag = true;
572 | counterSeconds = ptm->Second; // set seconds holder to current seconds for relative 30s timer
573 | } else if (counterFlag) {
574 | if (ptm->Second % 2 == 0)
575 | event = EV_COUNTEND;
576 | // we've flashed for 30s, clear the flag
577 | if (ptm->Second == ( (counterSeconds < 30) ? (counterSeconds + 30) : (counterSeconds - 29) ) ) {
578 | counterFlag = false;
579 | }
580 | }
581 |
582 | // Alarm has sounded. Set flag for 60s to flash display for this period
583 | if (RTC.alarm(ALARM_1) || alarmFlag || RTC.alarm(ALARM_2)) {
584 | Serial.println("ALARM!");
585 | alarmFlag = true;
586 | // flash off every second
587 | if (ptm->Second % 2 == 0)
588 | event = EV_ALARM;
589 | // disable alarm flag after 1 minute
590 | if (ptm->Second == 59) {
591 | alarmFlag = false;
592 | }
593 | }
594 |
595 | return event;
596 | }
597 |
598 |
599 | void loop() {
600 | static tmElements_t tm; // time struct holder
601 | static CEveryNSeconds everySecond(1);
602 |
603 | // Clock mode unless in serial mode
604 | if (!gConnected) {
605 | gEvent = getEvent(&tm);
606 | for (uint8_t i = 0; i < TRANS_COUNT; i++) {
607 | if ((gState == trans[i].st) || (ST_ANY == trans[i].st)) {
608 | if ((gEvent == trans[i].ev) || (EV_ANY == trans[i].ev)) {
609 | gState = trans[i].nst;
610 | break;
611 | }
612 | }
613 | }
614 |
615 | switch (gState) {
616 | case ST_CLOCK:
617 | if (everySecond) {
618 | Serial.print(tm.Hour);
619 | Serial.print(":");
620 | Serial.println(tm.Minute);
621 | pipes.setPipeColour(gMainRGB);
622 |
623 | // flash off every second in alarm event
624 | /* if (gEvent == EV_ALARM)*/
625 | /* pipes.setPipeColour(CRGB::Black);*/
626 | /* // flash every second whilst counter end*/
627 | /* if (gEvent == EV_COUNTEND)*/
628 | /* pipes.setPipeColour(CRGB::Red);*/
629 |
630 | writeTime(tm);
631 | }
632 | break;
633 | case ST_SETTIME:
634 | setTime(tm);
635 | break;
636 | case ST_SETCOLOUR:
637 | setColour();
638 | break;
639 | case ST_SETALARM:
640 | setAlarm(tm);
641 | break;
642 | case (ST_SETCOUNT): case (ST_CUPDATE):
643 | setCounter();
644 | break;
645 | case ST_COUNTER:
646 | if (everySecond) {
647 | if (pipes.getNumber() <= 10)
648 | pipes.setPipeColour(CRGB::Red);
649 | --pipes;
650 | }
651 | break;
652 | case ST_RTCFAIL:
653 | // rtc isn't reading
654 | Serial.println("RTC read error! Please check the circuitry.");
655 | Serial.println();
656 | pipes.setNumber(9999);
657 | pipes.writeSolid(CRGB::Red); // all red
658 | pipes.show();
659 | break;
660 | case ST_FLASH:
661 | if (everySecond) {
662 | if (gEvent == EV_ALARM)
663 | pipes.writeSolid(CRGB::Black);
664 | else if (gEvent == EV_COUNTEND)
665 | pipes.writeSolid(CRGB::Red);
666 | pipes.show();
667 | }
668 | break;
669 | }
670 |
671 | EVERY_N_MILLISECONDS( 100 ) { gHue++; } // slowly cycle the "base color" through the rainbow
672 |
673 | pipes.writeFade(4);
674 |
675 | // rainbow at midday and midnight in clock state
676 | if (gState == ST_CLOCK) {
677 | if ( ((tm.Hour == 0) || (tm.Hour == 12)) && (tm.Minute == 0) )
678 | pipes.writeRainbow(gHue);
679 | // always display rainbow if rainbow flag
680 | else if (RAINBOW)
681 | pipes.writeRainbow(gHue);
682 | }
683 |
684 | pipes.show();
685 |
686 | // in serial mode, just act on packets
687 | } else {
688 | Packet_t packet;
689 | if (Serial.available()) {
690 | packet = processInput();
691 | processPacket(&packet);
692 | }
693 | }
694 |
695 | }
696 |
--------------------------------------------------------------------------------
/pcb/kicad/WS2812B.pretty/jbr_logo_24.kicad_mod:
--------------------------------------------------------------------------------
1 | (module LOGO (layer F.Cu)
2 | (at 0 0)
3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide
4 | (effects (font (thickness 0.3)))
5 | )
6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide
7 | (effects (font (thickness 0.3)))
8 | )
9 | (fp_poly (pts (xy -9.329487 -2.608010) (xy -9.154586 -2.544034) (xy -9.080583 -2.455333) (xy -9.066253 -2.371449) (xy -9.121166 -2.425912) (xy -9.144000 -2.455333) (xy -9.209337 -2.522911) (xy -9.189332 -2.444544)
10 | (xy -9.084060 -2.220501) (xy -9.067462 -2.187342) (xy -8.894960 -1.967876) (xy -8.692284 -1.908744) (xy -8.481431 -2.013173) (xy -8.408411 -2.090628) (xy -8.266075 -2.238914) (xy -8.142656 -2.267728)
11 | (xy -8.007913 -2.219888) (xy -7.850827 -2.100847) (xy -7.844261 -1.987376) (xy -7.941328 -1.893008) (xy -8.006301 -1.895318) (xy -8.093504 -1.869266) (xy -8.104800 -1.779050) (xy -8.070450 -1.664348)
12 | (xy -8.035383 -1.655913) (xy -7.972457 -1.616468) (xy -7.908556 -1.472777) (xy -7.866969 -1.288182) (xy -7.862351 -1.185333) (xy -7.851659 -1.116014) (xy -7.822147 -1.164166) (xy -7.714191 -1.256127)
13 | (xy -7.573795 -1.256978) (xy -7.513932 -1.206500) (xy -7.496468 -1.208382) (xy -7.504219 -1.248833) (xy -7.482822 -1.345764) (xy -7.454934 -1.354666) (xy -7.314740 -1.382484) (xy -7.252418 -1.403567)
14 | (xy -7.124438 -1.378483) (xy -7.017978 -1.251336) (xy -6.974019 -1.088275) (xy -6.998635 -0.993937) (xy -7.063410 -0.971191) (xy -7.121111 -1.101520) (xy -7.162117 -1.234249) (xy -7.180136 -1.216265)
15 | (xy -7.188227 -1.054100) (xy -7.223893 -0.838236) (xy -7.292324 -0.700209) (xy -7.377172 -0.543994) (xy -7.410248 -0.401699) (xy -7.397014 -0.251050) (xy -7.279467 -0.199118) (xy -7.208758 -0.195650)
16 | (xy -6.923271 -0.186541) (xy -6.768297 -0.154411) (xy -6.705013 -0.076462) (xy -6.694599 0.070102) (xy -6.695351 0.105834) (xy -6.711134 0.258123) (xy -6.741406 0.279096) (xy -6.747933 0.265587)
17 | (xy -6.802414 0.194594) (xy -6.861796 0.260142) (xy -6.941067 0.327554) (xy -7.058398 0.263332) (xy -7.063214 0.259356) (xy -7.170060 0.189025) (xy -7.214154 0.248747) (xy -7.228416 0.351301)
18 | (xy -7.306984 0.457302) (xy -7.408333 0.514683) (xy -7.507916 0.567965) (xy -7.493000 0.587377) (xy -7.399029 0.664441) (xy -7.296255 0.839093) (xy -7.217981 1.044909) (xy -7.195370 1.181046)
19 | (xy -7.181926 1.267304) (xy -7.123728 1.200998) (xy -7.115307 1.187785) (xy -7.024014 1.102941) (xy -6.969480 1.147770) (xy -6.972159 1.283397) (xy -7.008820 1.390178) (xy -7.087434 1.522549)
20 | (xy -7.194296 1.554696) (xy -7.393911 1.506296) (xy -7.622943 1.460149) (xy -7.797981 1.507054) (xy -7.904395 1.576260) (xy -8.045429 1.716055) (xy -8.087482 1.836688) (xy -8.086047 1.841500)
21 | (xy -8.095969 1.937383) (xy -8.124449 1.947334) (xy -8.209015 1.877962) (xy -8.243930 1.799167) (xy -8.273410 1.718552) (xy -8.270085 1.800597) (xy -8.267835 1.820334) (xy -8.194579 1.954082)
22 | (xy -8.069153 1.970938) (xy -7.898116 2.012294) (xy -7.831153 2.140636) (xy -7.890598 2.294650) (xy -7.936029 2.336398) (xy -8.077218 2.429397) (xy -8.182479 2.426491) (xy -8.314434 2.314661)
23 | (xy -8.382000 2.243667) (xy -8.551694 2.098878) (xy -8.695971 2.032458) (xy -8.704550 2.032000) (xy -8.867245 2.099469) (xy -9.031693 2.259123) (xy -9.143094 2.446829) (xy -9.159490 2.564430)
24 | (xy -9.185489 2.675808) (xy -9.342652 2.709310) (xy -9.349458 2.709334) (xy -9.523033 2.667847) (xy -9.566037 2.561167) (xy -9.552054 2.463123) (xy -9.493273 2.523782) (xy -9.482666 2.540000)
25 | (xy -9.417053 2.617835) (xy -9.399570 2.537814) (xy -9.399296 2.518834) (xy -9.457485 2.393641) (xy -9.525000 2.370667) (xy -9.637315 2.305819) (xy -9.652000 2.249372) (xy -9.722513 2.128649)
26 | (xy -9.821333 2.074334) (xy -9.958225 1.996198) (xy -9.990666 1.936631) (xy -9.935286 1.895277) (xy -9.884833 1.914557) (xy -9.856051 1.906887) (xy -9.930182 1.804099) (xy -9.938482 1.794550)
27 | (xy -10.084584 1.679686) (xy -10.203178 1.666689) (xy -10.244666 1.745660) (xy -10.189976 1.751437) (xy -10.160000 1.735667) (xy -10.088271 1.755772) (xy -10.075333 1.820334) (xy -10.117891 1.910390)
28 | (xy -10.169071 1.899394) (xy -10.227906 1.905690) (xy -10.210207 2.007192) (xy -10.220863 2.202888) (xy -10.346453 2.351259) (xy -10.532605 2.408006) (xy -10.660957 2.374436) (xy -10.784021 2.305849)
29 | (xy -10.825664 2.239194) (xy -10.797973 2.113706) (xy -10.743767 1.958199) (xy -10.726638 1.862667) (xy -10.485298 1.862667) (xy -10.471993 1.982862) (xy -10.442593 1.968500) (xy -10.431411 1.795158)
30 | (xy -10.442593 1.756834) (xy -10.473496 1.746197) (xy -10.485298 1.862667) (xy -10.726638 1.862667) (xy -10.695970 1.691631) (xy -10.716302 1.651757) (xy -9.777880 1.651757) (xy -9.761738 1.775831)
31 | (xy -9.759424 1.784787) (xy -9.709213 1.898276) (xy -9.669969 1.874242) (xy -9.671380 1.862667) (xy -9.531047 1.862667) (xy -9.503130 2.000355) (xy -9.464524 2.032000) (xy -9.410432 1.960937)
32 | (xy -9.401325 1.888945) (xy -9.314643 1.888945) (xy -9.255125 1.977320) (xy -9.131785 2.011529) (xy -9.021172 1.916608) (xy -8.987694 1.824457) (xy -8.995235 1.755395) (xy -8.849261 1.755395)
33 | (xy -8.835951 1.820334) (xy -8.775856 1.931735) (xy -8.753941 1.947334) (xy -8.724344 1.878196) (xy -8.723357 1.862667) (xy -8.515047 1.862667) (xy -8.487130 2.000355) (xy -8.448524 2.032000)
34 | (xy -8.394432 1.960937) (xy -8.382000 1.862667) (xy -8.409917 1.724978) (xy -8.448524 1.693334) (xy -8.502616 1.764396) (xy -8.515047 1.862667) (xy -8.723357 1.862667) (xy -8.720666 1.820334)
35 | (xy -8.764975 1.707641) (xy -8.802676 1.693334) (xy -8.849261 1.755395) (xy -8.995235 1.755395) (xy -8.998925 1.721610) (xy -9.052575 1.731490) (xy -9.103245 1.842057) (xy -9.086795 1.889684)
36 | (xy -9.089457 1.926581) (xy -9.170081 1.873467) (xy -9.287623 1.824961) (xy -9.314643 1.888945) (xy -9.401325 1.888945) (xy -9.398000 1.862667) (xy -9.425917 1.724978) (xy -9.464524 1.693334)
37 | (xy -9.518616 1.764396) (xy -9.531047 1.862667) (xy -9.671380 1.862667) (xy -9.688666 1.720875) (xy -9.722404 1.673729) (xy -9.777880 1.651757) (xy -10.716302 1.651757) (xy -10.778269 1.530237)
38 | (xy -10.994210 1.470526) (xy -11.223023 1.486796) (xy -11.454440 1.510476) (xy -11.573813 1.479627) (xy -11.633899 1.378640) (xy -11.638773 1.363784) (xy -11.662009 1.192826) (xy -11.629897 1.078010)
39 | (xy -11.566723 1.058696) (xy -11.506012 1.148620) (xy -11.455703 1.261914) (xy -11.439129 1.212978) (xy -11.435951 1.138767) (xy -11.426298 1.100667) (xy -11.162631 1.100667) (xy -11.149326 1.220862)
40 | (xy -11.119927 1.206500) (xy -11.108744 1.033158) (xy -11.119927 0.994834) (xy -11.150829 0.984197) (xy -11.162631 1.100667) (xy -11.426298 1.100667) (xy -11.394120 0.973667) (xy -10.922000 0.973667)
41 | (xy -10.879666 1.016000) (xy -10.837333 0.973667) (xy -10.879666 0.931334) (xy -10.922000 0.973667) (xy -11.394120 0.973667) (xy -11.388140 0.950069) (xy -11.336923 0.872123) (xy -11.290101 0.739941)
42 | (xy -11.310807 0.570320) (xy -11.381642 0.444493) (xy -11.433048 0.423334) (xy -11.460470 0.381000) (xy -11.159494 0.381000) (xy -11.150343 0.525596) (xy -11.123838 0.538327) (xy -11.120464 0.530778)
43 | (xy -11.103715 0.362699) (xy -11.117327 0.276778) (xy -11.144277 0.242251) (xy -11.158936 0.354708) (xy -11.159494 0.381000) (xy -11.460470 0.381000) (xy -11.475201 0.358259) (xy -11.461689 0.275167)
44 | (xy -11.439815 0.180958) (xy -11.491653 0.236554) (xy -11.500227 0.248556) (xy -11.586002 0.326688) (xy -11.694205 0.281375) (xy -11.736133 0.248556) (xy -11.830422 0.188291) (xy -11.822855 0.231864)
45 | (xy -11.813898 0.301846) (xy -11.891269 0.286305) (xy -12.006345 0.172858) (xy -12.005041 0.012410) (xy -11.896207 -0.128064) (xy -11.832166 -0.160936) (xy -11.641510 -0.201508) (xy -11.537801 -0.192238)
46 | (xy -11.433039 -0.230989) (xy -11.357858 -0.338666) (xy -11.162631 -0.338666) (xy -11.149326 -0.218471) (xy -11.119927 -0.232833) (xy -11.108744 -0.406175) (xy -11.119927 -0.444500) (xy -11.150829 -0.455136)
47 | (xy -11.162631 -0.338666) (xy -11.357858 -0.338666) (xy -11.332986 -0.374288) (xy -11.281148 -0.533988) (xy -11.318135 -0.665405) (xy -11.463618 -0.837569) (xy -11.465606 -0.839645) (xy -11.612121 -1.014421)
48 | (xy -11.624884 -1.061769) (xy -11.500418 -1.061769) (xy -11.461370 -0.913002) (xy -11.402065 -0.846666) (xy -11.391852 -0.918314) (xy -11.413418 -1.079500) (xy -11.454841 -1.210869) (xy -11.493304 -1.206635)
49 | (xy -11.494330 -1.203707) (xy -11.500418 -1.061769) (xy -11.624884 -1.061769) (xy -11.646894 -1.143421) (xy -11.601765 -1.265456) (xy -11.531680 -1.366603) (xy -11.436407 -1.403584) (xy -11.274671 -1.376106)
50 | (xy -11.005194 -1.283877) (xy -10.943166 -1.260790) (xy -10.795426 -1.155449) (xy -10.752666 -1.054381) (xy -10.767007 -0.967900) (xy -10.836322 -1.004948) (xy -10.896087 -1.062658) (xy -11.009177 -1.157967)
51 | (xy -11.072924 -1.122800) (xy -11.109491 -1.047539) (xy -11.154752 -0.960491) (xy -11.152102 -1.026841) (xy -11.140141 -1.091696) (xy -11.130314 -1.224294) (xy -11.185655 -1.209389) (xy -11.191979 -1.203221)
52 | (xy -11.243574 -1.055167) (xy -11.228574 -0.969822) (xy -11.156808 -0.876497) (xy -11.055536 -0.925909) (xy -10.934507 -0.978524) (xy -10.879667 -0.931333) (xy -10.789996 -0.885510) (xy -10.702795 -0.937589)
53 | (xy -10.606237 -0.978865) (xy -10.578620 -0.912456) (xy -10.615232 -0.783151) (xy -10.711357 -0.635738) (xy -10.737503 -0.607830) (xy -10.839590 -0.406872) (xy -10.883806 -0.105009) (xy -10.870494 0.239650)
54 | (xy -10.799997 0.568999) (xy -10.729562 0.736629) (xy -10.635851 0.929746) (xy -10.589048 1.062581) (xy -10.596026 1.103952) (xy -10.663655 1.022678) (xy -10.668000 1.016000) (xy -10.728322 0.954217)
55 | (xy -10.750889 1.040412) (xy -10.752666 1.100667) (xy -10.766569 1.236675) (xy -10.813325 1.219804) (xy -10.837333 1.185334) (xy -10.905302 1.120243) (xy -10.920703 1.159170) (xy -10.871903 1.284340)
56 | (xy -10.769898 1.315912) (xy -10.708646 1.267270) (xy -10.615402 1.223840) (xy -10.546839 1.265154) (xy -10.429935 1.317161) (xy -10.392389 1.304834) (xy -10.295573 1.310846) (xy -10.140342 1.389929)
57 | (xy -9.932581 1.486572) (xy -9.647816 1.573660) (xy -9.527457 1.599834) (xy -9.212370 1.635058) (xy -8.948075 1.593380) (xy -8.759456 1.522481) (xy -8.532101 1.411867) (xy -8.376408 1.311926)
58 | (xy -8.346282 1.280705) (xy -8.233073 1.231095) (xy -8.153733 1.245753) (xy -8.060433 1.255493) (xy -8.072141 1.207217) (xy -8.070507 1.152994) (xy -7.958666 1.152994) (xy -7.915693 1.236263)
59 | (xy -7.872619 1.226813) (xy -7.828463 1.119979) (xy -7.844839 1.073650) (xy -7.834271 1.049330) (xy -7.729525 1.125996) (xy -7.719220 1.134956) (xy -7.588709 1.234815) (xy -7.568770 1.227667)
60 | (xy -7.450666 1.227667) (xy -7.408333 1.270000) (xy -7.366000 1.227667) (xy -7.408333 1.185334) (xy -7.450666 1.227667) (xy -7.568770 1.227667) (xy -7.539911 1.217322) (xy -7.535333 1.165181)
61 | (xy -7.605153 1.029368) (xy -7.633333 1.016000) (xy -7.450666 1.016000) (xy -7.419688 1.085690) (xy -7.394222 1.072445) (xy -7.384089 0.971965) (xy -7.394222 0.959556) (xy -7.444556 0.971178)
62 | (xy -7.450666 1.016000) (xy -7.633333 1.016000) (xy -7.756971 0.957350) (xy -7.881640 0.978389) (xy -7.951619 1.095721) (xy -7.958666 1.152994) (xy -8.070507 1.152994) (xy -8.068549 1.088029)
63 | (xy -8.001156 0.902577) (xy -7.902647 0.718725) (xy -7.805711 0.604338) (xy -7.776401 0.593202) (xy -7.739836 0.518409) (xy -7.738423 0.326276) (xy -7.745853 0.254000) (xy -7.535333 0.254000)
64 | (xy -7.504355 0.323690) (xy -7.478889 0.310445) (xy -7.468756 0.209965) (xy -7.478889 0.197556) (xy -7.529223 0.209178) (xy -7.535333 0.254000) (xy -7.745853 0.254000) (xy -7.765434 0.063540)
65 | (xy -7.814144 -0.223066) (xy -7.842055 -0.338666) (xy -7.606631 -0.338666) (xy -7.593326 -0.218471) (xy -7.563927 -0.232833) (xy -7.552744 -0.406175) (xy -7.563927 -0.444500) (xy -7.594829 -0.455136)
66 | (xy -7.606631 -0.338666) (xy -7.842055 -0.338666) (xy -7.877825 -0.486808) (xy -7.949750 -0.680951) (xy -7.963310 -0.705323) (xy -8.060420 -0.914651) (xy -8.054840 -0.936330) (xy -7.874000 -0.936330)
67 | (xy -7.812539 -0.850112) (xy -7.789333 -0.846666) (xy -7.706868 -0.875553) (xy -7.704666 -0.884003) (xy -7.747613 -0.936330) (xy -7.535333 -0.936330) (xy -7.473873 -0.850112) (xy -7.450666 -0.846666)
68 | (xy -7.368201 -0.875553) (xy -7.366000 -0.884003) (xy -7.425329 -0.956289) (xy -7.450666 -0.973666) (xy -7.528685 -0.966954) (xy -7.535333 -0.936330) (xy -7.747613 -0.936330) (xy -7.763995 -0.956289)
69 | (xy -7.789333 -0.973666) (xy -7.867352 -0.966954) (xy -7.874000 -0.936330) (xy -8.054840 -0.936330) (xy -8.032653 -1.022516) (xy -8.029732 -1.024406) (xy -7.983133 -1.125208) (xy -8.042260 -1.233750)
70 | (xy -8.137993 -1.270000) (xy -8.184234 -1.217994) (xy -8.171062 -1.186513) (xy -8.210004 -1.170405) (xy -8.364728 -1.216801) (xy -8.525899 -1.282782) (xy -9.032575 -1.433577) (xy -9.535854 -1.449251)
71 | (xy -9.989081 -1.328633) (xy -10.007577 -1.319970) (xy -10.228048 -1.239667) (xy -10.393885 -1.223136) (xy -10.422825 -1.233121) (xy -10.485156 -1.247369) (xy -10.464418 -1.198415) (xy -10.459177 -1.117583)
72 | (xy -10.548520 -1.105009) (xy -10.674122 -1.156202) (xy -10.746411 -1.220129) (xy -10.801437 -1.338640) (xy -10.748805 -1.399387) (xy -10.688591 -1.530797) (xy -10.711784 -1.693333) (xy -10.583333 -1.693333)
73 | (xy -10.552355 -1.623643) (xy -10.526889 -1.636889) (xy -10.521197 -1.693333) (xy -10.244666 -1.693333) (xy -10.213688 -1.623643) (xy -10.188222 -1.636889) (xy -10.185710 -1.661800) (xy -9.566037 -1.661800)
74 | (xy -9.531257 -1.636203) (xy -9.525552 -1.642992) (xy -8.495947 -1.642992) (xy -8.458740 -1.608666) (xy -8.396367 -1.679649) (xy -8.382000 -1.778000) (xy -8.297333 -1.778000) (xy -8.266355 -1.708310)
75 | (xy -8.240889 -1.721555) (xy -8.230756 -1.822035) (xy -8.240889 -1.834444) (xy -8.291223 -1.822822) (xy -8.297333 -1.778000) (xy -8.382000 -1.778000) (xy -8.395657 -1.915822) (xy -8.414458 -1.947333)
76 | (xy -8.458933 -1.877523) (xy -8.491199 -1.778000) (xy -8.495947 -1.642992) (xy -9.525552 -1.642992) (xy -9.487823 -1.687889) (xy -9.382777 -1.761918) (xy -9.298619 -1.722370) (xy -9.148003 -1.662103)
77 | (xy -8.955295 -1.645427) (xy -8.789685 -1.670750) (xy -8.720356 -1.735666) (xy -8.779946 -1.817934) (xy -8.798278 -1.820333) (xy -8.927414 -1.872891) (xy -8.938654 -1.883099) (xy -9.045344 -1.889252)
78 | (xy -9.128812 -1.840765) (xy -9.239269 -1.778678) (xy -9.293002 -1.845034) (xy -9.353526 -1.910321) (xy -9.448567 -1.855833) (xy -9.550228 -1.723810) (xy -9.566037 -1.661800) (xy -10.185710 -1.661800)
79 | (xy -10.178089 -1.737368) (xy -10.188222 -1.749778) (xy -10.238556 -1.738155) (xy -10.244666 -1.693333) (xy -10.521197 -1.693333) (xy -10.516756 -1.737368) (xy -10.526889 -1.749778) (xy -10.577223 -1.738155)
80 | (xy -10.583333 -1.693333) (xy -10.711784 -1.693333) (xy -10.722929 -1.771427) (xy -10.770500 -1.905000) (xy -10.583333 -1.905000) (xy -10.541000 -1.862666) (xy -10.414000 -1.862666) (xy -10.383022 -1.792976)
81 | (xy -10.357555 -1.806222) (xy -10.347594 -1.905000) (xy -10.244666 -1.905000) (xy -10.202333 -1.862666) (xy -10.160000 -1.905000) (xy -10.202333 -1.947333) (xy -10.244666 -1.905000) (xy -10.347594 -1.905000)
82 | (xy -10.347422 -1.906702) (xy -10.357555 -1.919111) (xy -10.407890 -1.907489) (xy -10.414000 -1.862666) (xy -10.541000 -1.862666) (xy -10.498666 -1.905000) (xy -10.541000 -1.947333) (xy -10.583333 -1.905000)
83 | (xy -10.770500 -1.905000) (xy -10.792415 -1.966532) (xy -10.793283 -2.099124) (xy -10.648756 -2.206123) (xy -10.636460 -2.211821) (xy -10.467247 -2.264289) (xy -10.342069 -2.208032) (xy -10.249974 -2.107955)
84 | (xy -10.125997 -1.923922) (xy -10.071466 -1.778000) (xy -10.049137 -1.707285) (xy -10.019260 -1.756833) (xy -9.923948 -1.856746) (xy -9.822031 -1.807613) (xy -9.797360 -1.756833) (xy -9.777150 -1.732277)
85 | (xy -9.783225 -1.799166) (xy -9.767038 -1.923798) (xy -9.729741 -1.947333) (xy -9.670689 -2.022186) (xy -9.614213 -2.209552) (xy -9.599125 -2.290510) (xy -9.598909 -2.291512) (xy -9.461908 -2.291512)
86 | (xy -9.450327 -2.286000) (xy -9.373061 -2.345603) (xy -9.355666 -2.370666) (xy -9.334092 -2.449821) (xy -9.345673 -2.455333) (xy -9.422938 -2.395730) (xy -9.440333 -2.370666) (xy -9.461908 -2.291512)
87 | (xy -9.598909 -2.291512) (xy -9.551965 -2.508732) (xy -9.480699 -2.600984) (xy -9.348880 -2.610182) (xy -9.329487 -2.608010) )(layer F.SilkS) (width 0.010000)
88 | )
89 | (fp_poly (pts (xy -1.363450 0.271332) (xy -1.048534 0.442049) (xy -0.831965 0.704804) (xy -0.774600 0.860970) (xy -0.819535 0.900582) (xy -0.947375 0.824831) (xy -1.089811 0.688954) (xy -1.382192 0.474264)
90 | (xy -1.689933 0.408041) (xy -1.982070 0.475876) (xy -2.227643 0.663361) (xy -2.395688 0.956087) (xy -2.455333 1.324396) (xy -2.405008 1.756188) (xy -2.250900 2.056220) (xy -1.988310 2.230050)
91 | (xy -1.644592 2.283307) (xy -1.324918 2.223277) (xy -1.078767 2.058591) (xy -0.944829 1.820401) (xy -0.931333 1.709043) (xy -0.955127 1.588936) (xy -1.057245 1.535658) (xy -1.270000 1.524000)
92 | (xy -1.482074 1.505222) (xy -1.600031 1.458312) (xy -1.608666 1.439334) (xy -1.532115 1.392967) (xy -1.334642 1.362214) (xy -1.143000 1.354667) (xy -0.677333 1.354667) (xy -0.677333 1.905000)
93 | (xy -0.689296 2.192582) (xy -0.720985 2.389476) (xy -0.762000 2.455334) (xy -0.829078 2.383881) (xy -0.846666 2.272878) (xy -0.857536 2.148265) (xy -0.918923 2.159708) (xy -1.004333 2.233109)
94 | (xy -1.290299 2.397895) (xy -1.651568 2.477291) (xy -1.882849 2.473167) (xy -2.198613 2.357247) (xy -2.441903 2.120718) (xy -2.603720 1.799959) (xy -2.675065 1.431348) (xy -2.646938 1.051262)
95 | (xy -2.510341 0.696080) (xy -2.369342 0.506582) (xy -2.069723 0.297684) (xy -1.719135 0.221239) (xy -1.363450 0.271332) )(layer F.SilkS) (width 0.010000)
96 | )
97 | (fp_poly (pts (xy 11.404498 0.302474) (xy 11.705248 0.504929) (xy 11.797400 0.612448) (xy 11.912264 0.805433) (xy 11.909490 0.891981) (xy 11.809451 0.863764) (xy 11.632524 0.712457) (xy 11.610189 0.688954)
98 | (xy 11.395912 0.503940) (xy 11.171932 0.431889) (xy 11.036198 0.426026) (xy 10.672862 0.493517) (xy 10.420282 0.689082) (xy 10.278440 1.012742) (xy 10.244667 1.354667) (xy 10.298737 1.776647)
99 | (xy 10.462408 2.070228) (xy 10.737868 2.237917) (xy 11.055408 2.283307) (xy 11.375082 2.223277) (xy 11.621233 2.058591) (xy 11.755171 1.820401) (xy 11.768667 1.709043) (xy 11.744873 1.588936)
100 | (xy 11.642755 1.535658) (xy 11.430000 1.524000) (xy 11.217926 1.505222) (xy 11.099969 1.458312) (xy 11.091334 1.439334) (xy 11.167885 1.392967) (xy 11.365358 1.362214) (xy 11.557000 1.354667)
101 | (xy 12.022667 1.354667) (xy 12.022667 1.857670) (xy 12.009439 2.134981) (xy 11.975153 2.338701) (xy 11.938000 2.413000) (xy 11.872862 2.385467) (xy 11.853334 2.277875) (xy 11.842528 2.149546)
102 | (xy 11.781343 2.159588) (xy 11.695667 2.233109) (xy 11.409701 2.397895) (xy 11.048432 2.477291) (xy 10.817151 2.473167) (xy 10.510723 2.355771) (xy 10.258637 2.110327) (xy 10.082582 1.774941)
103 | (xy 10.004247 1.387722) (xy 10.023925 1.079500) (xy 10.164551 0.716877) (xy 10.408641 0.448457) (xy 10.720475 0.283644) (xy 11.064334 0.231848) (xy 11.404498 0.302474) )(layer F.SilkS) (width 0.010000)
104 | )
105 | (fp_poly (pts (xy -5.222881 0.262881) (xy -4.962429 0.287464) (xy -4.834440 0.324661) (xy -4.826000 0.338667) (xy -4.904792 0.381328) (xy -5.118078 0.411063) (xy -5.431222 0.423254) (xy -5.461000 0.423334)
106 | (xy -6.096000 0.423334) (xy -6.096000 1.270000) (xy -5.503333 1.270000) (xy -5.199309 1.281187) (xy -4.989232 1.311171) (xy -4.910667 1.354585) (xy -4.910666 1.354667) (xy -4.988976 1.398099)
107 | (xy -5.198862 1.428110) (xy -5.502758 1.439333) (xy -5.503333 1.439334) (xy -6.096000 1.439334) (xy -6.096000 2.286000) (xy -5.461000 2.286000) (xy -5.141040 2.296506) (xy -4.918026 2.324944)
108 | (xy -4.826594 2.366696) (xy -4.826000 2.370667) (xy -4.905926 2.411236) (xy -5.127175 2.440175) (xy -5.461950 2.454396) (xy -5.588000 2.455334) (xy -6.350000 2.455334) (xy -6.350000 0.254000)
109 | (xy -5.588000 0.254000) (xy -5.222881 0.262881) )(layer F.SilkS) (width 0.010000)
110 | )
111 | (fp_poly (pts (xy -2.951048 0.280361) (xy -2.915518 0.375843) (xy -2.893452 0.565047) (xy -2.882092 0.872573) (xy -2.878679 1.323021) (xy -2.878666 1.360875) (xy -2.883965 1.861263) (xy -2.907649 2.203531)
112 | (xy -2.961401 2.390103) (xy -3.056905 2.423405) (xy -3.205843 2.305862) (xy -3.419899 2.039898) (xy -3.710754 1.627940) (xy -3.767444 1.545364) (xy -4.360333 0.679961) (xy -4.384364 1.567647)
113 | (xy -4.399917 1.977172) (xy -4.422966 2.243547) (xy -4.457875 2.392925) (xy -4.509011 2.451461) (xy -4.532531 2.455334) (xy -4.584411 2.428907) (xy -4.619984 2.333188) (xy -4.642028 2.143519)
114 | (xy -4.653326 1.835243) (xy -4.656659 1.383703) (xy -4.656666 1.354667) (xy -4.653748 0.895338) (xy -4.643110 0.580447) (xy -4.621926 0.385170) (xy -4.587369 0.284684) (xy -4.536615 0.254164)
115 | (xy -4.531371 0.254000) (xy -4.438523 0.320324) (xy -4.274769 0.501533) (xy -4.062174 0.770982) (xy -3.822800 1.102026) (xy -3.790538 1.148671) (xy -3.175000 2.043342) (xy -3.150969 1.148671)
116 | (xy -3.135510 0.737350) (xy -3.112662 0.469247) (xy -3.078105 0.318271) (xy -3.027519 0.258334) (xy -3.002802 0.254000) (xy -2.951048 0.280361) )(layer F.SilkS) (width 0.010000)
117 | )
118 | (fp_poly (pts (xy -0.269155 0.345604) (xy -0.236560 0.530830) (xy -0.217983 0.848511) (xy -0.211692 1.316314) (xy -0.211666 1.354667) (xy -0.217172 1.833506) (xy -0.234844 2.161000) (xy -0.266414 2.354817)
119 | (xy -0.313614 2.432624) (xy -0.317500 2.434167) (xy -0.362559 2.409182) (xy -0.393700 2.286039) (xy -0.412846 2.045115) (xy -0.421921 1.666788) (xy -0.423333 1.354667) (xy -0.419535 0.881310)
120 | (xy -0.406859 0.557521) (xy -0.383381 0.363676) (xy -0.347176 0.280155) (xy -0.317500 0.275167) (xy -0.269155 0.345604) )(layer F.SilkS) (width 0.010000)
121 | )
122 | (fp_poly (pts (xy 1.788560 0.278530) (xy 1.824812 0.368817) (xy 1.847314 0.549909) (xy 1.858954 0.846853) (xy 1.862624 1.284697) (xy 1.862667 1.354667) (xy 1.859564 1.816057) (xy 1.848459 2.132507)
123 | (xy 1.826658 2.328329) (xy 1.791466 2.427834) (xy 1.740697 2.455334) (xy 1.649334 2.388981) (xy 1.486865 2.207625) (xy 1.275112 1.937818) (xy 1.035898 1.606112) (xy 0.999863 1.553922)
124 | (xy 0.381000 0.652510) (xy 0.356969 1.553922) (xy 0.338938 1.948844) (xy 0.310197 2.247250) (xy 0.274062 2.421589) (xy 0.248479 2.455334) (xy 0.145391 2.388503) (xy 0.121420 2.344323)
125 | (xy 0.106420 2.218954) (xy 0.098110 1.963178) (xy 0.097154 1.615816) (xy 0.102911 1.265837) (xy 0.117689 0.834157) (xy 0.139194 0.545638) (xy 0.171426 0.374128) (xy 0.218384 0.293478)
126 | (xy 0.254000 0.278018) (xy 0.355987 0.338683) (xy 0.531010 0.530157) (xy 0.766350 0.837236) (xy 0.994834 1.163774) (xy 1.608667 2.069873) (xy 1.608667 1.161937) (xy 1.612437 0.751061)
127 | (xy 1.626276 0.482292) (xy 1.653977 0.328519) (xy 1.699330 0.262631) (xy 1.735667 0.254000) (xy 1.788560 0.278530) )(layer F.SilkS) (width 0.010000)
128 | )
129 | (fp_poly (pts (xy 3.248171 0.263404) (xy 3.511807 0.288458) (xy 3.664020 0.324428) (xy 3.683000 0.338667) (xy 3.633220 0.383681) (xy 3.427148 0.412440) (xy 3.077196 0.423288) (xy 3.048358 0.423334)
130 | (xy 2.361389 0.423334) (xy 2.387195 0.825500) (xy 2.413000 1.227667) (xy 3.029505 1.252597) (xy 3.375094 1.280470) (xy 3.556938 1.322735) (xy 3.578855 1.369372) (xy 3.444665 1.410360)
131 | (xy 3.158185 1.435680) (xy 2.958337 1.439334) (xy 2.370667 1.439334) (xy 2.370667 2.286000) (xy 3.048000 2.286000) (xy 3.383432 2.295902) (xy 3.619147 2.322936) (xy 3.723076 2.363093)
132 | (xy 3.725334 2.370667) (xy 3.645407 2.411236) (xy 3.424159 2.440175) (xy 3.089383 2.454396) (xy 2.963334 2.455334) (xy 2.201334 2.455334) (xy 2.201334 0.254000) (xy 2.916003 0.254000)
133 | (xy 3.248171 0.263404) )(layer F.SilkS) (width 0.010000)
134 | )
135 | (fp_poly (pts (xy 5.021786 0.262881) (xy 5.282237 0.287464) (xy 5.410226 0.324661) (xy 5.418667 0.338667) (xy 5.339407 0.380518) (xy 5.122833 0.409953) (xy 4.800750 0.423023) (xy 4.736695 0.423334)
136 | (xy 4.054722 0.423334) (xy 4.080528 0.825500) (xy 4.106334 1.227667) (xy 4.722838 1.252597) (xy 5.068427 1.280470) (xy 5.250271 1.322735) (xy 5.272189 1.369372) (xy 5.137998 1.410360)
137 | (xy 4.851518 1.435680) (xy 4.651670 1.439334) (xy 4.064000 1.439334) (xy 4.064000 2.286000) (xy 4.741334 2.286000) (xy 5.076766 2.295902) (xy 5.312480 2.322936) (xy 5.416409 2.363093)
138 | (xy 5.418667 2.370667) (xy 5.338741 2.411236) (xy 5.117492 2.440175) (xy 4.782717 2.454396) (xy 4.656667 2.455334) (xy 3.894667 2.455334) (xy 3.894667 0.254000) (xy 4.656667 0.254000)
139 | (xy 5.021786 0.262881) )(layer F.SilkS) (width 0.010000)
140 | )
141 | (fp_poly (pts (xy 6.565344 0.260059) (xy 6.784379 0.286603) (xy 6.933641 0.346185) (xy 7.062818 0.451355) (xy 7.081624 0.469928) (xy 7.234902 0.724594) (xy 7.226616 1.003792) (xy 7.064801 1.274755)
142 | (xy 6.989222 1.400215) (xy 7.049923 1.516285) (xy 7.061487 1.528755) (xy 7.145269 1.682930) (xy 7.202332 1.906662) (xy 7.227827 2.145438) (xy 7.216902 2.344745) (xy 7.164709 2.450070)
143 | (xy 7.143933 2.455334) (xy 7.059649 2.383173) (xy 7.027802 2.160080) (xy 7.027334 2.116667) (xy 6.977521 1.781018) (xy 6.820074 1.567167) (xy 6.542976 1.465037) (xy 6.239890 1.456224)
144 | (xy 5.799667 1.481667) (xy 5.774275 1.968500) (xy 5.747944 2.230106) (xy 5.705873 2.406823) (xy 5.668442 2.455334) (xy 5.636511 2.375002) (xy 5.611205 2.151212) (xy 5.594411 1.809774)
145 | (xy 5.588013 1.376497) (xy 5.588000 1.354667) (xy 5.588000 0.423334) (xy 5.757334 0.423334) (xy 5.757334 1.270000) (xy 6.290734 1.270000) (xy 6.597237 1.254335) (xy 6.829835 1.213032)
146 | (xy 6.925734 1.168400) (xy 7.017689 0.971193) (xy 6.998101 0.732715) (xy 6.894286 0.556381) (xy 6.710406 0.464790) (xy 6.385505 0.425459) (xy 6.259286 0.423334) (xy 5.757334 0.423334)
147 | (xy 5.588000 0.423334) (xy 5.588000 0.254000) (xy 6.226849 0.254000) (xy 6.565344 0.260059) )(layer F.SilkS) (width 0.010000)
148 | )
149 | (fp_poly (pts (xy 7.656210 0.335667) (xy 7.683269 0.569026) (xy 7.699835 0.936616) (xy 7.704667 1.354667) (xy 7.698385 1.825392) (xy 7.680434 2.177164) (xy 7.652158 2.392523) (xy 7.620000 2.455334)
150 | (xy 7.583791 2.373667) (xy 7.556731 2.140308) (xy 7.540165 1.772717) (xy 7.535334 1.354667) (xy 7.541616 0.883942) (xy 7.559566 0.532170) (xy 7.587842 0.316811) (xy 7.620000 0.254000)
151 | (xy 7.656210 0.335667) )(layer F.SilkS) (width 0.010000)
152 | )
153 | (fp_poly (pts (xy 9.748952 0.280361) (xy 9.784482 0.375843) (xy 9.806548 0.565047) (xy 9.817908 0.872573) (xy 9.821321 1.323021) (xy 9.821334 1.360875) (xy 9.816035 1.861263) (xy 9.792351 2.203531)
154 | (xy 9.738599 2.390103) (xy 9.643095 2.423405) (xy 9.494157 2.305862) (xy 9.280101 2.039898) (xy 8.989246 1.627940) (xy 8.932556 1.545364) (xy 8.339667 0.679961) (xy 8.315636 1.567647)
155 | (xy 8.300083 1.977172) (xy 8.277034 2.243547) (xy 8.242125 2.392925) (xy 8.190989 2.451461) (xy 8.167469 2.455334) (xy 8.115589 2.428907) (xy 8.080016 2.333188) (xy 8.057972 2.143519)
156 | (xy 8.046674 1.835243) (xy 8.043341 1.383703) (xy 8.043334 1.354667) (xy 8.046387 0.893839) (xy 8.057368 0.577812) (xy 8.079005 0.382132) (xy 8.114026 0.282348) (xy 8.165159 0.254007)
157 | (xy 8.166153 0.254000) (xy 8.258040 0.320276) (xy 8.421117 0.501385) (xy 8.633426 0.770747) (xy 8.873012 1.101782) (xy 8.906986 1.150818) (xy 9.525000 2.047635) (xy 9.549031 1.150818)
158 | (xy 9.564462 0.738946) (xy 9.587249 0.470312) (xy 9.621698 0.318846) (xy 9.672118 0.258480) (xy 9.697198 0.254000) (xy 9.748952 0.280361) )(layer F.SilkS) (width 0.010000)
159 | )
160 | (fp_poly (pts (xy -10.414000 1.227667) (xy -10.456333 1.270000) (xy -10.498666 1.227667) (xy -10.456333 1.185334) (xy -10.414000 1.227667) )(layer F.SilkS) (width 0.010000)
161 | )
162 | (fp_poly (pts (xy -7.112000 0.296334) (xy -7.154333 0.338667) (xy -7.196666 0.296334) (xy -7.154333 0.254000) (xy -7.112000 0.296334) )(layer F.SilkS) (width 0.010000)
163 | )
164 | (fp_poly (pts (xy -5.080000 -1.403145) (xy -5.081610 -0.985072) (xy -5.090914 -0.701962) (xy -5.114617 -0.519446) (xy -5.159429 -0.403158) (xy -5.232057 -0.318729) (xy -5.303085 -0.260145) (xy -5.622487 -0.110874)
165 | (xy -5.987527 -0.117562) (xy -6.153965 -0.169924) (xy -6.376697 -0.343229) (xy -6.503632 -0.614437) (xy -6.519333 -0.756434) (xy -6.462200 -0.899840) (xy -6.329674 -0.944018) (xy -6.180067 -0.893647)
166 | (xy -6.071690 -0.753408) (xy -6.061232 -0.719666) (xy -5.964023 -0.549432) (xy -5.807928 -0.508000) (xy -5.683682 -0.530743) (xy -5.598057 -0.615693) (xy -5.544267 -0.787933) (xy -5.515529 -1.072546)
167 | (xy -5.505057 -1.494616) (xy -5.504489 -1.629833) (xy -5.502117 -1.984483) (xy -5.490025 -2.202846) (xy -5.458721 -2.317966) (xy -5.398710 -2.362889) (xy -5.300501 -2.370660) (xy -5.291666 -2.370666)
168 | (xy -5.080000 -2.370666) (xy -5.080000 -1.403145) )(layer F.SilkS) (width 0.010000)
169 | )
170 | (fp_poly (pts (xy -4.027855 -2.354453) (xy -3.663152 -2.323084) (xy -3.371271 -2.274697) (xy -3.196546 -2.217043) (xy -3.181188 -2.206469) (xy -3.083449 -2.034623) (xy -3.051052 -1.790264) (xy -3.087825 -1.558645)
171 | (xy -3.147599 -1.458267) (xy -3.194103 -1.350180) (xy -3.110273 -1.207839) (xy -3.091155 -1.186241) (xy -2.957573 -0.932188) (xy -2.947515 -0.647068) (xy -3.058207 -0.395819) (xy -3.127935 -0.325473)
172 | (xy -3.267494 -0.243319) (xy -3.463659 -0.194880) (xy -3.758459 -0.172889) (xy -4.031046 -0.169333) (xy -4.741333 -0.169333) (xy -4.741333 -0.915098) (xy -4.264724 -0.915098) (xy -4.261016 -0.825506)
173 | (xy -4.249167 -0.629408) (xy -4.240254 -0.526282) (xy -4.239850 -0.524298) (xy -4.155951 -0.493388) (xy -3.973606 -0.507092) (xy -3.753685 -0.552654) (xy -3.557060 -0.617317) (xy -3.444602 -0.688322)
174 | (xy -3.442532 -0.691403) (xy -3.404480 -0.867651) (xy -3.512574 -1.005724) (xy -3.744755 -1.086957) (xy -3.926200 -1.100673) (xy -4.147048 -1.092650) (xy -4.244567 -1.043384) (xy -4.264724 -0.915098)
175 | (xy -4.741333 -0.915098) (xy -4.741333 -1.562621) (xy -4.268538 -1.562621) (xy -4.249434 -1.483656) (xy -4.110199 -1.438809) (xy -3.893547 -1.445226) (xy -3.680114 -1.493406) (xy -3.556895 -1.565255)
176 | (xy -3.479524 -1.740293) (xy -3.554214 -1.871489) (xy -3.765684 -1.940892) (xy -3.882139 -1.947333) (xy -4.103431 -1.931816) (xy -4.210596 -1.864982) (xy -4.253675 -1.737656) (xy -4.268538 -1.562621)
177 | (xy -4.741333 -1.562621) (xy -4.741333 -2.391901) (xy -4.027855 -2.354453) )(layer F.SilkS) (width 0.010000)
178 | )
179 | (fp_poly (pts (xy -1.991986 -2.358188) (xy -1.620143 -2.335923) (xy -1.374654 -2.299721) (xy -1.212580 -2.239367) (xy -1.090985 -2.144645) (xy -1.089937 -2.143599) (xy -0.955677 -1.920688) (xy -0.914227 -1.656175)
180 | (xy -0.967657 -1.416375) (xy -1.063526 -1.298066) (xy -1.159461 -1.205834) (xy -1.123969 -1.114725) (xy -1.068661 -1.056566) (xy -0.965466 -0.870938) (xy -0.931333 -0.678210) (xy -0.913670 -0.450706)
181 | (xy -0.879941 -0.303258) (xy -0.880450 -0.208202) (xy -1.003598 -0.171885) (xy -1.091608 -0.169333) (xy -1.269474 -0.185517) (xy -1.341465 -0.268702) (xy -1.354666 -0.459619) (xy -1.415288 -0.764527)
182 | (xy -1.596298 -0.950382) (xy -1.896413 -1.015900) (xy -1.911047 -1.016000) (xy -2.201333 -1.016000) (xy -2.201333 -0.592666) (xy -2.206882 -0.342064) (xy -2.241003 -0.217097) (xy -2.329902 -0.174087)
183 | (xy -2.455333 -0.169333) (xy -2.709333 -0.169333) (xy -2.709333 -1.651000) (xy -2.201333 -1.651000) (xy -2.190462 -1.459220) (xy -2.124817 -1.375501) (xy -1.954848 -1.355118) (xy -1.873033 -1.354666)
184 | (xy -1.629166 -1.385222) (xy -1.458770 -1.461488) (xy -1.442705 -1.477604) (xy -1.382661 -1.653033) (xy -1.395710 -1.773937) (xy -1.465441 -1.886102) (xy -1.612755 -1.937137) (xy -1.826039 -1.947333)
185 | (xy -2.057865 -1.940711) (xy -2.166792 -1.896403) (xy -2.199249 -1.777748) (xy -2.201333 -1.651000) (xy -2.709333 -1.651000) (xy -2.709333 -2.388043) (xy -1.991986 -2.358188) )(layer F.SilkS) (width 0.010000)
186 | )
187 | (fp_poly (pts (xy -9.059333 -1.735666) (xy -9.101666 -1.693333) (xy -9.144000 -1.735666) (xy -9.101666 -1.778000) (xy -9.059333 -1.735666) )(layer F.SilkS) (width 0.010000)
188 | )
189 | (fp_poly (pts (xy -8.720666 -1.735666) (xy -8.763000 -1.693333) (xy -8.805333 -1.735666) (xy -8.763000 -1.778000) (xy -8.720666 -1.735666) )(layer F.SilkS) (width 0.010000)
190 | )
191 | )
192 |
--------------------------------------------------------------------------------
/pcb/kicad/WS2812B.pretty/jbr_logo.kicad_mod:
--------------------------------------------------------------------------------
1 | (module LOGO (layer F.Cu)
2 | (at 0 0)
3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide
4 | (effects (font (thickness 0.3)))
5 | )
6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide
7 | (effects (font (thickness 0.3)))
8 | )
9 | (fp_poly (pts (xy -9.210193 -2.610951) (xy -9.128895 -2.542285) (xy -9.068601 -2.377388) (xy -9.022458 -2.180166) (xy -8.954345 -2.012400) (xy -8.812082 -1.951937) (xy -8.709179 -1.947333) (xy -8.529854 -1.930046)
10 | (xy -8.478276 -1.857551) (xy -8.491199 -1.778000) (xy -8.491820 -1.643202) (xy -8.448157 -1.608666) (xy -8.398539 -1.680610) (xy -8.407415 -1.817427) (xy -8.284645 -1.817427) (xy -8.279077 -1.732928)
11 | (xy -8.194621 -1.638059) (xy -8.119665 -1.608666) (xy -8.097540 -1.657305) (xy -8.145828 -1.727127) (xy -8.249149 -1.812720) (xy -8.284645 -1.817427) (xy -8.407415 -1.817427) (xy -8.409735 -1.853177)
12 | (xy -8.404499 -2.096029) (xy -8.309712 -2.232464) (xy -8.181238 -2.320345) (xy -8.059362 -2.292338) (xy -7.978606 -2.239636) (xy -7.869052 -2.109091) (xy -7.848481 -1.973781) (xy -7.911351 -1.890623)
13 | (xy -8.011925 -1.897477) (xy -8.114100 -1.893471) (xy -8.128000 -1.860009) (xy -8.063490 -1.780364) (xy -8.043333 -1.778000) (xy -7.973861 -1.707311) (xy -7.958666 -1.613663) (xy -7.919119 -1.451125)
14 | (xy -7.872619 -1.396146) (xy -7.815237 -1.308117) (xy -7.822200 -1.285316) (xy -7.779863 -1.241317) (xy -7.662333 -1.227666) (xy -7.525736 -1.248086) (xy -7.502314 -1.285071) (xy -7.462159 -1.350715)
15 | (xy -7.352514 -1.401280) (xy -7.159074 -1.399511) (xy -7.053810 -1.304966) (xy -6.972091 -1.138403) (xy -6.989484 -1.030096) (xy -7.058907 -1.014094) (xy -7.138078 -0.953402) (xy -7.253071 -0.788320)
16 | (xy -7.296258 -0.712040) (xy -7.393348 -0.472252) (xy -7.363785 -0.326598) (xy -7.201058 -0.249884) (xy -7.175500 -0.244713) (xy -7.037800 -0.214255) (xy -7.027333 -0.211666) (xy -6.869131 -0.185394)
17 | (xy -6.815666 -0.179916) (xy -6.714715 -0.096002) (xy -6.688666 0.047330) (xy -6.713517 0.190662) (xy -6.766102 0.216136) (xy -6.860867 0.233920) (xy -6.886656 0.274639) (xy -6.944197 0.329624)
18 | (xy -7.017362 0.254708) (xy -7.106374 0.172634) (xy -7.206195 0.237331) (xy -7.214308 0.245962) (xy -7.279035 0.326155) (xy -7.216038 0.303200) (xy -7.196666 0.292502) (xy -7.114832 0.256413)
19 | (xy -7.149974 0.319677) (xy -7.185867 0.364748) (xy -7.340392 0.485121) (xy -7.439867 0.514684) (xy -7.515018 0.535920) (xy -7.471833 0.564073) (xy -7.373429 0.675802) (xy -7.366000 0.720577)
20 | (xy -7.304521 0.846280) (xy -7.154703 1.000232) (xy -7.136689 1.014753) (xy -6.982090 1.193174) (xy -6.983015 1.341018) (xy -7.125866 1.436175) (xy -7.397045 1.456535) (xy -7.407870 1.455690)
21 | (xy -7.712220 1.480399) (xy -7.872588 1.565055) (xy -8.034891 1.661995) (xy -8.138570 1.675699) (xy -8.234745 1.723081) (xy -8.255000 1.813278) (xy -8.206941 1.957842) (xy -8.147050 1.997428)
22 | (xy -8.097848 1.993902) (xy -8.125883 1.976261) (xy -8.198448 1.865248) (xy -8.205982 1.792111) (xy -8.184562 1.715354) (xy -8.156593 1.756834) (xy -8.044833 1.854005) (xy -7.993944 1.862667)
23 | (xy -7.885822 1.906852) (xy -7.874000 1.940409) (xy -7.846068 2.084832) (xy -7.828395 2.136995) (xy -7.861362 2.260695) (xy -7.988588 2.349606) (xy -8.151253 2.395873) (xy -8.285779 2.336291)
24 | (xy -8.387618 2.237687) (xy -8.597992 2.068470) (xy -8.786242 2.057953) (xy -8.988785 2.205948) (xy -9.015837 2.234411) (xy -9.142204 2.421703) (xy -9.127172 2.573077) (xy -9.102456 2.668526)
25 | (xy -9.197468 2.705468) (xy -9.309126 2.709334) (xy -9.501403 2.680298) (xy -9.565418 2.580512) (xy -9.566037 2.561167) (xy -9.552054 2.463123) (xy -9.493273 2.523782) (xy -9.482666 2.540000)
26 | (xy -9.414612 2.605567) (xy -9.399296 2.565529) (xy -9.456096 2.430124) (xy -9.592559 2.256937) (xy -9.754071 2.104807) (xy -9.886015 2.032572) (xy -9.894542 2.032000) (xy -9.985793 1.977229)
27 | (xy -9.990666 1.952195) (xy -9.922047 1.901360) (xy -9.821333 1.905000) (xy -9.685733 1.877406) (xy -9.652300 1.769879) (xy -9.739390 1.649626) (xy -9.749748 1.642915) (xy -9.807685 1.632936)
28 | (xy -9.787085 1.680252) (xy -9.785155 1.759921) (xy -9.878788 1.772983) (xy -10.007780 1.719238) (xy -10.053663 1.681137) (xy -10.117255 1.646212) (xy -10.112982 1.751822) (xy -10.105585 1.786971)
29 | (xy -10.085753 1.917392) (xy -10.125354 1.900741) (xy -10.155227 1.862667) (xy -10.216365 1.800561) (xy -10.215640 1.878623) (xy -10.200109 1.951038) (xy -10.209845 2.179014) (xy -10.325092 2.342356)
30 | (xy -10.503319 2.403735) (xy -10.660892 2.355457) (xy -10.785964 2.219598) (xy -10.790073 2.116841) (xy -10.705632 1.820334) (xy -10.482161 1.820334) (xy -10.473009 1.964929) (xy -10.446505 1.977660)
31 | (xy -10.443131 1.970112) (xy -10.426382 1.802032) (xy -10.439993 1.716112) (xy -10.466944 1.681584) (xy -10.481602 1.794041) (xy -10.482161 1.820334) (xy -10.705632 1.820334) (xy -10.693941 1.779286)
32 | (xy -10.713895 1.555570) (xy -10.811707 1.453048) (xy -11.014491 1.413737) (xy -11.095895 1.443945) (xy -11.318521 1.520679) (xy -11.520557 1.488700) (xy -11.640600 1.357973) (xy -11.641426 1.355424)
33 | (xy -11.654652 1.227667) (xy -11.514666 1.227667) (xy -11.472333 1.270000) (xy -11.430000 1.227667) (xy -11.472333 1.185334) (xy -11.514666 1.227667) (xy -11.654652 1.227667) (xy -11.659600 1.179882)
34 | (xy -11.627414 1.100667) (xy -11.162631 1.100667) (xy -11.149326 1.220862) (xy -11.119927 1.206500) (xy -11.118562 1.185334) (xy -10.922000 1.185334) (xy -10.891022 1.255024) (xy -10.865555 1.241778)
35 | (xy -10.864132 1.227667) (xy -10.752666 1.227667) (xy -10.710333 1.270000) (xy -10.668000 1.227667) (xy -10.710333 1.185334) (xy -10.752666 1.227667) (xy -10.864132 1.227667) (xy -10.855422 1.141298)
36 | (xy -10.865555 1.128889) (xy -10.915890 1.140511) (xy -10.922000 1.185334) (xy -11.118562 1.185334) (xy -11.108744 1.033158) (xy -11.119927 0.994834) (xy -11.150829 0.984197) (xy -11.162631 1.100667)
37 | (xy -11.627414 1.100667) (xy -11.611392 1.061237) (xy -11.521577 1.054063) (xy -11.439084 1.019792) (xy -11.405725 0.973667) (xy -10.922000 0.973667) (xy -10.879666 1.016000) (xy -10.752666 1.016000)
38 | (xy -10.721688 1.085690) (xy -10.696222 1.072445) (xy -10.686089 0.971965) (xy -10.696222 0.959556) (xy -10.746556 0.971178) (xy -10.752666 1.016000) (xy -10.879666 1.016000) (xy -10.837333 0.973667)
39 | (xy -10.879666 0.931334) (xy -10.922000 0.973667) (xy -11.405725 0.973667) (xy -11.347733 0.893484) (xy -11.284046 0.710891) (xy -11.318788 0.519907) (xy -11.353764 0.434948) (xy -11.386285 0.381000)
40 | (xy -11.159494 0.381000) (xy -11.150343 0.525596) (xy -11.123838 0.538327) (xy -11.120464 0.530778) (xy -11.103715 0.362699) (xy -11.117327 0.276778) (xy -11.144277 0.242251) (xy -11.158936 0.354708)
41 | (xy -11.159494 0.381000) (xy -11.386285 0.381000) (xy -11.445447 0.282859) (xy -11.517509 0.260924) (xy -11.524370 0.269700) (xy -11.643430 0.321479) (xy -11.801912 0.306180) (xy -11.974965 0.214878)
42 | (xy -11.979709 0.197556) (xy -11.825111 0.197556) (xy -11.813489 0.247890) (xy -11.768666 0.254000) (xy -11.698976 0.223022) (xy -11.712222 0.197556) (xy -11.812702 0.187423) (xy -11.825111 0.197556)
43 | (xy -11.979709 0.197556) (xy -12.022666 0.040720) (xy -11.993682 -0.101338) (xy -11.882476 -0.173936) (xy -11.652668 -0.194887) (xy -11.544346 -0.193497) (xy -11.436321 -0.258541) (xy -11.378258 -0.338666)
44 | (xy -11.162631 -0.338666) (xy -11.149326 -0.218471) (xy -11.119927 -0.232833) (xy -11.108744 -0.406175) (xy -11.119927 -0.444500) (xy -11.150829 -0.455136) (xy -11.162631 -0.338666) (xy -11.378258 -0.338666)
45 | (xy -11.338990 -0.392853) (xy -11.282348 -0.538600) (xy -11.315540 -0.662781) (xy -11.457001 -0.830646) (xy -11.465065 -0.839080) (xy -11.612059 -1.015115) (xy -11.634769 -1.100666) (xy -11.501298 -1.100666)
46 | (xy -11.487993 -0.980471) (xy -11.458593 -0.994833) (xy -11.447411 -1.168175) (xy -11.458593 -1.206500) (xy -11.489496 -1.217136) (xy -11.501298 -1.100666) (xy -11.634769 -1.100666) (xy -11.646600 -1.145233)
47 | (xy -11.603943 -1.261387) (xy -11.456583 -1.418062) (xy -11.273811 -1.409933) (xy -11.212157 -1.374537) (xy -11.101301 -1.242173) (xy -11.054237 -1.082148) (xy -11.093578 -0.972304) (xy -11.095031 -0.971381)
48 | (xy -11.162438 -0.995132) (xy -11.176000 -1.067448) (xy -11.199632 -1.165446) (xy -11.228793 -1.160762) (xy -11.247867 -1.047268) (xy -11.227791 -0.967783) (xy -11.156462 -0.876159) (xy -11.055536 -0.925909)
49 | (xy -10.934507 -0.978524) (xy -10.879667 -0.931333) (xy -10.789996 -0.885510) (xy -10.702795 -0.937589) (xy -10.603215 -0.985151) (xy -10.583333 -0.951378) (xy -10.617263 -0.816923) (xy -10.696138 -0.650817)
50 | (xy -10.785585 -0.513851) (xy -10.851231 -0.466819) (xy -10.855610 -0.469832) (xy -10.893213 -0.446626) (xy -10.903502 -0.300200) (xy -10.891007 -0.073646) (xy -10.860255 0.189943) (xy -10.815774 0.447476)
51 | (xy -10.762091 0.655859) (xy -10.728842 0.736629) (xy -10.630325 0.958694) (xy -10.583870 1.139409) (xy -10.583333 1.152907) (xy -10.559554 1.250289) (xy -10.530444 1.245333) (xy -10.432596 1.251852)
52 | (xy -10.238705 1.325669) (xy -10.086617 1.400555) (xy -9.841716 1.519694) (xy -9.646351 1.595000) (xy -9.579303 1.608667) (xy -9.497778 1.674149) (xy -9.503389 1.820334) (xy -9.509194 1.977661)
53 | (xy -9.470926 2.032000) (xy -9.416922 1.959214) (xy -9.414850 1.943007) (xy -9.226958 1.943007) (xy -9.183470 2.014170) (xy -9.122833 2.010873) (xy -9.015614 1.906266) (xy -8.989682 1.834781)
54 | (xy -9.008431 1.734676) (xy -9.095516 1.745022) (xy -9.195344 1.830947) (xy -9.226958 1.943007) (xy -9.414850 1.943007) (xy -9.398000 1.811275) (xy -9.369417 1.652642) (xy -9.364150 1.651757)
55 | (xy -8.846546 1.651757) (xy -8.830405 1.775831) (xy -8.828090 1.784787) (xy -8.777879 1.898276) (xy -8.738636 1.874242) (xy -8.745146 1.820834) (xy -8.521175 1.820834) (xy -8.484560 1.986145)
56 | (xy -8.426320 2.026646) (xy -8.385209 1.929299) (xy -8.382000 1.867664) (xy -8.416548 1.708543) (xy -8.457675 1.656557) (xy -8.509545 1.691056) (xy -8.521175 1.820834) (xy -8.745146 1.820834)
57 | (xy -8.757333 1.720875) (xy -8.791071 1.673729) (xy -8.846546 1.651757) (xy -9.364150 1.651757) (xy -9.276757 1.637075) (xy -9.139870 1.626782) (xy -8.910758 1.552125) (xy -8.705257 1.460898)
58 | (xy -8.441301 1.343510) (xy -8.225218 1.270687) (xy -8.128000 1.257628) (xy -8.048136 1.257647) (xy -8.083028 1.227667) (xy -7.789333 1.227667) (xy -7.747000 1.270000) (xy -7.704666 1.227667)
59 | (xy -7.450666 1.227667) (xy -7.408333 1.270000) (xy -7.366000 1.227667) (xy -7.380111 1.213556) (xy -7.168444 1.213556) (xy -7.156822 1.263890) (xy -7.112000 1.270000) (xy -7.042310 1.239022)
60 | (xy -7.055555 1.213556) (xy -7.156035 1.203423) (xy -7.168444 1.213556) (xy -7.380111 1.213556) (xy -7.408333 1.185334) (xy -7.450666 1.227667) (xy -7.704666 1.227667) (xy -7.747000 1.185334)
61 | (xy -7.789333 1.227667) (xy -8.083028 1.227667) (xy -8.115872 1.199447) (xy -8.181130 1.112580) (xy -8.170208 1.100667) (xy -7.958666 1.100667) (xy -7.927688 1.170357) (xy -7.902222 1.157111)
62 | (xy -7.892089 1.056632) (xy -7.902222 1.044222) (xy -7.952556 1.055845) (xy -7.958666 1.100667) (xy -8.170208 1.100667) (xy -8.135829 1.063172) (xy -8.105710 1.029314) (xy -7.764454 1.029314)
63 | (xy -7.692041 1.129089) (xy -7.586551 1.196014) (xy -7.546180 1.167200) (xy -7.578681 1.054001) (xy -7.622423 1.016000) (xy -7.450666 1.016000) (xy -7.419688 1.085690) (xy -7.394222 1.072445)
64 | (xy -7.384089 0.971965) (xy -7.394222 0.959556) (xy -7.444556 0.971178) (xy -7.450666 1.016000) (xy -7.622423 1.016000) (xy -7.628395 1.010812) (xy -7.753486 0.965295) (xy -7.764454 1.029314)
65 | (xy -8.105710 1.029314) (xy -8.039419 0.954794) (xy -7.916536 0.757384) (xy -7.882291 0.692756) (xy -7.759501 0.269910) (xy -7.760371 0.254000) (xy -7.535333 0.254000) (xy -7.504355 0.323690)
66 | (xy -7.478889 0.310445) (xy -7.468756 0.209965) (xy -7.478889 0.197556) (xy -7.529223 0.209178) (xy -7.535333 0.254000) (xy -7.760371 0.254000) (xy -7.785368 -0.203033) (xy -7.788362 -0.211666)
67 | (xy -7.450666 -0.211666) (xy -7.408333 -0.169333) (xy -7.366000 -0.211666) (xy -7.408333 -0.254000) (xy -7.450666 -0.211666) (xy -7.788362 -0.211666) (xy -7.849536 -0.388055) (xy -7.613316 -0.388055)
68 | (xy -7.597749 -0.278241) (xy -7.568847 -0.276930) (xy -7.548636 -0.390247) (xy -7.562163 -0.439208) (xy -7.599758 -0.471278) (xy -7.613316 -0.388055) (xy -7.849536 -0.388055) (xy -7.957557 -0.699522)
69 | (xy -8.014280 -0.808257) (xy -8.108601 -0.987778) (xy -7.845778 -0.987778) (xy -7.834155 -0.937443) (xy -7.789333 -0.931333) (xy -7.719643 -0.962311) (xy -7.725549 -0.973666) (xy -7.535333 -0.973666)
70 | (xy -7.493000 -0.931333) (xy -7.450666 -0.973666) (xy -7.493000 -1.016000) (xy -7.535333 -0.973666) (xy -7.725549 -0.973666) (xy -7.732889 -0.987778) (xy -7.833368 -0.997911) (xy -7.845778 -0.987778)
71 | (xy -8.108601 -0.987778) (xy -8.133506 -1.035178) (xy -8.166018 -1.134380) (xy -8.115724 -1.121188) (xy -8.088855 -1.100666) (xy -7.975714 -1.018914) (xy -7.958014 -1.049492) (xy -7.973108 -1.100666)
72 | (xy -8.061715 -1.185333) (xy -7.196666 -1.185333) (xy -7.165688 -1.115643) (xy -7.140222 -1.128889) (xy -7.130089 -1.229368) (xy -7.140222 -1.241778) (xy -7.190556 -1.230155) (xy -7.196666 -1.185333)
73 | (xy -8.061715 -1.185333) (xy -8.081080 -1.203836) (xy -8.219710 -1.240811) (xy -8.423489 -1.278380) (xy -8.695449 -1.357468) (xy -8.805333 -1.396146) (xy -9.270541 -1.497788) (xy -9.517267 -1.485686)
74 | (xy -9.782258 -1.418609) (xy -10.055298 -1.311806) (xy -10.279520 -1.191410) (xy -10.398060 -1.083553) (xy -10.399663 -1.080176) (xy -10.484558 -1.064270) (xy -10.590163 -1.104322) (xy -10.716320 -1.146985)
75 | (xy -10.752454 -1.069306) (xy -10.752666 -1.055264) (xy -10.765578 -0.964760) (xy -10.832292 -1.000486) (xy -10.887205 -1.053776) (xy -10.968631 -1.160379) (xy -10.942685 -1.227666) (xy -10.583333 -1.227666)
76 | (xy -10.541000 -1.185333) (xy -10.498666 -1.227666) (xy -10.541000 -1.270000) (xy -10.583333 -1.227666) (xy -10.942685 -1.227666) (xy -10.933238 -1.252164) (xy -10.827442 -1.345651) (xy -10.704195 -1.467767)
77 | (xy -10.676340 -1.598273) (xy -10.719677 -1.778000) (xy -10.569965 -1.778000) (xy -10.556659 -1.657804) (xy -10.527260 -1.672166) (xy -10.525895 -1.693333) (xy -10.244666 -1.693333) (xy -10.213688 -1.623643)
78 | (xy -10.188222 -1.636889) (xy -10.178089 -1.737368) (xy -10.188222 -1.749778) (xy -10.238556 -1.738155) (xy -10.244666 -1.693333) (xy -10.525895 -1.693333) (xy -10.516077 -1.845509) (xy -10.521083 -1.862666)
79 | (xy -10.414000 -1.862666) (xy -10.383022 -1.792976) (xy -10.357555 -1.806222) (xy -10.347422 -1.906702) (xy -10.357555 -1.919111) (xy -10.407890 -1.907489) (xy -10.414000 -1.862666) (xy -10.521083 -1.862666)
80 | (xy -10.527260 -1.883833) (xy -10.558163 -1.894469) (xy -10.569965 -1.778000) (xy -10.719677 -1.778000) (xy -10.727501 -1.810444) (xy -10.778962 -2.021654) (xy -10.753228 -2.144821) (xy -10.639098 -2.247035)
81 | (xy -10.507636 -2.321449) (xy -10.407063 -2.295206) (xy -10.274045 -2.150225) (xy -10.266254 -2.140585) (xy -10.137008 -1.947783) (xy -10.074210 -1.790325) (xy -10.073179 -1.778000) (xy -10.054647 -1.707165)
82 | (xy -10.026233 -1.742722) (xy -9.814649 -1.742722) (xy -9.799082 -1.632908) (xy -9.770180 -1.631597) (xy -9.751960 -1.733755) (xy -9.552728 -1.733755) (xy -9.520732 -1.671273) (xy -9.352479 -1.646261)
83 | (xy -9.129435 -1.645484) (xy -8.816438 -1.674798) (xy -8.664628 -1.748334) (xy -8.652216 -1.771685) (xy -8.665105 -1.852041) (xy -8.748736 -1.837522) (xy -8.890422 -1.833096) (xy -8.935472 -1.867745)
84 | (xy -9.024766 -1.916375) (xy -9.097680 -1.857529) (xy -9.088494 -1.750983) (xy -9.097090 -1.723712) (xy -9.198335 -1.798010) (xy -9.346774 -1.891808) (xy -9.456877 -1.854174) (xy -9.466889 -1.844577)
85 | (xy -9.552728 -1.733755) (xy -9.751960 -1.733755) (xy -9.749969 -1.744914) (xy -9.763496 -1.793875) (xy -9.801091 -1.825945) (xy -9.814649 -1.742722) (xy -10.026233 -1.742722) (xy -9.991583 -1.786080)
86 | (xy -9.983885 -1.799166) (xy -9.858114 -1.922186) (xy -9.775793 -1.947333) (xy -9.676785 -2.027616) (xy -9.605625 -2.252310) (xy -9.599846 -2.286000) (xy -9.552911 -2.488130) (xy -9.284229 -2.488130)
87 | (xy -9.271000 -2.455333) (xy -9.194918 -2.374563) (xy -9.181336 -2.370666) (xy -9.144971 -2.436172) (xy -9.144000 -2.455333) (xy -9.209088 -2.536746) (xy -9.233663 -2.540000) (xy -9.284229 -2.488130)
88 | (xy -9.552911 -2.488130) (xy -9.548465 -2.507274) (xy -9.466597 -2.604872) (xy -9.342188 -2.624666) (xy -9.210193 -2.610951) )(layer F.SilkS) (width 0.010000)
89 | )
90 | (fp_poly (pts (xy -5.222881 0.262881) (xy -4.962429 0.287464) (xy -4.834440 0.324661) (xy -4.826000 0.338667) (xy -4.904792 0.381328) (xy -5.118078 0.411063) (xy -5.431222 0.423254) (xy -5.461000 0.423334)
91 | (xy -6.096000 0.423334) (xy -6.096000 1.185334) (xy -5.503333 1.185334) (xy -5.199309 1.196521) (xy -4.989232 1.226504) (xy -4.910667 1.269918) (xy -4.910666 1.270000) (xy -4.988976 1.313432)
92 | (xy -5.198862 1.343443) (xy -5.502758 1.354667) (xy -6.096000 1.354667) (xy -6.096000 2.286000) (xy -5.461000 2.286000) (xy -5.141040 2.296506) (xy -4.918026 2.324944) (xy -4.826594 2.366696)
93 | (xy -4.826000 2.370667) (xy -4.905926 2.411236) (xy -5.127175 2.440175) (xy -5.461950 2.454396) (xy -5.588000 2.455334) (xy -6.350000 2.455334) (xy -6.350000 0.254000) (xy -5.588000 0.254000)
94 | (xy -5.222881 0.262881) )(layer F.SilkS) (width 0.010000)
95 | )
96 | (fp_poly (pts (xy -2.950922 0.280427) (xy -2.915349 0.376146) (xy -2.893305 0.565814) (xy -2.882007 0.874090) (xy -2.878674 1.325631) (xy -2.878666 1.354667) (xy -2.881585 1.813996) (xy -2.892223 2.128887)
97 | (xy -2.913407 2.324164) (xy -2.947964 2.424650) (xy -2.998718 2.455170) (xy -3.003962 2.455334) (xy -3.096810 2.389009) (xy -3.260564 2.207801) (xy -3.473159 1.938352) (xy -3.712533 1.607308)
98 | (xy -3.744795 1.560663) (xy -4.360333 0.665992) (xy -4.384364 1.560663) (xy -4.399823 1.971983) (xy -4.422671 2.240087) (xy -4.457228 2.391063) (xy -4.507814 2.451000) (xy -4.532531 2.455334)
99 | (xy -4.584285 2.428973) (xy -4.619815 2.333491) (xy -4.641881 2.144287) (xy -4.653241 1.836761) (xy -4.656654 1.386313) (xy -4.656666 1.348459) (xy -4.651894 0.849588) (xy -4.629493 0.508665)
100 | (xy -4.577334 0.323094) (xy -4.483289 0.290278) (xy -4.335231 0.407622) (xy -4.121030 0.672531) (xy -3.828559 1.082408) (xy -3.774771 1.159712) (xy -3.175000 2.023090) (xy -3.150969 1.138545)
101 | (xy -3.135373 0.729830) (xy -3.112233 0.464235) (xy -3.077163 0.315577) (xy -3.025775 0.257672) (xy -3.002802 0.254000) (xy -2.950922 0.280427) )(layer F.SilkS) (width 0.010000)
102 | )
103 | (fp_poly (pts (xy -1.477469 0.206868) (xy -1.244816 0.297023) (xy -1.013720 0.457136) (xy -0.835646 0.643401) (xy -0.762056 0.812014) (xy -0.762000 0.815879) (xy -0.799641 0.922352) (xy -0.905228 0.883452)
104 | (xy -1.067754 0.703605) (xy -1.079198 0.688264) (xy -1.340459 0.463554) (xy -1.667798 0.388224) (xy -1.963498 0.441655) (xy -2.210636 0.609870) (xy -2.377550 0.885867) (xy -2.456444 1.224368)
105 | (xy -2.439525 1.580095) (xy -2.318999 1.907770) (xy -2.236140 2.025504) (xy -2.041248 2.208735) (xy -1.822935 2.279459) (xy -1.681958 2.286000) (xy -1.378421 2.225584) (xy -1.123551 2.068309)
106 | (xy -0.963195 1.850138) (xy -0.931333 1.697182) (xy -0.958462 1.584140) (xy -1.069780 1.534120) (xy -1.270000 1.524000) (xy -1.482074 1.505222) (xy -1.600031 1.458312) (xy -1.608666 1.439334)
107 | (xy -1.532115 1.392967) (xy -1.334642 1.362214) (xy -1.143000 1.354667) (xy -0.677333 1.354667) (xy -0.677333 1.857670) (xy -0.690561 2.134981) (xy -0.724847 2.338701) (xy -0.762000 2.413000)
108 | (xy -0.828640 2.387077) (xy -0.846666 2.290997) (xy -0.863582 2.148656) (xy -0.931644 2.139278) (xy -1.076828 2.262354) (xy -1.100666 2.286000) (xy -1.325925 2.408123) (xy -1.637910 2.452359)
109 | (xy -1.971806 2.416371) (xy -2.215037 2.326150) (xy -2.449589 2.109935) (xy -2.605718 1.787876) (xy -2.675538 1.408072) (xy -2.651163 1.018621) (xy -2.524705 0.667621) (xy -2.494951 0.618973)
110 | (xy -2.261258 0.395514) (xy -1.935589 0.244490) (xy -1.589644 0.194942) (xy -1.477469 0.206868) )(layer F.SilkS) (width 0.010000)
111 | )
112 | (fp_poly (pts (xy -0.240043 0.275659) (xy -0.204922 0.357892) (xy -0.185886 0.526586) (xy -0.180380 0.807628) (xy -0.185851 1.226902) (xy -0.187970 1.326575) (xy -0.204794 1.820408) (xy -0.230967 2.159840)
113 | (xy -0.268216 2.359631) (xy -0.317500 2.434297) (xy -0.362686 2.409214) (xy -0.393869 2.285767) (xy -0.412989 2.044300) (xy -0.421987 1.665156) (xy -0.423333 1.361722) (xy -0.420651 0.902878)
114 | (xy -0.410634 0.588044) (xy -0.390329 0.391952) (xy -0.356780 0.289335) (xy -0.307033 0.254926) (xy -0.293804 0.254000) (xy -0.240043 0.275659) )(layer F.SilkS) (width 0.010000)
115 | )
116 | (fp_poly (pts (xy 1.788560 0.278530) (xy 1.824812 0.368817) (xy 1.847314 0.549909) (xy 1.858954 0.846853) (xy 1.862624 1.284697) (xy 1.862667 1.354667) (xy 1.859367 1.818411) (xy 1.847763 2.136620)
117 | (xy 1.825297 2.332993) (xy 1.789410 2.431233) (xy 1.743877 2.455334) (xy 1.654039 2.388899) (xy 1.493014 2.207238) (xy 1.282340 1.936812) (xy 1.043556 1.604081) (xy 1.003043 1.545167)
118 | (xy 0.381000 0.635000) (xy 0.356969 1.545167) (xy 0.340072 1.979066) (xy 0.313523 2.261964) (xy 0.272706 2.412117) (xy 0.213006 2.447782) (xy 0.141111 2.398889) (xy 0.119475 2.297040)
119 | (xy 0.101673 2.060510) (xy 0.089483 1.723940) (xy 0.084681 1.321969) (xy 0.084667 1.298222) (xy 0.090792 0.810039) (xy 0.116604 0.476444) (xy 0.173256 0.295765) (xy 0.271904 0.266331)
120 | (xy 0.423701 0.386471) (xy 0.639803 0.654515) (xy 0.931364 1.068791) (xy 0.994834 1.161871) (xy 1.608667 2.064572) (xy 1.608667 1.159286) (xy 1.612454 0.749095) (xy 1.626354 0.480978)
121 | (xy 1.654175 0.327794) (xy 1.699723 0.262399) (xy 1.735667 0.254000) (xy 1.788560 0.278530) )(layer F.SilkS) (width 0.010000)
122 | )
123 | (fp_poly (pts (xy 3.328452 0.262881) (xy 3.588904 0.287464) (xy 3.716893 0.324661) (xy 3.725334 0.338667) (xy 3.646117 0.380596) (xy 3.429848 0.410060) (xy 3.108593 0.423051) (xy 3.048000 0.423334)
124 | (xy 2.370667 0.423334) (xy 2.370667 1.185334) (xy 2.958337 1.185334) (xy 3.319765 1.199021) (xy 3.530821 1.233403) (xy 3.587683 1.278459) (xy 3.486535 1.324170) (xy 3.223556 1.360514)
125 | (xy 3.029505 1.372070) (xy 2.413000 1.397000) (xy 2.361818 2.286000) (xy 3.043576 2.286000) (xy 3.380600 2.295843) (xy 3.617629 2.322737) (xy 3.722844 2.362732) (xy 3.725334 2.370667)
126 | (xy 3.645407 2.411236) (xy 3.424159 2.440175) (xy 3.089383 2.454396) (xy 2.963334 2.455334) (xy 2.201334 2.455334) (xy 2.201334 0.254000) (xy 2.963334 0.254000) (xy 3.328452 0.262881) )(layer F.SilkS) (width 0.010000)
127 | )
128 | (fp_poly (pts (xy 5.021786 0.262881) (xy 5.282237 0.287464) (xy 5.410226 0.324661) (xy 5.418667 0.338667) (xy 5.339451 0.380596) (xy 5.123181 0.410060) (xy 4.801926 0.423051) (xy 4.741334 0.423334)
129 | (xy 4.064000 0.423334) (xy 4.064000 1.185334) (xy 4.651670 1.185334) (xy 5.013099 1.199021) (xy 5.224154 1.233403) (xy 5.281017 1.278459) (xy 5.179868 1.324170) (xy 4.916890 1.360514)
130 | (xy 4.722838 1.372070) (xy 4.106334 1.397000) (xy 4.080742 1.841500) (xy 4.055151 2.286000) (xy 4.736909 2.286000) (xy 5.073933 2.295843) (xy 5.310962 2.322737) (xy 5.416177 2.362732)
131 | (xy 5.418667 2.370667) (xy 5.338741 2.411236) (xy 5.117492 2.440175) (xy 4.782717 2.454396) (xy 4.656667 2.455334) (xy 3.894667 2.455334) (xy 3.894667 0.254000) (xy 4.656667 0.254000)
132 | (xy 5.021786 0.262881) )(layer F.SilkS) (width 0.010000)
133 | )
134 | (fp_poly (pts (xy 6.565344 0.260059) (xy 6.784379 0.286603) (xy 6.933641 0.346185) (xy 7.062818 0.451355) (xy 7.081624 0.469928) (xy 7.234902 0.724594) (xy 7.226616 1.003792) (xy 7.064801 1.274755)
135 | (xy 6.989222 1.400215) (xy 7.049923 1.516285) (xy 7.061487 1.528755) (xy 7.145269 1.682930) (xy 7.202332 1.906662) (xy 7.227827 2.145438) (xy 7.216902 2.344745) (xy 7.164709 2.450070)
136 | (xy 7.143933 2.455334) (xy 7.059649 2.383173) (xy 7.027802 2.160080) (xy 7.027334 2.116667) (xy 6.977521 1.781018) (xy 6.820074 1.567167) (xy 6.542976 1.465037) (xy 6.239890 1.456224)
137 | (xy 5.799667 1.481667) (xy 5.774275 1.968500) (xy 5.747944 2.230106) (xy 5.705873 2.406823) (xy 5.668442 2.455334) (xy 5.636511 2.375002) (xy 5.611205 2.151212) (xy 5.594411 1.809774)
138 | (xy 5.588013 1.376497) (xy 5.588000 1.354667) (xy 5.588000 0.423334) (xy 5.757334 0.423334) (xy 5.757334 1.270000) (xy 6.228566 1.270000) (xy 6.523036 1.254630) (xy 6.767545 1.215229)
139 | (xy 6.863566 1.182355) (xy 6.999297 1.018687) (xy 7.027334 0.846667) (xy 6.984201 0.639741) (xy 6.840087 0.508079) (xy 6.572915 0.439980) (xy 6.228566 0.423334) (xy 5.757334 0.423334)
140 | (xy 5.588000 0.423334) (xy 5.588000 0.254000) (xy 6.226849 0.254000) (xy 6.565344 0.260059) )(layer F.SilkS) (width 0.010000)
141 | )
142 | (fp_poly (pts (xy 7.656210 0.335667) (xy 7.683269 0.569026) (xy 7.699835 0.936616) (xy 7.704667 1.354667) (xy 7.698385 1.825392) (xy 7.680434 2.177164) (xy 7.652158 2.392523) (xy 7.620000 2.455334)
143 | (xy 7.583791 2.373667) (xy 7.556731 2.140308) (xy 7.540165 1.772717) (xy 7.535334 1.354667) (xy 7.541616 0.883942) (xy 7.559566 0.532170) (xy 7.587842 0.316811) (xy 7.620000 0.254000)
144 | (xy 7.656210 0.335667) )(layer F.SilkS) (width 0.010000)
145 | )
146 | (fp_poly (pts (xy 9.752256 0.277214) (xy 9.786541 0.363866) (xy 9.805016 0.539478) (xy 9.810114 0.829566) (xy 9.804271 1.259651) (xy 9.802696 1.333500) (xy 9.789284 1.791135) (xy 9.770483 2.103659)
147 | (xy 9.743006 2.295283) (xy 9.703564 2.390216) (xy 9.656047 2.413000) (xy 9.563800 2.346570) (xy 9.401401 2.165317) (xy 9.191131 1.896300) (xy 8.955270 1.566578) (xy 8.936380 1.538999)
148 | (xy 8.339667 0.664999) (xy 8.315636 1.560166) (xy 8.300183 1.971614) (xy 8.277350 2.239841) (xy 8.242818 2.390930) (xy 8.192270 2.450966) (xy 8.167469 2.455334) (xy 8.115715 2.428973)
149 | (xy 8.080185 2.333491) (xy 8.058119 2.144287) (xy 8.046759 1.836761) (xy 8.043346 1.386313) (xy 8.043334 1.348459) (xy 8.048404 0.849231) (xy 8.071451 0.507639) (xy 8.124225 0.321326)
150 | (xy 8.218478 0.287931) (xy 8.365961 0.405096) (xy 8.578427 0.670462) (xy 8.867627 1.081672) (xy 8.928586 1.170772) (xy 9.525000 2.044335) (xy 9.549031 1.149168) (xy 9.564248 0.739388)
151 | (xy 9.586576 0.472292) (xy 9.620501 0.321254) (xy 9.670503 0.259644) (xy 9.699727 0.254000) (xy 9.752256 0.277214) )(layer F.SilkS) (width 0.010000)
152 | )
153 | (fp_poly (pts (xy 11.221042 0.213929) (xy 11.452371 0.292535) (xy 11.647599 0.425708) (xy 11.810292 0.603830) (xy 11.906999 0.780021) (xy 11.904271 0.907400) (xy 11.897082 0.915807) (xy 11.818108 0.888757)
154 | (xy 11.676755 0.764314) (xy 11.618745 0.701797) (xy 11.322860 0.461866) (xy 11.019832 0.375385) (xy 10.735167 0.429649) (xy 10.494370 0.611950) (xy 10.322949 0.909582) (xy 10.246408 1.309841)
155 | (xy 10.244667 1.386300) (xy 10.308630 1.778122) (xy 10.488379 2.071819) (xy 10.765707 2.246206) (xy 11.018042 2.286000) (xy 11.321579 2.225584) (xy 11.576449 2.068309) (xy 11.736805 1.850138)
156 | (xy 11.768667 1.697182) (xy 11.741070 1.583489) (xy 11.628252 1.533639) (xy 11.434997 1.524000) (xy 11.209552 1.504319) (xy 11.065048 1.455436) (xy 11.049000 1.439334) (xy 11.094059 1.389890)
157 | (xy 11.289982 1.360969) (xy 11.509670 1.354667) (xy 12.022667 1.354667) (xy 12.022667 1.857670) (xy 12.009439 2.134981) (xy 11.975153 2.338701) (xy 11.938000 2.413000) (xy 11.871360 2.387077)
158 | (xy 11.853334 2.290997) (xy 11.836418 2.148656) (xy 11.768356 2.139278) (xy 11.623172 2.262354) (xy 11.599334 2.286000) (xy 11.374673 2.407797) (xy 11.063335 2.452422) (xy 10.730611 2.417401)
159 | (xy 10.488632 2.328072) (xy 10.264722 2.125531) (xy 10.089923 1.818964) (xy 9.997453 1.472932) (xy 9.990667 1.360319) (xy 10.058139 0.937403) (xy 10.242299 0.591301) (xy 10.515760 0.342018)
160 | (xy 10.851136 0.209559) (xy 11.221042 0.213929) )(layer F.SilkS) (width 0.010000)
161 | )
162 | (fp_poly (pts (xy -5.080000 -1.448713) (xy -5.084959 -1.016352) (xy -5.102924 -0.718636) (xy -5.138524 -0.521084) (xy -5.196392 -0.389216) (xy -5.228166 -0.345471) (xy -5.443966 -0.194347) (xy -5.736484 -0.118757)
163 | (xy -6.024306 -0.133665) (xy -6.138333 -0.178182) (xy -6.404472 -0.402939) (xy -6.516327 -0.678656) (xy -6.519333 -0.735849) (xy -6.458309 -0.885105) (xy -6.319229 -0.941419) (xy -6.168079 -0.900875)
164 | (xy -6.071579 -0.762427) (xy -5.968194 -0.595863) (xy -5.880128 -0.537004) (xy -5.722951 -0.529631) (xy -5.610804 -0.653155) (xy -5.540017 -0.917765) (xy -5.506916 -1.333652) (xy -5.503333 -1.582515)
165 | (xy -5.501785 -1.950621) (xy -5.491405 -2.181435) (xy -5.463587 -2.306999) (xy -5.409726 -2.359356) (xy -5.321217 -2.370546) (xy -5.291666 -2.370666) (xy -5.080000 -2.370666) (xy -5.080000 -1.448713) )(layer F.SilkS) (width 0.010000)
166 | )
167 | (fp_poly (pts (xy -4.127500 -2.369418) (xy -3.671612 -2.347959) (xy -3.358964 -2.278984) (xy -3.167639 -2.152338) (xy -3.075715 -1.957864) (xy -3.063390 -1.876372) (xy -3.073930 -1.645667) (xy -3.136794 -1.476740)
168 | (xy -3.138575 -1.474548) (xy -3.190806 -1.353239) (xy -3.116206 -1.214988) (xy -3.087907 -1.182652) (xy -2.956449 -0.930207) (xy -2.947904 -0.645534) (xy -3.059186 -0.394714) (xy -3.127935 -0.325473)
169 | (xy -3.267494 -0.243319) (xy -3.463659 -0.194880) (xy -3.758459 -0.172889) (xy -4.031046 -0.169333) (xy -4.741333 -0.169333) (xy -4.741333 -0.804333) (xy -4.233333 -0.804333) (xy -4.219871 -0.605590)
170 | (xy -4.146852 -0.524074) (xy -3.965332 -0.508013) (xy -3.953182 -0.508000) (xy -3.708520 -0.541424) (xy -3.519473 -0.620284) (xy -3.409557 -0.777683) (xy -3.424329 -0.916618) (xy -3.492037 -1.034664)
171 | (xy -3.629557 -1.088715) (xy -3.858039 -1.100666) (xy -4.089865 -1.094044) (xy -4.198792 -1.049736) (xy -4.231249 -0.931082) (xy -4.233333 -0.804333) (xy -4.741333 -0.804333) (xy -4.741333 -1.693333)
172 | (xy -4.233333 -1.693333) (xy -4.215869 -1.520566) (xy -4.128776 -1.451332) (xy -3.947367 -1.439333) (xy -3.720168 -1.474586) (xy -3.561543 -1.559958) (xy -3.556895 -1.565255) (xy -3.478880 -1.740208)
173 | (xy -3.553445 -1.870682) (xy -3.766172 -1.940238) (xy -3.892009 -1.947333) (xy -4.110266 -1.937505) (xy -4.207719 -1.884030) (xy -4.232727 -1.750922) (xy -4.233333 -1.693333) (xy -4.741333 -1.693333)
174 | (xy -4.741333 -2.370666) (xy -4.127500 -2.369418) )(layer F.SilkS) (width 0.010000)
175 | )
176 | (fp_poly (pts (xy -1.607558 -2.349209) (xy -1.277889 -2.279113) (xy -1.065875 -2.151790) (xy -0.948077 -1.958654) (xy -0.947263 -1.956266) (xy -0.920134 -1.749865) (xy -0.948265 -1.525061) (xy -1.016768 -1.344293)
177 | (xy -1.110755 -1.270000) (xy -1.110901 -1.270000) (xy -1.130434 -1.210404) (xy -1.070172 -1.079500) (xy -0.983216 -0.872244) (xy -0.916855 -0.597142) (xy -0.906944 -0.529166) (xy -0.886160 -0.304286)
178 | (xy -0.915135 -0.200404) (xy -1.020046 -0.170837) (xy -1.108723 -0.169333) (xy -1.281841 -0.190564) (xy -1.346646 -0.289858) (xy -1.354666 -0.428899) (xy -1.393756 -0.748086) (xy -1.523330 -0.935227)
179 | (xy -1.761844 -1.011528) (xy -1.865645 -1.016000) (xy -2.201333 -1.016000) (xy -2.201333 -0.592666) (xy -2.206882 -0.342064) (xy -2.241003 -0.217097) (xy -2.329902 -0.174087) (xy -2.455333 -0.169333)
180 | (xy -2.709333 -0.169333) (xy -2.709333 -1.646132) (xy -2.201333 -1.646132) (xy -2.193291 -1.456514) (xy -2.137299 -1.374273) (xy -1.985556 -1.361958) (xy -1.850123 -1.370965) (xy -1.586280 -1.422720)
181 | (xy -1.423560 -1.519524) (xy -1.413315 -1.533658) (xy -1.350810 -1.732365) (xy -1.441453 -1.870633) (xy -1.677362 -1.940399) (xy -1.817676 -1.947333) (xy -2.052832 -1.941245) (xy -2.164582 -1.898942)
182 | (xy -2.198851 -1.784369) (xy -2.201333 -1.646132) (xy -2.709333 -1.646132) (xy -2.709333 -2.370666) (xy -2.078317 -2.370666) (xy -1.607558 -2.349209) )(layer F.SilkS) (width 0.010000)
183 | )
184 | (fp_poly (pts (xy -9.059333 1.905000) (xy -9.101666 1.947334) (xy -9.144000 1.905000) (xy -9.101666 1.862667) (xy -9.059333 1.905000) )(layer F.SilkS) (width 0.010000)
185 | )
186 | (fp_poly (pts (xy -9.398000 -1.735666) (xy -9.440333 -1.693333) (xy -9.482666 -1.735666) (xy -9.440333 -1.778000) (xy -9.398000 -1.735666) )(layer F.SilkS) (width 0.010000)
187 | )
188 | (fp_poly (pts (xy -8.720666 -1.735666) (xy -8.763000 -1.693333) (xy -8.805333 -1.735666) (xy -8.763000 -1.778000) (xy -8.720666 -1.735666) )(layer F.SilkS) (width 0.010000)
189 | )
190 | )
191 |
--------------------------------------------------------------------------------
/pcb/kicad/WS2812B.pretty/np_logo.kicad_mod:
--------------------------------------------------------------------------------
1 | (module LOGO (layer F.Cu)
2 | (at 0 0)
3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide
4 | (effects (font (thickness 0.3)))
5 | )
6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide
7 | (effects (font (thickness 0.3)))
8 | )
9 | (fp_poly (pts (xy -9.493809 6.686932) (xy -9.319084 7.075554) (xy -9.499802 7.327969) (xy -9.578900 7.337778) (xy -9.963845 7.133740) (xy -10.006837 7.075057) (xy -9.993349 6.740055) (xy -9.694988 6.594231)
10 | (xy -9.493809 6.686932) )(layer F.SilkS) (width 0.010000)
11 | )
12 | (fp_poly (pts (xy -7.628201 6.988097) (xy -7.620000 7.055556) (xy -7.834764 7.329577) (xy -7.902222 7.337778) (xy -8.176244 7.123014) (xy -8.184445 7.055556) (xy -7.969681 6.781534) (xy -7.902222 6.773333)
13 | (xy -7.628201 6.988097) )(layer F.SilkS) (width 0.010000)
14 | )
15 | (fp_poly (pts (xy -5.934868 6.988097) (xy -5.926667 7.055556) (xy -6.141431 7.329577) (xy -6.208889 7.337778) (xy -6.482910 7.123014) (xy -6.491111 7.055556) (xy -6.276347 6.781534) (xy -6.208889 6.773333)
16 | (xy -5.934868 6.988097) )(layer F.SilkS) (width 0.010000)
17 | )
18 | (fp_poly (pts (xy -4.241535 6.988097) (xy -4.233333 7.055556) (xy -4.448098 7.329577) (xy -4.515556 7.337778) (xy -4.789577 7.123014) (xy -4.797778 7.055556) (xy -4.583014 6.781534) (xy -4.515556 6.773333)
19 | (xy -4.241535 6.988097) )(layer F.SilkS) (width 0.010000)
20 | )
21 | (fp_poly (pts (xy -2.548201 6.988097) (xy -2.540000 7.055556) (xy -2.754764 7.329577) (xy -2.822222 7.337778) (xy -3.096244 7.123014) (xy -3.104445 7.055556) (xy -2.889681 6.781534) (xy -2.822222 6.773333)
22 | (xy -2.548201 6.988097) )(layer F.SilkS) (width 0.010000)
23 | )
24 | (fp_poly (pts (xy -0.763321 6.978480) (xy -0.705556 7.055556) (xy -0.769535 7.297166) (xy -0.971122 7.337778) (xy -1.357262 7.190430) (xy -1.411111 7.055556) (xy -1.208553 6.781411) (xy -1.145545 6.773333)
25 | (xy -0.763321 6.978480) )(layer F.SilkS) (width 0.010000)
26 | )
27 | (fp_poly (pts (xy 1.121287 6.988596) (xy 1.128889 7.055556) (xy 0.899171 7.303238) (xy 0.688899 7.337778) (xy 0.396783 7.200959) (xy 0.423333 7.055556) (xy 0.784142 6.784099) (xy 0.863322 6.773333)
28 | (xy 1.121287 6.988596) )(layer F.SilkS) (width 0.010000)
29 | )
30 | (fp_poly (pts (xy 2.814021 6.988097) (xy 2.822222 7.055556) (xy 2.607458 7.329577) (xy 2.540000 7.337778) (xy 2.265979 7.123014) (xy 2.257778 7.055556) (xy 2.472542 6.781534) (xy 2.540000 6.773333)
31 | (xy 2.814021 6.988097) )(layer F.SilkS) (width 0.010000)
32 | )
33 | (fp_poly (pts (xy 4.507354 6.988097) (xy 4.515555 7.055556) (xy 4.300791 7.329577) (xy 4.233333 7.337778) (xy 3.959312 7.123014) (xy 3.951111 7.055556) (xy 4.165875 6.781534) (xy 4.233333 6.773333)
34 | (xy 4.507354 6.988097) )(layer F.SilkS) (width 0.010000)
35 | )
36 | (fp_poly (pts (xy 6.200688 6.988097) (xy 6.208889 7.055556) (xy 5.994125 7.329577) (xy 5.926667 7.337778) (xy 5.652645 7.123014) (xy 5.644444 7.055556) (xy 5.859208 6.781534) (xy 5.926667 6.773333)
37 | (xy 6.200688 6.988097) )(layer F.SilkS) (width 0.010000)
38 | )
39 | (fp_poly (pts (xy 7.894021 6.988097) (xy 7.902222 7.055556) (xy 7.687458 7.329577) (xy 7.620000 7.337778) (xy 7.345979 7.123014) (xy 7.337778 7.055556) (xy 7.552542 6.781534) (xy 7.620000 6.773333)
40 | (xy 7.894021 6.988097) )(layer F.SilkS) (width 0.010000)
41 | )
42 | (fp_poly (pts (xy 9.678901 6.978480) (xy 9.736667 7.055556) (xy 9.672687 7.297166) (xy 9.471100 7.337778) (xy 9.084960 7.190430) (xy 9.031111 7.055556) (xy 9.233670 6.781411) (xy 9.296677 6.773333)
43 | (xy 9.678901 6.978480) )(layer F.SilkS) (width 0.010000)
44 | )
45 | (fp_poly (pts (xy 11.006667 6.067778) (xy 11.278123 6.428587) (xy 11.288889 6.507767) (xy 11.073626 6.765732) (xy 11.006667 6.773333) (xy 10.758985 6.543615) (xy 10.724444 6.333344) (xy 10.861263 6.041228)
46 | (xy 11.006667 6.067778) )(layer F.SilkS) (width 0.010000)
47 | )
48 | (fp_poly (pts (xy -10.732646 5.859209) (xy -10.724445 5.926667) (xy -10.939209 6.200688) (xy -11.006667 6.208889) (xy -11.280688 5.994125) (xy -11.288889 5.926667) (xy -11.074125 5.652646) (xy -11.006667 5.644445)
49 | (xy -10.732646 5.859209) )(layer F.SilkS) (width 0.010000)
50 | )
51 | (fp_poly (pts (xy -8.754803 4.940029) (xy -8.553544 5.233253) (xy -8.673730 5.445748) (xy -9.109492 5.477495) (xy -9.242778 5.441730) (xy -9.571347 5.158790) (xy -9.470936 4.870373) (xy -9.188878 4.797778)
52 | (xy -8.754803 4.940029) )(layer F.SilkS) (width 0.010000)
53 | )
54 | (fp_poly (pts (xy -1.725174 5.026366) (xy -1.693333 5.221111) (xy -1.845725 5.596684) (xy -1.975556 5.644445) (xy -2.225937 5.415857) (xy -2.257778 5.221111) (xy -2.105386 4.845539) (xy -1.975556 4.797778)
55 | (xy -1.725174 5.026366) )(layer F.SilkS) (width 0.010000)
56 | )
57 | (fp_poly (pts (xy -0.589896 5.138776) (xy -0.624487 5.401238) (xy -0.779928 5.613683) (xy -0.964368 5.400101) (xy -1.067926 4.984618) (xy -1.016038 4.873075) (xy -0.737040 4.826730) (xy -0.589896 5.138776) )(layer F.SilkS) (width 0.010000)
58 | )
59 | (fp_poly (pts (xy 2.152043 4.909061) (xy 2.257778 5.063344) (xy 2.041370 5.439586) (xy 1.516952 5.453712) (xy 1.481667 5.441730) (xy 1.144031 5.166909) (xy 1.278501 4.892404) (xy 1.693333 4.797778)
60 | (xy 2.152043 4.909061) )(layer F.SilkS) (width 0.010000)
61 | )
62 | (fp_poly (pts (xy -7.651841 4.744144) (xy -7.620000 4.938889) (xy -7.772392 5.314462) (xy -7.902222 5.362222) (xy -8.152604 5.133634) (xy -8.184445 4.938889) (xy -8.032053 4.563316) (xy -7.902222 4.515556)
63 | (xy -7.651841 4.744144) )(layer F.SilkS) (width 0.010000)
64 | )
65 | (fp_poly (pts (xy 12.110104 4.856553) (xy 12.075513 5.119016) (xy 11.920072 5.331461) (xy 11.735632 5.117878) (xy 11.632074 4.702395) (xy 11.683962 4.590853) (xy 11.962960 4.544508) (xy 12.110104 4.856553) )(layer F.SilkS) (width 0.010000)
66 | )
67 | (fp_poly (pts (xy 3.096243 4.730320) (xy 3.104444 4.797778) (xy 2.889680 5.071799) (xy 2.822222 5.080000) (xy 2.548201 4.865236) (xy 2.540000 4.797778) (xy 2.754764 4.523757) (xy 2.822222 4.515556)
68 | (xy 3.096243 4.730320) )(layer F.SilkS) (width 0.010000)
69 | )
70 | (fp_poly (pts (xy -11.320730 4.179699) (xy -11.288889 4.374445) (xy -11.441281 4.750017) (xy -11.571111 4.797778) (xy -11.821493 4.569190) (xy -11.853333 4.374445) (xy -11.700942 3.998872) (xy -11.571111 3.951111)
71 | (xy -11.320730 4.179699) )(layer F.SilkS) (width 0.010000)
72 | )
73 | (fp_poly (pts (xy -2.759564 4.135282) (xy -2.696009 4.209229) (xy -2.724171 4.578214) (xy -2.798118 4.641769) (xy -3.167103 4.613607) (xy -3.230658 4.539660) (xy -3.202496 4.170675) (xy -3.128549 4.107120)
74 | (xy -2.759564 4.135282) )(layer F.SilkS) (width 0.010000)
75 | )
76 | (fp_poly (pts (xy -0.596285 3.615255) (xy -0.564445 3.810000) (xy -0.716837 4.185573) (xy -0.846667 4.233333) (xy -1.097049 4.004745) (xy -1.128889 3.810000) (xy -0.976497 3.434427) (xy -0.846667 3.386667)
77 | (xy -0.596285 3.615255) )(layer F.SilkS) (width 0.010000)
78 | )
79 | (fp_poly (pts (xy -9.039312 3.601431) (xy -9.031111 3.668889) (xy -9.245875 3.942910) (xy -9.313333 3.951111) (xy -9.587355 3.736347) (xy -9.595556 3.668889) (xy -9.380792 3.394868) (xy -9.313333 3.386667)
80 | (xy -9.039312 3.601431) )(layer F.SilkS) (width 0.010000)
81 | )
82 | (fp_poly (pts (xy -7.628201 3.601431) (xy -7.620000 3.668889) (xy -7.834764 3.942910) (xy -7.902222 3.951111) (xy -8.176244 3.736347) (xy -8.184445 3.668889) (xy -7.969681 3.394868) (xy -7.902222 3.386667)
83 | (xy -7.628201 3.601431) )(layer F.SilkS) (width 0.010000)
84 | )
85 | (fp_poly (pts (xy 1.685132 3.601431) (xy 1.693333 3.668889) (xy 1.478569 3.942910) (xy 1.411111 3.951111) (xy 1.137090 3.736347) (xy 1.128889 3.668889) (xy 1.343653 3.394868) (xy 1.411111 3.386667)
86 | (xy 1.685132 3.601431) )(layer F.SilkS) (width 0.010000)
87 | )
88 | (fp_poly (pts (xy 3.096243 3.601431) (xy 3.104444 3.668889) (xy 2.889680 3.942910) (xy 2.822222 3.951111) (xy 2.548201 3.736347) (xy 2.540000 3.668889) (xy 2.754764 3.394868) (xy 2.822222 3.386667)
89 | (xy 3.096243 3.601431) )(layer F.SilkS) (width 0.010000)
90 | )
91 | (fp_poly (pts (xy -3.394868 3.319209) (xy -3.386667 3.386667) (xy -3.601431 3.660688) (xy -3.668889 3.668889) (xy -3.942910 3.454125) (xy -3.951111 3.386667) (xy -3.736347 3.112646) (xy -3.668889 3.104445)
92 | (xy -3.394868 3.319209) )(layer F.SilkS) (width 0.010000)
93 | )
94 | (fp_poly (pts (xy 12.103715 3.050810) (xy 12.135555 3.245556) (xy 11.983163 3.621128) (xy 11.853333 3.668889) (xy 11.602951 3.440301) (xy 11.571111 3.245556) (xy 11.723503 2.869983) (xy 11.853333 2.822222)
95 | (xy 12.103715 3.050810) )(layer F.SilkS) (width 0.010000)
96 | )
97 | (fp_poly (pts (xy -11.571111 2.398889) (xy -11.299655 2.759698) (xy -11.288889 2.838878) (xy -11.504152 3.096843) (xy -11.571111 3.104445) (xy -11.818793 2.874726) (xy -11.853333 2.664455) (xy -11.716514 2.372339)
98 | (xy -11.571111 2.398889) )(layer F.SilkS) (width 0.010000)
99 | )
100 | (fp_poly (pts (xy -9.039312 2.472542) (xy -9.031111 2.540000) (xy -9.245875 2.814021) (xy -9.313333 2.822222) (xy -9.587355 2.607458) (xy -9.595556 2.540000) (xy -9.380792 2.265979) (xy -9.313333 2.257778)
101 | (xy -9.039312 2.472542) )(layer F.SilkS) (width 0.010000)
102 | )
103 | (fp_poly (pts (xy -7.651841 2.204144) (xy -7.620000 2.398889) (xy -7.772392 2.774462) (xy -7.902222 2.822222) (xy -8.152604 2.593634) (xy -8.184445 2.398889) (xy -8.032053 2.023316) (xy -7.902222 1.975556)
104 | (xy -7.651841 2.204144) )(layer F.SilkS) (width 0.010000)
105 | )
106 | (fp_poly (pts (xy -2.223624 2.263010) (xy -1.976778 2.551247) (xy -1.975556 2.570195) (xy -2.180186 2.794253) (xy -2.605040 2.777641) (xy -2.966559 2.534255) (xy -2.974938 2.521223) (xy -3.065303 2.155523)
107 | (xy -3.031988 2.091247) (xy -2.680875 2.061841) (xy -2.223624 2.263010) )(layer F.SilkS) (width 0.010000)
108 | )
109 | (fp_poly (pts (xy -0.572646 2.472542) (xy -0.564445 2.540000) (xy -0.779209 2.814021) (xy -0.846667 2.822222) (xy -1.120688 2.607458) (xy -1.128889 2.540000) (xy -0.914125 2.265979) (xy -0.846667 2.257778)
110 | (xy -0.572646 2.472542) )(layer F.SilkS) (width 0.010000)
111 | )
112 | (fp_poly (pts (xy 1.685132 2.472542) (xy 1.693333 2.540000) (xy 1.478569 2.814021) (xy 1.411111 2.822222) (xy 1.137090 2.607458) (xy 1.128889 2.540000) (xy 1.343653 2.265979) (xy 1.411111 2.257778)
113 | (xy 1.685132 2.472542) )(layer F.SilkS) (width 0.010000)
114 | )
115 | (fp_poly (pts (xy 3.072604 2.204144) (xy 3.104444 2.398889) (xy 2.952052 2.774462) (xy 2.822222 2.822222) (xy 2.571840 2.593634) (xy 2.540000 2.398889) (xy 2.692392 2.023316) (xy 2.822222 1.975556)
116 | (xy 3.072604 2.204144) )(layer F.SilkS) (width 0.010000)
117 | )
118 | (fp_poly (pts (xy -4.213832 2.128719) (xy -3.963585 2.401165) (xy -4.248610 2.534480) (xy -4.391101 2.540000) (xy -4.681776 2.401145) (xy -4.653822 2.253174) (xy -4.315594 2.090368) (xy -4.213832 2.128719) )(layer F.SilkS) (width 0.010000)
119 | )
120 | (fp_poly (pts (xy 12.094944 1.333980) (xy 12.135555 1.535566) (xy 11.988207 1.921707) (xy 11.853333 1.975556) (xy 11.579189 1.772997) (xy 11.571111 1.709989) (xy 11.776258 1.327765) (xy 11.853333 1.270000)
121 | (xy 12.094944 1.333980) )(layer F.SilkS) (width 0.010000)
122 | )
123 | (fp_poly (pts (xy -9.056563 1.187664) (xy -9.091154 1.450127) (xy -9.246594 1.662572) (xy -9.431034 1.448990) (xy -9.534593 1.033507) (xy -9.482705 0.921964) (xy -9.203707 0.875619) (xy -9.056563 1.187664) )(layer F.SilkS) (width 0.010000)
124 | )
125 | (fp_poly (pts (xy -4.829618 1.075255) (xy -4.797778 1.270000) (xy -4.950170 1.645573) (xy -5.080000 1.693333) (xy -5.330382 1.464745) (xy -5.362222 1.270000) (xy -5.209830 0.894427) (xy -5.080000 0.846667)
126 | (xy -4.829618 1.075255) )(layer F.SilkS) (width 0.010000)
127 | )
128 | (fp_poly (pts (xy -3.324009 1.030838) (xy -3.260453 1.104784) (xy -3.288616 1.473769) (xy -3.362562 1.537325) (xy -3.731547 1.509162) (xy -3.795103 1.435216) (xy -3.766940 1.066231) (xy -3.692994 1.002675)
129 | (xy -3.324009 1.030838) )(layer F.SilkS) (width 0.010000)
130 | )
131 | (fp_poly (pts (xy -1.983757 1.343653) (xy -1.975556 1.411111) (xy -2.190320 1.685132) (xy -2.257778 1.693333) (xy -2.531799 1.478569) (xy -2.540000 1.411111) (xy -2.325236 1.137090) (xy -2.257778 1.128889)
132 | (xy -1.983757 1.343653) )(layer F.SilkS) (width 0.010000)
133 | )
134 | (fp_poly (pts (xy -0.846667 0.987778) (xy -0.575210 1.348587) (xy -0.564445 1.427767) (xy -0.779707 1.685732) (xy -0.846667 1.693333) (xy -1.094349 1.463615) (xy -1.128889 1.253344) (xy -0.992070 0.961228)
135 | (xy -0.846667 0.987778) )(layer F.SilkS) (width 0.010000)
136 | )
137 | (fp_poly (pts (xy 1.667881 1.187664) (xy 1.633291 1.450127) (xy 1.477850 1.662572) (xy 1.293410 1.448990) (xy 1.189851 1.033507) (xy 1.241739 0.921964) (xy 1.520738 0.875619) (xy 1.667881 1.187664) )(layer F.SilkS) (width 0.010000)
138 | )
139 | (fp_poly (pts (xy -11.297090 1.061431) (xy -11.288889 1.128889) (xy -11.503653 1.402910) (xy -11.571111 1.411111) (xy -11.845132 1.196347) (xy -11.853333 1.128889) (xy -11.638569 0.854868) (xy -11.571111 0.846667)
140 | (xy -11.297090 1.061431) )(layer F.SilkS) (width 0.010000)
141 | )
142 | (fp_poly (pts (xy -7.628201 1.061431) (xy -7.620000 1.128889) (xy -7.834764 1.402910) (xy -7.902222 1.411111) (xy -8.176244 1.196347) (xy -8.184445 1.128889) (xy -7.969681 0.854868) (xy -7.902222 0.846667)
143 | (xy -7.628201 1.061431) )(layer F.SilkS) (width 0.010000)
144 | )
145 | (fp_poly (pts (xy 3.096243 1.061431) (xy 3.104444 1.128889) (xy 2.889680 1.402910) (xy 2.822222 1.411111) (xy 2.548201 1.196347) (xy 2.540000 1.128889) (xy 2.754764 0.854868) (xy 2.822222 0.846667)
146 | (xy 3.096243 1.061431) )(layer F.SilkS) (width 0.010000)
147 | )
148 | (fp_poly (pts (xy 4.467795 0.999059) (xy 4.515555 1.128889) (xy 4.286967 1.379271) (xy 4.092222 1.411111) (xy 3.716649 1.258719) (xy 3.668889 1.128889) (xy 3.897477 0.878507) (xy 4.092222 0.846667)
149 | (xy 4.467795 0.999059) )(layer F.SilkS) (width 0.010000)
150 | )
151 | (fp_poly (pts (xy 5.636243 1.061431) (xy 5.644444 1.128889) (xy 5.429680 1.402910) (xy 5.362222 1.411111) (xy 5.088201 1.196347) (xy 5.080000 1.128889) (xy 5.294764 0.854868) (xy 5.362222 0.846667)
152 | (xy 5.636243 1.061431) )(layer F.SilkS) (width 0.010000)
153 | )
154 | (fp_poly (pts (xy 7.023715 0.793032) (xy 7.055555 0.987778) (xy 6.903163 1.363350) (xy 6.773333 1.411111) (xy 6.522951 1.182523) (xy 6.491111 0.987778) (xy 6.643503 0.612205) (xy 6.773333 0.564445)
155 | (xy 7.023715 0.793032) )(layer F.SilkS) (width 0.010000)
156 | )
157 | (fp_poly (pts (xy 8.267790 0.487369) (xy 8.325555 0.564445) (xy 8.261576 0.806055) (xy 8.059989 0.846667) (xy 7.673849 0.699319) (xy 7.620000 0.564445) (xy 7.822559 0.290300) (xy 7.885566 0.282222)
158 | (xy 8.267790 0.487369) )(layer F.SilkS) (width 0.010000)
159 | )
160 | (fp_poly (pts (xy -5.476784 0.136819) (xy -5.503333 0.282222) (xy -5.864143 0.553679) (xy -5.943323 0.564445) (xy -6.201288 0.349182) (xy -6.208889 0.282222) (xy -5.979171 0.034540) (xy -5.768900 0.000000)
161 | (xy -5.476784 0.136819) )(layer F.SilkS) (width 0.010000)
162 | )
163 | (fp_poly (pts (xy -3.959312 0.214764) (xy -3.951111 0.282222) (xy -4.165875 0.556243) (xy -4.233333 0.564445) (xy -4.507355 0.349680) (xy -4.515556 0.282222) (xy -4.300792 0.008201) (xy -4.233333 0.000000)
164 | (xy -3.959312 0.214764) )(layer F.SilkS) (width 0.010000)
165 | )
166 | (fp_poly (pts (xy -9.039312 -0.067458) (xy -9.031111 0.000000) (xy -9.245875 0.274021) (xy -9.313333 0.282222) (xy -9.587355 0.067458) (xy -9.595556 0.000000) (xy -9.380792 -0.274021) (xy -9.313333 -0.282222)
167 | (xy -9.039312 -0.067458) )(layer F.SilkS) (width 0.010000)
168 | )
169 | (fp_poly (pts (xy -7.628201 -0.067458) (xy -7.620000 0.000000) (xy -7.834764 0.274021) (xy -7.902222 0.282222) (xy -8.176244 0.067458) (xy -8.184445 0.000000) (xy -7.969681 -0.274021) (xy -7.902222 -0.282222)
170 | (xy -7.628201 -0.067458) )(layer F.SilkS) (width 0.010000)
171 | )
172 | (fp_poly (pts (xy -1.983757 -0.067458) (xy -1.975556 0.000000) (xy -2.190320 0.274021) (xy -2.257778 0.282222) (xy -2.531799 0.067458) (xy -2.540000 0.000000) (xy -2.325236 -0.274021) (xy -2.257778 -0.282222)
173 | (xy -1.983757 -0.067458) )(layer F.SilkS) (width 0.010000)
174 | )
175 | (fp_poly (pts (xy -0.572646 -0.067458) (xy -0.564445 0.000000) (xy -0.779209 0.274021) (xy -0.846667 0.282222) (xy -1.120688 0.067458) (xy -1.128889 0.000000) (xy -0.914125 -0.274021) (xy -0.846667 -0.282222)
176 | (xy -0.572646 -0.067458) )(layer F.SilkS) (width 0.010000)
177 | )
178 | (fp_poly (pts (xy 1.685132 -0.067458) (xy 1.693333 0.000000) (xy 1.478569 0.274021) (xy 1.411111 0.282222) (xy 1.137090 0.067458) (xy 1.128889 0.000000) (xy 1.343653 -0.274021) (xy 1.411111 -0.282222)
179 | (xy 1.685132 -0.067458) )(layer F.SilkS) (width 0.010000)
180 | )
181 | (fp_poly (pts (xy 3.115468 -0.556271) (xy 3.368063 0.021422) (xy 3.211919 0.275067) (xy 3.134639 0.282222) (xy 2.831608 0.056004) (xy 2.704662 -0.181505) (xy 2.633566 -0.676286) (xy 2.818929 -0.828303)
182 | (xy 3.115468 -0.556271) )(layer F.SilkS) (width 0.010000)
183 | )
184 | (fp_poly (pts (xy 4.578213 -0.380273) (xy 4.641769 -0.306327) (xy 4.613607 0.062658) (xy 4.539660 0.126214) (xy 4.170675 0.098051) (xy 4.107120 0.024105) (xy 4.135282 -0.344880) (xy 4.209229 -0.408436)
185 | (xy 4.578213 -0.380273) )(layer F.SilkS) (width 0.010000)
186 | )
187 | (fp_poly (pts (xy 5.886055 -0.359354) (xy 5.926667 -0.157767) (xy 5.779318 0.228373) (xy 5.644444 0.282222) (xy 5.370300 0.079664) (xy 5.362222 0.016656) (xy 5.567369 -0.365568) (xy 5.644444 -0.423333)
188 | (xy 5.886055 -0.359354) )(layer F.SilkS) (width 0.010000)
189 | )
190 | (fp_poly (pts (xy 9.093769 -0.380273) (xy 9.157325 -0.306327) (xy 9.129162 0.062658) (xy 9.055216 0.126214) (xy 8.686231 0.098051) (xy 8.622675 0.024105) (xy 8.650837 -0.344880) (xy 8.724784 -0.408436)
191 | (xy 9.093769 -0.380273) )(layer F.SilkS) (width 0.010000)
192 | )
193 | (fp_poly (pts (xy 12.127354 -0.067458) (xy 12.135555 0.000000) (xy 11.920791 0.274021) (xy 11.853333 0.282222) (xy 11.579312 0.067458) (xy 11.571111 0.000000) (xy 11.785875 -0.274021) (xy 11.853333 -0.282222)
194 | (xy 12.127354 -0.067458) )(layer F.SilkS) (width 0.010000)
195 | )
196 | (fp_poly (pts (xy 7.283929 -0.417096) (xy 7.337778 -0.282222) (xy 7.135219 -0.008078) (xy 7.072211 0.000000) (xy 6.689987 -0.205147) (xy 6.632222 -0.282222) (xy 6.696202 -0.523833) (xy 6.897788 -0.564444)
197 | (xy 7.283929 -0.417096) )(layer F.SilkS) (width 0.010000)
198 | )
199 | (fp_poly (pts (xy -11.297090 -0.631903) (xy -11.288889 -0.564444) (xy -11.503653 -0.290423) (xy -11.571111 -0.282222) (xy -11.845132 -0.496986) (xy -11.853333 -0.564444) (xy -11.638569 -0.838466) (xy -11.571111 -0.846667)
200 | (xy -11.297090 -0.631903) )(layer F.SilkS) (width 0.010000)
201 | )
202 | (fp_poly (pts (xy -6.217090 -0.914125) (xy -6.208889 -0.846667) (xy -6.423653 -0.572645) (xy -6.491111 -0.564444) (xy -6.765132 -0.779208) (xy -6.773333 -0.846667) (xy -6.558569 -1.120688) (xy -6.491111 -1.128889)
203 | (xy -6.217090 -0.914125) )(layer F.SilkS) (width 0.010000)
204 | )
205 | (fp_poly (pts (xy -4.523157 -0.913626) (xy -4.515556 -0.846667) (xy -4.745274 -0.598985) (xy -4.955545 -0.564444) (xy -5.247661 -0.701263) (xy -5.221111 -0.846667) (xy -4.860302 -1.118123) (xy -4.781122 -1.128889)
206 | (xy -4.523157 -0.913626) )(layer F.SilkS) (width 0.010000)
207 | )
208 | (fp_poly (pts (xy -9.062952 -1.464745) (xy -9.031111 -1.270000) (xy -9.183503 -0.894427) (xy -9.313333 -0.846667) (xy -9.563715 -1.075255) (xy -9.595556 -1.270000) (xy -9.443164 -1.645573) (xy -9.313333 -1.693333)
209 | (xy -9.062952 -1.464745) )(layer F.SilkS) (width 0.010000)
210 | )
211 | (fp_poly (pts (xy -1.983757 -1.196347) (xy -1.975556 -1.128889) (xy -2.190320 -0.854868) (xy -2.257778 -0.846667) (xy -2.531799 -1.061431) (xy -2.540000 -1.128889) (xy -2.325236 -1.402910) (xy -2.257778 -1.411111)
212 | (xy -1.983757 -1.196347) )(layer F.SilkS) (width 0.010000)
213 | )
214 | (fp_poly (pts (xy -0.572646 -1.196347) (xy -0.564445 -1.128889) (xy -0.779209 -0.854868) (xy -0.846667 -0.846667) (xy -1.120688 -1.061431) (xy -1.128889 -1.128889) (xy -0.914125 -1.402910) (xy -0.846667 -1.411111)
215 | (xy -0.572646 -1.196347) )(layer F.SilkS) (width 0.010000)
216 | )
217 | (fp_poly (pts (xy 1.661493 -1.464745) (xy 1.693333 -1.270000) (xy 1.540941 -0.894427) (xy 1.411111 -0.846667) (xy 1.160729 -1.075255) (xy 1.128889 -1.270000) (xy 1.281281 -1.645573) (xy 1.411111 -1.693333)
218 | (xy 1.661493 -1.464745) )(layer F.SilkS) (width 0.010000)
219 | )
220 | (fp_poly (pts (xy 8.176243 -1.196347) (xy 8.184444 -1.128889) (xy 7.969680 -0.854868) (xy 7.902222 -0.846667) (xy 7.628201 -1.061431) (xy 7.620000 -1.128889) (xy 7.834764 -1.402910) (xy 7.902222 -1.411111)
221 | (xy 8.176243 -1.196347) )(layer F.SilkS) (width 0.010000)
222 | )
223 | (fp_poly (pts (xy 9.836075 -1.353799) (xy 9.679150 -1.099594) (xy 9.325489 -0.960672) (xy 9.199472 -1.084797) (xy 9.224425 -1.467077) (xy 9.327506 -1.560982) (xy 9.728166 -1.626805) (xy 9.836075 -1.353799) )(layer F.SilkS) (width 0.010000)
224 | )
225 | (fp_poly (pts (xy -7.080955 -1.807685) (xy -7.083778 -1.763889) (xy -7.313643 -1.612847) (xy -7.366000 -1.622778) (xy -7.610566 -1.484570) (xy -7.620000 -1.411111) (xy -7.834764 -1.137090) (xy -7.902222 -1.128889)
226 | (xy -8.176461 -1.321465) (xy -8.184445 -1.380916) (xy -7.963382 -1.699448) (xy -7.831667 -1.768318) (xy -7.256586 -1.932394) (xy -7.080955 -1.807685) )(layer F.SilkS) (width 0.010000)
227 | )
228 | (fp_poly (pts (xy -5.402834 -2.052687) (xy -5.362222 -1.851100) (xy -5.509570 -1.464960) (xy -5.644445 -1.411111) (xy -5.918589 -1.613670) (xy -5.926667 -1.676677) (xy -5.721520 -2.058901) (xy -5.644445 -2.116667)
229 | (xy -5.402834 -2.052687) )(layer F.SilkS) (width 0.010000)
230 | )
231 | (fp_poly (pts (xy 3.078992 -1.916780) (xy 3.044402 -1.654317) (xy 2.888961 -1.441873) (xy 2.704521 -1.655455) (xy 2.600962 -2.070938) (xy 2.652850 -2.182480) (xy 2.931849 -2.228826) (xy 3.078992 -1.916780) )(layer F.SilkS) (width 0.010000)
232 | )
233 | (fp_poly (pts (xy 12.127354 -1.760791) (xy 12.135555 -1.693333) (xy 11.920791 -1.419312) (xy 11.853333 -1.411111) (xy 11.579312 -1.625875) (xy 11.571111 -1.693333) (xy 11.785875 -1.967354) (xy 11.853333 -1.975555)
234 | (xy 12.127354 -1.760791) )(layer F.SilkS) (width 0.010000)
235 | )
236 | (fp_poly (pts (xy -11.297090 -2.325236) (xy -11.288889 -2.257778) (xy -11.503653 -1.983757) (xy -11.571111 -1.975555) (xy -11.845132 -2.190320) (xy -11.853333 -2.257778) (xy -11.638569 -2.531799) (xy -11.571111 -2.540000)
237 | (xy -11.297090 -2.325236) )(layer F.SilkS) (width 0.010000)
238 | )
239 | (fp_poly (pts (xy -2.007396 -2.593634) (xy -1.975556 -2.398889) (xy -2.127948 -2.023316) (xy -2.257778 -1.975555) (xy -2.508160 -2.204143) (xy -2.540000 -2.398889) (xy -2.387608 -2.774461) (xy -2.257778 -2.822222)
240 | (xy -2.007396 -2.593634) )(layer F.SilkS) (width 0.010000)
241 | )
242 | (fp_poly (pts (xy 8.286191 -2.626401) (xy 8.460916 -2.237779) (xy 8.280198 -1.985364) (xy 8.201100 -1.975555) (xy 7.816155 -2.179594) (xy 7.773163 -2.238277) (xy 7.786651 -2.573279) (xy 8.085012 -2.719103)
243 | (xy 8.286191 -2.626401) )(layer F.SilkS) (width 0.010000)
244 | )
245 | (fp_poly (pts (xy -9.039312 -2.607458) (xy -9.031111 -2.540000) (xy -9.245875 -2.265979) (xy -9.313333 -2.257778) (xy -9.587355 -2.472542) (xy -9.595556 -2.540000) (xy -9.380792 -2.814021) (xy -9.313333 -2.822222)
246 | (xy -9.039312 -2.607458) )(layer F.SilkS) (width 0.010000)
247 | )
248 | (fp_poly (pts (xy -7.642542 -2.837215) (xy -7.620000 -2.664455) (xy -7.777796 -2.299698) (xy -7.902222 -2.257778) (xy -8.129306 -2.494864) (xy -8.184445 -2.838878) (xy -8.075801 -3.229112) (xy -7.902222 -3.245555)
249 | (xy -7.642542 -2.837215) )(layer F.SilkS) (width 0.010000)
250 | )
251 | (fp_poly (pts (xy -0.572646 -2.607458) (xy -0.564445 -2.540000) (xy -0.779209 -2.265979) (xy -0.846667 -2.257778) (xy -1.120688 -2.472542) (xy -1.128889 -2.540000) (xy -0.914125 -2.814021) (xy -0.846667 -2.822222)
252 | (xy -0.572646 -2.607458) )(layer F.SilkS) (width 0.010000)
253 | )
254 | (fp_poly (pts (xy 1.685132 -2.607458) (xy 1.693333 -2.540000) (xy 1.478569 -2.265979) (xy 1.411111 -2.257778) (xy 1.137090 -2.472542) (xy 1.128889 -2.540000) (xy 1.343653 -2.814021) (xy 1.411111 -2.822222)
255 | (xy 1.685132 -2.607458) )(layer F.SilkS) (width 0.010000)
256 | )
257 | (fp_poly (pts (xy 9.830017 -2.669830) (xy 9.877778 -2.540000) (xy 9.649190 -2.289618) (xy 9.454444 -2.257778) (xy 9.078872 -2.410170) (xy 9.031111 -2.540000) (xy 9.259699 -2.790382) (xy 9.454444 -2.822222)
258 | (xy 9.830017 -2.669830) )(layer F.SilkS) (width 0.010000)
259 | )
260 | (fp_poly (pts (xy -5.980516 -2.957096) (xy -5.926667 -2.822222) (xy -6.129226 -2.548078) (xy -6.192233 -2.540000) (xy -6.574457 -2.745147) (xy -6.632222 -2.822222) (xy -6.568243 -3.063833) (xy -6.366656 -3.104444)
261 | (xy -5.980516 -2.957096) )(layer F.SilkS) (width 0.010000)
262 | )
263 | (fp_poly (pts (xy 3.938878 -3.748210) (xy 3.951111 -3.668889) (xy 3.722523 -3.418507) (xy 3.527778 -3.386667) (xy 3.152205 -3.234275) (xy 3.104444 -3.104444) (xy 2.889680 -2.830423) (xy 2.822222 -2.822222)
264 | (xy 2.547479 -2.946652) (xy 2.540000 -2.983492) (xy 2.746840 -3.346148) (xy 3.194288 -3.743739) (xy 3.622738 -3.949699) (xy 3.648730 -3.951111) (xy 3.938878 -3.748210) )(layer F.SilkS) (width 0.010000)
265 | )
266 | (fp_poly (pts (xy 7.611799 -3.454125) (xy 7.620000 -3.386667) (xy 7.405236 -3.112645) (xy 7.337778 -3.104444) (xy 7.063756 -3.319208) (xy 7.055555 -3.386667) (xy 7.270319 -3.660688) (xy 7.337778 -3.668889)
267 | (xy 7.611799 -3.454125) )(layer F.SilkS) (width 0.010000)
268 | )
269 | (fp_poly (pts (xy 12.127354 -3.454125) (xy 12.135555 -3.386667) (xy 11.920791 -3.112645) (xy 11.853333 -3.104444) (xy 11.579312 -3.319208) (xy 11.571111 -3.386667) (xy 11.785875 -3.660688) (xy 11.853333 -3.668889)
270 | (xy 12.127354 -3.454125) )(layer F.SilkS) (width 0.010000)
271 | )
272 | (fp_poly (pts (xy -9.071723 -4.028242) (xy -9.031111 -3.826656) (xy -9.178459 -3.440515) (xy -9.313333 -3.386667) (xy -9.587478 -3.589225) (xy -9.595556 -3.652233) (xy -9.390409 -4.034457) (xy -9.313333 -4.092222)
273 | (xy -9.071723 -4.028242) )(layer F.SilkS) (width 0.010000)
274 | )
275 | (fp_poly (pts (xy -1.983757 -3.736347) (xy -1.975556 -3.668889) (xy -2.190320 -3.394868) (xy -2.257778 -3.386667) (xy -2.531799 -3.601431) (xy -2.540000 -3.668889) (xy -2.325236 -3.942910) (xy -2.257778 -3.951111)
276 | (xy -1.983757 -3.736347) )(layer F.SilkS) (width 0.010000)
277 | )
278 | (fp_poly (pts (xy -0.572646 -3.736347) (xy -0.564445 -3.668889) (xy -0.779209 -3.394868) (xy -0.846667 -3.386667) (xy -1.120688 -3.601431) (xy -1.128889 -3.668889) (xy -0.914125 -3.942910) (xy -0.846667 -3.951111)
279 | (xy -0.572646 -3.736347) )(layer F.SilkS) (width 0.010000)
280 | )
281 | (fp_poly (pts (xy 1.652722 -4.028242) (xy 1.693333 -3.826656) (xy 1.545985 -3.440515) (xy 1.411111 -3.386667) (xy 1.136967 -3.589225) (xy 1.128889 -3.652233) (xy 1.334036 -4.034457) (xy 1.411111 -4.092222)
282 | (xy 1.652722 -4.028242) )(layer F.SilkS) (width 0.010000)
283 | )
284 | (fp_poly (pts (xy 5.071799 -3.736347) (xy 5.080000 -3.668889) (xy 4.865236 -3.394868) (xy 4.797778 -3.386667) (xy 4.523756 -3.601431) (xy 4.515555 -3.668889) (xy 4.730319 -3.942910) (xy 4.797778 -3.951111)
285 | (xy 5.071799 -3.736347) )(layer F.SilkS) (width 0.010000)
286 | )
287 | (fp_poly (pts (xy 6.482910 -3.736347) (xy 6.491111 -3.668889) (xy 6.276347 -3.394868) (xy 6.208889 -3.386667) (xy 5.934868 -3.601431) (xy 5.926667 -3.668889) (xy 6.141431 -3.942910) (xy 6.208889 -3.951111)
288 | (xy 6.482910 -3.736347) )(layer F.SilkS) (width 0.010000)
289 | )
290 | (fp_poly (pts (xy 9.305132 -3.736347) (xy 9.313333 -3.668889) (xy 9.098569 -3.394868) (xy 9.031111 -3.386667) (xy 8.757090 -3.601431) (xy 8.748889 -3.668889) (xy 8.963653 -3.942910) (xy 9.031111 -3.951111)
291 | (xy 9.305132 -3.736347) )(layer F.SilkS) (width 0.010000)
292 | )
293 | (fp_poly (pts (xy -11.297090 -4.018569) (xy -11.288889 -3.951111) (xy -11.503653 -3.677090) (xy -11.571111 -3.668889) (xy -11.845132 -3.883653) (xy -11.853333 -3.951111) (xy -11.638569 -4.225132) (xy -11.571111 -4.233333)
294 | (xy -11.297090 -4.018569) )(layer F.SilkS) (width 0.010000)
295 | )
296 | (fp_poly (pts (xy -6.781535 -4.018569) (xy -6.773333 -3.951111) (xy -6.988098 -3.677090) (xy -7.055556 -3.668889) (xy -7.329577 -3.883653) (xy -7.337778 -3.951111) (xy -7.123014 -4.225132) (xy -7.055556 -4.233333)
297 | (xy -6.781535 -4.018569) )(layer F.SilkS) (width 0.010000)
298 | )
299 | (fp_poly (pts (xy 8.352105 -4.660959) (xy 8.325555 -4.515555) (xy 7.964746 -4.244099) (xy 7.885566 -4.233333) (xy 7.627601 -4.448596) (xy 7.620000 -4.515555) (xy 7.849718 -4.763237) (xy 8.059989 -4.797778)
300 | (xy 8.352105 -4.660959) )(layer F.SilkS) (width 0.010000)
301 | )
302 | (fp_poly (pts (xy -8.834027 -5.020393) (xy -8.748889 -4.781122) (xy -8.926464 -4.532658) (xy -9.283517 -4.620979) (xy -9.466049 -4.816554) (xy -9.542266 -5.196624) (xy -9.501482 -5.268148) (xy -9.171391 -5.289427)
303 | (xy -8.834027 -5.020393) )(layer F.SilkS) (width 0.010000)
304 | )
305 | (fp_poly (pts (xy -7.589475 -5.016768) (xy -7.577667 -4.938889) (xy -7.797383 -4.607974) (xy -7.881056 -4.569648) (xy -8.138397 -4.705882) (xy -8.184445 -4.938889) (xy -8.041245 -5.290134) (xy -7.881056 -5.308130)
306 | (xy -7.589475 -5.016768) )(layer F.SilkS) (width 0.010000)
307 | )
308 | (fp_poly (pts (xy -2.007396 -5.133634) (xy -1.975556 -4.938889) (xy -2.127948 -4.563316) (xy -2.257778 -4.515555) (xy -2.508160 -4.744143) (xy -2.540000 -4.938889) (xy -2.387608 -5.314461) (xy -2.257778 -5.362222)
309 | (xy -2.007396 -5.133634) )(layer F.SilkS) (width 0.010000)
310 | )
311 | (fp_poly (pts (xy -0.606147 -5.022688) (xy -0.763072 -4.768483) (xy -1.116733 -4.629561) (xy -1.242750 -4.753686) (xy -1.217797 -5.135966) (xy -1.114716 -5.229870) (xy -0.714056 -5.295694) (xy -0.606147 -5.022688) )(layer F.SilkS) (width 0.010000)
312 | )
313 | (fp_poly (pts (xy 1.722628 -5.163594) (xy 1.861550 -4.809933) (xy 1.737425 -4.683917) (xy 1.355145 -4.708870) (xy 1.261240 -4.811951) (xy 1.195417 -5.212611) (xy 1.468423 -5.320519) (xy 1.722628 -5.163594) )(layer F.SilkS) (width 0.010000)
314 | )
315 | (fp_poly (pts (xy 3.072604 -5.133634) (xy 3.104444 -4.938889) (xy 2.952052 -4.563316) (xy 2.822222 -4.515555) (xy 2.571840 -4.744143) (xy 2.540000 -4.938889) (xy 2.692392 -5.314461) (xy 2.822222 -5.362222)
316 | (xy 3.072604 -5.133634) )(layer F.SilkS) (width 0.010000)
317 | )
318 | (fp_poly (pts (xy 4.483715 -5.133634) (xy 4.515555 -4.938889) (xy 4.363163 -4.563316) (xy 4.233333 -4.515555) (xy 3.982951 -4.744143) (xy 3.951111 -4.938889) (xy 4.103503 -5.314461) (xy 4.233333 -5.362222)
319 | (xy 4.483715 -5.133634) )(layer F.SilkS) (width 0.010000)
320 | )
321 | (fp_poly (pts (xy 5.623790 -5.007732) (xy 5.665611 -4.875389) (xy 5.466985 -4.611380) (xy 5.348111 -4.557889) (xy 5.107344 -4.646661) (xy 5.122333 -4.783667) (xy 5.369536 -5.076206) (xy 5.623790 -5.007732) )(layer F.SilkS) (width 0.010000)
322 | )
323 | (fp_poly (pts (xy 7.047354 -4.865236) (xy 7.055555 -4.797778) (xy 6.840791 -4.523757) (xy 6.773333 -4.515555) (xy 6.499312 -4.730320) (xy 6.491111 -4.797778) (xy 6.705875 -5.071799) (xy 6.773333 -5.080000)
324 | (xy 7.047354 -4.865236) )(layer F.SilkS) (width 0.010000)
325 | )
326 | (fp_poly (pts (xy 11.936679 -5.157075) (xy 11.994444 -5.080000) (xy 11.930465 -4.838389) (xy 11.728878 -4.797778) (xy 11.342738 -4.945126) (xy 11.288889 -5.080000) (xy 11.491447 -5.354144) (xy 11.554455 -5.362222)
327 | (xy 11.936679 -5.157075) )(layer F.SilkS) (width 0.010000)
328 | )
329 | (fp_poly (pts (xy -10.944009 -5.742496) (xy -10.880453 -5.668549) (xy -10.908616 -5.299564) (xy -10.982562 -5.236009) (xy -11.351547 -5.264171) (xy -11.415103 -5.338118) (xy -11.386940 -5.707102) (xy -11.312994 -5.770658)
330 | (xy -10.944009 -5.742496) )(layer F.SilkS) (width 0.010000)
331 | )
332 | (fp_poly (pts (xy 10.787102 -6.589162) (xy 10.850658 -6.515216) (xy 10.822496 -6.146231) (xy 10.748549 -6.082675) (xy 10.379564 -6.110838) (xy 10.316008 -6.184784) (xy 10.344171 -6.553769) (xy 10.418117 -6.617325)
333 | (xy 10.787102 -6.589162) )(layer F.SilkS) (width 0.010000)
334 | )
335 | (fp_poly (pts (xy -9.636167 -6.850465) (xy -9.595556 -6.648878) (xy -9.742904 -6.262738) (xy -9.877778 -6.208889) (xy -10.151922 -6.411448) (xy -10.160000 -6.474455) (xy -9.954853 -6.856679) (xy -9.877778 -6.914444)
336 | (xy -9.636167 -6.850465) )(layer F.SilkS) (width 0.010000)
337 | )
338 | (fp_poly (pts (xy -8.192646 -6.840791) (xy -8.184445 -6.773333) (xy -8.399209 -6.499312) (xy -8.466667 -6.491111) (xy -8.740688 -6.705875) (xy -8.748889 -6.773333) (xy -8.534125 -7.047354) (xy -8.466667 -7.055555)
339 | (xy -8.192646 -6.840791) )(layer F.SilkS) (width 0.010000)
340 | )
341 | (fp_poly (pts (xy -6.499312 -6.840791) (xy -6.491111 -6.773333) (xy -6.705875 -6.499312) (xy -6.773333 -6.491111) (xy -7.047355 -6.705875) (xy -7.055556 -6.773333) (xy -6.840792 -7.047354) (xy -6.773333 -7.055555)
342 | (xy -6.499312 -6.840791) )(layer F.SilkS) (width 0.010000)
343 | )
344 | (fp_poly (pts (xy -4.630117 -6.918736) (xy -4.656667 -6.773333) (xy -5.017476 -6.501877) (xy -5.096656 -6.491111) (xy -5.354621 -6.706374) (xy -5.362222 -6.773333) (xy -5.132504 -7.021015) (xy -4.922233 -7.055555)
345 | (xy -4.630117 -6.918736) )(layer F.SilkS) (width 0.010000)
346 | )
347 | (fp_poly (pts (xy -2.869983 -6.903164) (xy -2.822222 -6.773333) (xy -3.050810 -6.522952) (xy -3.245556 -6.491111) (xy -3.621128 -6.643503) (xy -3.668889 -6.773333) (xy -3.440301 -7.023715) (xy -3.245556 -7.055555)
348 | (xy -2.869983 -6.903164) )(layer F.SilkS) (width 0.010000)
349 | )
350 | (fp_poly (pts (xy -1.137090 -6.840791) (xy -1.128889 -6.773333) (xy -1.343653 -6.499312) (xy -1.411111 -6.491111) (xy -1.685132 -6.705875) (xy -1.693333 -6.773333) (xy -1.478569 -7.047354) (xy -1.411111 -7.055555)
351 | (xy -1.137090 -6.840791) )(layer F.SilkS) (width 0.010000)
352 | )
353 | (fp_poly (pts (xy 0.556243 -6.840791) (xy 0.564444 -6.773333) (xy 0.349680 -6.499312) (xy 0.282222 -6.491111) (xy 0.008201 -6.705875) (xy 0.000000 -6.773333) (xy 0.214764 -7.047354) (xy 0.282222 -7.055555)
354 | (xy 0.556243 -6.840791) )(layer F.SilkS) (width 0.010000)
355 | )
356 | (fp_poly (pts (xy 2.249577 -6.840791) (xy 2.257778 -6.773333) (xy 2.043014 -6.499312) (xy 1.975555 -6.491111) (xy 1.701534 -6.705875) (xy 1.693333 -6.773333) (xy 1.908097 -7.047354) (xy 1.975555 -7.055555)
357 | (xy 2.249577 -6.840791) )(layer F.SilkS) (width 0.010000)
358 | )
359 | (fp_poly (pts (xy 3.942910 -6.840791) (xy 3.951111 -6.773333) (xy 3.736347 -6.499312) (xy 3.668889 -6.491111) (xy 3.394868 -6.705875) (xy 3.386667 -6.773333) (xy 3.601431 -7.047354) (xy 3.668889 -7.055555)
360 | (xy 3.942910 -6.840791) )(layer F.SilkS) (width 0.010000)
361 | )
362 | (fp_poly (pts (xy 5.812105 -6.918736) (xy 5.785555 -6.773333) (xy 5.424746 -6.501877) (xy 5.345566 -6.491111) (xy 5.087601 -6.706374) (xy 5.080000 -6.773333) (xy 5.309718 -7.021015) (xy 5.519989 -7.055555)
363 | (xy 5.812105 -6.918736) )(layer F.SilkS) (width 0.010000)
364 | )
365 | (fp_poly (pts (xy 7.566151 -6.908207) (xy 7.620000 -6.773333) (xy 7.417441 -6.499189) (xy 7.354434 -6.491111) (xy 6.972210 -6.696258) (xy 6.914444 -6.773333) (xy 6.978424 -7.014944) (xy 7.180011 -7.055555)
366 | (xy 7.566151 -6.908207) )(layer F.SilkS) (width 0.010000)
367 | )
368 | (fp_poly (pts (xy 9.305132 -6.840791) (xy 9.313333 -6.773333) (xy 9.098569 -6.499312) (xy 9.031111 -6.491111) (xy 8.757090 -6.705875) (xy 8.748889 -6.773333) (xy 8.963653 -7.047354) (xy 9.031111 -7.055555)
369 | (xy 9.305132 -6.840791) )(layer F.SilkS) (width 0.010000)
370 | )
371 | )
372 |
--------------------------------------------------------------------------------
/pcb/kicad/nixie-pipe.net:
--------------------------------------------------------------------------------
1 | (export (version D)
2 | (design
3 | (source /Users/John/Projects/JBR-Engineering/nixie-pipe/pcb/kicad/nixie-pipe.sch)
4 | (date "Saturday, 30 September 2017 'amt' 08:49:24")
5 | (tool "Eeschema 4.0.5")
6 | (sheet (number 1) (name /) (tstamps /)
7 | (title_block
8 | (title "Nixie Pipe")
9 | (company "JBR Engineering Research Ltd")
10 | (rev 2)
11 | (date 30/09/2016)
12 | (source nixie-pipe.sch)
13 | (comment (number 1) (value ""))
14 | (comment (number 2) (value ""))
15 | (comment (number 3) (value ""))
16 | (comment (number 4) (value "")))))
17 | (components
18 | (comp (ref R1)
19 | (value 4k7)
20 | (footprint Resistors_SMD:R_0603_HandSoldering)
21 | (fields
22 | (field (name Characteristics) 1%))
23 | (libsource (lib device) (part R))
24 | (sheetpath (names /) (tstamps /))
25 | (tstamp 579DEE18))
26 | (comp (ref R2)
27 | (value 4k7)
28 | (footprint Resistors_SMD:R_0603_HandSoldering)
29 | (fields
30 | (field (name Characteristics) 1%))
31 | (libsource (lib device) (part R))
32 | (sheetpath (names /) (tstamps /))
33 | (tstamp 579DEE53))
34 | (comp (ref R3)
35 | (value 10k)
36 | (footprint Resistors_SMD:R_0603_HandSoldering)
37 | (fields
38 | (field (name Characteristics) 1%))
39 | (libsource (lib device) (part R))
40 | (sheetpath (names /) (tstamps /))
41 | (tstamp 579DF109))
42 | (comp (ref C5)
43 | (value 100nF)
44 | (footprint Capacitors_SMD:C_0603_HandSoldering)
45 | (fields
46 | (field (name Characteristics) X7R))
47 | (libsource (lib device) (part C))
48 | (sheetpath (names /) (tstamps /))
49 | (tstamp 579DF18A))
50 | (comp (ref U1)
51 | (value WS2812B)
52 | (footprint WS2812B:LED_WS2812B-PLCC4)
53 | (fields
54 | (field (name MFN) Worldsemi)
55 | (field (name MFP) WS2812B))
56 | (libsource (lib nixie-pipe-cache) (part WS2812B))
57 | (sheetpath (names /) (tstamps /))
58 | (tstamp 579DF750))
59 | (comp (ref C1)
60 | (value 100nF)
61 | (footprint Capacitors_SMD:C_0603_HandSoldering)
62 | (fields
63 | (field (name Characteristics) X7R))
64 | (libsource (lib device) (part C))
65 | (sheetpath (names /) (tstamps /))
66 | (tstamp 579DF7D5))
67 | (comp (ref U3)
68 | (value WS2812B)
69 | (footprint WS2812B:LED_WS2812B-PLCC4)
70 | (fields
71 | (field (name MFN) Worldsemi)
72 | (field (name MFP) WS2812B))
73 | (libsource (lib nixie-pipe-cache) (part WS2812B))
74 | (sheetpath (names /) (tstamps /))
75 | (tstamp 579E0F69))
76 | (comp (ref U4)
77 | (value WS2812B)
78 | (footprint WS2812B:LED_WS2812B-PLCC4)
79 | (fields
80 | (field (name MFN) Worldsemi)
81 | (field (name MFP) WS2812B))
82 | (libsource (lib nixie-pipe-cache) (part WS2812B))
83 | (sheetpath (names /) (tstamps /))
84 | (tstamp 579E1B7B))
85 | (comp (ref U5)
86 | (value WS2812B)
87 | (footprint WS2812B:LED_WS2812B-PLCC4)
88 | (fields
89 | (field (name MFN) Worldsemi)
90 | (field (name MFP) WS2812B))
91 | (libsource (lib nixie-pipe-cache) (part WS2812B))
92 | (sheetpath (names /) (tstamps /))
93 | (tstamp 579E1B81))
94 | (comp (ref U6)
95 | (value WS2812B)
96 | (footprint WS2812B:LED_WS2812B-PLCC4)
97 | (fields
98 | (field (name MFN) Worldsemi)
99 | (field (name MFP) WS2812B))
100 | (libsource (lib nixie-pipe-cache) (part WS2812B))
101 | (sheetpath (names /) (tstamps /))
102 | (tstamp 579E1D24))
103 | (comp (ref U7)
104 | (value WS2812B)
105 | (footprint WS2812B:LED_WS2812B-PLCC4)
106 | (fields
107 | (field (name MFN) Worldsemi)
108 | (field (name MFP) WS2812B))
109 | (libsource (lib nixie-pipe-cache) (part WS2812B))
110 | (sheetpath (names /) (tstamps /))
111 | (tstamp 579E1D2A))
112 | (comp (ref U8)
113 | (value WS2812B)
114 | (footprint WS2812B:LED_WS2812B-PLCC4)
115 | (fields
116 | (field (name MFN) Worldsemi)
117 | (field (name MFP) WS2812B))
118 | (libsource (lib nixie-pipe-cache) (part WS2812B))
119 | (sheetpath (names /) (tstamps /))
120 | (tstamp 579E206C))
121 | (comp (ref U9)
122 | (value WS2812B)
123 | (footprint WS2812B:LED_WS2812B-PLCC4)
124 | (fields
125 | (field (name MFN) Worldsemi)
126 | (field (name MFP) WS2812B))
127 | (libsource (lib nixie-pipe-cache) (part WS2812B))
128 | (sheetpath (names /) (tstamps /))
129 | (tstamp 579E2072))
130 | (comp (ref U10)
131 | (value WS2812B)
132 | (footprint WS2812B:LED_WS2812B-PLCC4)
133 | (fields
134 | (field (name MFN) Worldsemi)
135 | (field (name MFP) WS2812B))
136 | (libsource (lib nixie-pipe-cache) (part WS2812B))
137 | (sheetpath (names /) (tstamps /))
138 | (tstamp 579E2078))
139 | (comp (ref P2)
140 | (value CONN_01X05)
141 | (footprint Pin_Headers:Pin_Header_Straight_1x05)
142 | (fields
143 | (field (name Notes) DNF))
144 | (libsource (lib conn) (part CONN_01X05))
145 | (sheetpath (names /) (tstamps /))
146 | (tstamp 579E5BCC))
147 | (comp (ref P1)
148 | (value CONN_01X03)
149 | (footprint Pin_Headers:Pin_Header_Angled_1x03)
150 | (fields
151 | (field (name MFN) "Stelvio Kontek")
152 | (field (name MFP) 4729716140410)
153 | (field (name Supplier) RS)
154 | (field (name Characteristics) "3 pin male right angle header")
155 | (field (name Notes) "40 pin strip must be broken to 3 pin")
156 | (field (name Cost) 0.57)
157 | (field (name SPN) 156-077)
158 | (field (name Description) "3 pin male right angle 1\" header - any can be used"))
159 | (libsource (lib conn) (part CONN_01X03))
160 | (sheetpath (names /) (tstamps /))
161 | (tstamp 579E719A))
162 | (comp (ref CON1)
163 | (value AVR-ISP-6)
164 | (footprint Pin_Headers:Pin_Header_Straight_2x03)
165 | (fields
166 | (field (name Notes) DNF)
167 | (field (name Description) "Pogo contact point - no header required"))
168 | (libsource (lib atmel) (part AVR-ISP-6))
169 | (sheetpath (names /) (tstamps /))
170 | (tstamp 579E7668))
171 | (comp (ref P3)
172 | (value CONN_01X03)
173 | (footprint Socket_Strips:Socket_Strip_Angled_1x03)
174 | (fields
175 | (field (name MFN) Samtec)
176 | (field (name MFP) SSW-103-02-G-S-RA)
177 | (field (name Supplier) RS)
178 | (field (name Notes) "Can be replaced with equivalent 0.1\" right angle single row: http://www.ebay.co.uk/itm/282120149502?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT")
179 | (field (name Cost) 0.65)
180 | (field (name SPN) "765-5622\r")
181 | (field (name Description) "3-way female right-angle header for joining modules"))
182 | (libsource (lib conn) (part CONN_01X03))
183 | (sheetpath (names /) (tstamps /))
184 | (tstamp 579F0944))
185 | (comp (ref R4)
186 | (value 470R)
187 | (footprint Resistors_SMD:R_0603_HandSoldering)
188 | (fields
189 | (field (name Characteristics) 1%))
190 | (libsource (lib device) (part R))
191 | (sheetpath (names /) (tstamps /))
192 | (tstamp 579F13F1))
193 | (comp (ref X1)
194 | (value CRYSTAL_SMD)
195 | (footprint Crystals:Crystal_SMD_5032_2Pads)
196 | (fields
197 | (field (name MFN) ABRACON)
198 | (field (name MFP) ABM3-16.000MHZ-B2-T)
199 | (field (name Supplier) RS)
200 | (field (name SPN) 2509498425))
201 | (libsource (lib device) (part Crystal_Small))
202 | (sheetpath (names /) (tstamps /))
203 | (tstamp 579F9362))
204 | (comp (ref C6)
205 | (value 18pF)
206 | (footprint Capacitors_SMD:C_0603_HandSoldering)
207 | (fields
208 | (field (name Characteristics) NPO))
209 | (libsource (lib device) (part C))
210 | (sheetpath (names /) (tstamps /))
211 | (tstamp 579F95AD))
212 | (comp (ref C7)
213 | (value 47pF)
214 | (footprint Capacitors_SMD:C_0603_HandSoldering)
215 | (fields
216 | (field (name Characteristics) NPO))
217 | (libsource (lib device) (part C))
218 | (sheetpath (names /) (tstamps /))
219 | (tstamp 579F9610))
220 | (comp (ref P5)
221 | (value CONN_01X02)
222 | (footprint WS2812B:Touch_Button)
223 | (fields
224 | (field (name Characteristics) "PCB Component")
225 | (field (name Notes) DNF))
226 | (libsource (lib conn) (part CONN_01X02))
227 | (sheetpath (names /) (tstamps /))
228 | (tstamp 57A5CF45))
229 | (comp (ref P6)
230 | (value CONN_01X02)
231 | (footprint WS2812B:Touch_Button)
232 | (fields
233 | (field (name Characteristics) "PCB Component")
234 | (field (name Notes) DNF))
235 | (libsource (lib conn) (part CONN_01X02))
236 | (sheetpath (names /) (tstamps /))
237 | (tstamp 57A5CFAC))
238 | (comp (ref R6)
239 | (value 10M)
240 | (footprint Resistors_SMD:R_0603_HandSoldering)
241 | (fields
242 | (field (name Characteristics) 1%))
243 | (libsource (lib device) (part R))
244 | (sheetpath (names /) (tstamps /))
245 | (tstamp 57A5D71E))
246 | (comp (ref R5)
247 | (value 10M)
248 | (footprint Resistors_SMD:R_0603_HandSoldering)
249 | (fields
250 | (field (name Characteristics) 1%))
251 | (libsource (lib device) (part R))
252 | (sheetpath (names /) (tstamps /))
253 | (tstamp 57A5D792))
254 | (comp (ref U11)
255 | (value DS3231_8)
256 | (footprint Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mm)
257 | (datasheet https://datasheets.maximintegrated.com/en/ds/DS3231M.pdf)
258 | (fields
259 | (field (name MFN) Maxim)
260 | (field (name MFP) DS3231MZ+TRL)
261 | (field (name Supplier) Farnell)
262 | (field (name Cost) 5.94)
263 | (field (name SPN) 2515487))
264 | (libsource (lib jbr-ics) (part DS3231_8))
265 | (sheetpath (names /) (tstamps /))
266 | (tstamp 57A60FD1))
267 | (comp (ref C9)
268 | (value 100nF)
269 | (footprint Capacitors_SMD:C_0603_HandSoldering)
270 | (fields
271 | (field (name Characteristics) X7R))
272 | (libsource (lib device) (part C))
273 | (sheetpath (names /) (tstamps /))
274 | (tstamp 57A6237D))
275 | (comp (ref C8)
276 | (value 100nF)
277 | (footprint Capacitors_SMD:C_0603_HandSoldering)
278 | (fields
279 | (field (name Characteristics) X7R))
280 | (libsource (lib device) (part C))
281 | (sheetpath (names /) (tstamps /))
282 | (tstamp 57A62902))
283 | (comp (ref U12)
284 | (value WS2812B)
285 | (footprint WS2812B:LED_WS2812B-PLCC4)
286 | (datasheet https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf)
287 | (fields
288 | (field (name MFN) Worldsemi)
289 | (field (name MFP) WS2812B)
290 | (field (name Notes) "This lib just has a nice model")
291 | (field (name Cost) 0.35))
292 | (libsource (lib nixie-pipe-cache) (part WS2812B))
293 | (sheetpath (names /) (tstamps /))
294 | (tstamp 57C2A486))
295 | (comp (ref P7)
296 | (value CONN_01X02)
297 | (footprint Pin_Headers:Pin_Header_Straight_1x02)
298 | (fields
299 | (field (name Notes) DNF))
300 | (libsource (lib conn) (part CONN_01X02))
301 | (sheetpath (names /) (tstamps /))
302 | (tstamp 57D8F1B8))
303 | (comp (ref IC1)
304 | (value ATMEGA328P-A)
305 | (footprint Housings_QFP:TQFP-32_7x7mm_Pitch0.8mm)
306 | (fields
307 | (field (name MFN) Atmel)
308 | (field (name MFP) ATMEGA328P-AU)
309 | (field (name Supplier) RS)
310 | (field (name Cost) 2.07)
311 | (field (name SPN) 738-0432))
312 | (libsource (lib atmel) (part ATMEGA328P-A))
313 | (sheetpath (names /) (tstamps /))
314 | (tstamp 579DEBA4))
315 | (comp (ref P4)
316 | (value USB_OTG)
317 | (footprint Connect:USB_Micro-B_10103594-0001LF)
318 | (libsource (lib nixie-pipe-rescue) (part USB_OTG-RESCUE-nixie-pipe))
319 | (sheetpath (names /) (tstamps /))
320 | (tstamp 57E3E220))
321 | (comp (ref D2)
322 | (value MBR0520)
323 | (footprint Diodes_SMD:SOD-123)
324 | (fields
325 | (field (name MFN) "ON Semiconductor")
326 | (field (name MFP) MBR0520)
327 | (field (name Supplier) RS)
328 | (field (name SPN) 739-0521)
329 | (field (name Description) "VUSB protection"))
330 | (libsource (lib device) (part D_Schottky))
331 | (sheetpath (names /) (tstamps /))
332 | (tstamp 57E3F26B))
333 | (comp (ref R8)
334 | (value 27R)
335 | (footprint Resistors_SMD:R_0603_HandSoldering)
336 | (fields
337 | (field (name Characteristics) 1%))
338 | (libsource (lib device) (part R))
339 | (sheetpath (names /) (tstamps /))
340 | (tstamp 57EDA724))
341 | (comp (ref R9)
342 | (value 27R)
343 | (footprint Resistors_SMD:R_0603_HandSoldering)
344 | (fields
345 | (field (name Characteristics) 1%))
346 | (libsource (lib device) (part R))
347 | (sheetpath (names /) (tstamps /))
348 | (tstamp 57EDA809))
349 | (comp (ref C11)
350 | (value 100nF)
351 | (footprint Capacitors_SMD:C_0603_HandSoldering)
352 | (fields
353 | (field (name Characteristics) X7R))
354 | (libsource (lib device) (part C))
355 | (sheetpath (names /) (tstamps /))
356 | (tstamp 58071AEE))
357 | (comp (ref L1)
358 | (value FB)
359 | (footprint KiCad/Capacitors_SMD.pretty:C_0603_HandSoldering)
360 | (datasheet http://search.murata.co.jp/Ceramy/image/img/PDF/ENG/L0132S0193BLM18P.pdf)
361 | (fields
362 | (field (name MFN) Murata)
363 | (field (name MFP) BLM18PG331SH1D)
364 | (field (name Description) "Ferrite bead"))
365 | (libsource (lib nixie-pipe-cache) (part INDUCTOR_SMALL))
366 | (sheetpath (names /) (tstamps /))
367 | (tstamp 580745B7))
368 | (comp (ref C4)
369 | (value 4.7uF)
370 | (footprint Capacitors_SMD:C_0603_HandSoldering)
371 | (fields
372 | (field (name Characteristics) X7R))
373 | (libsource (lib device) (part CP1))
374 | (sheetpath (names /) (tstamps /))
375 | (tstamp 58075AEC))
376 | (comp (ref C2)
377 | (value 47pF)
378 | (footprint Capacitors_SMD:C_0603_HandSoldering)
379 | (fields
380 | (field (name Characteristics) NPO))
381 | (libsource (lib device) (part C))
382 | (sheetpath (names /) (tstamps /))
383 | (tstamp 58076143))
384 | (comp (ref C3)
385 | (value 47pF)
386 | (footprint Capacitors_SMD:C_0603_HandSoldering)
387 | (fields
388 | (field (name Characteristics) NPO))
389 | (libsource (lib device) (part C))
390 | (sheetpath (names /) (tstamps /))
391 | (tstamp 580761FD))
392 | (comp (ref C10)
393 | (value 100nF)
394 | (footprint Capacitors_SMD:C_0603_HandSoldering)
395 | (fields
396 | (field (name Characteristics) X7R))
397 | (libsource (lib device) (part C))
398 | (sheetpath (names /) (tstamps /))
399 | (tstamp 58077073))
400 | (comp (ref U2)
401 | (value FT230XS)
402 | (footprint KiCad/Housings_SSOP.pretty:SSOP-16_3.9x4.9mm_Pitch0.635mm)
403 | (datasheet http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT230X.pdf)
404 | (fields
405 | (field (name MFN) FTDI)
406 | (field (name MFP) FT230XS)
407 | (field (name Supplier) RS)
408 | (field (name Characteristics) SSOP-16)
409 | (field (name Cost) 1.35)
410 | (field (name SPN) 757-0010)
411 | (field (name Description) "USB serial converter"))
412 | (libsource (lib ftdi) (part FT230XS))
413 | (sheetpath (names /) (tstamps /))
414 | (tstamp 580A5E84))
415 | (comp (ref D3)
416 | (value 3.9V)
417 | (footprint KiCad/Diodes_SMD.pretty:SOD-123)
418 | (datasheet http://www.diodes.com/_files/datasheets/ds18004.pdf)
419 | (fields
420 | (field (name MFN) "ON Semiconductor")
421 | (field (name MFP) MMSZ5228BT1G)
422 | (field (name Supplier) RS)
423 | (field (name Cost) 0.022)
424 | (field (name SPN) 121-9479)
425 | (field (name Description) "3.9V clamp to bring to VH threshold"))
426 | (libsource (lib nixie-pipe-cache) (part ZENERsmall))
427 | (sheetpath (names /) (tstamps /))
428 | (tstamp 586A1E15))
429 | (comp (ref R7)
430 | (value 680R)
431 | (footprint KiCad/Resistors_SMD.pretty:R_0603_HandSoldering)
432 | (fields
433 | (field (name Characteristics) 1%))
434 | (libsource (lib device) (part R))
435 | (sheetpath (names /) (tstamps /))
436 | (tstamp 586A255A)))
437 | (libparts
438 | (libpart (lib atmel) (part ATMEGA168A-A)
439 | (aliases
440 | (alias ATMEGA48A-A)
441 | (alias ATMEGA48PA-A)
442 | (alias ATMEGA88A-A)
443 | (alias ATMEGA88PA-A)
444 | (alias ATMEGA168PA-A)
445 | (alias ATMEGA328-A)
446 | (alias ATMEGA328P-A))
447 | (description "TQFP32, 16k Flash, 1kB SRAM, 512B EEPROM")
448 | (docs http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet.pdf)
449 | (fields
450 | (field (name Reference) IC)
451 | (field (name Value) ATMEGA168A-A)
452 | (field (name Footprint) TQFP32))
453 | (pins
454 | (pin (num 1) (name "(PCINT19/OC2B/INT1)PD3") (type BiDi))
455 | (pin (num 2) (name "(PCINT20/XCK/T0)PD4") (type BiDi))
456 | (pin (num 3) (name GND) (type power_in))
457 | (pin (num 4) (name VCC) (type power_in))
458 | (pin (num 5) (name GND) (type power_in))
459 | (pin (num 6) (name VCC) (type power_in))
460 | (pin (num 7) (name "(PCINT6/XTAL1/TOSC1)PB6") (type BiDi))
461 | (pin (num 8) (name "(PCINT7/XTAL2/TOSC2)PB7") (type BiDi))
462 | (pin (num 9) (name "(PCINT21/OC0B/T1)PD5") (type BiDi))
463 | (pin (num 10) (name "(PCINT22/OC0A/AIN0)PD6") (type BiDi))
464 | (pin (num 11) (name "(PCINT23/AIN1)PD7") (type BiDi))
465 | (pin (num 12) (name "(PCINT0/CLKO/ICP1)PB0") (type BiDi))
466 | (pin (num 13) (name "(PCINT1/OC1A)PB1") (type BiDi))
467 | (pin (num 14) (name "(PCINT2/OC1B/~SS~)PB2") (type BiDi))
468 | (pin (num 15) (name "(PCINT3/OC2A/MOSI)PB3") (type BiDi))
469 | (pin (num 16) (name "(PCINT4/MISO)PB4") (type BiDi))
470 | (pin (num 17) (name "(PCINT5/SCK)PB5") (type BiDi))
471 | (pin (num 18) (name AVCC) (type power_in))
472 | (pin (num 19) (name ADC6) (type input))
473 | (pin (num 20) (name AREF) (type BiDi))
474 | (pin (num 21) (name GND) (type power_in))
475 | (pin (num 22) (name ADC7) (type input))
476 | (pin (num 23) (name "(PCINT8/ADC0)PC0") (type BiDi))
477 | (pin (num 24) (name "(PCINT9/ADC1)PC1") (type BiDi))
478 | (pin (num 25) (name "(PCINT10/ADC2)PC2") (type BiDi))
479 | (pin (num 26) (name "(PCINT11/ADC3)PC3") (type BiDi))
480 | (pin (num 27) (name "(PCINT12/SDA/ADC4)PC4") (type BiDi))
481 | (pin (num 28) (name "(PCINT13/SCL/ADC5)PC5") (type BiDi))
482 | (pin (num 29) (name "(PCINT14/~RESET~)PC6") (type BiDi))
483 | (pin (num 30) (name "(PCINT16/RXD)PD0") (type BiDi))
484 | (pin (num 31) (name "(PCINT17/TXD)PD1") (type BiDi))
485 | (pin (num 32) (name "(PCINT18/INT0)PD2") (type BiDi))))
486 | (libpart (lib atmel) (part AVR-ISP-6)
487 | (description "Standard IDC6 Male Connector, ATMEL ISP 6pin")
488 | (fields
489 | (field (name Reference) CON)
490 | (field (name Value) AVR-ISP-6)
491 | (field (name Footprint) AVR-ISP-6))
492 | (pins
493 | (pin (num 1) (name ~) (type passive))
494 | (pin (num 2) (name ~) (type passive))
495 | (pin (num 3) (name ~) (type passive))
496 | (pin (num 4) (name ~) (type passive))
497 | (pin (num 5) (name ~) (type passive))
498 | (pin (num 6) (name ~) (type passive))))
499 | (libpart (lib device) (part C)
500 | (description "Unpolarized capacitor")
501 | (footprints
502 | (fp C?)
503 | (fp C_????_*)
504 | (fp C_????)
505 | (fp SMD*_c)
506 | (fp Capacitor*))
507 | (fields
508 | (field (name Reference) C)
509 | (field (name Value) C))
510 | (pins
511 | (pin (num 1) (name ~) (type passive))
512 | (pin (num 2) (name ~) (type passive))))
513 | (libpart (lib conn) (part CONN_01X02)
514 | (description "Connector, single row, 01x02")
515 | (footprints
516 | (fp Pin_Header_Straight_1X02)
517 | (fp Pin_Header_Angled_1X02)
518 | (fp Socket_Strip_Straight_1X02)
519 | (fp Socket_Strip_Angled_1X02))
520 | (fields
521 | (field (name Reference) P)
522 | (field (name Value) CONN_01X02))
523 | (pins
524 | (pin (num 1) (name P1) (type passive))
525 | (pin (num 2) (name P2) (type passive))))
526 | (libpart (lib conn) (part CONN_01X03)
527 | (description "Connector, single row, 01x03")
528 | (footprints
529 | (fp Pin_Header_Straight_1X03)
530 | (fp Pin_Header_Angled_1X03)
531 | (fp Socket_Strip_Straight_1X03)
532 | (fp Socket_Strip_Angled_1X03))
533 | (fields
534 | (field (name Reference) P)
535 | (field (name Value) CONN_01X03))
536 | (pins
537 | (pin (num 1) (name P1) (type passive))
538 | (pin (num 2) (name P2) (type passive))
539 | (pin (num 3) (name P3) (type passive))))
540 | (libpart (lib conn) (part CONN_01X05)
541 | (description "Connector, single row, 01x05")
542 | (footprints
543 | (fp Pin_Header_Straight_1X05)
544 | (fp Pin_Header_Angled_1X05)
545 | (fp Socket_Strip_Straight_1X05)
546 | (fp Socket_Strip_Angled_1X05))
547 | (fields
548 | (field (name Reference) P)
549 | (field (name Value) CONN_01X05))
550 | (pins
551 | (pin (num 1) (name P1) (type passive))
552 | (pin (num 2) (name P2) (type passive))
553 | (pin (num 3) (name P3) (type passive))
554 | (pin (num 4) (name P4) (type passive))
555 | (pin (num 5) (name P5) (type passive))))
556 | (libpart (lib device) (part CP1)
557 | (description "Polarised capacitor")
558 | (footprints
559 | (fp SMD*_Pol)
560 | (fp C_Axial*)
561 | (fp C_Radial*)
562 | (fp c_elec*)
563 | (fp C*elec)
564 | (fp TantalC*)
565 | (fp CP*))
566 | (fields
567 | (field (name Reference) C)
568 | (field (name Value) CP1))
569 | (pins
570 | (pin (num 1) (name ~) (type passive))
571 | (pin (num 2) (name ~) (type passive))))
572 | (libpart (lib device) (part Crystal_Small)
573 | (description "Two pin crystal, small symbol")
574 | (footprints
575 | (fp Crystal*))
576 | (fields
577 | (field (name Reference) Y)
578 | (field (name Value) Crystal_Small))
579 | (pins
580 | (pin (num 1) (name 1) (type passive))
581 | (pin (num 2) (name 2) (type passive))))
582 | (libpart (lib jbr-ics) (part DS3231_8)
583 | (footprints
584 | (fp W16#H2))
585 | (fields
586 | (field (name Reference) U)
587 | (field (name Value) DS3231_8))
588 | (pins
589 | (pin (num 1) (name 32kHz) (type BiDi))
590 | (pin (num 2) (name VCC) (type power_in))
591 | (pin (num 3) (name ~INT~/SQW) (type BiDi))
592 | (pin (num 4) (name ~RST) (type BiDi))
593 | (pin (num 5) (name GND) (type power_in))
594 | (pin (num 6) (name V.BAT) (type power_in))
595 | (pin (num 7) (name SDA) (type BiDi))
596 | (pin (num 8) (name SCL) (type BiDi))))
597 | (libpart (lib device) (part D_Schottky)
598 | (description "Schottky diode")
599 | (footprints
600 | (fp Diode_*)
601 | (fp D-*)
602 | (fp *SingleDiode)
603 | (fp *_Diode_*)
604 | (fp *SingleDiode*)
605 | (fp D_*))
606 | (fields
607 | (field (name Reference) D)
608 | (field (name Value) D_Schottky))
609 | (pins
610 | (pin (num 1) (name K) (type passive))
611 | (pin (num 2) (name A) (type passive))))
612 | (libpart (lib ftdi) (part FT230XS)
613 | (description "Full Speed USB to Basic UART, SSOP-16")
614 | (docs http://www.ftdichip.com/Products/ICs/FT230X.html)
615 | (footprints
616 | (fp SSOP*))
617 | (fields
618 | (field (name Reference) U)
619 | (field (name Value) FT230XS)
620 | (field (name Footprint) SSOP-16))
621 | (pins
622 | (pin (num 1) (name TXD) (type output))
623 | (pin (num 2) (name ~RTS) (type input))
624 | (pin (num 3) (name VCCIO) (type power_in))
625 | (pin (num 4) (name RXD) (type input))
626 | (pin (num 5) (name GND) (type power_in))
627 | (pin (num 6) (name ~CTS) (type input))
628 | (pin (num 7) (name CBUS2) (type BiDi))
629 | (pin (num 8) (name USBDP) (type BiDi))
630 | (pin (num 9) (name USBDM) (type BiDi))
631 | (pin (num 10) (name 3V3OUT) (type power_out))
632 | (pin (num 11) (name ~RESET) (type input))
633 | (pin (num 12) (name VCC) (type power_in))
634 | (pin (num 13) (name GND) (type power_in))
635 | (pin (num 14) (name CBUS1) (type BiDi))
636 | (pin (num 15) (name CBUS0) (type BiDi))
637 | (pin (num 16) (name CBUS3) (type BiDi))))
638 | (libpart (lib nixie-pipe-cache) (part INDUCTOR_SMALL)
639 | (fields
640 | (field (name Reference) L)
641 | (field (name Value) INDUCTOR_SMALL))
642 | (pins
643 | (pin (num 1) (name 1) (type input))
644 | (pin (num 2) (name 2) (type input))))
645 | (libpart (lib device) (part R)
646 | (description Resistor)
647 | (footprints
648 | (fp R_*)
649 | (fp Resistor_*))
650 | (fields
651 | (field (name Reference) R)
652 | (field (name Value) R))
653 | (pins
654 | (pin (num 1) (name ~) (type passive))
655 | (pin (num 2) (name ~) (type passive))))
656 | (libpart (lib nixie-pipe-rescue) (part USB_OTG-RESCUE-nixie-pipe)
657 | (footprints
658 | (fp USB*))
659 | (fields
660 | (field (name Reference) P)
661 | (field (name Value) USB_OTG-RESCUE-nixie-pipe))
662 | (pins
663 | (pin (num 1) (name VCC) (type power_out))
664 | (pin (num 2) (name D-) (type passive))
665 | (pin (num 3) (name D+) (type passive))
666 | (pin (num 4) (name ID) (type power_in))
667 | (pin (num 5) (name GND) (type power_in))
668 | (pin (num 6) (name shield) (type passive))))
669 | (libpart (lib nixie-pipe-cache) (part WS2812B)
670 | (fields
671 | (field (name Reference) U)
672 | (field (name Value) WS2812B))
673 | (pins
674 | (pin (num 1) (name VDD) (type power_in))
675 | (pin (num 2) (name DOUT) (type output))
676 | (pin (num 3) (name GND) (type power_in))
677 | (pin (num 4) (name DIN) (type input))))
678 | (libpart (lib nixie-pipe-cache) (part ZENERsmall)
679 | (footprints
680 | (fp D?)
681 | (fp SO*)
682 | (fp SM*))
683 | (fields
684 | (field (name Reference) D)
685 | (field (name Value) ZENERsmall))
686 | (pins
687 | (pin (num 1) (name K) (type passive))
688 | (pin (num 2) (name A) (type passive)))))
689 | (libraries
690 | (library (logical conn)
691 | (uri "/Library/Application Support/kicad/library/conn.lib"))
692 | (library (logical ftdi)
693 | (uri "/Library/Application Support/kicad/library/ftdi.lib"))
694 | (library (logical jbr-ics)
695 | (uri /Users/John/Dropbox/Documents/libs/KiCad/kicad_footprints/tunaf1sh/jbr-ics.lib))
696 | (library (logical nixie-pipe-cache)
697 | (uri /Users/John/Projects/JBR-Engineering/nixie-pipe/pcb/kicad/nixie-pipe-cache.lib))
698 | (library (logical nixie-pipe-rescue)
699 | (uri /Users/John/Projects/JBR-Engineering/nixie-pipe/pcb/kicad/nixie-pipe-rescue.lib))
700 | (library (logical device)
701 | (uri "/Library/Application Support/kicad/library/device.lib"))
702 | (library (logical atmel)
703 | (uri "/Library/Application Support/kicad/library/atmel.lib")))
704 | (nets
705 | (net (code 1) (name "Net-(P1-Pad2)")
706 | (node (ref P1) (pin 2))
707 | (node (ref U10) (pin 2)))
708 | (net (code 2) (name "Net-(U10-Pad4)")
709 | (node (ref U9) (pin 2))
710 | (node (ref U10) (pin 4)))
711 | (net (code 3) (name "Net-(U8-Pad2)")
712 | (node (ref U9) (pin 4))
713 | (node (ref U8) (pin 2)))
714 | (net (code 4) (name "Net-(U7-Pad2)")
715 | (node (ref U8) (pin 4))
716 | (node (ref U7) (pin 2)))
717 | (net (code 5) (name "Net-(U6-Pad2)")
718 | (node (ref U7) (pin 4))
719 | (node (ref U6) (pin 2)))
720 | (net (code 6) (name "Net-(U5-Pad2)")
721 | (node (ref U6) (pin 4))
722 | (node (ref U5) (pin 2)))
723 | (net (code 7) (name "Net-(IC1-Pad10)")
724 | (node (ref R4) (pin 2))
725 | (node (ref IC1) (pin 10)))
726 | (net (code 8) (name NRST)
727 | (node (ref R3) (pin 2))
728 | (node (ref IC1) (pin 29))
729 | (node (ref C5) (pin 1))
730 | (node (ref CON1) (pin 5)))
731 | (net (code 9) (name SCK)
732 | (node (ref CON1) (pin 3))
733 | (node (ref IC1) (pin 17)))
734 | (net (code 10) (name MISO)
735 | (node (ref IC1) (pin 16))
736 | (node (ref CON1) (pin 1)))
737 | (net (code 11) (name MOSI)
738 | (node (ref IC1) (pin 15))
739 | (node (ref CON1) (pin 4)))
740 | (net (code 12) (name "Net-(U3-Pad2)")
741 | (node (ref U4) (pin 4))
742 | (node (ref U3) (pin 2)))
743 | (net (code 13) (name "Net-(U1-Pad2)")
744 | (node (ref U1) (pin 2))
745 | (node (ref U3) (pin 4)))
746 | (net (code 14) (name "Net-(U4-Pad2)")
747 | (node (ref U4) (pin 2))
748 | (node (ref U5) (pin 4)))
749 | (net (code 15) (name "Net-(C2-Pad1)")
750 | (node (ref C2) (pin 1))
751 | (node (ref R8) (pin 2))
752 | (node (ref P4) (pin 3)))
753 | (net (code 16) (name "Net-(C3-Pad1)")
754 | (node (ref P4) (pin 2))
755 | (node (ref R9) (pin 2))
756 | (node (ref C3) (pin 1)))
757 | (net (code 17) (name "Net-(U2-Pad16)")
758 | (node (ref U2) (pin 16)))
759 | (net (code 18) (name "Net-(U2-Pad7)")
760 | (node (ref U2) (pin 7)))
761 | (net (code 19) (name "Net-(U2-Pad14)")
762 | (node (ref U2) (pin 14)))
763 | (net (code 20) (name "Net-(U2-Pad15)")
764 | (node (ref U2) (pin 15)))
765 | (net (code 21) (name "Net-(U2-Pad6)")
766 | (node (ref U2) (pin 6)))
767 | (net (code 22) (name RTS)
768 | (node (ref U2) (pin 2))
769 | (node (ref C5) (pin 2)))
770 | (net (code 23) (name GND)
771 | (node (ref U2) (pin 5))
772 | (node (ref IC1) (pin 21))
773 | (node (ref U2) (pin 13))
774 | (node (ref D3) (pin 2))
775 | (node (ref P2) (pin 5))
776 | (node (ref U5) (pin 3))
777 | (node (ref U6) (pin 3))
778 | (node (ref U10) (pin 3))
779 | (node (ref U1) (pin 3))
780 | (node (ref C1) (pin 1))
781 | (node (ref P1) (pin 3))
782 | (node (ref U9) (pin 3))
783 | (node (ref U8) (pin 3))
784 | (node (ref CON1) (pin 6))
785 | (node (ref U7) (pin 3))
786 | (node (ref P3) (pin 3))
787 | (node (ref P4) (pin 5))
788 | (node (ref U3) (pin 3))
789 | (node (ref U4) (pin 3))
790 | (node (ref C6) (pin 2))
791 | (node (ref C7) (pin 2))
792 | (node (ref P5) (pin 2))
793 | (node (ref P6) (pin 2))
794 | (node (ref U11) (pin 5))
795 | (node (ref P4) (pin 6))
796 | (node (ref C9) (pin 1))
797 | (node (ref C8) (pin 1))
798 | (node (ref U12) (pin 3))
799 | (node (ref IC1) (pin 3))
800 | (node (ref IC1) (pin 5))
801 | (node (ref C3) (pin 2))
802 | (node (ref C2) (pin 2))
803 | (node (ref C4) (pin 2))
804 | (node (ref C11) (pin 2))
805 | (node (ref C10) (pin 2)))
806 | (net (code 24) (name "Net-(R9-Pad1)")
807 | (node (ref R9) (pin 1))
808 | (node (ref U2) (pin 9)))
809 | (net (code 25) (name "Net-(R8-Pad1)")
810 | (node (ref R8) (pin 1))
811 | (node (ref U2) (pin 8)))
812 | (net (code 26) (name TB1)
813 | (node (ref IC1) (pin 1))
814 | (node (ref R5) (pin 2))
815 | (node (ref P6) (pin 1)))
816 | (net (code 27) (name TB0)
817 | (node (ref R6) (pin 2))
818 | (node (ref P5) (pin 1))
819 | (node (ref IC1) (pin 32)))
820 | (net (code 28) (name "Net-(D3-Pad1)")
821 | (node (ref D3) (pin 1))
822 | (node (ref R7) (pin 2))
823 | (node (ref R6) (pin 1))
824 | (node (ref R5) (pin 1)))
825 | (net (code 29) (name "Net-(L1-Pad1)")
826 | (node (ref L1) (pin 1))
827 | (node (ref P4) (pin 1)))
828 | (net (code 30) (name "Net-(C11-Pad1)")
829 | (node (ref U2) (pin 11))
830 | (node (ref U2) (pin 10))
831 | (node (ref U2) (pin 3))
832 | (node (ref C11) (pin 1)))
833 | (net (code 31) (name "Net-(U1-Pad4)")
834 | (node (ref U12) (pin 2))
835 | (node (ref U1) (pin 4)))
836 | (net (code 32) (name VCC)
837 | (node (ref C9) (pin 2))
838 | (node (ref U4) (pin 1))
839 | (node (ref R3) (pin 1))
840 | (node (ref U5) (pin 1))
841 | (node (ref U6) (pin 1))
842 | (node (ref R2) (pin 1))
843 | (node (ref R1) (pin 1))
844 | (node (ref C8) (pin 2))
845 | (node (ref U12) (pin 1))
846 | (node (ref IC1) (pin 18))
847 | (node (ref IC1) (pin 4))
848 | (node (ref U7) (pin 1))
849 | (node (ref D2) (pin 1))
850 | (node (ref U11) (pin 2))
851 | (node (ref U3) (pin 1))
852 | (node (ref IC1) (pin 6))
853 | (node (ref R7) (pin 1))
854 | (node (ref P2) (pin 1))
855 | (node (ref U10) (pin 1))
856 | (node (ref U9) (pin 1))
857 | (node (ref U8) (pin 1))
858 | (node (ref P1) (pin 1))
859 | (node (ref U1) (pin 1))
860 | (node (ref C1) (pin 2))
861 | (node (ref CON1) (pin 2))
862 | (node (ref P3) (pin 1)))
863 | (net (code 33) (name "Net-(P2-Pad4)")
864 | (node (ref P2) (pin 4)))
865 | (net (code 34) (name SCL)
866 | (node (ref U11) (pin 8))
867 | (node (ref R2) (pin 2))
868 | (node (ref P2) (pin 3))
869 | (node (ref IC1) (pin 28)))
870 | (net (code 35) (name SDA)
871 | (node (ref R1) (pin 2))
872 | (node (ref U11) (pin 7))
873 | (node (ref P2) (pin 2))
874 | (node (ref IC1) (pin 27)))
875 | (net (code 36) (name PIXELS)
876 | (node (ref R4) (pin 1))
877 | (node (ref P3) (pin 2))
878 | (node (ref U12) (pin 4)))
879 | (net (code 37) (name "Net-(IC1-Pad9)")
880 | (node (ref IC1) (pin 9)))
881 | (net (code 38) (name "Net-(IC1-Pad26)")
882 | (node (ref IC1) (pin 26)))
883 | (net (code 39) (name "Net-(IC1-Pad25)")
884 | (node (ref IC1) (pin 25)))
885 | (net (code 40) (name "Net-(IC1-Pad24)")
886 | (node (ref IC1) (pin 24)))
887 | (net (code 41) (name "Net-(IC1-Pad23)")
888 | (node (ref IC1) (pin 23)))
889 | (net (code 42) (name "Net-(IC1-Pad14)")
890 | (node (ref IC1) (pin 14)))
891 | (net (code 43) (name "Net-(IC1-Pad13)")
892 | (node (ref IC1) (pin 13)))
893 | (net (code 44) (name "Net-(IC1-Pad12)")
894 | (node (ref IC1) (pin 12)))
895 | (net (code 45) (name "Net-(P4-Pad4)")
896 | (node (ref P4) (pin 4)))
897 | (net (code 46) (name "Net-(IC1-Pad19)")
898 | (node (ref IC1) (pin 19)))
899 | (net (code 47) (name "Net-(IC1-Pad22)")
900 | (node (ref IC1) (pin 22)))
901 | (net (code 48) (name "Net-(IC1-Pad11)")
902 | (node (ref IC1) (pin 11)))
903 | (net (code 49) (name "Net-(IC1-Pad20)")
904 | (node (ref IC1) (pin 20)))
905 | (net (code 50) (name /VUSB)
906 | (node (ref U2) (pin 12))
907 | (node (ref C10) (pin 1))
908 | (node (ref C4) (pin 1))
909 | (node (ref L1) (pin 2))
910 | (node (ref D2) (pin 2)))
911 | (net (code 51) (name "Net-(IC1-Pad2)")
912 | (node (ref IC1) (pin 2)))
913 | (net (code 52) (name "Net-(U11-Pad4)")
914 | (node (ref U11) (pin 4)))
915 | (net (code 53) (name "Net-(U11-Pad3)")
916 | (node (ref U11) (pin 3)))
917 | (net (code 54) (name "Net-(U11-Pad1)")
918 | (node (ref U11) (pin 1)))
919 | (net (code 55) (name XTAL2)
920 | (node (ref IC1) (pin 8))
921 | (node (ref X1) (pin 2))
922 | (node (ref C7) (pin 1)))
923 | (net (code 56) (name XTAL1)
924 | (node (ref C6) (pin 1))
925 | (node (ref X1) (pin 1))
926 | (node (ref IC1) (pin 7)))
927 | (net (code 57) (name RXD)
928 | (node (ref P7) (pin 2))
929 | (node (ref U2) (pin 1))
930 | (node (ref IC1) (pin 30)))
931 | (net (code 58) (name TXD)
932 | (node (ref P7) (pin 1))
933 | (node (ref U2) (pin 4))
934 | (node (ref IC1) (pin 31)))
935 | (net (code 61) (name "Net-(U11-Pad6)")
936 | (node (ref U11) (pin 6)))))
--------------------------------------------------------------------------------