Skip to content
Snippets Groups Projects
pcb.py 300 KiB
Newer Older
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      if hasattr(self,'holes'):
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
         if (angle == 90):
            self.holes = rotate_90(self.holes)
         elif (angle == 180):
            self.holes = rotate_180(self.holes)
         elif ((angle == 270) | (angle == -90)):
            self.holes = rotate_270(self.holes)
         elif (angle != 0):
            self.holes = rotate(self.holes,angle)
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
         self.holes = translate(self.holes,x,y,z)
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      if hasattr(self,'cutout'):
         if (angle == 90):
            self.cutout = rotate_90(self.cutout)
         elif (angle == 180):
            self.cutout = rotate_180(self.cutout)
         elif ((angle == 270) | (angle == -90)):
            self.cutout = rotate_270(self.cutout)
         elif (angle != 0):
            self.cutout = rotate(self.cutout,angle)
         self.cutout = translate(self.cutout,x,y,z)
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      deg_angle = angle
      angle = math.pi*angle/180
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
      for i in range(len(self.pad)):
         xnew = math.cos(angle)*self.pad[i].x - math.sin(angle)*self.pad[i].y
         ynew = math.sin(angle)*self.pad[i].x + math.cos(angle)*self.pad[i].y
         self.pad[i].x = x + xnew
         self.pad[i].y = y + ynew
         self.pad[i].z += z
      pcb.labels = add(pcb.labels,text(self.value,x,y,z,line=line,color=Green).shape)
      for i in range(len(self.labels)):
         xnew = math.cos(angle)*self.labels[i].x - math.sin(angle)*self.labels[i].y
         ynew = math.sin(angle)*self.labels[i].x + math.cos(angle)*self.labels[i].y
         self.labels[i].x = x + xnew
         self.labels[i].y = y + ynew
         self.labels[i].z += z
         if ((-90 < deg_angle) & (deg_angle <= 90)):
            pcb.labels = add(pcb.labels,text(self.labels[i].text,self.labels[i].x,self.labels[i].y,self.labels[i].z,self.labels[i].line,color=Red,angle=deg_angle-self.labels[i].angle).shape)
         else:
            pcb.labels = add(pcb.labels,text(self.labels[i].text,self.labels[i].x,self.labels[i].y,self.labels[i].z,self.labels[i].line,color=Red,angle=(deg_angle-self.labels[i].angle-180)).shape)
      pcb = pcb.add(self.shape)
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      if hasattr(self,'holes'):
         pcb.holes = add(pcb.holes,self.holes)
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      if hasattr(self,'cutout'):
         pcb.interior = subtract(pcb.interior,self.cutout)
         pcb.exterior = add(pcb.exterior,self.cutout)
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
      return pcb

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
def wire(pcb,width,*points):
   x0 = points[0].x
   y0 = points[0].y
   z0 = points[0].z
   roundoff = 1e-6
   pcb.board = add(pcb.board,cylinder(x0,y0,z0-roundoff,z0+roundoff,width/2))
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
   for i in range(1,len(points)):
      x0 = points[i-1].x
      y0 = points[i-1].y
      z0 = points[i-1].z
      x1 = points[i].x
      y1 = points[i].y
      z1 = points[i].z
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      pcb.board = add(pcb.board,line(x0,y0,x1,y1,z1,width))
      pcb.board = add(pcb.board,cylinder(x1,y1,z1-roundoff,z1+roundoff,width/2))
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
   return pcb

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
def wirer(pcb,width,*points):
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
   for i in range(1,len(points)):
      x0 = points[i-1].x
      y0 = points[i-1].y
      z0 = points[i-1].z
      x1 = points[i].x
      y1 = points[i].y
      z1 = points[i].z
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      if (x0 < x1):
         pcb.board = add(pcb.board,cube(x0-width/2,x1+width/2,y0-width/2,y0+width/2,z0,z0))
      elif (x1 < x0):
         pcb.board = add(pcb.board,cube(x1-width/2,x0+width/2,y0-width/2,y0+width/2,z0,z0))
      if (y0 < y1):
         pcb.board = add(pcb.board,cube(x1-width/2,x1+width/2,y0-width/2,y1+width/2,z0,z0))
      elif (y1 < y0):
         pcb.board = add(pcb.board,cube(x1-width/2,x1+width/2,y1-width/2,y0+width/2,z0,z0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
   return pcb

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
############################################################
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
# PCB library
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
############################################################
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class via(part):
   #
   # via
   #
   def __init__(self,zb,zt,rv,rp,value=''):
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = cylinder(0,0,zb,zt,rp)
      self.holes = cylinder(0,0,zb,zt,rv)
      self.pad.append(point(0,0,zt))
      self.pad.append(point(0,0,zb))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class SJ(part):
   #
   # solder jumper
   #
   def __init__(self,value=''):
      pad_SJ = cube(-.02,.02,-.03,.03,0,0)
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad_SJ,-.029,0,0)
      self.pad.append(point(-.029,0,0))
      self.shape = add(self.shape,translate(pad_SJ,.029,0,0))
      self.pad.append(point(.029,0,0))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
############################################################
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
# discretes
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
############################################################
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed

class ST4EB(part):
   #
   # Nidec Copal ST4ETB103 trimpot
   #
   def __init__(self,value=''):
      pad1 = cube(-.032,.032,-.039,.039,0,0)
      pad2 = cube(-.039,.039,-.039,.039,0,0)
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad1,-.046,-.118,0)
      self.pad.append(point(-.046,-.118,0))
      self.shape = add(self.shape,translate(pad1,.046,-.118,0))
      self.pad.append(point(.046,-.118,0))
      self.shape = add(self.shape,translate(pad2,0,.118,0))
      self.pad.append(point(0,.118,0))

