component
Sunon MF40200V1-1000U-G99 · 5 V tachometer fan
Public Made by Adomby adom
Tachometer fan with factory flying leads, an explicit Adom connector harness and gentle GLB state demonstration.
main
from pathlib import Path
import cadquery as cq
import json,struct
P=Path(__file__).resolve().parents[1];O=P/'cad/harness'
for stem in ['fan-with-flying-leads','fan-adom-harness']:
a=cq.Assembly(name=stem)
a.add(cq.importers.importStep(str(P/'cad/MF40200V1-1000U-G99-ai-nominal.step')).val(),name='Fan')
a.add(cq.importers.importStep(str(O/(stem+'-connection.step'))).val(),name='Connection')
a.export(str(O/(stem+'.step')))
b=(O/(stem+'.glb')).read_bytes();n=struct.unpack_from('<I',b,12)[0];g=json.loads(b[20:20+n]);tail=b[20+n:];g.pop('animations',None);j=json.dumps(g,separators=(',',':')).encode();j+=b' '*(-len(j)%4)
(O/(stem+'-static.glb')).write_bytes(struct.pack('<III',0x46546c67,2,20+len(j)+len(tail))+struct.pack('<II',len(j),0x4e4f534a)+j+tail)
# PCB model origin at pad 1, board surface z=0; row along +Y as footprint.
a=cq.Assembly(name='M20_9990346')
a.add(cq.Workplane('XY').box(2.54,7.62,2.54).translate((0,2.54,1.27)),name='Housing',color=cq.Color(.06,.06,.06))
for i in range(3):a.add(cq.Workplane('XY').box(.64,.64,11.64).translate((0,i*2.54,2.82)),name=f'Pin_{i+1}',color=cq.Color(.72,.74,.76))
a.export(str(O/'M20-9990346-ai-nominal.step'))
h=cq.Workplane('XY').box(2.5,7.82,14).translate((0,2.54,7))
for i in range(3):h=h.cut(cq.Workplane('XY').box(1,1,14.2).translate((0,i*2.54,7)))
cq.exporters.export(h,str(O/'M20-1060300-ai-nominal.step'))
p=O/'Harwin_M20-9990346_1x03_P2.54mm_Vertical.kicad_mod';p.write_text(p.read_text().replace('(drill 1)', '(drill 1.02)'))
print('Complete STEP assemblies, static GLBs and standalone connector STEP models written.')