Add files via upload

main v3.0
Somerset Schrock 2021-05-02 13:18:49 -04:00 zatwierdzone przez GitHub
rodzic a9f1294582
commit d91d288604
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 324 dodań i 0 usunięć

Plik binarny nie jest wyświetlany.

77
exp_generation.py 100644
Wyświetl plik

@ -0,0 +1,77 @@
import numpy
def make_file (xpoint,ypoint,file_name):
#mm*10
xpoint = [x*10 for x in xpoint]
ypoint = [y*10 for y in ypoint]
#calc delta-x & y for each stitch
dx=[]; dy=[]
for i in range(0,len(xpoint)-1):
dx.append(xpoint[i+1]-xpoint[i])
dy.append(ypoint[i+1]-ypoint[i])
#helps filter out the 10's and 237's, important later
dx = [numpy.round(x) for x in dx]
dy = [numpy.round(y) for y in dy]
#convert to byte
#1-127 are forward by that amount
#129-255 are backward by that same amount
dxn=[]; dyn=[]
#chr(10) and chr(237) mess things up, FYI
#need to alternate above and below these values to avoid offsets
xpalt=True; xnalt=True; ypalt=True; ynalt=True;
for stitch in range(0,len(dx)):
if dx[stitch] < 0:
dxn.append(dx[stitch]+256)
if dxn[stitch] == 237:
if xnalt==True:
dxn[stitch]=238
else:
dxn[stitch]=236
xnalt=not xnalt
elif dx[stitch] == 10:
if xpalt==True:
dxn.append(11)
else:
dxn.append(9)
xpalt=not xpalt
else:
dxn.append(dx[stitch])
for stitch in range(0,len(dy)):
if dy[stitch] < 0:
dyn.append(dy[stitch]+256)
if dyn[stitch] == 237:
if ynalt==True:
dyn[stitch]=238
else:
dyn[stitch]=236
ynalt=not ynalt
elif dy[stitch] == 10:
if ypalt==True:
dyn.append(11)
else:
dyn.append(9)
ypalt=not ypalt
else:
dyn.append(dy[stitch])
# convert movement number to uint8 format (hexad)
# and merge into one continuous string
string2=""
for stitch in range(0,int(len(dxn)/1)):
string2+=chr(int(dxn[stitch]))
string2+=chr(int(dyn[stitch]))
# write data to .exp file
with open(file_name, 'w') as filehandle:
filehandle.write(string2)
#return values for troubleshooting if needed
return dxn,dyn

97
main.py 100644
Wyświetl plik

@ -0,0 +1,97 @@
# RESISTOR FILE GENERATION TOOL (v2)
#
# This program is for creating embroidery files for electrical resistors
#
# Developed in Python 3.8
# Last edit: May 1, 2021
# writes to .exp (Melco, Bravo, and Bernina machines)
import exp_generation
import stitch_gen
import pads
import numpy as np
import math
import matplotlib.pyplot as plt
################################
#### user inputs
################################
r = 6_000 # desired resistance (Ohms)
rho=25_000 # thread unit resistance (Ohms/m)
gl = 1; #gap length (spacing between rows) (mm)
sl = gl; #stitch length (gap between stitches) (mm)
tgl = 2*gl; #gap length between terminal pads (mm)
pl = 2.5; #pad length (mm)
pad_rows = 3 #terminal pad stitch density (number of stitch rows)
#making a filename reflective of target resistance and thread unit resistance
#rename to your own filename if you so choose, otherwise leave as is
file_name="".join(["R_",str(round(r/1000,1)),"kOhms_UR_",str(round(rho/1000,1)),"kOhmpm.exp"])
################################
#### initialize counters, lists, and (x,y) coords
################################
tl = 0; #total length of thread used (initialize counter)
xpoint=[]; ypoint=[] #initialize stitch coordinate lists
x = y = 0; #initial coordinates (0,0)
################################
#### pattern calculations
################################
len = r/rho; #desired length of thread (ft)
len = len*1000; #length of wire (mm)
w=(-8*gl+math.sqrt(gl)*math.sqrt(16*gl+24*len+24*tgl+48*pl))/4; #width of resistor
h=w*2/3; #height of the tines
width_stitches = int((w/2)/gl)+1
height_stitches = int(h/sl)
right_bottom_stitches = int((w/2-tgl/2-pl)/sl)
##################################
#### Start of stitching process
##################################
#right terminal pad
right_pad_matrix = pads.pad_right(x,y, xpoint,ypoint,sl,pl,pad_rows)
x=right_pad_matrix[0]; y=right_pad_matrix[1] #(x,y) coords of current stitch
xpoint=right_pad_matrix[2]; ypoint=right_pad_matrix[3]
# main body of the resistor
main_matrix=stitch_gen.main_block(x,y, xpoint,ypoint,sl,pl,gl,tgl,right_bottom_stitches,width_stitches,height_stitches)
x=main_matrix[0]; y=main_matrix[1] #(x,y) coords of current stitch
xpoint=main_matrix[2]; ypoint=main_matrix[3] #list of (x,y) stitches
tl=main_matrix[4] #length of thread used in resistor (no pads)
#add left terminal pad
main_matrix = pads.pad_left(x,y, xpoint,ypoint,sl,pl,pad_rows)
xpoint=main_matrix[2]; ypoint=main_matrix[3]
################################
#### file generation (convert to .exp)
################################
xpoint = np.asarray(xpoint); ypoint = np.asarray(ypoint)
dx,dy = exp_generation.make_file(xpoint,ypoint,file_name)
################################
#### plotting resistor pattern
################################
plt.plot(xpoint,ypoint,'r-',xpoint,ypoint,'x')
plt.ylabel('y coordinate (mm)')
plt.xlabel('x coordinate (mm)')
plt.title('Resistor Pattern')
plt.show()