class C_FND(part):
   #
   # Panasonic FN series, size code D
   #    100uF: EEE-FN1E101UL
   #
   def __init__(self,value=''):
      pad = cube(-.032,.032,-.06,.06,0,0)
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad,0,.11,0)
      self.pad.append(point(0,.11,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'+',angle=90))
      self.shape = add(self.shape,translate(pad,0,-.11,0))
      self.pad.append(point(0,-.11,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'-',angle=90))

Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
pad_0402 = cube(-.0175,.0175,-.014,.014,0,0)

class R_0402(part):
   #
   # 0402 resistor
   #
   def __init__(self,value=''):
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad_0402,-.0265,0,0)
      self.pad.append(point(-.0265,0,0))
      self.shape = add(self.shape,translate(pad_0402,.0265,0,0))
      self.pad.append(point(.0265,0,0))

pad_1206 = cube(-.032,.032,-.034,.034,0,0)

class R_1206(part):
   #
   # 1206 resistor
   #
   def __init__(self,value=''):
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad_1206,-.06,0,0)
      self.pad.append(point(-.06,0,0))
      self.shape = add(self.shape,translate(pad_1206,.06,0,0))
      self.pad.append(point(.06,0,0))

class C_1206(part):
   #
   # 1206 capacitor
   #
   def __init__(self,value=''):
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad_1206,-.06,0,0)
      self.pad.append(point(-.06,0,0))
      self.shape = add(self.shape,translate(pad_1206,.06,0,0))
      self.pad.append(point(.06,0,0))

pad_1210 = cube(-.032,.032,-.048,.048,0,0)

class L_1210(part):
   #
   # 1210 inductor
   #
   def __init__(self,value=''):
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad_1210,-.06,0,0)
      self.pad.append(point(-.06,0,0))
      self.shape = add(self.shape,translate(pad_1210,.06,0,0))
      self.pad.append(point(.06,0,0))

pad_choke = cube(-.06,.06,-.06,.06,0,0)

class choke(part):
   #
   # Panasonic ELLCTV
   #
   def __init__(self,value=''):
      self.value = value
      self.labels = []
      self.pad = [point(0,0,0)]
      self.shape = translate(pad_choke,-.177,-.177,0)
      self.pad.append(point(-.177,-.177,0))
      self.shape = add(self.shape,translate(pad_choke,.177,.177,0))
      self.pad.append(point(.177,.177,0))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
