From a73c3e598264d6080ad1632d819547d30aae2ee3 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 7 Aug 2025 19:57:42 -0600 Subject: [PATCH] create second Pi Zero 2W footprint for back-to-back mounting ala TeleTerra --- packages/Makefile | 1 + packages/pizero-tt.py | 166 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100755 packages/pizero-tt.py diff --git a/packages/Makefile b/packages/Makefile index 2b70d70..57af66e 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -183,6 +183,7 @@ FOOTPRINTS= \ NRS50.fp \ ARJM11D7009ABEW2.fp \ pizero.fp \ + pizero-tt.fp \ XLR3.fp \ XLR4.fp \ XLR5.fp \ diff --git a/packages/pizero-tt.py b/packages/pizero-tt.py new file mode 100755 index 0000000..3eb81b4 --- /dev/null +++ b/packages/pizero-tt.py @@ -0,0 +1,166 @@ +#!/usr/bin/python3 +# Copyright 2025 by Bdale Garbee . GPLv3 +# +# Program to emit PCB footprint for Raspberry Pi Zero 2 W in TeleTerra. +# +# Note that this footprint is intended to be used to mount a 02W "back to +# back" with another PCB, using no headers for minimal package volume. +# +# 40 pin header, 4 mounting holes, outline in silk + +# dimensions in mm +PinSpacing = 2.54 +PinHole = 0.038 * 25.4 +PinCopper = 0.07 * 25.4 + +rows = 20 +cols = 2 + +row_off = (rows + 1)/2 * PinSpacing / 2.0 +col_off = (cols - 1) * PinSpacing / 2.0 + +BoardLength = 65.0 +BoardWidth = 30.0 +CornerRadius = 2.25 + +MntOffset = 3.5 +MntDiam = 2.5 + +# we're going to use the 1/100 of a mil fundamental unit form +def mm2mils100( mm ): + return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 ) + +print ('# author: Bdale Garbee') +print ('# email: bdale@gag.com') +print ('# dist-license: GPL 3') +print ('# use-license: unlimited') + +print ('Element[0x0 "PiZero-TT" "" "" 0 0 0 0 0 100 0x0]') +print ("(") + +for row in range (0,rows): + for col in range (0,cols): + pin = row * cols + col + pinnum = pin + 1 + if pinnum == 1: + Flags = '0x0101' + else: + Flags = '0x0001' + print (' Pin[', \ + mm2mils100(((rows-1)/2 - row)*-PinSpacing), \ + mm2mils100(col_off-col*PinSpacing), \ + mm2mils100(PinCopper), + 500, + mm2mils100(PinCopper) + 500, + mm2mils100(PinHole), \ + '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']') + +print( ' Pin[',\ + mm2mils100(BoardLength/2-MntOffset), \ + 0, \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"GND"', '"41"', '0x0001', ']') + +print( ' Pin[',\ + mm2mils100(-BoardLength/2+MntOffset), \ + 0, \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"GND"', '"41"', '0x0001', ']') + +print( ' Pin[',\ + mm2mils100(BoardLength/2-MntOffset), \ + mm2mils100(BoardWidth-2*MntOffset), \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"GND"', '"41"', '0x0001', ']') + +print( ' Pin[',\ + mm2mils100(-BoardLength/2+MntOffset), \ + mm2mils100(BoardWidth-2*MntOffset), \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"GND"', '"41"', '0x0001', ']') + +print( ' ElementLine[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(-MntOffset), \ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(-MntOffset), \ + 500, \ + ']') + +print( ' ElementLine[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(BoardWidth-MntOffset), \ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(BoardWidth-MntOffset), \ + 500, \ + ']') + +print( ' ElementLine[',\ + mm2mils100(-BoardLength/2), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(-BoardLength/2), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + 500, \ + ']') + +print( ' ElementLine[',\ + mm2mils100(BoardLength/2), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(BoardLength/2), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 270, \ + 90, \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 180, \ + 90, \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 0, \ + 90, \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 90, \ + 90, \ + 500, \ + ']') + +print (")") -- 2.47.2