90
pads.py 100644
Wyświetl plik

@ -0,0 +1,90 @@
# loops to generate the pattern
#right connector, square pad
def pad_right(x,y, xpoint,ypoint,sl,pl,pad_rows):
#horizontal lines
for i in range(0,pad_rows):
for ii in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
x=x+pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
y=y+pl/(pad_rows*2-1);
for ii in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
x=x-pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
y=y+pl/(pad_rows*2-1);
#end of the loop to create connector pad (horizontal lines) (right)
y=y-pl/(pad_rows*2-1); #offset last movement
#vertical lines
for i in range(0,pad_rows):
for ii in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
y=y-pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
x=x+pl/(pad_rows*2-1);
for ii in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
y=y+pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
x=x+pl/(pad_rows*2-1);
# end of the loop to create connector (vertical lines) (right)
x = x - pl / (pad_rows*2-1); # step back to top of pad
return x, y, xpoint, ypoint
# end of function pads_right
#second terminal pad (left)
def pad_left(x,y, xpoint,ypoint,sl,pl,pad_rows):
# vertical lines
for i in range(0,pad_rows):
for i in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
y-=pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
x+=pl/(pad_rows*2-1);
for i in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
y+=pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
x+=pl/(pad_rows*2-1);
# end of the loop to create connector (vertical lines) (left)
x-=pl/(pad_rows*2-1);
#horizontal lines
for i in range(0,pad_rows):
for i in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
x-=pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
y-=pl/(pad_rows*2-1);
for i in range(0,pad_rows):
xpoint.append(x)
ypoint.append(y)
x+=pl/pad_rows;
xpoint.append(x)
ypoint.append(y)
y-=pl/(pad_rows*2-1);
# end of the loop to create connector pad (horizontal lines) (left)
y += pl / (pad_rows*2-1);
return x, y, xpoint, ypoint

60
stitch_gen.py 100644
Wyświetl plik

@ -0,0 +1,60 @@
def main_block (x,y, xpoint,ypoint,sl,pl,gl,tgl,right_bottom_stitches,width_stitches,height_stitches):
#start of main block
tl=0
#move from start to bottom right corner
for i in range(0,right_bottom_stitches):
xpoint.append(x)
ypoint.append(y)
x+=sl;
tl+=sl;
#step upwards 2 gap lengths
for step in range(0,2):
xpoint.append(x)
ypoint.append(y)
y+=gl;
tl+=gl;
#repeating columns for main block
for i in range(0,width_stitches):
for i in range (0,height_stitches):
xpoint.append(x)
ypoint.append(y)
y+=sl;
tl+=sl;
xpoint.append(x)
ypoint.append(y)
x-=gl;
tl+=gl;
for i in range(0,height_stitches):
xpoint.append(x)
ypoint.append(y)
y-=sl;
tl+=sl;
xpoint.append(x)
ypoint.append(y)
x-=gl;
tl+=gl;
#end of while loop, vertical tabs done
x=x+gl; #cancel x jump of last loop
for step in range(0,2):
xpoint.append(x)
ypoint.append(y)
y-=gl; #step down to start return path
tl+=gl;
#return to left terminal pad
while x < -pl-tgl:
#for i in range(0,left_bottom_stitches):
xpoint.append(x)
ypoint.append(y)
x+=sl;
tl+=sl;
#print(xpoint)
return(x,y, xpoint,ypoint,tl)