############################################################
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed
# connectors
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
############################################################

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class header_IMU_2738(part):
   #
   # Pololu 2736 MinIMU-9 v5 IMU
   #
   def __init__(self,value=''):
      pad_header = cylinder(0,0,0,0,.03)
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.2,0)
      self.pad.append(point(0,.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1SCL'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.1,0))
      self.pad.append(point(0,.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDA'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,.0,0))
      self.pad.append(point(0,.0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,-0.1,0))
      self.pad.append(point(0,-0.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VIN'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,-0.2,0))
      self.pad.append(point(0,-0.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VDD'))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class USB_micro(part):
   #
   # micro USB
   #    AMP/FCI 10118194-0001LF
   #
   def __init__(self,value=''):
      w = 0.0049 # pad half width
      h = .55/25.4/2 # pad half height
      p = .65/25.4 # pad pitch
      l = 0.006 # text
      pad_header = cube(-w,w,-h,h,0,0)
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,-2*p,0,0)
      self.pad.append(point(-2*p,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V',line=l))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,-p,0,0))
      self.pad.append(point(-p,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'-',line=l))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,0,0))
      self.pad.append(point(0,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'+',line=l))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,p,0,0))
      self.pad.append(point(p,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'I',line=l))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,2*p,0,0))
      self.pad.append(point(2*p,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',line=l))
      #
      # holes
      #
      self.holes = cylinder(2.5/25.4,0,zb,zt,0.016)
      self.holes = add(self.holes,cylinder(-2.5/25.4,0,zb,zt,0.016))
      self.holes = add(self.holes,cylinder(-3.5/25.4,-2.7/25.4,zb,zt,.9/25.4/2))
      self.holes = add(self.holes,cylinder(3.5/25.4,-2.7/25.4,zb,zt,.9/25.4/2))

class header_serial_M(part):
   #
   # 4x1x0.1 serial cable header
   #    Sullins GEC36SBSN-M89	
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.15,0)
      self.pad.append(point(0,.15,0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'.Rx'))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.05,0))
      self.pad.append(point(0,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'5V'))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,-0.15,0))
      self.pad.append(point(0,-.15,0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed

class header_serial_F(part):
   #
   # 4x1x0.1 serial cable header
   #    Sullins GEC36SBSN-M89	
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.15,0)
      self.pad.append(point(0,.15,0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'.G'))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.05,0))
      self.pad.append(point(0,.05,0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'5V'))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,-0.15,0))
      self.pad.append(point(0,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class header_2H(part):
   #
   # 2x1x0.1 cable header
   #    Sullins GEC36SBSN-M89	
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.05,0)
      self.pad.append(point(0,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))

class header_4H(part):
   #
   # 4x1x0.1 cable header
   #    Sullins GEC36SBSN-M89	
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.15,0)
      self.pad.append(point(0,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.05,0))
      self.pad.append(point(0,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,-0.15,0))
      self.pad.append(point(0,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'4'))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class header_NEO_6M(part):
   #
   # NEO_6M GPS module
   #
   def __init__(self,value=''):
      pad_header = cylinder(0,0,0,0,.03)
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.2,0)
      self.pad.append(point(0,.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PPS'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.1,0))
      self.pad.append(point(0,.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'TXD'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,0,0))
      self.pad.append(point(0,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RXD'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,-.1,0))
      self.pad.append(point(0,-.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,-.2,0))
      self.pad.append(point(0,-.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))

class header_MFRC522(part):
   #
   # MFCR522 RFID module
   #
   def __init__(self,value=''):
      pad_header = cylinder(0,0,0,0,.03)
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.35,0)
      self.pad.append(point(0,.35,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1SDA'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.25,0))
      self.pad.append(point(0,.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,.15,0))
      self.pad.append(point(0,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'COPI'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,0.05,0))
      self.pad.append(point(0,0.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CIPO'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IRQ'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,0,-.15,0))
      self.pad.append(point(0,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 7
      #
      self.shape = add(self.shape,translate(pad_header,0,-.25,0))
      self.pad.append(point(0,-.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RST'))
      #
      # pin 8
      #
      self.shape = add(self.shape,translate(pad_header,0,-.35,0))
      self.pad.append(point(0,-.35,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3.3V'))

class header_LSM6DS33_2736(part):
   #
   # LSD6DS33 carrier
   #    Pololu 2736
   #
   def __init__(self,value=''):
      pad_header = cylinder(0,0,0,0,.03)
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.4,0)
      self.pad.append(point(0,.4,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1VDD'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.3,0))
      self.pad.append(point(0,.3,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VIN'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,.2,0))
      self.pad.append(point(0,.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,0.1,0))
      self.pad.append(point(0,0.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDA'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,0,0))
      self.pad.append(point(0,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCL'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,0,-.1,0))
      self.pad.append(point(0,-.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDO'))
      #
      # pin 7
      #
      self.shape = add(self.shape,translate(pad_header,0,-.2,0))
      self.pad.append(point(0,-.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CS'))
      #
      # pin 8
      #
      self.shape = add(self.shape,translate(pad_header,0,-.3,0))
      self.pad.append(point(0,-.3,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'INT2'))
      #
      # pin 9
      #
      self.shape = add(self.shape,translate(pad_header,0,-.4,0))
      self.pad.append(point(0,-.4,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'INT1'))

class header_VL53L1X_3415(part):
   #
   # VL53L1X carrier
   #    Pololu 3415
   #
   def __init__(self,value=''):
      pad_header = cylinder(0,0,0,0,.03)
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,.3,0)
      self.pad.append(point(0,.3,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1VDD'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,.2,0))
      self.pad.append(point(0,.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VIN'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,.1,0))
      self.pad.append(point(0,.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,0,0))
      self.pad.append(point(0,0,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDA'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,-.1,0))
      self.pad.append(point(0,-.1,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCL'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,0,-.2,0))
      self.pad.append(point(0,-.2,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'XSHUT'))
      #
      # pin 7
      #
      self.shape = add(self.shape,translate(pad_header,0,-.3,0))
      self.pad.append(point(0,-.3,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GPIO1'))
Neil Gershenfeld (test)'s avatar
wip
Neil Gershenfeld (test) committed

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class ESP_WROOM_02D(part):
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
   #
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
   # ESP-WROOM-02D
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      pad = cube(-1/25.4,1/25.4,-.45/25.4,.45/25.4,0,0)
      width = 17.5/25.4
      pitch = 1.5/25.4
      #
      # pin 1
      #
      self.shape = translate(pad,-width/2,4*pitch,0)
      self.shape = add(self.shape,cylinder(-width/2-.75/25.4,4*pitch,0,0,.45/25.4))
      self.pad.append(point(-width/2,4*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3V3'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad,-width/2,3*pitch,0))
      self.pad.append(point(-width/2,3*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'EN'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad,-width/2,2*pitch,0))
      self.pad.append(point(-width/2,2*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO14'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad,-width/2,1*pitch,0))
      self.pad.append(point(-width/2,1*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO12'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad,-width/2,0*pitch,0))
      self.pad.append(point(-width/2,0*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO13'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad,-width/2,-1*pitch,0))
      self.pad.append(point(-width/2,-1*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO15'))
      #
      # pin 7
      #
      self.shape = add(self.shape,translate(pad,-width/2,-2*pitch,0))
      self.pad.append(point(-width/2,-2*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO2'))
      #
      # pin 8
      #
      self.shape = add(self.shape,translate(pad,-width/2,-3*pitch,0))
      self.pad.append(point(-width/2,-3*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO0'))
      #
      # pin 9
      #
      self.shape = add(self.shape,translate(pad,-width/2,-4*pitch,0))
      self.pad.append(point(-width/2,-4*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 10
      #
      self.shape = add(self.shape,translate(pad,width/2,-4*pitch,0))
      self.pad.append(point(width/2,-4*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO4'))
      #
      # pin 11
      #
      self.shape = add(self.shape,translate(pad,width/2,-3*pitch,0))
      self.pad.append(point(width/2,-3*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RXD'))
      #
      # pin 12
      #
      self.shape = add(self.shape,translate(pad,width/2,-2*pitch,0))
      self.pad.append(point(width/2,-2*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'TXD'))
      #
      # pin 13
      #
      self.shape = add(self.shape,translate(pad,width/2,-1*pitch,0))
      self.pad.append(point(width/2,-1*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 14
      #
      self.shape = add(self.shape,translate(pad,width/2,0*pitch,0))
      self.pad.append(point(width/2,0*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO5'))
      #
      # pin 15
      #
      self.shape = add(self.shape,translate(pad,width/2,1*pitch,0))
      self.pad.append(point(width/2,1*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RST'))
      #
      # pin 16
      #
      self.shape = add(self.shape,translate(pad,width/2,2*pitch,0))
      self.pad.append(point(width/2,2*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'TOUT'))
      #
      # pin 17
      #
      self.shape = add(self.shape,translate(pad,width/2,3*pitch,0))
      self.pad.append(point(width/2,3*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO16'))
      #
      # pin 18
      #
      self.shape = add(self.shape,translate(pad,width/2,4*pitch,0))
      self.pad.append(point(width/2,4*pitch,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 19
      #
      padg = cube(-2/25.4,2/25.4,-2/25.4,2/25.4,0,0)
      self.shape = add(self.shape,translate(padg,(1.5/2+7.1+2-17.5/2)/25.4,(4*1.5+7.1-20+4.29+2)/25.4,0))
      self.pad.append(point((1.5/2+7.1+2-17.5/2)/25.4,(4*1.5+7.1-20+4.29+2)/25.4,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))

class ESP_01(part):
   #
   # ESP-01 4x2 vertical
   #    Sullins NPTC042KFMS-RC	
   #
   def __init__(self,value=''):
      pad_header = cube(-.075/2,.075/2,-.04/2,.04/2,0,0)
      d = .305/2-.07/2
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,d,.15,0)
      self.shape = add(self.shape,cylinder(d+.061/2,.15,0,0,.039/2))
      self.pad.append(point(d,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,-d,.15,0))
      self.pad.append(point(-d,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,d,.05,0))
      self.pad.append(point(d,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO2'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,-d,.05,0))
      self.pad.append(point(-d,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'EN'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,d,-.05,0))
      self.pad.append(point(d,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IO0'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,-d,-.05,0))
      self.pad.append(point(-d,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RST'))
      #
      # pin 7
      #
      self.shape = add(self.shape,translate(pad_header,d,-.15,0))
      self.pad.append(point(d,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))
      #
      # pin 8
      #
      self.shape = add(self.shape,translate(pad_header,-d,-.15,0))
      self.pad.append(point(-d,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))

class header_serial_reverse_5V(part):
   #
   # serial cable header, reverse for female connector, 5V output
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
   #    GCT BG300-06-A-L-A	
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,-.25,0)
      self.shape = add(self.shape,cylinder(-.05,-.25,0,0,.025))
      self.pad.append(point(0,-.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,-.15,0))
      self.pad.append(point(0,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CTS'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'5V'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,0.05,0))
      self.pad.append(point(0,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,.15,0))
      self.pad.append(point(0,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,0,.25,0))
      self.pad.append(point(0,.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RTS'))

class header_serial_reverse_3V3(part):
   #
   # serial cable header, reverse for female connector, 3.3V output
   #    GCT BG300-06-A-L-A	
   #
   def __init__(self,value=''):
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,0,-.25,0)
      self.shape = add(self.shape,cylinder(-.05,-.25,0,0,.025))
      self.pad.append(point(0,-.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,0,-.15,0))
      self.pad.append(point(0,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CTS'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,0,-.05,0))
      self.pad.append(point(0,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3.3V'))
Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,0,0.05,0))
      self.pad.append(point(0,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,0,.15,0))
      self.pad.append(point(0,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,0,.25,0))
      self.pad.append(point(0,.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RTS'))

Neil Gershenfeld (test)'s avatar
Neil Gershenfeld (test) committed
class TFT8x1v(part):
   #
   # TFT 8x1 vertical
   #    2x Sullins S5635-ND
   #
   def __init__(self,value=''):
      pad_header = cube(-.079/2,.079/2,-.039/2,.039/2,0,0)
      d = .209/2-.079/2
      self.value = value
      self.pad = [point(0,0,0)]
      self.labels = []
      #
      # pin 1
      #
      self.shape = translate(pad_header,-d,-.35,0)
      self.pad.append(point(-d,-.35,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1LED'))
      #
      # pin 2
      #
      self.shape = add(self.shape,translate(pad_header,d,-.25,0))
      self.pad.append(point(d,-.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))
      #
      # pin 3
      #
      self.shape = add(self.shape,translate(pad_header,-d,-.15,0))
      self.pad.append(point(-d,-.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MOSI'))
      #
      # pin 4
      #
      self.shape = add(self.shape,translate(pad_header,d,-.05,0))
      self.pad.append(point(d,-.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DC'))
      #
      # pin 5
      #
      self.shape = add(self.shape,translate(pad_header,-d,.05,0))
      self.pad.append(point(-d,.05,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RST'))
      #
      # pin 6
      #
      self.shape = add(self.shape,translate(pad_header,d,.15,0))
      self.pad.append(point(d,.15,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CS'))
      #
      # pin 7
      #
      self.shape = add(self.shape,translate(pad_header,-d,.25,0))
      self.pad.append(point(-d,.25,0))
      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
      #
      # pin 8
      #