]> git.earman.xyz Git - sensor-watch.git/commitdiff
Aperture priority light meter face (#230)
authorChristian Chapman <1360262+enthdegree@users.noreply.github.com>
Sun, 16 Apr 2023 14:05:55 +0000 (10:05 -0400)
committerGitHub <noreply@github.com>
Sun, 16 Apr 2023 14:05:55 +0000 (10:05 -0400)
* initial commit, added opt3001 light meter test app

* tested working light meter board, i2c communication still has issues

* fixed i2c; rudimentary lightmeter works!

* added aperture priority ui

* added aperture priority ui

* added README

* adjusted cal

* fixed bugs (HI shutter speed, lux mode toggle)

* made it possible to advance to the next face

* initialized lux variable

* lowered tolerance for HI and LO

* Changed EV display from always showing EV100 to showing EV[iso setting]

* dont display old ev when ISO changes

* changed mode and light behavior

* updated readme

* fixed indentation

* made lightmeter display logic more consistent

* made lightmeter display logic more consistent

* reverted rules.mk (for merge into upstream)

* reverted rules.mk (for merge into upstream)

* removed OPT3001 PCB model

* made lux mode default, corrected timeout behavior

---------

Co-authored-by: Christian Chapman <user@debian>
23 files changed:
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/.gitignore [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001-cache.lib [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.kicad_pcb [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.kicad_pcb-bak [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/B1,27.kicad_mod [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/FH19C9S05SH10-FFC.kicad_mod [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/_0603MP.kicad_mod [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.sch [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.sch-bak [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.dcm [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.lib [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/empty.kicad_wks [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/fp-info-cache [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/fp-lib-table [new file with mode: 0644]
PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/sym-lib-table [new file with mode: 0644]
make.mk
movement/make/Makefile
movement/movement_config.h
movement/movement_faces.h
movement/watch_faces/sensor/lightmeter_face.c [new file with mode: 0644]
movement/watch_faces/sensor/lightmeter_face.h [new file with mode: 0644]
watch-library/shared/driver/opt3001.c [new file with mode: 0644]
watch-library/shared/driver/opt3001.h [new file with mode: 0644]

diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/.gitignore b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/.gitignore
new file mode 100644 (file)
index 0000000..88bb66f
--- /dev/null
@@ -0,0 +1,2 @@
+OPT3001DNPT/*
+
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001-cache.lib b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001-cache.lib
new file mode 100644 (file)
index 0000000..90c5680
--- /dev/null
@@ -0,0 +1,162 @@
+EESchema-LIBRARY Version 2.4
+#encoding utf-8
+#
+# OPT3001DNPT_OPT3001DNPT
+#
+DEF OPT3001DNPT_OPT3001DNPT U 0 40 Y Y 1 L N
+F0 "U" -400 550 50 H V L BNN
+F1 "OPT3001DNPT_OPT3001DNPT" -400 -450 50 H V L BNN
+F2 "SON65P200X200X65-7N" 0 0 50 H I L BNN
+F3 "" 0 0 50 H I L BNN
+F4 "0.65" 0 0 50 H I L BNN "ENOM"
+F5 "1.9" 0 0 50 H I L BNN "E_MIN"
+F6 "0.25" 0 0 50 H I L BNN "L_MIN"
+F7 "2.0" 0 0 50 H I L BNN "E_NOM"
+F8 "0.65" 0 0 50 H I L BNN "A_MAX"
+F9 "0.65" 0 0 50 H I L BNN "E2_NOM"
+F10 "IPC 7351B" 0 0 50 H I L BNN "STANDARD"
+F11 "01/2018" 0 0 50 H I L BNN "PARTREV"
+F12 "0.25" 0 0 50 H I L BNN "B_NOM"
+F13 "0.3" 0 0 50 H I L BNN "B_MAX"
+F14 "0.2" 0 0 50 H I L BNN "B_MIN"
+F15 "6.0" 0 0 50 H I L BNN "PIN_COUNT"
+F16 "2.1" 0 0 50 H I L BNN "E_MAX"
+F17 "0.35" 0 0 50 H I L BNN "L_MAX"
+F18 "Texas Instruments" 0 0 50 H I L BNN "MANUFACTURER"
+F19 "1.35" 0 0 50 H I L BNN "D2_NOM"
+F20 "0.3" 0 0 50 H I L BNN "L_NOM"
+F21 "2.1" 0 0 50 H I L BNN "D_MAX"
+F22 "2.0" 0 0 50 H I L BNN "D_NOM"
+F23 "1.9" 0 0 50 H I L BNN "D_MIN"
+DRAW
+S -400 -400 400 500 0 0 10 f
+X VDD 1 600 400 200 L 40 40 0 0 W
+X ADDR 2 -600 200 200 R 40 40 0 0 I
+X GND 3 600 -300 200 L 40 40 0 0 W
+X SCL 4 -600 0 200 R 40 40 0 0 I C
+X INT 5 600 200 200 L 40 40 0 0 O
+X SDA 6 -600 -100 200 R 40 40 0 0 B
+X EXP 7 600 -100 200 L 40 40 0 0 P
+ENDDRAW
+ENDDEF
+#
+# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_A4L-LOC
+#
+DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_A4L-LOC #FRAME 0 40 Y Y 1 L N
+F0 "#FRAME" 0 0 50 H I C CNN
+F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_A4L-LOC" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 8550 600 85 0 1 0 >DRAWING_NAME Normal 0 L B
+T 0 8550 400 76 0 1 0 >LAST_DATE_TIME Normal 0 L B
+T 0 8995 200 85 0 1 0 >SHEET Normal 0 L B
+T 0 8550 800 85 0 1 0 "by joey castillo" Normal 0 L B
+T 0 9300 200 85 0 1 0 "cc-by-sa 4.0" Normal 0 L B
+T 0 7300 200 180 0 1 0 oddly_specific_objects Normal 0 L B
+T 0 8540 195 85 0 1 0 Sheet: Normal 0 L B
+P 2 1 0 0 7250 150 7250 950 N
+P 2 1 0 0 7250 950 8475 950 N
+P 2 1 0 0 8475 350 8475 150 N
+P 2 1 0 0 8475 350 8475 550 N
+P 2 1 0 0 8475 550 8475 750 N
+P 2 1 0 0 8475 550 10100 550 N
+P 2 1 0 0 8475 750 8475 950 N
+P 2 1 0 0 8475 750 10100 750 N
+P 2 1 0 0 8475 950 10100 950 N
+P 2 1 0 0 9250 150 9250 350 N
+P 2 1 0 0 9250 350 8475 350 N
+P 2 1 0 0 9250 350 10100 350 N
+P 2 1 0 0 10100 150 10100 350 N
+P 2 1 0 0 10100 350 10100 550 N
+P 2 1 0 0 10100 550 10100 750 N
+P 2 1 0 0 10100 750 10100 950 N
+ENDDRAW
+ENDDEF
+#
+# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_FH19C-9S-0.5SH_10-FFC
+#
+DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_FH19C-9S-0.5SH_10-FFC ~ 0 40 Y Y 1 L N
+F0 "" 350 700 59 H V L CNN
+F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_FH19C-9S-0.5SH_10-FFC" 350 600 59 H V L CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -200 500 -200 -500 N
+P 2 1 0 0 -200 500 300 500 N
+P 2 1 0 0 300 -500 -200 -500 N
+P 2 1 0 0 300 -500 300 500 N
+X 1 1 500 400 200 L 50 50 1 0 B
+X 2 2 500 300 200 L 50 50 1 0 B
+X 3 3 500 200 200 L 50 50 1 0 B
+X 4 4 500 100 200 L 50 50 1 0 B
+X 5 5 500 0 200 L 50 50 1 0 B
+X 6 6 500 -100 200 L 50 50 1 0 B
+X 7 7 500 -200 200 L 50 50 1 0 B
+X 8 8 500 -300 200 L 50 50 1 0 B
+X 9 9 500 -400 200 L 50 50 1 0 B
+ENDDRAW
+ENDDEF
+#
+# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_GND
+#
+DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_GND #GND 0 40 Y Y 1 L P
+F0 "#GND" 0 0 50 H I C CNN
+F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_GND" -100 -100 59 H V L BNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -75 0 75 0 N
+X GND 1 0 100 100 D 0 0 1 0 W
+ENDDRAW
+ENDDEF
+#
+# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_RESISTOR_0603MP
+#
+DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_RESISTOR_0603MP R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_RESISTOR_0603MP" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_TPB1,27
+#
+DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_TPB1,27 TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_TPB1,27" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_VCC
+#
+DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_VCC #P+ 0 40 Y Y 1 L P
+F0 "#P+" 0 0 50 H I C CNN
+F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_VCC" -100 -100 59 V V L BNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 0 0 -50 -75 N
+P 2 1 0 0 50 -75 0 0 N
+X VCC 1 0 -100 100 U 0 0 1 0 W
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.kicad_pcb b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.kicad_pcb
new file mode 100644 (file)
index 0000000..e13c73a
--- /dev/null
@@ -0,0 +1,497 @@
+(kicad_pcb (version 20171130) (host pcbnew 5.1.9+dfsg1-1+deb11u1)
+
+  (general
+    (thickness 1.6)
+    (drawings 22)
+    (tracks 90)
+    (zones 0)
+    (modules 10)
+    (nets 12)
+  )
+
+  (page A4)
+  (layers
+    (0 Top signal)
+    (31 Bottom signal)
+    (32 B.Adhes user hide)
+    (33 F.Adhes user hide)
+    (34 B.Paste user hide)
+    (35 F.Paste user hide)
+    (36 B.SilkS user hide)
+    (37 F.SilkS user)
+    (38 B.Mask user hide)
+    (39 F.Mask user hide)
+    (40 Dwgs.User user hide)
+    (41 Cmts.User user hide)
+    (42 Eco1.User user hide)
+    (43 Eco2.User user)
+    (44 Edge.Cuts user)
+    (45 Margin user hide)
+    (46 B.CrtYd user hide)
+    (47 F.CrtYd user hide)
+    (48 B.Fab user hide)
+    (49 F.Fab user hide)
+  )
+
+  (setup
+    (last_trace_width 0.25)
+    (trace_clearance 0.1524)
+    (zone_clearance 0.508)
+    (zone_45_only no)
+    (trace_min 0.2)
+    (via_size 0.8)
+    (via_drill 0.4)
+    (via_min_size 0.1)
+    (via_min_drill 0.254)
+    (uvia_size 0.3)
+    (uvia_drill 0.1)
+    (uvias_allowed no)
+    (uvia_min_size 0.2)
+    (uvia_min_drill 0.1)
+    (edge_width 0.05)
+    (segment_width 0.2)
+    (pcb_text_width 0.3)
+    (pcb_text_size 1.5 1.5)
+    (mod_edge_width 0.12)
+    (mod_text_size 1 1)
+    (mod_text_width 0.15)
+    (pad_size 1.5 0.27)
+    (pad_drill 0)
+    (pad_to_mask_clearance 0)
+    (aux_axis_origin 0 0)
+    (visible_elements FFFFFF7F)
+    (pcbplotparams
+      (layerselection 0x010fc_ffffffff)
+      (usegerberextensions false)
+      (usegerberattributes true)
+      (usegerberadvancedattributes true)
+      (creategerberjobfile true)
+      (excludeedgelayer true)
+      (linewidth 0.100000)
+      (plotframeref false)
+      (viasonmask false)
+      (mode 1)
+      (useauxorigin false)
+      (hpglpennumber 1)
+      (hpglpenspeed 20)
+      (hpglpendiameter 15.000000)
+      (psnegative false)
+      (psa4output false)
+      (plotreference true)
+      (plotvalue true)
+      (plotinvisibletext false)
+      (padsonsilk false)
+      (subtractmaskfromsilk false)
+      (outputformat 1)
+      (mirror false)
+      (drillshape 1)
+      (scaleselection 1)
+      (outputdirectory ""))
+  )
+
+  (net 0 "")
+  (net 1 GND)
+  (net 2 VCC)
+  (net 3 /A0_TEMP_ENABLE)
+  (net 4 /SCL)
+  (net 5 /SDA)
+  (net 6 /A1_SERCOM3.3_TC3.1)
+  (net 7 /A2_TEMP_SENSE)
+  (net 8 /NC)
+  (net 9 /A4_SERCOM3.2_TC3.0)
+  (net 10 "Net-(U1-Pad7)")
+  (net 11 "Net-(U1-Pad5)")
+
+  (net_class Default "This is the default net class."
+    (clearance 0.1524)
+    (trace_width 0.25)
+    (via_dia 0.8)
+    (via_drill 0.4)
+    (uvia_dia 0.3)
+    (uvia_drill 0.1)
+    (add_net /A0_TEMP_ENABLE)
+    (add_net /A1_SERCOM3.3_TC3.1)
+    (add_net /A2_TEMP_SENSE)
+    (add_net /A4_SERCOM3.2_TC3.0)
+    (add_net /NC)
+    (add_net /SCL)
+    (add_net /SDA)
+    (add_net GND)
+    (add_net "Net-(U1-Pad5)")
+    (add_net "Net-(U1-Pad7)")
+    (add_net VCC)
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" (layer Top) (tedit 0) (tstamp 63E6D203)
+    (at 153.2255 106.5556)
+    (descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
+    (path /54307519)
+    (fp_text reference U$3 (at 0 0) (layer F.SilkS) hide
+      (effects (font (size 1.27 1.27) (thickness 0.15)))
+    )
+    (fp_text value FH19C-9S-0.5SH_10-FFC (at 0 0) (layer F.SilkS) hide
+      (effects (font (size 1.27 1.27) (thickness 0.15)))
+    )
+    (fp_poly (pts (xy -2.4902 0.9742) (xy 2.4882 0.9742) (xy 2.4892 3.4798) (xy -2.4892 3.4798)) (layer B.Mask) (width 0))
+    (fp_line (start 2.4892 0) (end 2.4892 3.35) (layer Edge.Cuts) (width 0.05))
+    (fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer Edge.Cuts) (width 0.05))
+    (fp_line (start -2.4892 0) (end -2.4892 3.35) (layer Edge.Cuts) (width 0.05))
+    (fp_arc (start -2.3392 3.35) (end -2.3392 3.5) (angle 90) (layer Edge.Cuts) (width 0.05))
+    (fp_arc (start 2.3392 3.35) (end 2.3392 3.5) (angle -90) (layer Edge.Cuts) (width 0.05))
+    (pad 1 smd rect (at 2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 2 VCC) (solder_mask_margin 0.0635))
+    (pad 2 smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 1 GND) (solder_mask_margin 0.0635))
+    (pad 3 smd rect (at 1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
+    (pad 4 smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 8 /NC) (solder_mask_margin 0.0635))
+    (pad 5 smd rect (at 0 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
+    (pad 6 smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
+    (pad 7 smd rect (at -1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 5 /SDA) (solder_mask_margin 0.0635))
+    (pad 8 smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 4 /SCL) (solder_mask_margin 0.0635))
+    (pad 9 smd rect (at -2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
+  )
+
+  (module OPT3001DNPT:SON65P200X200X65-7N (layer Top) (tedit 63E6D415) (tstamp 63E73FD8)
+    (at 142.748 102.87 270)
+    (path /63E70E51)
+    (attr smd)
+    (fp_text reference U1 (at 0.54 -2.008 90) (layer F.SilkS) hide
+      (effects (font (size 0.8 0.8) (thickness 0.15)))
+    )
+    (fp_text value OPT3001DNPT (at 7.652 2.008 90) (layer F.Fab) hide
+      (effects (font (size 0.8 0.8) (thickness 0.15)))
+    )
+    (fp_line (start 1.615 -1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start -1.615 -1.25) (end -1.615 1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start -1.615 1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start -1.615 -1.25) (end 1.615 -1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.127))
+    (fp_line (start -1 -1) (end -1 1) (layer F.Fab) (width 0.127))
+    (fp_line (start -1 1.099) (end 1 1.099) (layer F.SilkS) (width 0.127))
+    (fp_line (start -1 -1.099) (end 1 -1.099) (layer F.SilkS) (width 0.127))
+    (fp_line (start -1 1) (end 1 1) (layer F.Fab) (width 0.127))
+    (fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.127))
+    (fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.Fab) (width 0.2))
+    (fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.SilkS) (width 0.2))
+    (fp_poly (pts (xy -0.21 -0.43) (xy 0.21 -0.43) (xy 0.21 0.43) (xy -0.21 0.43)) (layer F.Paste) (width 0.01))
+    (pad 1 smd roundrect (at -1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 2 VCC))
+    (pad 2 smd roundrect (at -1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 1 GND))
+    (pad 3 smd roundrect (at -1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 1 GND))
+    (pad 4 smd roundrect (at 1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 4 /SCL))
+    (pad 5 smd roundrect (at 1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 11 "Net-(U1-Pad5)"))
+    (pad 6 smd roundrect (at 1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 5 /SDA))
+    (pad 7 smd rect (at 0 0 270) (size 0.65 1.35) (layers Top F.Mask)
+      (net 10 "Net-(U1-Pad7)"))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759D2)
+    (at 146.2659 104.7522 270)
+    (descr "<b>0603 MicroPitch</b>")
+    (path /05CBC8DB)
+    (fp_text reference R1 (at -0.0635 1.7145 90) (layer F.SilkS)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_text value "1% 10K" (at -0.9525 0.9525 90) (layer F.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
+    (fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
+    (fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
+    (fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
+    (fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
+    (fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
+    (pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
+    (pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759F3)
+    (at 146.2659 102.1868 270)
+    (descr "<b>0603 MicroPitch</b>")
+    (path /6C7771A6)
+    (fp_text reference RT1 (at -0.127 1.778 90) (layer F.SilkS)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_text value "NTC 10K" (at -1.27 1.4923 90) (layer F.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
+    (fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
+    (fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
+    (fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
+    (fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
+    (fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
+    (pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
+    (pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 2 VCC) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D22B)
+    (at 146.1135 102.8472 180)
+    (descr "<b>TEST PAD</b>")
+    (path /8E097FD0)
+    (fp_text reference GND1 (at -1.778 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 1 GND) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D232)
+    (at 144.0815 101.2216 180)
+    (descr "<b>TEST PAD</b>")
+    (path /E65641C5)
+    (fp_text reference A4 (at 1.524 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D239)
+    (at 146.1135 101.2216 180)
+    (descr "<b>TEST PAD</b>")
+    (path /D0DD1D8E)
+    (fp_text reference VCC1 (at -1.778 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 2 VCC) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D240)
+    (at 146.1135 104.4728 180)
+    (descr "<b>TEST PAD</b>")
+    (path /252148C1)
+    (fp_text reference SCL1 (at -1.778 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 4 /SCL) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D247)
+    (at 144.0815 104.4728 180)
+    (descr "<b>TEST PAD</b>")
+    (path /943CED1C)
+    (fp_text reference SDA1 (at 1.778 -0.0127) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 5 /SDA) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D24E)
+    (at 144.0815 102.8472 180)
+    (descr "<b>TEST PAD</b>")
+    (path /E1B0505C)
+    (fp_text reference A1 (at 1.524 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
+  )
+
+  (gr_arc (start 150.4823 106.5556) (end 150.7363 106.5556) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 803D32C0))
+  (gr_line (start 150.4823 106.3016) (end 145.7325 106.3016) (layer Edge.Cuts) (width 0.05) (tstamp 803D3820))
+  (gr_line (start 145.0975 105.6666) (end 142.1765 105.6666) (layer Edge.Cuts) (width 0.05) (tstamp 803D3C70))
+  (gr_arc (start 142.1765 104.7776) (end 142.1765 105.6666) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E7417A))
+  (gr_line (start 141.2875 104.7776) (end 141.2875 100.8406) (layer Edge.Cuts) (width 0.05) (tstamp 63E75941))
+  (gr_arc (start 142.1765 100.8406) (end 141.2875 100.8406) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E74180))
+  (gr_line (start 142.1765 99.9516) (end 155.3337 99.9516) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B000))
+  (gr_arc (start 155.3337 100.3326) (end 155.3337 99.9516) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B410))
+  (gr_line (start 155.7147 100.3326) (end 155.7147 106.5556) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B950))
+  (gr_arc (start 145.0975 106.3016) (end 145.7325 106.3016) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9BE00))
+  (gr_text "OPT3001 I2C\nSensor Board" (at 151.4475 100.2056) (layer F.SilkS) (tstamp 7FC58850)
+    (effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify top))
+  )
+  (gr_line (start 155.7147 105.2856) (end 147.5105 105.2856) (layer F.SilkS) (width 0.127) (tstamp 7FC58F50))
+  (gr_line (start 147.0025 100.7136) (end 147.0025 104.7776) (layer F.SilkS) (width 0.127) (tstamp 7FA4B140))
+  (gr_arc (start 147.5105 104.7776) (end 147.0025 104.7776) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4B6B0))
+  (gr_arc (start 146.2405 100.7136) (end 147.0025 100.7136) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4BCC0))
+  (gr_text "A0: Thermistor !EN\nA2: Temp. Sense\nA1/A4/SDA/SCL:\nTest Points" (at 151.4475 102.1106) (layer F.SilkS) (tstamp 7FA08AA0)
+    (effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify top))
+  )
+  (gr_text "Digital IO\nAnalog input\nPWM on TC3\nUART RX/TX\nInterrupt 1/0\nA4 ONLY: Ext. wake 0" (at 155.5115 101.2216) (layer B.SilkS) (tstamp 7FA09230)
+    (effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify left top mirror))
+  )
+  (gr_text "A1/A4 Uses" (at 155.5115 100.2056) (layer B.SilkS) (tstamp 7F9A10A0)
+    (effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify left top mirror))
+  )
+  (gr_text "" (at 142.9385 104.1172) (layer F.SilkS) (tstamp 7F9A17A0)
+    (effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
+  )
+  (gr_text "" (at 142.9385 101.5518) (layer F.SilkS) (tstamp 7F9A1E50)
+    (effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
+  )
+  (dimension 3 (width 0.12) (layer F.SilkS)
+    (gr_text "3.000 mm" (at 160.9575 108.5016 90) (layer F.SilkS)
+      (effects (font (size 1 1) (thickness 0.15)))
+    )
+    (feature1 (pts (xy 156.0875 107.0016) (xy 160.273921 107.0016)))
+    (feature2 (pts (xy 156.0875 110.0016) (xy 160.273921 110.0016)))
+    (crossbar (pts (xy 159.6875 110.0016) (xy 159.6875 107.0016)))
+    (arrow1a (pts (xy 159.6875 107.0016) (xy 160.273921 108.128104)))
+    (arrow1b (pts (xy 159.6875 107.0016) (xy 159.101079 108.128104)))
+    (arrow2a (pts (xy 159.6875 110.0016) (xy 160.273921 108.875096)))
+    (arrow2b (pts (xy 159.6875 110.0016) (xy 159.101079 108.875096)))
+  )
+  (gr_text "Stiffener only\nin this area" (at 159.5755 108.5876) (layer F.SilkS) (tstamp 7F95BC90)
+    (effects (font (size 0.57912 0.57912) (thickness 0.109728)))
+  )
+
+  (segment (start 148.082 100.457) (end 148.137 100.457) (width 0.25) (layer Bottom) (net 0))
+  (segment (start 142.098 101.5) (end 142.748 101.5) (width 0.25) (layer Top) (net 1))
+  (via (at 142.494 100.529) (size 0.8) (drill 0.4) (layers Top Bottom) (net 1))
+  (segment (start 142.748 100.783) (end 142.494 100.529) (width 0.25) (layer Top) (net 1))
+  (segment (start 142.748 101.5) (end 142.748 100.783) (width 0.25) (layer Top) (net 1))
+  (segment (start 142.494 100.529) (end 142.76899 100.25401) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 145.201089 100.256533) (end 145.201089 101.934789) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 142.76899 100.25401) (end 145.198566 100.25401) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 145.198566 100.25401) (end 145.201089 100.256533) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 145.201089 101.934789) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 147.022102 101.938598) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 154.7255 104.319944) (end 152.344154 101.938598) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 152.344154 101.938598) (end 147.022102 101.938598) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 154.7255 108.8056) (end 154.7255 104.319944) (width 0.25) (layer Bottom) (net 1))
+  (via (at 146.939 101.219) (size 0.8) (drill 0.4) (layers Top Bottom) (net 2))
+  (segment (start 152.129838 100.901187) (end 147.822498 100.901187) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 146.1161 101.219) (end 146.1135 101.2216) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 147.822498 100.901187) (end 147.504685 101.219) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 155.2255 103.996849) (end 152.129838 100.901187) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 146.939 101.219) (end 146.1161 101.219) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 155.2255 108.8056) (end 155.2255 103.996849) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 147.504685 101.219) (end 146.939 101.219) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 143.398 101.5) (end 143.573651 101.675651) (width 0.25) (layer Top) (net 2))
+  (segment (start 143.573651 101.675651) (end 146.142049 101.675651) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.142049 101.675651) (end 146.3929 101.4248) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.3929 101.4248) (end 146.7332 101.4248) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.7332 101.4248) (end 146.939 101.219) (width 0.25) (layer Top) (net 2))
+  (via (at 147.828 105.664) (size 0.8) (drill 0.4) (layers Top Bottom) (net 3))
+  (segment (start 147.6782 105.5142) (end 147.828 105.664) (width 0.25) (layer Top) (net 3))
+  (segment (start 146.3929 105.5142) (end 147.6782 105.5142) (width 0.25) (layer Top) (net 3))
+  (segment (start 151.2255 106.512573) (end 151.2255 108.8056) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 150.712117 105.99919) (end 151.2255 106.512573) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 148.16319 105.99919) (end 150.712117 105.99919) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 147.828 105.664) (end 148.16319 105.99919) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 142.37541 105.26741) (end 145.075078 105.26741) (width 0.25) (layer Top) (net 4))
+  (via (at 145.243931 105.098557) (size 0.8) (drill 0.4) (layers Top Bottom) (net 4))
+  (segment (start 142.098 104.99) (end 142.37541 105.26741) (width 0.25) (layer Top) (net 4))
+  (segment (start 142.098 104.24) (end 142.098 104.99) (width 0.25) (layer Top) (net 4))
+  (segment (start 145.075078 105.26741) (end 145.243931 105.098557) (width 0.25) (layer Top) (net 4))
+  (segment (start 145.487743 105.098557) (end 146.1135 104.4728) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 145.243931 105.098557) (end 145.487743 105.098557) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 150.674396 105.392376) (end 151.7255 106.44348) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 150.421816 105.392376) (end 150.674396 105.392376) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 146.1135 104.4728) (end 149.50224 104.4728) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 151.7255 106.44348) (end 151.7255 108.8056) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 149.50224 104.4728) (end 150.421816 105.392376) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 143.398 104.24) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
+  (segment (start 145.007 104.24) (end 145.381654 104.24) (width 0.25) (layer Top) (net 5))
+  (segment (start 152.2255 108.8056) (end 152.2255 106.193504) (width 0.25) (layer Bottom) (net 5))
+  (segment (start 145.381654 104.24) (end 145.856628 104.714974) (width 0.25) (layer Top) (net 5))
+  (segment (start 145.856628 104.714974) (end 150.74697 104.714974) (width 0.25) (layer Top) (net 5))
+  (via (at 150.74697 104.714974) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
+  (segment (start 152.2255 106.193504) (end 150.74697 104.714974) (width 0.25) (layer Bottom) (net 5))
+  (via (at 145.034 103.886) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
+  (segment (start 145.034 103.886) (end 145.007 103.913) (width 0.25) (layer Top) (net 5))
+  (segment (start 144.4472 104.4728) (end 145.034 103.886) (width 0.25) (layer Bottom) (net 5))
+  (segment (start 144.0815 104.4728) (end 144.4472 104.4728) (width 0.25) (layer Bottom) (net 5))
+  (segment (start 145.007 103.913) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
+  (via (at 148.336 103.52461) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
+  (segment (start 152.7255 106.045058) (end 151.490164 104.809722) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 151.490164 104.35972) (end 150.655054 103.52461) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 152.7255 108.8056) (end 152.7255 106.045058) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 151.490164 104.809722) (end 151.490164 104.35972) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 150.655054 103.52461) (end 148.336 103.52461) (width 0.25) (layer Bottom) (net 6))
+  (via (at 144.899309 102.94316) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
+  (segment (start 144.803349 102.8472) (end 144.899309 102.94316) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 144.0815 102.8472) (end 144.803349 102.8472) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 144.899309 102.94316) (end 145.57107 102.271399) (width 0.25) (layer Top) (net 6))
+  (segment (start 145.57107 102.271399) (end 147.082789 102.271399) (width 0.25) (layer Top) (net 6))
+  (segment (start 147.082789 102.271399) (end 148.336 103.52461) (width 0.25) (layer Top) (net 6))
+  (segment (start 146.2659 103.9902) (end 146.2659 102.9488) (width 0.254) (layer Top) (net 7) (tstamp 63E759C5))
+  (segment (start 153.2255 105.415504) (end 152.231065 104.421069) (width 0.25) (layer Bottom) (net 7))
+  (segment (start 148.842094 104.02107) (end 151.831066 104.02107) (width 0.25) (layer Top) (net 7))
+  (via (at 152.231065 104.421069) (size 0.8) (drill 0.4) (layers Top Bottom) (net 7))
+  (segment (start 148.661153 104.202011) (end 148.842094 104.02107) (width 0.25) (layer Top) (net 7))
+  (segment (start 146.3929 103.9902) (end 146.604711 104.202011) (width 0.25) (layer Top) (net 7))
+  (segment (start 146.604711 104.202011) (end 148.661153 104.202011) (width 0.25) (layer Top) (net 7))
+  (segment (start 151.831066 104.02107) (end 152.231065 104.421069) (width 0.25) (layer Top) (net 7))
+  (segment (start 153.2255 108.8056) (end 153.2255 105.415504) (width 0.25) (layer Bottom) (net 7))
+  (via (at 152.019 102.616) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
+  (segment (start 154.2255 104.8225) (end 152.019 102.616) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 154.2255 108.8056) (end 154.2255 104.8225) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 149.733 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
+  (segment (start 152.019 102.616) (end 149.733 100.33) (width 0.25) (layer Top) (net 9))
+  (segment (start 147.574 100.33) (end 147.955 100.33) (width 0.25) (layer Top) (net 9))
+  (via (at 144.523679 100.981868) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
+  (segment (start 144.0815 101.2216) (end 144.283947 101.2216) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 144.283947 101.2216) (end 144.523679 100.981868) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 144.523679 100.981868) (end 145.175547 100.33) (width 0.25) (layer Top) (net 9))
+  (segment (start 145.175547 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
+
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.kicad_pcb-bak b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.kicad_pcb-bak
new file mode 100644 (file)
index 0000000..bff4000
--- /dev/null
@@ -0,0 +1,497 @@
+(kicad_pcb (version 20171130) (host pcbnew 5.1.9+dfsg1-1+deb11u1)
+
+  (general
+    (thickness 1.6)
+    (drawings 22)
+    (tracks 90)
+    (zones 0)
+    (modules 10)
+    (nets 12)
+  )
+
+  (page A4)
+  (layers
+    (0 Top signal)
+    (31 Bottom signal)
+    (32 B.Adhes user hide)
+    (33 F.Adhes user hide)
+    (34 B.Paste user hide)
+    (35 F.Paste user hide)
+    (36 B.SilkS user hide)
+    (37 F.SilkS user)
+    (38 B.Mask user hide)
+    (39 F.Mask user hide)
+    (40 Dwgs.User user hide)
+    (41 Cmts.User user hide)
+    (42 Eco1.User user hide)
+    (43 Eco2.User user)
+    (44 Edge.Cuts user)
+    (45 Margin user hide)
+    (46 B.CrtYd user hide)
+    (47 F.CrtYd user hide)
+    (48 B.Fab user hide)
+    (49 F.Fab user hide)
+  )
+
+  (setup
+    (last_trace_width 0.25)
+    (trace_clearance 0.1524)
+    (zone_clearance 0.508)
+    (zone_45_only no)
+    (trace_min 0.2)
+    (via_size 0.8)
+    (via_drill 0.4)
+    (via_min_size 0.1)
+    (via_min_drill 0.254)
+    (uvia_size 0.3)
+    (uvia_drill 0.1)
+    (uvias_allowed no)
+    (uvia_min_size 0.2)
+    (uvia_min_drill 0.1)
+    (edge_width 0.05)
+    (segment_width 0.2)
+    (pcb_text_width 0.3)
+    (pcb_text_size 1.5 1.5)
+    (mod_edge_width 0.12)
+    (mod_text_size 1 1)
+    (mod_text_width 0.15)
+    (pad_size 1.5 0.27)
+    (pad_drill 0)
+    (pad_to_mask_clearance 0)
+    (aux_axis_origin 0 0)
+    (visible_elements FFFFFF7F)
+    (pcbplotparams
+      (layerselection 0x010fc_ffffffff)
+      (usegerberextensions false)
+      (usegerberattributes true)
+      (usegerberadvancedattributes true)
+      (creategerberjobfile true)
+      (excludeedgelayer true)
+      (linewidth 0.100000)
+      (plotframeref false)
+      (viasonmask false)
+      (mode 1)
+      (useauxorigin false)
+      (hpglpennumber 1)
+      (hpglpenspeed 20)
+      (hpglpendiameter 15.000000)
+      (psnegative false)
+      (psa4output false)
+      (plotreference true)
+      (plotvalue true)
+      (plotinvisibletext false)
+      (padsonsilk false)
+      (subtractmaskfromsilk false)
+      (outputformat 1)
+      (mirror false)
+      (drillshape 1)
+      (scaleselection 1)
+      (outputdirectory ""))
+  )
+
+  (net 0 "")
+  (net 1 GND)
+  (net 2 VCC)
+  (net 3 /A0_TEMP_ENABLE)
+  (net 4 /SCL)
+  (net 5 /SDA)
+  (net 6 /A1_SERCOM3.3_TC3.1)
+  (net 7 /A2_TEMP_SENSE)
+  (net 8 /NC)
+  (net 9 /A4_SERCOM3.2_TC3.0)
+  (net 10 "Net-(U1-Pad7)")
+  (net 11 "Net-(U1-Pad5)")
+
+  (net_class Default "This is the default net class."
+    (clearance 0.1524)
+    (trace_width 0.25)
+    (via_dia 0.8)
+    (via_drill 0.4)
+    (uvia_dia 0.3)
+    (uvia_drill 0.1)
+    (add_net /A0_TEMP_ENABLE)
+    (add_net /A1_SERCOM3.3_TC3.1)
+    (add_net /A2_TEMP_SENSE)
+    (add_net /A4_SERCOM3.2_TC3.0)
+    (add_net /NC)
+    (add_net /SCL)
+    (add_net /SDA)
+    (add_net GND)
+    (add_net "Net-(U1-Pad5)")
+    (add_net "Net-(U1-Pad7)")
+    (add_net VCC)
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" (layer Top) (tedit 0) (tstamp 63E6D203)
+    (at 153.2255 106.5556)
+    (descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
+    (path /54307519)
+    (fp_text reference U$3 (at 0 0) (layer F.SilkS) hide
+      (effects (font (size 1.27 1.27) (thickness 0.15)))
+    )
+    (fp_text value FH19C-9S-0.5SH_10-FFC (at 0 0) (layer F.SilkS) hide
+      (effects (font (size 1.27 1.27) (thickness 0.15)))
+    )
+    (fp_arc (start -2.3392 3.35) (end -2.3392 3.5) (angle 90) (layer Edge.Cuts) (width 0.05))
+    (fp_arc (start 2.3392 3.35) (end 2.3392 3.5) (angle -90) (layer Edge.Cuts) (width 0.05))
+    (fp_line (start -2.4892 0) (end -2.4892 3.35) (layer Edge.Cuts) (width 0.05))
+    (fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer Edge.Cuts) (width 0.05))
+    (fp_line (start 2.4892 0) (end 2.4892 3.35) (layer Edge.Cuts) (width 0.05))
+    (fp_poly (pts (xy -2.4902 0.9742) (xy 2.4882 0.9742) (xy 2.4892 3.4798) (xy -2.4892 3.4798)) (layer B.Mask) (width 0))
+    (pad 1 smd rect (at 2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 2 VCC) (solder_mask_margin 0.0635))
+    (pad 2 smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 1 GND) (solder_mask_margin 0.0635))
+    (pad 3 smd rect (at 1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
+    (pad 4 smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 8 /NC) (solder_mask_margin 0.0635))
+    (pad 5 smd rect (at 0 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
+    (pad 6 smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
+    (pad 7 smd rect (at -1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 5 /SDA) (solder_mask_margin 0.0635))
+    (pad 8 smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 4 /SCL) (solder_mask_margin 0.0635))
+    (pad 9 smd rect (at -2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
+      (net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
+  )
+
+  (module OPT3001DNPT:SON65P200X200X65-7N (layer Top) (tedit 63E6D415) (tstamp 63E73FD8)
+    (at 142.748 102.87 270)
+    (path /63E70E51)
+    (attr smd)
+    (fp_text reference U1 (at 0.54 -2.008 90) (layer F.SilkS) hide
+      (effects (font (size 0.8 0.8) (thickness 0.15)))
+    )
+    (fp_text value OPT3001DNPT (at 7.652 2.008 90) (layer F.Fab) hide
+      (effects (font (size 0.8 0.8) (thickness 0.15)))
+    )
+    (fp_poly (pts (xy -0.21 -0.43) (xy 0.21 -0.43) (xy 0.21 0.43) (xy -0.21 0.43)) (layer F.Paste) (width 0.01))
+    (fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.SilkS) (width 0.2))
+    (fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.Fab) (width 0.2))
+    (fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.127))
+    (fp_line (start -1 1) (end 1 1) (layer F.Fab) (width 0.127))
+    (fp_line (start -1 -1.099) (end 1 -1.099) (layer F.SilkS) (width 0.127))
+    (fp_line (start -1 1.099) (end 1 1.099) (layer F.SilkS) (width 0.127))
+    (fp_line (start -1 -1) (end -1 1) (layer F.Fab) (width 0.127))
+    (fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.127))
+    (fp_line (start -1.615 -1.25) (end 1.615 -1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start -1.615 1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start -1.615 -1.25) (end -1.615 1.25) (layer F.CrtYd) (width 0.05))
+    (fp_line (start 1.615 -1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
+    (pad 1 smd roundrect (at -1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 2 VCC))
+    (pad 2 smd roundrect (at -1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 1 GND))
+    (pad 3 smd roundrect (at -1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 1 GND))
+    (pad 4 smd roundrect (at 1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 4 /SCL))
+    (pad 5 smd roundrect (at 1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 11 "Net-(U1-Pad5)"))
+    (pad 6 smd roundrect (at 1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
+      (net 5 /SDA))
+    (pad 7 smd rect (at 0 0 270) (size 0.65 1.35) (layers Top F.Mask)
+      (net 10 "Net-(U1-Pad7)"))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759D2)
+    (at 146.2659 104.7522 270)
+    (descr "<b>0603 MicroPitch</b>")
+    (path /05CBC8DB)
+    (fp_text reference R1 (at -0.0635 1.7145 90) (layer F.SilkS)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_text value "1% 10K" (at -0.9525 0.9525 90) (layer F.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
+    (fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
+    (fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
+    (fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
+    (fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
+    (fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
+    (pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
+    (pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759F3)
+    (at 146.2659 102.1868 270)
+    (descr "<b>0603 MicroPitch</b>")
+    (path /6C7771A6)
+    (fp_text reference RT1 (at -0.127 1.778 90) (layer F.SilkS)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_text value "NTC 10K" (at -1.27 1.4923 90) (layer F.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+    )
+    (fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
+    (fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
+    (fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
+    (fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
+    (fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
+    (fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
+    (pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
+    (pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
+      (net 2 VCC) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D22B)
+    (at 146.1135 102.8472 180)
+    (descr "<b>TEST PAD</b>")
+    (path /8E097FD0)
+    (fp_text reference GND1 (at -1.778 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 1 GND) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D232)
+    (at 144.0815 101.2216 180)
+    (descr "<b>TEST PAD</b>")
+    (path /E65641C5)
+    (fp_text reference A4 (at 1.524 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D239)
+    (at 146.1135 101.2216 180)
+    (descr "<b>TEST PAD</b>")
+    (path /D0DD1D8E)
+    (fp_text reference VCC1 (at -1.778 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 2 VCC) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D240)
+    (at 146.1135 104.4728 180)
+    (descr "<b>TEST PAD</b>")
+    (path /252148C1)
+    (fp_text reference SCL1 (at -1.778 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 4 /SCL) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D247)
+    (at 144.0815 104.4728 180)
+    (descr "<b>TEST PAD</b>")
+    (path /943CED1C)
+    (fp_text reference SDA1 (at 1.778 -0.0127) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 5 /SDA) (solder_mask_margin 0.0635))
+  )
+
+  (module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D24E)
+    (at 144.0815 102.8472 180)
+    (descr "<b>TEST PAD</b>")
+    (path /E1B0505C)
+    (fp_text reference A1 (at 1.524 0) (layer B.SilkS)
+      (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
+    )
+    (fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
+      (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
+    )
+    (fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
+    (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+    (fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
+      (effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
+    )
+    (pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
+      (net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
+  )
+
+  (gr_arc (start 150.4823 106.5556) (end 150.7363 106.5556) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 803D32C0))
+  (gr_line (start 150.4823 106.3016) (end 145.7325 106.3016) (layer Edge.Cuts) (width 0.05) (tstamp 803D3820))
+  (gr_line (start 145.0975 105.6666) (end 142.1765 105.6666) (layer Edge.Cuts) (width 0.05) (tstamp 803D3C70))
+  (gr_arc (start 142.1765 104.7776) (end 142.1765 105.6666) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E7417A))
+  (gr_line (start 141.2875 104.7776) (end 141.2875 100.8406) (layer Edge.Cuts) (width 0.05) (tstamp 63E75941))
+  (gr_arc (start 142.1765 100.8406) (end 141.2875 100.8406) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E74180))
+  (gr_line (start 142.1765 99.9516) (end 155.3337 99.9516) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B000))
+  (gr_arc (start 155.3337 100.3326) (end 155.3337 99.9516) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B410))
+  (gr_line (start 155.7147 100.3326) (end 155.7147 106.5556) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B950))
+  (gr_arc (start 145.0975 106.3016) (end 145.7325 106.3016) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9BE00))
+  (gr_text "OPT3001 I2C\nSensor Board" (at 151.4475 100.2056) (layer F.SilkS) (tstamp 7FC58850)
+    (effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify top))
+  )
+  (gr_line (start 155.7147 105.2856) (end 147.5105 105.2856) (layer F.SilkS) (width 0.127) (tstamp 7FC58F50))
+  (gr_line (start 147.0025 100.7136) (end 147.0025 104.7776) (layer F.SilkS) (width 0.127) (tstamp 7FA4B140))
+  (gr_arc (start 147.5105 104.7776) (end 147.0025 104.7776) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4B6B0))
+  (gr_arc (start 146.2405 100.7136) (end 147.0025 100.7136) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4BCC0))
+  (gr_text "A0: Thermistor !EN\nA2: Temp. Sense\nA1/A4/SDA/SCL:\nTest Points" (at 151.4475 102.1106) (layer F.SilkS) (tstamp 7FA08AA0)
+    (effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify top))
+  )
+  (gr_text "Digital IO\nAnalog input\nPWM on TC3\nUART RX/TX\nInterrupt 1/0\nA4 ONLY: Ext. wake 0" (at 155.5115 101.2216) (layer B.SilkS) (tstamp 7FA09230)
+    (effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify left top mirror))
+  )
+  (gr_text "A1/A4 Uses" (at 155.5115 100.2056) (layer B.SilkS) (tstamp 7F9A10A0)
+    (effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify left top mirror))
+  )
+  (gr_text "" (at 142.9385 104.1172) (layer F.SilkS) (tstamp 7F9A17A0)
+    (effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
+  )
+  (gr_text "" (at 142.9385 101.5518) (layer F.SilkS) (tstamp 7F9A1E50)
+    (effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
+  )
+  (dimension 3 (width 0.12) (layer F.SilkS)
+    (gr_text "3.000 mm" (at 160.9575 108.5016 90) (layer F.SilkS)
+      (effects (font (size 1 1) (thickness 0.15)))
+    )
+    (feature1 (pts (xy 156.0875 107.0016) (xy 160.273921 107.0016)))
+    (feature2 (pts (xy 156.0875 110.0016) (xy 160.273921 110.0016)))
+    (crossbar (pts (xy 159.6875 110.0016) (xy 159.6875 107.0016)))
+    (arrow1a (pts (xy 159.6875 107.0016) (xy 160.273921 108.128104)))
+    (arrow1b (pts (xy 159.6875 107.0016) (xy 159.101079 108.128104)))
+    (arrow2a (pts (xy 159.6875 110.0016) (xy 160.273921 108.875096)))
+    (arrow2b (pts (xy 159.6875 110.0016) (xy 159.101079 108.875096)))
+  )
+  (gr_text "Stiffener only\nin this area" (at 159.5755 108.5876) (layer F.SilkS) (tstamp 7F95BC90)
+    (effects (font (size 0.57912 0.57912) (thickness 0.109728)))
+  )
+
+  (segment (start 148.082 100.457) (end 148.137 100.457) (width 0.25) (layer Bottom) (net 0))
+  (segment (start 142.098 101.5) (end 142.748 101.5) (width 0.25) (layer Top) (net 1))
+  (via (at 142.494 100.529) (size 0.8) (drill 0.4) (layers Top Bottom) (net 1))
+  (segment (start 142.748 100.783) (end 142.494 100.529) (width 0.25) (layer Top) (net 1))
+  (segment (start 142.748 101.5) (end 142.748 100.783) (width 0.25) (layer Top) (net 1))
+  (segment (start 142.494 100.529) (end 142.76899 100.25401) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 145.201089 100.256533) (end 145.201089 101.934789) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 142.76899 100.25401) (end 145.198566 100.25401) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 145.198566 100.25401) (end 145.201089 100.256533) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 145.201089 101.934789) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 147.022102 101.938598) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 154.7255 104.319944) (end 152.344154 101.938598) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 152.344154 101.938598) (end 147.022102 101.938598) (width 0.25) (layer Bottom) (net 1))
+  (segment (start 154.7255 108.8056) (end 154.7255 104.319944) (width 0.25) (layer Bottom) (net 1))
+  (via (at 146.939 101.219) (size 0.8) (drill 0.4) (layers Top Bottom) (net 2) (status 1000000))
+  (segment (start 152.129838 100.901187) (end 147.822498 100.901187) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 146.7332 101.4248) (end 146.939 101.219) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.3929 101.4248) (end 146.7332 101.4248) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.142049 101.675651) (end 146.3929 101.4248) (width 0.25) (layer Top) (net 2))
+  (segment (start 143.573651 101.675651) (end 146.142049 101.675651) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.1161 101.219) (end 146.1135 101.2216) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 147.822498 100.901187) (end 147.504685 101.219) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 155.2255 103.996849) (end 152.129838 100.901187) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 143.398 101.5) (end 143.573651 101.675651) (width 0.25) (layer Top) (net 2))
+  (segment (start 146.939 101.219) (end 146.1161 101.219) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 155.2255 108.8056) (end 155.2255 103.996849) (width 0.25) (layer Bottom) (net 2))
+  (segment (start 147.504685 101.219) (end 146.939 101.219) (width 0.25) (layer Bottom) (net 2))
+  (via (at 147.828 105.664) (size 0.8) (drill 0.4) (layers Top Bottom) (net 3))
+  (segment (start 147.6782 105.5142) (end 147.828 105.664) (width 0.25) (layer Top) (net 3))
+  (segment (start 146.3929 105.5142) (end 147.6782 105.5142) (width 0.25) (layer Top) (net 3))
+  (segment (start 151.2255 106.512573) (end 151.2255 108.8056) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 150.712117 105.99919) (end 151.2255 106.512573) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 148.16319 105.99919) (end 150.712117 105.99919) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 147.828 105.664) (end 148.16319 105.99919) (width 0.25) (layer Bottom) (net 3))
+  (segment (start 142.37541 105.26741) (end 145.075078 105.26741) (width 0.25) (layer Top) (net 4))
+  (via (at 145.243931 105.098557) (size 0.8) (drill 0.4) (layers Top Bottom) (net 4))
+  (segment (start 142.098 104.99) (end 142.37541 105.26741) (width 0.25) (layer Top) (net 4))
+  (segment (start 142.098 104.24) (end 142.098 104.99) (width 0.25) (layer Top) (net 4))
+  (segment (start 145.075078 105.26741) (end 145.243931 105.098557) (width 0.25) (layer Top) (net 4))
+  (segment (start 145.487743 105.098557) (end 146.1135 104.4728) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 145.243931 105.098557) (end 145.487743 105.098557) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 150.674396 105.392376) (end 151.7255 106.44348) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 150.421816 105.392376) (end 150.674396 105.392376) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 146.1135 104.4728) (end 149.50224 104.4728) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 151.7255 106.44348) (end 151.7255 108.8056) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 149.50224 104.4728) (end 150.421816 105.392376) (width 0.25) (layer Bottom) (net 4))
+  (segment (start 144.0815 104.4728) (end 144.4472 104.4728) (width 0.25) (layer Bottom) (net 5))
+  (segment (start 144.4472 104.4728) (end 145.034 103.886) (width 0.25) (layer Bottom) (net 5))
+  (via (at 145.034 103.886) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
+  (segment (start 145.034 103.886) (end 145.007 103.913) (width 0.25) (layer Top) (net 5))
+  (segment (start 145.007 103.913) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
+  (segment (start 143.398 104.24) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
+  (segment (start 145.007 104.24) (end 145.381654 104.24) (width 0.25) (layer Top) (net 5))
+  (segment (start 152.2255 108.8056) (end 152.2255 106.193504) (width 0.25) (layer Bottom) (net 5))
+  (segment (start 145.381654 104.24) (end 145.856628 104.714974) (width 0.25) (layer Top) (net 5))
+  (segment (start 145.856628 104.714974) (end 150.74697 104.714974) (width 0.25) (layer Top) (net 5))
+  (via (at 150.74697 104.714974) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
+  (segment (start 152.2255 106.193504) (end 150.74697 104.714974) (width 0.25) (layer Bottom) (net 5))
+  (segment (start 144.0815 102.8472) (end 144.803349 102.8472) (width 0.25) (layer Bottom) (net 6))
+  (via (at 144.899309 102.94316) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
+  (segment (start 144.803349 102.8472) (end 144.899309 102.94316) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 144.899309 102.94316) (end 145.57107 102.271399) (width 0.25) (layer Top) (net 6))
+  (via (at 148.336 103.52461) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
+  (segment (start 147.082789 102.271399) (end 148.336 103.52461) (width 0.25) (layer Top) (net 6))
+  (segment (start 145.57107 102.271399) (end 147.082789 102.271399) (width 0.25) (layer Top) (net 6))
+  (segment (start 152.7255 106.045058) (end 151.490164 104.809722) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 151.490164 104.35972) (end 150.655054 103.52461) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 152.7255 108.8056) (end 152.7255 106.045058) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 151.490164 104.809722) (end 151.490164 104.35972) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 150.655054 103.52461) (end 148.336 103.52461) (width 0.25) (layer Bottom) (net 6))
+  (segment (start 146.2659 103.9902) (end 146.2659 102.9488) (width 0.254) (layer Top) (net 7) (tstamp 63E759C5))
+  (segment (start 153.2255 105.415504) (end 152.231065 104.421069) (width 0.25) (layer Bottom) (net 7))
+  (segment (start 148.842094 104.02107) (end 151.831066 104.02107) (width 0.25) (layer Top) (net 7))
+  (via (at 152.231065 104.421069) (size 0.8) (drill 0.4) (layers Top Bottom) (net 7))
+  (segment (start 148.661153 104.202011) (end 148.842094 104.02107) (width 0.25) (layer Top) (net 7))
+  (segment (start 146.3929 103.9902) (end 146.604711 104.202011) (width 0.25) (layer Top) (net 7))
+  (segment (start 146.604711 104.202011) (end 148.661153 104.202011) (width 0.25) (layer Top) (net 7))
+  (segment (start 151.831066 104.02107) (end 152.231065 104.421069) (width 0.25) (layer Top) (net 7))
+  (segment (start 153.2255 108.8056) (end 153.2255 105.415504) (width 0.25) (layer Bottom) (net 7))
+  (segment (start 144.0815 101.2216) (end 144.283947 101.2216) (width 0.25) (layer Bottom) (net 9))
+  (via (at 144.523679 100.981868) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
+  (segment (start 144.283947 101.2216) (end 144.523679 100.981868) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 144.523679 100.981868) (end 145.175547 100.33) (width 0.25) (layer Top) (net 9))
+  (via (at 152.019 102.616) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
+  (segment (start 154.2255 104.8225) (end 152.019 102.616) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 154.2255 108.8056) (end 154.2255 104.8225) (width 0.25) (layer Bottom) (net 9))
+  (segment (start 149.733 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
+  (segment (start 152.019 102.616) (end 149.733 100.33) (width 0.25) (layer Top) (net 9))
+  (segment (start 147.574 100.33) (end 147.955 100.33) (width 0.25) (layer Top) (net 9))
+  (segment (start 145.175547 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
+
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/B1,27.kicad_mod b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/B1,27.kicad_mod
new file mode 100644 (file)
index 0000000..448fc3c
--- /dev/null
@@ -0,0 +1,16 @@
+(module B1,27 (layer F.Cu) (tedit 0)
+  (descr "<b>TEST PAD</b>")
+  (fp_text reference A1 (at 1.524 0 -180) (layer F.SilkS)
+    (effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify left bottom))
+  )
+  (fp_text value TPB1,27 (at -0.635 0.762 -180) (layer F.Fab)
+    (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+  )
+  (fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
+  (fp_line (start 0 -0.635) (end 0 0.635) (layer Dwgs.User) (width 0.0024))
+  (fp_text user >TP_SIGNAL_NAME (at -0.635 1.905) (layer Dwgs.User)
+    (effects (font (size 0.95 0.95) (thickness 0.08)) (justify left bottom))
+  )
+  (pad TP smd roundrect (at 0 0) (size 1.27 1.27) (layers F.Cu F.Mask) (roundrect_rratio 0.5)
+    (solder_mask_margin 0.0635))
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/FH19C9S05SH10-FFC.kicad_mod b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/FH19C9S05SH10-FFC.kicad_mod
new file mode 100644 (file)
index 0000000..61ebf5f
--- /dev/null
@@ -0,0 +1,33 @@
+(module FH19C9S05SH10-FFC (layer F.Cu) (tedit 0)
+  (descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
+  (fp_text reference U$3 (at 0 0) (layer F.SilkS) hide
+    (effects (font (size 1.27 1.27) (thickness 0.15)))
+  )
+  (fp_text value FH19C-9S-0.5SH_10-FFC (at 0 0) (layer F.SilkS) hide
+    (effects (font (size 1.27 1.27) (thickness 0.15)))
+  )
+  (fp_line (start -2.4892 0) (end -2.4892 3.35) (layer Edge.Cuts) (width 0.05))
+  (fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer Edge.Cuts) (width 0.05))
+  (fp_line (start 2.4892 0) (end 2.4892 3.35) (layer Edge.Cuts) (width 0.05))
+  (fp_arc (start -2.3392 3.35) (end -2.3392 3.5) (angle 90) (layer Edge.Cuts) (width 0.05))
+  (fp_arc (start 2.3392 3.35) (end 2.3392 3.5) (angle -90) (layer Edge.Cuts) (width 0.05))
+  (fp_poly (pts (xy -2.4902 0.9742) (xy 2.4882 0.9742) (xy 2.4892 3.4798) (xy -2.4892 3.4798)) (layer B.Mask) (width 0))
+  (pad 1 smd rect (at 2 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 2 smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 3 smd rect (at 1 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 4 smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 5 smd rect (at 0 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 6 smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 7 smd rect (at -1 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 8 smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 9 smd rect (at -2 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
+    (solder_mask_margin 0.0635))
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/_0603MP.kicad_mod b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty/_0603MP.kicad_mod
new file mode 100644 (file)
index 0000000..b242ec4
--- /dev/null
@@ -0,0 +1,19 @@
+(module _0603MP (layer F.Cu) (tedit 0)
+  (descr "<b>0603 MicroPitch</b>")
+  (fp_text reference R1 (at -0.0635 1.7145 -180) (layer F.SilkS)
+    (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+  )
+  (fp_text value "1% 10K" (at -0.9525 0.9525 -180) (layer F.Fab)
+    (effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
+  )
+  (fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
+  (fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
+  (fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
+  (fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
+  (fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
+  (fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
+  (pad 1 smd rect (at -0.762 0) (size 0.8 0.8) (layers F.Cu F.Paste F.Mask)
+    (solder_mask_margin 0.0635))
+  (pad 2 smd rect (at 0.762 0) (size 0.8 0.8) (layers F.Cu F.Paste F.Mask)
+    (solder_mask_margin 0.0635))
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.sch b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.sch
new file mode 100644 (file)
index 0000000..7f0a6a3
--- /dev/null
@@ -0,0 +1,279 @@
+EESchema Schematic File Version 4
+EELAYER 30 0
+EELAYER END
+$Descr User 11980 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date ""
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+       3300 3100 2200 3100
+Text Label 2300 3100 0    70   ~ 0
+SCL
+Wire Wire Line
+       3300 3000 2200 3000
+Text Label 2300 3000 0    70   ~ 0
+SDA
+Wire Wire Line
+       4200 2500 2200 2500
+Wire Wire Line
+       4200 2500 4200 2600
+Wire Wire Line
+       4300 2500 4200 2500
+Text Label 2300 2500 0    70   ~ 0
+GND
+Connection ~ 4200 2500
+Wire Wire Line
+       2200 3200 3300 3200
+Text Label 2300 3200 0    70   ~ 0
+A0_TEMP_ENABLE
+Wire Wire Line
+       4800 3200 5900 3200
+Text Label 4900 3200 0    70   ~ 0
+A0_TEMP_ENABLE
+Wire Wire Line
+       3300 2600 2200 2600
+Text Label 2300 2600 0    70   ~ 0
+A4_SERCOM3.2_TC3.0
+Wire Wire Line
+       3300 2700 2200 2700
+Text Label 2300 2700 0    70   ~ 0
+NC
+Wire Wire Line
+       3300 2800 2200 2800
+Text Label 2300 2800 0    70   ~ 0
+A2_TEMP_SENSE
+Wire Wire Line
+       5900 2800 4800 2800
+Connection ~ 5900 2800
+Text Label 4900 2800 0    70   ~ 0
+A2_TEMP_SENSE
+Wire Wire Line
+       4300 2400 4200 2400
+Wire Wire Line
+       4200 2400 2200 2400
+Wire Wire Line
+       4200 2300 4200 2400
+Text Label 2300 2400 0    70   ~ 0
+VCC
+Connection ~ 4200 2400
+Wire Wire Line
+       3300 2900 2200 2900
+Text Label 2300 2900 0    70   ~ 0
+A1_SERCOM3.3_TC3.1
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:A4L-LOC #FRAME1
+U 1 1 73DA64CA
+P 900 6200
+F 0 "#FRAME1" H 900 6200 50  0001 C CNN
+F 1 "A4L-LOC" H 900 6200 50  0001 C CNN
+F 2 "" H 900 6200 50  0001 C CNN
+F 3 "" H 900 6200 50  0001 C CNN
+       1    900  6200
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:FH19C-9S-0.5SH_10-FFC U$3
+U 1 1 54307519
+P 1700 2800
+F 0 "U$3" H 2050 3500 59  0000 L CNN
+F 1 "FH19C-9S-0.5SH_10-FFC" H 2050 3400 59  0000 L CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" H 1700 2800 50  0001 C CNN
+F 3 "" H 1700 2800 50  0001 C CNN
+       1    1700 2800
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP RT1
+U 1 1 6C7771A6
+P 5900 2600
+F 0 "RT1" H 5900 2700 50  0000 C CNN
+F 1 "NTC 10K" H 5900 2500 40  0000 C CNB
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 2600 50  0001 C CNN
+F 3 "" H 5900 2600 50  0001 C CNN
+       1    5900 2600
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP R1
+U 1 1 05CBC8DB
+P 5900 3000
+F 0 "R1" H 5900 3100 50  0000 C CNN
+F 1 "1% 10K" H 5900 2900 40  0000 C CNB
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 3000 50  0001 C CNN
+F 3 "" H 5900 3000 50  0001 C CNN
+       1    5900 3000
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:GND #GND01
+U 1 1 DB8695AC
+P 4200 2700
+F 0 "#GND01" H 4200 2700 50  0001 C CNN
+F 1 "GND" H 4100 2600 59  0000 L BNN
+F 2 "" H 4200 2700 50  0001 C CNN
+F 3 "" H 4200 2700 50  0001 C CNN
+       1    4200 2700
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+01
+U 1 1 BCDF72C5
+P 4200 2200
+F 0 "#P+01" H 4200 2200 50  0001 C CNN
+F 1 "VCC" V 4100 2200 59  0000 L BNN
+F 2 "" H 4200 2200 50  0001 C CNN
+F 3 "" H 4200 2200 50  0001 C CNN
+       1    4200 2200
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+02
+U 1 1 339DE9D3
+P 5900 2300
+F 0 "#P+02" H 5900 2300 50  0001 C CNN
+F 1 "VCC" V 5800 2200 59  0000 L BNN
+F 2 "" H 5900 2300 50  0001 C CNN
+F 3 "" H 5900 2300 50  0001 C CNN
+       1    5900 2300
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 GND1
+U 1 1 8E097FD0
+P 4400 2500
+F 0 "GND1" V 4450 2550 59  0000 L BNN
+F 1 "TPB1,27" H 4400 2500 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2500 50  0001 C CNN
+F 3 "" H 4400 2500 50  0001 C CNN
+       1    4400 2500
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A4
+U 1 1 E65641C5
+P 3400 2600
+F 0 "A4" V 3450 2650 59  0000 L BNN
+F 1 "TPB1,27" H 3400 2600 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2600 50  0001 C CNN
+F 3 "" H 3400 2600 50  0001 C CNN
+       1    3400 2600
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 VCC1
+U 1 1 D0DD1D8E
+P 4400 2400
+F 0 "VCC1" V 4350 2450 59  0000 L BNN
+F 1 "TPB1,27" H 4400 2400 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2400 50  0001 C CNN
+F 3 "" H 4400 2400 50  0001 C CNN
+       1    4400 2400
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SCL1
+U 1 1 252148C1
+P 3400 3100
+F 0 "SCL1" V 3450 3150 59  0000 L BNN
+F 1 "TPB1,27" H 3400 3100 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3100 50  0001 C CNN
+F 3 "" H 3400 3100 50  0001 C CNN
+       1    3400 3100
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SDA1
+U 1 1 943CED1C
+P 3400 3000
+F 0 "SDA1" V 3450 3050 59  0000 L BNN
+F 1 "TPB1,27" H 3400 3000 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3000 50  0001 C CNN
+F 3 "" H 3400 3000 50  0001 C CNN
+       1    3400 3000
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A1
+U 1 1 E1B0505C
+P 3400 2900
+F 0 "A1" V 3450 2950 59  0000 L BNN
+F 1 "TPB1,27" H 3400 2900 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2900 50  0001 C CNN
+F 3 "" H 3400 2900 50  0001 C CNN
+       1    3400 2900
+       0    1    1    0   
+$EndComp
+$Comp
+L OPT3001DNPT:OPT3001DNPT U1
+U 1 1 63E70E51
+P 7050 3100
+F 0 "U1" H 7050 3767 50  0000 C CNN
+F 1 "OPT3001DNPT" H 7050 3676 50  0000 C CNN
+F 2 "SON65P200X200X65-7N" H 7050 3100 50  0001 L BNN
+F 3 "" H 7050 3100 50  0001 L BNN
+F 4 "" H 7050 3100 50  0001 L BNN "EMAX"
+F 5 "" H 7050 3100 50  0001 L BNN "BALL_COLUMNS"
+F 6 "" H 7050 3100 50  0001 L BNN "BODY_DIAMETER"
+F 7 "0.65" H 7050 3100 50  0001 L BNN "ENOM"
+F 8 "" H 7050 3100 50  0001 L BNN "D1_MIN"
+F 9 "1.9" H 7050 3100 50  0001 L BNN "E_MIN"
+F 10 "0.25" H 7050 3100 50  0001 L BNN "L_MIN"
+F 11 "2.0" H 7050 3100 50  0001 L BNN "E_NOM"
+F 12 "0.65" H 7050 3100 50  0001 L BNN "A_MAX"
+F 13 "0.65" H 7050 3100 50  0001 L BNN "E2_NOM"
+F 14 "IPC 7351B" H 7050 3100 50  0001 L BNN "STANDARD"
+F 15 "01/2018" H 7050 3100 50  0001 L BNN "PARTREV"
+F 16 "0.25" H 7050 3100 50  0001 L BNN "B_NOM"
+F 17 "" H 7050 3100 50  0001 L BNN "THERMAL_PAD"
+F 18 "0.3" H 7050 3100 50  0001 L BNN "B_MAX"
+F 19 "0.2" H 7050 3100 50  0001 L BNN "B_MIN"
+F 20 "" H 7050 3100 50  0001 L BNN "IPC"
+F 21 "" H 7050 3100 50  0001 L BNN "DNOM"
+F 22 "6.0" H 7050 3100 50  0001 L BNN "PIN_COUNT"
+F 23 "2.1" H 7050 3100 50  0001 L BNN "E_MAX"
+F 24 "" H 7050 3100 50  0001 L BNN "JEDEC"
+F 25 "" H 7050 3100 50  0001 L BNN "BALL_ROWS"
+F 26 "" H 7050 3100 50  0001 L BNN "L1_MIN"
+F 27 "" H 7050 3100 50  0001 L BNN "L1_NOM"
+F 28 "" H 7050 3100 50  0001 L BNN "DMAX"
+F 29 "" H 7050 3100 50  0001 L BNN "PIN_COLUMNS"
+F 30 "" H 7050 3100 50  0001 L BNN "VACANCIES"
+F 31 "" H 7050 3100 50  0001 L BNN "SNAPEDA_PACKAGE_ID"
+F 32 "" H 7050 3100 50  0001 L BNN "DMIN"
+F 33 "" H 7050 3100 50  0001 L BNN "L1_MAX"
+F 34 "0.35" H 7050 3100 50  0001 L BNN "L_MAX"
+F 35 "" H 7050 3100 50  0001 L BNN "D1_NOM"
+F 36 "Texas Instruments" H 7050 3100 50  0001 L BNN "MANUFACTURER"
+F 37 "1.35" H 7050 3100 50  0001 L BNN "D2_NOM"
+F 38 "" H 7050 3100 50  0001 L BNN "PACKAGE_TYPE"
+F 39 "" H 7050 3100 50  0001 L BNN "D1_MAX"
+F 40 "0.3" H 7050 3100 50  0001 L BNN "L_NOM"
+F 41 "2.1" H 7050 3100 50  0001 L BNN "D_MAX"
+F 42 "2.0" H 7050 3100 50  0001 L BNN "D_NOM"
+F 43 "" H 7050 3100 50  0001 L BNN "PINS"
+F 44 "1.9" H 7050 3100 50  0001 L BNN "D_MIN"
+F 45 "" H 7050 3100 50  0001 L BNN "EMIN"
+       1    7050 3100
+       1    0    0    -1  
+$EndComp
+NoConn ~ 7650 3200
+NoConn ~ 7650 2900
+Text Label 7650 2700 0    50   ~ 0
+VCC
+Text Label 7650 3400 0    50   ~ 0
+GND
+Text Label 6450 2900 2    50   ~ 0
+GND
+Text Label 6450 3100 2    50   ~ 0
+SCL
+Text Label 6450 3200 2    50   ~ 0
+SDA
+$EndSCHEMATC
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.sch-bak b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.sch-bak
new file mode 100644 (file)
index 0000000..7f0a6a3
--- /dev/null
@@ -0,0 +1,279 @@
+EESchema Schematic File Version 4
+EELAYER 30 0
+EELAYER END
+$Descr User 11980 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date ""
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+Wire Wire Line
+       3300 3100 2200 3100
+Text Label 2300 3100 0    70   ~ 0
+SCL
+Wire Wire Line
+       3300 3000 2200 3000
+Text Label 2300 3000 0    70   ~ 0
+SDA
+Wire Wire Line
+       4200 2500 2200 2500
+Wire Wire Line
+       4200 2500 4200 2600
+Wire Wire Line
+       4300 2500 4200 2500
+Text Label 2300 2500 0    70   ~ 0
+GND
+Connection ~ 4200 2500
+Wire Wire Line
+       2200 3200 3300 3200
+Text Label 2300 3200 0    70   ~ 0
+A0_TEMP_ENABLE
+Wire Wire Line
+       4800 3200 5900 3200
+Text Label 4900 3200 0    70   ~ 0
+A0_TEMP_ENABLE
+Wire Wire Line
+       3300 2600 2200 2600
+Text Label 2300 2600 0    70   ~ 0
+A4_SERCOM3.2_TC3.0
+Wire Wire Line
+       3300 2700 2200 2700
+Text Label 2300 2700 0    70   ~ 0
+NC
+Wire Wire Line
+       3300 2800 2200 2800
+Text Label 2300 2800 0    70   ~ 0
+A2_TEMP_SENSE
+Wire Wire Line
+       5900 2800 4800 2800
+Connection ~ 5900 2800
+Text Label 4900 2800 0    70   ~ 0
+A2_TEMP_SENSE
+Wire Wire Line
+       4300 2400 4200 2400
+Wire Wire Line
+       4200 2400 2200 2400
+Wire Wire Line
+       4200 2300 4200 2400
+Text Label 2300 2400 0    70   ~ 0
+VCC
+Connection ~ 4200 2400
+Wire Wire Line
+       3300 2900 2200 2900
+Text Label 2300 2900 0    70   ~ 0
+A1_SERCOM3.3_TC3.1
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:A4L-LOC #FRAME1
+U 1 1 73DA64CA
+P 900 6200
+F 0 "#FRAME1" H 900 6200 50  0001 C CNN
+F 1 "A4L-LOC" H 900 6200 50  0001 C CNN
+F 2 "" H 900 6200 50  0001 C CNN
+F 3 "" H 900 6200 50  0001 C CNN
+       1    900  6200
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:FH19C-9S-0.5SH_10-FFC U$3
+U 1 1 54307519
+P 1700 2800
+F 0 "U$3" H 2050 3500 59  0000 L CNN
+F 1 "FH19C-9S-0.5SH_10-FFC" H 2050 3400 59  0000 L CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" H 1700 2800 50  0001 C CNN
+F 3 "" H 1700 2800 50  0001 C CNN
+       1    1700 2800
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP RT1
+U 1 1 6C7771A6
+P 5900 2600
+F 0 "RT1" H 5900 2700 50  0000 C CNN
+F 1 "NTC 10K" H 5900 2500 40  0000 C CNB
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 2600 50  0001 C CNN
+F 3 "" H 5900 2600 50  0001 C CNN
+       1    5900 2600
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP R1
+U 1 1 05CBC8DB
+P 5900 3000
+F 0 "R1" H 5900 3100 50  0000 C CNN
+F 1 "1% 10K" H 5900 2900 40  0000 C CNB
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 3000 50  0001 C CNN
+F 3 "" H 5900 3000 50  0001 C CNN
+       1    5900 3000
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:GND #GND01
+U 1 1 DB8695AC
+P 4200 2700
+F 0 "#GND01" H 4200 2700 50  0001 C CNN
+F 1 "GND" H 4100 2600 59  0000 L BNN
+F 2 "" H 4200 2700 50  0001 C CNN
+F 3 "" H 4200 2700 50  0001 C CNN
+       1    4200 2700
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+01
+U 1 1 BCDF72C5
+P 4200 2200
+F 0 "#P+01" H 4200 2200 50  0001 C CNN
+F 1 "VCC" V 4100 2200 59  0000 L BNN
+F 2 "" H 4200 2200 50  0001 C CNN
+F 3 "" H 4200 2200 50  0001 C CNN
+       1    4200 2200
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+02
+U 1 1 339DE9D3
+P 5900 2300
+F 0 "#P+02" H 5900 2300 50  0001 C CNN
+F 1 "VCC" V 5800 2200 59  0000 L BNN
+F 2 "" H 5900 2300 50  0001 C CNN
+F 3 "" H 5900 2300 50  0001 C CNN
+       1    5900 2300
+       1    0    0    -1  
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 GND1
+U 1 1 8E097FD0
+P 4400 2500
+F 0 "GND1" V 4450 2550 59  0000 L BNN
+F 1 "TPB1,27" H 4400 2500 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2500 50  0001 C CNN
+F 3 "" H 4400 2500 50  0001 C CNN
+       1    4400 2500
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A4
+U 1 1 E65641C5
+P 3400 2600
+F 0 "A4" V 3450 2650 59  0000 L BNN
+F 1 "TPB1,27" H 3400 2600 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2600 50  0001 C CNN
+F 3 "" H 3400 2600 50  0001 C CNN
+       1    3400 2600
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 VCC1
+U 1 1 D0DD1D8E
+P 4400 2400
+F 0 "VCC1" V 4350 2450 59  0000 L BNN
+F 1 "TPB1,27" H 4400 2400 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2400 50  0001 C CNN
+F 3 "" H 4400 2400 50  0001 C CNN
+       1    4400 2400
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SCL1
+U 1 1 252148C1
+P 3400 3100
+F 0 "SCL1" V 3450 3150 59  0000 L BNN
+F 1 "TPB1,27" H 3400 3100 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3100 50  0001 C CNN
+F 3 "" H 3400 3100 50  0001 C CNN
+       1    3400 3100
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SDA1
+U 1 1 943CED1C
+P 3400 3000
+F 0 "SDA1" V 3450 3050 59  0000 L BNN
+F 1 "TPB1,27" H 3400 3000 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3000 50  0001 C CNN
+F 3 "" H 3400 3000 50  0001 C CNN
+       1    3400 3000
+       0    1    1    0   
+$EndComp
+$Comp
+L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A1
+U 1 1 E1B0505C
+P 3400 2900
+F 0 "A1" V 3450 2950 59  0000 L BNN
+F 1 "TPB1,27" H 3400 2900 50  0001 C CNN
+F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2900 50  0001 C CNN
+F 3 "" H 3400 2900 50  0001 C CNN
+       1    3400 2900
+       0    1    1    0   
+$EndComp
+$Comp
+L OPT3001DNPT:OPT3001DNPT U1
+U 1 1 63E70E51
+P 7050 3100
+F 0 "U1" H 7050 3767 50  0000 C CNN
+F 1 "OPT3001DNPT" H 7050 3676 50  0000 C CNN
+F 2 "SON65P200X200X65-7N" H 7050 3100 50  0001 L BNN
+F 3 "" H 7050 3100 50  0001 L BNN
+F 4 "" H 7050 3100 50  0001 L BNN "EMAX"
+F 5 "" H 7050 3100 50  0001 L BNN "BALL_COLUMNS"
+F 6 "" H 7050 3100 50  0001 L BNN "BODY_DIAMETER"
+F 7 "0.65" H 7050 3100 50  0001 L BNN "ENOM"
+F 8 "" H 7050 3100 50  0001 L BNN "D1_MIN"
+F 9 "1.9" H 7050 3100 50  0001 L BNN "E_MIN"
+F 10 "0.25" H 7050 3100 50  0001 L BNN "L_MIN"
+F 11 "2.0" H 7050 3100 50  0001 L BNN "E_NOM"
+F 12 "0.65" H 7050 3100 50  0001 L BNN "A_MAX"
+F 13 "0.65" H 7050 3100 50  0001 L BNN "E2_NOM"
+F 14 "IPC 7351B" H 7050 3100 50  0001 L BNN "STANDARD"
+F 15 "01/2018" H 7050 3100 50  0001 L BNN "PARTREV"
+F 16 "0.25" H 7050 3100 50  0001 L BNN "B_NOM"
+F 17 "" H 7050 3100 50  0001 L BNN "THERMAL_PAD"
+F 18 "0.3" H 7050 3100 50  0001 L BNN "B_MAX"
+F 19 "0.2" H 7050 3100 50  0001 L BNN "B_MIN"
+F 20 "" H 7050 3100 50  0001 L BNN "IPC"
+F 21 "" H 7050 3100 50  0001 L BNN "DNOM"
+F 22 "6.0" H 7050 3100 50  0001 L BNN "PIN_COUNT"
+F 23 "2.1" H 7050 3100 50  0001 L BNN "E_MAX"
+F 24 "" H 7050 3100 50  0001 L BNN "JEDEC"
+F 25 "" H 7050 3100 50  0001 L BNN "BALL_ROWS"
+F 26 "" H 7050 3100 50  0001 L BNN "L1_MIN"
+F 27 "" H 7050 3100 50  0001 L BNN "L1_NOM"
+F 28 "" H 7050 3100 50  0001 L BNN "DMAX"
+F 29 "" H 7050 3100 50  0001 L BNN "PIN_COLUMNS"
+F 30 "" H 7050 3100 50  0001 L BNN "VACANCIES"
+F 31 "" H 7050 3100 50  0001 L BNN "SNAPEDA_PACKAGE_ID"
+F 32 "" H 7050 3100 50  0001 L BNN "DMIN"
+F 33 "" H 7050 3100 50  0001 L BNN "L1_MAX"
+F 34 "0.35" H 7050 3100 50  0001 L BNN "L_MAX"
+F 35 "" H 7050 3100 50  0001 L BNN "D1_NOM"
+F 36 "Texas Instruments" H 7050 3100 50  0001 L BNN "MANUFACTURER"
+F 37 "1.35" H 7050 3100 50  0001 L BNN "D2_NOM"
+F 38 "" H 7050 3100 50  0001 L BNN "PACKAGE_TYPE"
+F 39 "" H 7050 3100 50  0001 L BNN "D1_MAX"
+F 40 "0.3" H 7050 3100 50  0001 L BNN "L_NOM"
+F 41 "2.1" H 7050 3100 50  0001 L BNN "D_MAX"
+F 42 "2.0" H 7050 3100 50  0001 L BNN "D_NOM"
+F 43 "" H 7050 3100 50  0001 L BNN "PINS"
+F 44 "1.9" H 7050 3100 50  0001 L BNN "D_MIN"
+F 45 "" H 7050 3100 50  0001 L BNN "EMIN"
+       1    7050 3100
+       1    0    0    -1  
+$EndComp
+NoConn ~ 7650 3200
+NoConn ~ 7650 2900
+Text Label 7650 2700 0    50   ~ 0
+VCC
+Text Label 7650 3400 0    50   ~ 0
+GND
+Text Label 6450 2900 2    50   ~ 0
+GND
+Text Label 6450 3100 2    50   ~ 0
+SCL
+Text Label 6450 3200 2    50   ~ 0
+SDA
+$EndSCHEMATC
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.dcm b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.dcm
new file mode 100644 (file)
index 0000000..5f3ed79
--- /dev/null
@@ -0,0 +1,3 @@
+EESchema-DOCLIB  Version 2.0
+#
+#End Doc Library
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.lib b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.lib
new file mode 100644 (file)
index 0000000..b3b5489
--- /dev/null
@@ -0,0 +1,990 @@
+EESchema-LIBRARY Version 2.4
+#encoding utf-8
+#
+# A4L-LOC
+#
+DEF A4L-LOC #FRAME 0 40 Y Y 1 L N
+F0 "#FRAME" 0 0 50 H I C CNN
+F1 "A4L-LOC" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 8550 600 85 0 1 0 >DRAWING_NAME Normal 0 L B
+T 0 8550 400 76 0 1 0 >LAST_DATE_TIME Normal 0 L B
+T 0 8995 200 85 0 1 0 >SHEET Normal 0 L B
+T 0 8550 800 85 0 1 0 "by joey castillo" Normal 0 L B
+T 0 9300 200 85 0 1 0 "cc-by-sa 4.0" Normal 0 L B
+T 0 7300 200 180 0 1 0 oddly_specific_objects Normal 0 L B
+T 0 8540 195 85 0 1 0 Sheet: Normal 0 L B
+P 2 1 0 0 7250 150 7250 950 N
+P 2 1 0 0 7250 950 8475 950 N
+P 2 1 0 0 8475 350 8475 150 N
+P 2 1 0 0 8475 350 8475 550 N
+P 2 1 0 0 8475 550 8475 750 N
+P 2 1 0 0 8475 550 10100 550 N
+P 2 1 0 0 8475 750 8475 950 N
+P 2 1 0 0 8475 750 10100 750 N
+P 2 1 0 0 8475 950 10100 950 N
+P 2 1 0 0 9250 150 9250 350 N
+P 2 1 0 0 9250 350 8475 350 N
+P 2 1 0 0 9250 350 10100 350 N
+P 2 1 0 0 10100 150 10100 350 N
+P 2 1 0 0 10100 350 10100 550 N
+P 2 1 0 0 10100 550 10100 750 N
+P 2 1 0 0 10100 750 10100 950 N
+ENDDRAW
+ENDDEF
+#
+# FH19C-9S-0.5SH_10-FFC
+#
+DEF FH19C-9S-0.5SH_10-FFC ~ 0 40 Y Y 1 L N
+F0 "" 350 700 59 H V L CNN
+F1 "FH19C-9S-0.5SH_10-FFC" 350 600 59 H V L CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -200 500 -200 -500 N
+P 2 1 0 0 -200 500 300 500 N
+P 2 1 0 0 300 -500 -200 -500 N
+P 2 1 0 0 300 -500 300 500 N
+X 1 1 500 400 200 L 50 50 1 0 B
+X 2 2 500 300 200 L 50 50 1 0 B
+X 3 3 500 200 200 L 50 50 1 0 B
+X 4 4 500 100 200 L 50 50 1 0 B
+X 5 5 500 0 200 L 50 50 1 0 B
+X 6 6 500 -100 200 L 50 50 1 0 B
+X 7 7 500 -200 200 L 50 50 1 0 B
+X 8 8 500 -300 200 L 50 50 1 0 B
+X 9 9 500 -400 200 L 50 50 1 0 B
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #GND 0 40 Y Y 1 L P
+F0 "#GND" 0 0 50 H I C CNN
+F1 "GND" -100 -100 59 H V L BNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -75 0 75 0 N
+X GND 1 0 100 100 D 0 0 1 0 W
+ENDDRAW
+ENDDEF
+#
+# RESISTOR0603MINI
+#
+DEF RESISTOR0603MINI R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR0603MINI" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR0805_10MGAP
+#
+DEF RESISTOR0805_10MGAP R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR0805_10MGAP" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR0805_NOOUTLINE
+#
+DEF RESISTOR0805_NOOUTLINE R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR0805_NOOUTLINE" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR0805_NOTHERMALS
+#
+DEF RESISTOR0805_NOTHERMALS R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR0805_NOTHERMALS" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR2012
+#
+DEF RESISTOR2012 R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR2012" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR2512
+#
+DEF RESISTOR2512 R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR2512" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0402
+#
+DEF RESISTOR_0402 R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0402" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0402MP
+#
+DEF RESISTOR_0402MP R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0402MP" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0603
+#
+DEF RESISTOR_0603 R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0603" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0603MP
+#
+DEF RESISTOR_0603MP R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0603MP" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0603_NOOUT
+#
+DEF RESISTOR_0603_NOOUT R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0603_NOOUT" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0805
+#
+DEF RESISTOR_0805 R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0805" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_0805MP
+#
+DEF RESISTOR_0805MP R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_0805MP" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_1206
+#
+DEF RESISTOR_1206 R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_1206" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# RESISTOR_1206MP
+#
+DEF RESISTOR_1206MP R 0 40 Y Y 1 L N
+F0 "R" 0 100 50 H V C CNN
+F1 "RESISTOR_1206MP" 0 0 40 H V C CNB
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 -100 -50 -100 50 N
+P 2 1 0 0 -100 50 100 50 N
+P 2 1 0 0 100 -50 -100 -50 N
+P 2 1 0 0 100 50 100 -50 N
+X 1 1 -200 0 100 R 0 0 1 0 P
+X 2 2 200 0 100 L 0 0 1 0 P
+ENDDRAW
+ENDDEF
+#
+# TPB1,27
+#
+DEF TPB1,27 TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPB1,27" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPB2,54
+#
+DEF TPB2,54 TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPB2,54" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPPAD1-13
+#
+DEF TPPAD1-13 TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPPAD1-13" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPPAD1-13Y
+#
+DEF TPPAD1-13Y TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPPAD1-13Y" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPPAD1-17
+#
+DEF TPPAD1-17 TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPPAD1-17" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPPAD1-17Y
+#
+DEF TPPAD1-17Y TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPPAD1-17Y" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPPAD1-20
+#
+DEF TPPAD1-20 TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPPAD1-20" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPPAD1-20Y
+#
+DEF TPPAD1-20Y TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPPAD1-20Y" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP06R
+#
+DEF TPTP06R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP06R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP06SQ
+#
+DEF TPTP06SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP06SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP07R
+#
+DEF TPTP07R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP07R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP07SQ
+#
+DEF TPTP07SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP07SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP08R
+#
+DEF TPTP08R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP08R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP08SQ
+#
+DEF TPTP08SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP08SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP09R
+#
+DEF TPTP09R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP09R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP09SQ
+#
+DEF TPTP09SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP09SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP10R
+#
+DEF TPTP10R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP10R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP10SQ
+#
+DEF TPTP10SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP10SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP11R
+#
+DEF TPTP11R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP11R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP11SQ
+#
+DEF TPTP11SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP11SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP12R
+#
+DEF TPTP12R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP12R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP12SQ
+#
+DEF TPTP12SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP12SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP13R
+#
+DEF TPTP13R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP13R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP13SQ
+#
+DEF TPTP13SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP13SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP14R
+#
+DEF TPTP14R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP14R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP14SQ
+#
+DEF TPTP14SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP14SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP15R
+#
+DEF TPTP15R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP15R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP15SQ
+#
+DEF TPTP15SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP15SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP16R
+#
+DEF TPTP16R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP16R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP16SQ
+#
+DEF TPTP16SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP16SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP17R
+#
+DEF TPTP17R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP17R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP17SQ
+#
+DEF TPTP17SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP17SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP18R
+#
+DEF TPTP18R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP18R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP18SQ
+#
+DEF TPTP18SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP18SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP19R
+#
+DEF TPTP19R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP19R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP19SQ
+#
+DEF TPTP19SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP19SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP20R
+#
+DEF TPTP20R TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP20R" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# TPTP20SQ
+#
+DEF TPTP20SQ TP 0 40 Y Y 1 L N
+F0 "TP" -50 50 59 H V L BNN
+F1 "TPTP20SQ" 0 0 50 H I C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
+P 2 1 0 0 -30 -30 0 0 N
+P 2 1 0 0 0 -60 -30 -30 N
+P 2 1 0 0 0 0 30 -30 N
+P 2 1 0 0 30 -30 0 -60 N
+X TP TP 0 -100 100 U 0 0 1 0 I
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #P+ 0 40 Y Y 1 L P
+F0 "#P+" 0 0 50 H I C CNN
+F1 "VCC" -100 -100 59 V V L BNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 2 1 0 0 0 0 -50 -75 N
+P 2 1 0 0 50 -75 0 0 N
+X VCC 1 0 -100 100 U 0 0 1 0 W
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/empty.kicad_wks b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/empty.kicad_wks
new file mode 100644 (file)
index 0000000..f50032b
--- /dev/null
@@ -0,0 +1,5 @@
+(page_layout
+(setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)
+(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))
+(line (name segm1:Line) (start 0 0) (end 0 0))
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/fp-info-cache b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/fp-info-cache
new file mode 100644 (file)
index 0000000..573541a
--- /dev/null
@@ -0,0 +1 @@
+0
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/fp-lib-table b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/fp-lib-table
new file mode 100644 (file)
index 0000000..9ebe18e
--- /dev/null
@@ -0,0 +1,4 @@
+(fp_lib_table
+  (lib (name "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001")(type KiCad)(uri "$(KIPRJMOD)/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty")(options "")(descr ""))
+  (lib (name OPT3001DNPT)(type KiCad)(uri ${KIPRJMOD}/OPT3001DNPT)(options "")(descr ""))
+)
diff --git a/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/sym-lib-table b/PCB/Sensor Boards/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001/sym-lib-table
new file mode 100644 (file)
index 0000000..8b9d268
--- /dev/null
@@ -0,0 +1,4 @@
+(sym_lib_table
+  (lib (name Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import)(type Legacy)(uri ${KIPRJMOD}/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.lib)(options "")(descr ""))
+  (lib (name OPT3001DNPT)(type Legacy)(uri ${KIPRJMOD}/OPT3001DNPT/OPT3001DNPT.lib)(options "")(descr ""))
+)
diff --git a/make.mk b/make.mk
index 737e1f5141ff815b3b882a4aebf3697f88514f6c..35af342200ea5c2c7f4839a3d9d81fefd83a0502 100644 (file)
--- a/make.mk
+++ b/make.mk
@@ -150,6 +150,7 @@ SRCS += \
   $(TOP)/watch-library/hardware/hpl/systick/hpl_systick.c \
   $(TOP)/watch-library/shared/driver/thermistor_driver.c \
   $(TOP)/watch-library/shared/driver/lis2dw.c \
+  $(TOP)/watch-library/shared/driver/opt3001.c \
   $(TOP)/watch-library/shared/driver/spiflash.c \
   $(TOP)/watch-library/shared/watch/watch_private_buzzer.c \
   $(TOP)/watch-library/shared/watch/watch_private_display.c \
@@ -195,6 +196,7 @@ SRCS += \
   $(TOP)/watch-library/simulator/watch/watch_private.c \
   $(TOP)/watch-library/simulator/watch/watch.c \
   $(TOP)/watch-library/shared/driver/thermistor_driver.c \
+  $(TOP)/watch-library/shared/driver/opt3001.c \
   $(TOP)/watch-library/shared/watch/watch_private_buzzer.c \
   $(TOP)/watch-library/shared/watch/watch_private_display.c \
   $(TOP)/watch-library/shared/watch/watch_utility.c \
index d403045dbc3751bdb0784037acabe36aa355abce..4614cd278f7c8a2d934866ee853a1166028170ba 100644 (file)
@@ -101,6 +101,7 @@ SRCS += \
   ../watch_faces/complication/activity_face.c \
   ../watch_faces/demo/chirpy_demo_face.c \
   ../watch_faces/complication/ships_bell_face.c \
+  ../watch_faces/sensor/lightmeter_face.c \
   ../watch_faces/complication/discgolf_face.c \
   ../watch_faces/complication/habit_face.c \
   ../watch_faces/complication/breathing_face.c \
index 9e446d4d62db09401fd82084490c4c345e5d2086..3f6a0dc15718c14bf1147dc687c867deb0765220 100644 (file)
@@ -29,6 +29,8 @@
 
 const watch_face_t watch_faces[] = {
     simple_clock_face,
+    lightmeter_face,
+    thermistor_readout_face,
     world_clock_face,
     sunrise_sunset_face,
     moon_phase_face,
index b8584756a46717c528c1f670953382bbb48b7054..afa8f14a815193a25bccc0a566fc1e2bebb3e3d4 100644 (file)
@@ -76,6 +76,7 @@
 #include "activity_face.h"
 #include "chirpy_demo_face.h"
 #include "ships_bell_face.h"
+#include "lightmeter_face.h"
 #include "discgolf_face.h"
 #include "habit_face.h"
 #include "breathing_face.h"
diff --git a/movement/watch_faces/sensor/lightmeter_face.c b/movement/watch_faces/sensor/lightmeter_face.c
new file mode 100644 (file)
index 0000000..861e28d
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2022 CC
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/* Aperture-priority Light Meter Face
+ *
+ * Tested with the "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001" flexboard.
+ * This flexboard could use a revision: 
+ *
+ *  - The thermistor components should be moved west a mm or flipped to the backside
+ *    to avoid stressing the flexboard against the processor so much.
+ *  - The 'no connect' pad falls off easily.
+ *
+ * Controls:
+ *
+ *  - Trigger a measurement by long-pressing Alarm.
+ *    Sensor integration is happening when the Signal indicator is on.
+ *
+ *  - ISO setting can be cycled by long-pressing Light.
+ *    During integration the current ISO setting will be displayed. 
+ *
+ *  - EV measurement in the top right: "LAP" indicates "half stop". 
+ *    So "LAP -1" means EV = -1.5. Likewise "LAP 13" means EV = +13.5  
+ *
+ *  - Aperture in the bottom right: the last 3 main digits are the f-stop. 
+ *    Adjust this number in half-stop increments using Alarm = +1/2 and Light = -1/2. 
+ *
+ *  - Best shutter speed in the bottom left: the first 3 digits are the shutter speed. 
+ *    Some special chars are needed here: "-" = seconds, "h" = extra half second, "K" = thousands.
+ *    "HI" or "LO" if there's no shutter in the dictionary within 0.5 stops of correct exposure.
+ *
+ *  - Mode long-press changes the main digits to show raw sensor lux measurements.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "lightmeter_face.h"
+#include "watch_utility.h"
+#include "watch_slcd.h"
+
+uint16_t lightmeter_mod(uint16_t m, uint16_t n) { return (m%n + n)%n; }  
+
+void lightmeter_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) {
+    (void) settings;
+    (void) watch_face_index;
+    if (*context_ptr == NULL) {
+        *context_ptr = malloc(sizeof(lightmeter_state_t));
+        lightmeter_state_t *state = (lightmeter_state_t*) *context_ptr;
+        state->waiting_for_conversion = 0;
+        state->lux = 0.0;
+        state->mode = 0;
+        state->iso = LIGHTMETER_ISO_100;
+        state->ap = LIGHTMETER_AP_4P0;
+    }
+}
+
+void lightmeter_face_activate(movement_settings_t *settings, void *context) {
+    (void) settings;
+    lightmeter_state_t *state = (lightmeter_state_t*) context;
+    state->waiting_for_conversion = 0;
+    lightmeter_show_ev(state); // Print most current reading
+    watch_enable_i2c();
+    return;
+}
+
+void lightmeter_show_ev(lightmeter_state_t *state) {
+
+    float ev = max(min(
+                 log2(state->lux) + 
+                 lightmeter_isos[state->iso].ev + 
+                 LIGHTMETER_CALIBRATION,
+            99), -9);
+    int evt = round(2*ev); // Truncated EV
+
+    // Print EV
+    char strbuff[7];
+    watch_clear_all_indicators();
+    watch_display_string("EV        ", 0); 
+
+    sprintf(strbuff, "%2i", (uint16_t) abs(evt/2)); // Print whole part of EV 
+    watch_display_string(strbuff, 2); 
+    if(evt%2) watch_set_indicator(WATCH_INDICATOR_LAP); // Indicate half stop
+    if(ev<0) watch_set_pixel(1,9);  // Indicate negative EV
+
+    // Handle lux mode
+    if(state->mode == 1) {
+        sprintf(strbuff, "%6.0f", min(state->lux, 999999.0)); 
+        watch_display_string(strbuff, 4); 
+        return;
+    }
+
+    // Find and print best shutter speed
+    uint16_t bestsh = 0;
+    float besterr = 1.0/0.0;
+    float errbuf = 1.0/0.0;
+    float comp_ev = ev + lightmeter_aps[state->ap].ev; 
+    for(uint16_t ind = 2; ind < LIGHTMETER_N_SHS; ind++) {
+        errbuf = comp_ev + lightmeter_shs[ind].ev;
+        if( fabs(errbuf) < fabs(besterr)) {
+            besterr = errbuf;
+            bestsh = ind;
+        }
+    }
+    if(besterr >= 0.5) watch_display_string(lightmeter_shs[LIGHTMETER_SH_HIGH].str, 4); 
+    else if(besterr <= -0.5) watch_display_string(lightmeter_shs[LIGHTMETER_SH_LOW].str, 4); 
+    else watch_display_string(lightmeter_shs[bestsh].str, 4); 
+
+    // Print aperture
+    watch_display_string(lightmeter_aps[state->ap].str, 7); 
+    return;
+}
+
+bool lightmeter_face_loop(movement_event_t event, movement_settings_t *settings, void *context) {
+    (void) settings;
+    lightmeter_state_t *state = (lightmeter_state_t*) context;
+    
+    opt3001_Config_t c;
+    switch (event.event_type) {
+        case EVENT_TICK:
+            if(state->waiting_for_conversion) { // Check if measurement is ready...
+                c = opt3001_readConfig(lightmeter_addr);
+                if(c.ConversionReady) {
+                    state->waiting_for_conversion = 0;
+                    opt3001_t result = opt3001_readResult(lightmeter_addr);
+                    state->lux = result.lux;
+                    lightmeter_show_ev(state); 
+                } 
+            }
+            break;
+
+        case EVENT_ALARM_BUTTON_UP: // Increment aperture 
+            state->ap = lightmeter_mod(state->ap+1, LIGHTMETER_N_APS);
+
+            lightmeter_show_ev(state); 
+            break;
+
+        case EVENT_LIGHT_BUTTON_UP: // Decrement aperture 
+            if(state->ap == 0) state->ap = LIGHTMETER_N_APS-1; 
+            else state->ap = lightmeter_mod(state->ap-1, LIGHTMETER_N_APS);
+
+            lightmeter_show_ev(state); 
+            break;
+
+        case EVENT_LIGHT_LONG_PRESS: // Cycle ISO
+            state->iso = lightmeter_mod(state->iso+1, LIGHTMETER_N_ISOS);
+
+            watch_clear_all_indicators();
+            watch_display_string("EV  ", 0); 
+            watch_display_string(lightmeter_isos[state->iso].str, 4); 
+            break;
+
+        case EVENT_ALARM_LONG_PRESS: // Take measurement
+            opt3001_writeConfig(lightmeter_addr, lightmeter_takeNewReading);
+            state->waiting_for_conversion = 1;
+
+            watch_clear_all_indicators();
+            watch_display_string("EV  ", 0); 
+            watch_display_string(lightmeter_isos[state->iso].str, 4); 
+            watch_set_indicator(WATCH_INDICATOR_SIGNAL);
+            break;
+
+        case EVENT_MODE_LONG_PRESS: // Toggle mode
+            state->mode = !state->mode;
+            lightmeter_show_ev(state); 
+            break;
+
+        case EVENT_TIMEOUT:
+            movement_move_to_face(0);
+            break;
+
+        default:
+            movement_default_loop_handler(event, settings);
+            break;
+    }
+    return true;
+}
+
+void lightmeter_face_resign(movement_settings_t *settings, void *context) {
+    (void) settings;
+    (void) context;
+    opt3001_writeConfig(lightmeter_addr, lightmeter_off);
+    watch_disable_i2c();
+    return;
+}
diff --git a/movement/watch_faces/sensor/lightmeter_face.h b/movement/watch_faces/sensor/lightmeter_face.h
new file mode 100644 (file)
index 0000000..2f8813f
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2023 CC
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef LIGHTMETER_FACE_H_
+#define LIGHTMETER_FACE_H_
+
+#include "movement.h"
+#include "opt3001.h"
+
+#define LIGHTMETER_CALIBRATION 2.58
+typedef struct { 
+    char * str;
+    float ev;
+} lightmeter_ev_t;
+
+static const lightmeter_ev_t lightmeter_isos[] = {
+    {" i  25", -2},
+    {" i  50", -1},
+    {" i 100", 0},
+    {" i 160", 0.68},
+    {" i 200", 1},
+    {" i 400", 2},
+    {" i 800", 3},
+    {" i1600", 4}};
+typedef enum { 
+    LIGHTMETER_ISO_25, LIGHTMETER_ISO_50, LIGHTMETER_ISO_100, LIGHTMETER_ISO_160, LIGHTMETER_ISO_200, LIGHTMETER_ISO_400, LIGHTMETER_ISO_800, LIGHTMETER_ISO_1600, 
+    LIGHTMETER_N_ISOS
+} lightmeter_iso_t; 
+
+static const lightmeter_ev_t lightmeter_aps[] = {
+    {"1.4", 0},
+    {"1.8", -0.5},
+    {"2.0", -1},
+    {"2.4", -1.5},
+    {"2.8", -2},
+    {"3.3", -2.5},
+    {"4.0", -3},
+    {"4.8", -3.5},
+    {"5.6", -4},
+    {"6.7", -4.5},
+    {"8.0", -5},
+    {"9.5", -5.5},
+    {"11.", -6},
+    {"13.", -6.5},
+    {"16.", -7},
+    {"19.", -7.5},
+    {"22.", -8}};
+typedef enum { 
+    LIGHTMETER_AP_1P4, LIGHTMETER_AP_1P8, LIGHTMETER_AP_2P0, LIGHTMETER_AP_2P4, LIGHTMETER_AP_2P8, LIGHTMETER_AP_3P3, LIGHTMETER_AP_4P0, LIGHTMETER_AP_4P8, LIGHTMETER_AP_5P6, LIGHTMETER_AP_6P7, LIGHTMETER_AP_8P0, LIGHTMETER_AP_9P5, 
+    LIGHTMETER_AP_11, LIGHTMETER_AP_13, LIGHTMETER_AP_16, LIGHTMETER_AP_19, LIGHTMETER_AP_22,
+    LIGHTMETER_N_APS
+} lightmeter_ap_t; 
+
+static const lightmeter_ev_t lightmeter_shs[] = {
+    {"LO-",   99},
+    {"HI ",  -99},
+    {"30-",  5.0},
+    {"20-",  4.5},
+    {"15-",  4.0},
+    {"11-",  3.5},
+    {"8- ",  3.0},
+    {"6- ",  2.5},
+    {"4- ",  2.0},
+    {"3- ",  1.5},
+    {"2- ",  1.0},
+    {"1h-",  0.5},
+    {"1  ",  0.0},
+    {"1h ", -0.5},
+    {"2  ", -1.0},
+    {"3  ", -1.5},
+    {"4  ", -2.0},
+    {"6  ", -2.5},
+    {"8  ", -3.0},
+    {"12 ", -3.5},
+    {"15 ", -4.0},
+    {"20 ", -4.5},
+    {"30 ", -5.0},
+    {"45 ", -5.5},
+    {"60 ", -6.0},
+    {"90 ", -6.5},
+    {"125", -7.0},
+    {"180", -7.5},
+    {"250", -8.0},
+    {"350", -8.5},
+    {"500", -9.0},
+    {"750", -9.5},
+    {"1K ", -10.0},
+    {"1K5", -10.5},
+    {"2K ", -11.0},
+    {"3K ", -11.5},
+    {"4K ", -12.0},
+    {"6K ", -12.5},
+    {"8K ", -13.0}};
+typedef enum { 
+    LIGHTMETER_SH_LOW, LIGHTMETER_SH_HIGH, 
+    LIGHTMETER_SH_30S, LIGHTMETER_SH_20S, LIGHTMETER_SH_15S, LIGHTMETER_SH_11S, LIGHTMETER_SH_8S, LIGHTMETER_SH_6S, LIGHTMETER_SH_3S, LIGHTMETER_SH_4S, LIGHTMETER_SH_2S, LIGHTMETER_SH_1HS, 
+    LIGHTMETER_SH_1, LIGHTMETER_SH_1H, LIGHTMETER_SH_2, LIGHTMETER_SH_3, LIGHTMETER_SH_4, LIGHTMETER_SH_6, LIGHTMETER_SH_8, LIGHTMETER_SH_12, LIGHTMETER_SH_15, LIGHTMETER_SH_20, LIGHTMETER_SH_30, LIGHTMETER_SH_45, LIGHTMETER_SH_60, LIGHTMETER_SH_90, LIGHTMETER_SH_125, LIGHTMETER_SH_180, LIGHTMETER_SH_250, LIGHTMETER_SH_350, LIGHTMETER_SH_500, LIGHTMETER_SH_750,
+    LIGHTMETER_SH_1K, LIGHTMETER_SH_1K5, LIGHTMETER_SH_2K, LIGHTMETER_SH_3K, LIGHTMETER_SH_4K, LIGHTMETER_SH_6K, LIGHTMETER_SH_8K,
+    LIGHTMETER_N_SHS
+} lightmeter_sh_t; 
+
+typedef struct {
+    lightmeter_iso_t iso;
+    lightmeter_ap_t ap;
+    bool waiting_for_conversion;
+    float lux;
+    int mode; 
+} lightmeter_state_t;
+
+static const opt3001_Config_t lightmeter_takeNewReading = { 
+    .RangeNumber = 0B1100,
+    .ConversionTime = 0B1,
+    .Latch = 0B1,
+    .ModeOfConversionOperation = 0B01
+};
+
+static const opt3001_Config_t lightmeter_off = { 
+    .ModeOfConversionOperation = 0B00
+};
+
+uint16_t lightmeter_mod(uint16_t m, uint16_t n); 
+
+void lightmeter_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr);
+void lightmeter_face_activate(movement_settings_t *settings, void *context);
+void lightmeter_show_ev(lightmeter_state_t *state);
+bool lightmeter_face_loop(movement_event_t event, movement_settings_t *settings, void *context);
+void lightmeter_face_resign(movement_settings_t *settings, void *context);
+
+static const uint8_t lightmeter_addr = 0x44;
+
+#define lightmeter_face ((const watch_face_t){ \
+    lightmeter_face_setup, \
+    lightmeter_face_activate, \
+    lightmeter_face_loop, \
+    lightmeter_face_resign, \
+    NULL, \
+})
+
+#endif // LIGHTMETER_FACE_H_
diff --git a/watch-library/shared/driver/opt3001.c b/watch-library/shared/driver/opt3001.c
new file mode 100644 (file)
index 0000000..d2f4e8c
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+
+Arduino library for Texas Instruments opt3001_t Digital Ambient Light Sensor
+Written by AA for ClosedCube
+Adapted to Sensor-Watch interface by CC
+---
+
+The MIT License (MIT)
+
+Copyright (c) 2015 ClosedCube Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+#include <math.h>
+
+#include "opt3001.h"
+#include "watch_utility.h"
+
+uint16_t opt3001_readManufacturerID(uint8_t devaddr) {
+       uint8_t buf[2];
+       buf[0] = (uint8_t) OPT3001_MANUFACTURER_ID; 
+       watch_i2c_send(devaddr, buf, 1);
+       watch_i2c_receive(devaddr, buf, 2);
+    return ((uint16_t) buf[0] << 8) | ((uint16_t) buf[1]);
+}
+
+uint16_t opt3001_readDeviceID(uint8_t devaddr) {
+       uint8_t buf[2];
+       buf[0] = (uint8_t) OPT3001_DEVICE_ID; 
+       watch_i2c_send(devaddr, buf, 1);
+       watch_i2c_receive(devaddr, buf, 2);
+    return ((uint16_t) buf[0] << 8) | ((uint16_t) buf[1]);
+}
+
+opt3001_Config_t opt3001_readConfig(uint8_t devaddr) {
+       opt3001_Config_t config;
+       uint8_t buf[2];
+       buf[0] = (uint8_t) OPT3001_CONFIG; 
+       watch_i2c_send(devaddr, buf, 1);
+       watch_i2c_receive(devaddr, buf, 2);
+    config.rawData = ((uint16_t) buf[0] << 8) | ((uint16_t) buf[1]);
+       return config;
+}
+
+void opt3001_writeConfig(uint8_t devaddr, opt3001_Config_t config) {
+    uint8_t buf[3] = {OPT3001_CONFIG, (uint8_t)(config.rawData >> 8), (uint8_t)(config.rawData & 0x00FF)};
+    watch_i2c_send(devaddr, buf, 3);
+       return;
+}
+
+opt3001_t opt3001_readResult(uint8_t devaddr) {
+       return opt3001_readRegister(devaddr, OPT3001_RESULT);
+}
+
+opt3001_t opt3001_readHighLimit(uint8_t devaddr) {
+       return opt3001_readRegister(devaddr, OPT3001_HIGH_LIMIT);
+}
+
+opt3001_t opt3001_readLowLimit(uint8_t devaddr) {
+       return opt3001_readRegister(devaddr, OPT3001_LOW_LIMIT);
+}
+
+opt3001_t opt3001_readRegister(uint8_t devaddr, opt3001_Command_t command) {
+    opt3001_t result;
+    opt3001_ER_t er;
+    uint8_t buf[2]; 
+       buf[0] = (uint8_t) command; 
+       watch_i2c_send(devaddr, buf, 1);
+       watch_i2c_receive(devaddr, buf, 2);
+    er.rawData = ((uint16_t) buf[0] << 8) | ((uint16_t) buf[1]);
+    result.raw = er;
+    result.lux = 0.01*pow(2, er.Exponent)*er.Result;
+    return result;
+}
diff --git a/watch-library/shared/driver/opt3001.h b/watch-library/shared/driver/opt3001.h
new file mode 100644 (file)
index 0000000..1ed8eea
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+
+Arduino library for Texas Instruments OPT3001 Digital Ambient Light Sensor
+Adapted to Sensor-Watch interface by CC
+---
+
+The MIT License (MIT)
+
+Copyright (c) 2015 ClosedCube Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+
+#ifndef OPT3001_
+#define OPT3001_
+#include <stdint.h>
+
+typedef enum {
+       OPT3001_RESULT          = 0x00,
+       OPT3001_CONFIG          = 0x01,
+       OPT3001_LOW_LIMIT       = 0x02,
+       OPT3001_HIGH_LIMIT      = 0x03,
+
+       OPT3001_MANUFACTURER_ID = 0x7E,
+       OPT3001_DEVICE_ID               = 0x7F,
+} opt3001_Command_t;
+
+typedef union {
+       uint16_t rawData;
+       struct {
+               uint16_t Result : 12;
+               uint8_t Exponent : 4;
+       };
+} opt3001_ER_t;
+
+
+typedef union {
+       struct {
+               uint8_t FaultCount : 2;
+               uint8_t MaskExponent : 1;
+               uint8_t Polarity : 1;
+               uint8_t Latch : 1;
+               uint8_t FlagLow : 1;
+               uint8_t FlagHigh : 1;
+               uint8_t ConversionReady : 1;
+               uint8_t OverflowFlag : 1;
+               uint8_t ModeOfConversionOperation : 2;
+               uint8_t ConversionTime : 1;
+               uint8_t RangeNumber : 4;                
+       };
+       uint16_t rawData;
+} opt3001_Config_t;
+
+typedef struct {
+       float lux;
+       opt3001_ER_t raw;
+} opt3001_t;
+
+uint16_t opt3001_readManufacturerID(uint8_t devaddr);
+uint16_t opt3001_readDeviceID(uint8_t devaddr);
+
+opt3001_t opt3001_readResult(uint8_t devaddr);
+opt3001_t opt3001_readHighLimit(uint8_t devaddr);
+opt3001_t opt3001_readLowLimit(uint8_t devaddr);
+
+opt3001_Config_t opt3001_readConfig(uint8_t devaddr);
+void opt3001_writeConfig(uint8_t devaddr, opt3001_Config_t config);
+opt3001_t opt3001_readRegister(uint8_t devaddr, opt3001_Command_t command);
+
+#endif // OPT3001_