рдХреЗрд╡рд▓ $ 15 рдХреЗ рд▓рд┐рдП 3 рдбреА рдореБрджреНрд░рд┐рдд рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ред рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рдЫрд╡рд┐

рдИрд╕реНрдЯрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдВрдбреЗ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рдЫрд╛рдкрдиреЗ рдХрд╛ рд╡рд┐рд╖рдп рдереЛрдбрд╝рд╛ рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ рдХреЛ рдХрдо рдЬрд░реВрд░рдд рдирд╣реАрдВ рдкрдбрд╝рддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд╣ рд╣рдореЗрд╢рд╛ рдкреВрд░реЗ рд╡рд░реНрд╖ рднрд░ рд░рд╣рддрд╛ рд╣реИ :)

рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ рдПрдХ рдорд╢реАрди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЧреЛрд▓рд╛рдХрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлреАрд▓-рдЯрд┐рдк рдкреЗрди рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ: рдЕрдВрдбреЗ, рдЯреЗрдирд┐рд╕ рдмреЙрд▓, рдХреНрд░рд┐рд╕рдорд╕ рдЯреНрд░реА рд╕рдЬрд╛рд╡рдЯред 1990 рдореЗрдВ рдбрд┐рдЬрд╛рдЗрдирд░ рдмреНрд░реВрд╕ рд╢рд╛рдкрд┐рд░реЛ рджреНрд╡рд╛рд░рд╛ рддрдВрддреНрд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдкреНрд░рд╕рд┐рджреНрдз рдХрдВрдкрдиреА рдПрд╡рд┐рд▓ рдореИрдб рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯ рд▓реЗрдмреЛрд░реЗрдЯрд░реАрдЬ рдиреЗ рдЗрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдж рдПрдЧрдмреЙрдЯ рдирд╛рдо рд╕реЗ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рд╣рдореЗрдВ рдИрд╡рд┐рд▓ рдореИрдб рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯ рд▓реЗрдмреЛрд░реЗрдЯрд░реАрдЬ рдХреЛ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐ рдЕрд░реНрдкрд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЦреБрд▓рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднреА рдЕрдиреНрдп рдЕрдВрдбреЗ рдХреЗ рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред

рдпрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд▓рд╛ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ:

рдЫрд╡рд┐


рд╕рд░рд▓ рдЪрд┐рддреНрд░ рдХрд┐рд╕реА рднреА рд╡реЗрдХреНрдЯрд░ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЦреАрдВрдЪреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдЯрд┐рд▓ рдЬреНрдпрд╛рдорд┐рддреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЬрдЧрд░ рдореЗрдВред

рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
# Generate a 3200 x 800 geometrical pattern for Eggbot plotting # See http://www.egg-bot.com/ for info on the Eggbot # # Dan Newman, 2 January 2011 # dan dot newman at mtbaldy dot us # Public domain (http://creativecommons.org/licenses/publicdomain/) HEIGHT = float( 800.0 ) WIDTH = float( 3200.0 ) scale = WIDTH / ( 16.0 * 3 ) # 16 horizontal repeats epsilon = float(1.0e-5) # Relative moves for drawing the vertical elements DOWN = [[0.0, scale], [scale, 2*scale], [0.0, scale], [-scale, 2*scale]] UP = [[0.0, -scale], [scale, -2*scale], [0.0, -scale], [-scale, -2*scale]] # How to switch to going up when you stop going down after DOWN[i] DU_switch = [scale, -scale, -scale, scale] # Relative moves for drawing the horizontal elements (L2R = left-to-right) L2R = [[scale, 0.0], [2*scale, scale], [scale, 0.0], [2*scale, -scale]] R2L = [[-scale, 0.0], [-2*scale, scale], [-scale, 0.0], [-2*scale, -scale]] # How to switch to R2L after stopping in L2R at index i LR_switch = [scale, -scale, -scale, scale] # Compute the intersection of two lines # See eggbot_hatch.py for complete details def intersect( P1, P2, P3, P4 ): ''' Determine if two line segments defined by the four points P1 & P2 and P3 & P4 intersect. If they do intersect, then return the fractional point of intersection "sa" along the first line at which the intersection occurs. ''' # Precompute these values -- note that we're basically shifting from # # P = P1 + s (P2 - P1) # # to # # P = P1 + s D # # where D is a direction vector. The solution remains the same of # course. We'll just be computing D once for each line rather than # computing it a couple of times. D21x = P2[0] - P1[0] D21y = P2[1] - P1[1] D43x = P4[0] - P3[0] D43y = P4[1] - P3[1] # Denominator d = D21x * D43y - D21y * D43x # Return now if the denominator is zero if d == 0: return float( -1 ) # For our purposes, the first line segment given # by P1 & P2 is the LONG hatch line running through # the entire drawing. And, P3 & P4 describe the # usually much shorter line segment from a polygon. # As such, we compute sb first as it's more likely # to indicate "no intersection". That is, sa is # more likely to indicate an intersection with a # much a long line containing P3 & P4. nb = ( P1[1] - P3[1] ) * D21x - ( P1[0] - P3[0] ) * D21y # Could first check if abs(nb) > abs(d) or if # the signs differ. sb = float( nb ) / float( d ) if ( sb < 0 ) or ( sb > 1 ): return float( -1 ) na = ( P1[1] - P3[1] ) * D43x - ( P1[0] - P3[0] ) * D43y sa = float( na ) / float( d ) if ( sa < 0 ) or ( sa > 1 ): return float( -1 ) return sa # Determine whether a line segment needs to be clipped to # fit within the drawing page def clip( x1, y1, x2, y2 ): if ( x1 >= 0.0 ) and ( x1 <= WIDTH ) and ( x2 >= 0.0 ) and ( x2 <= WIDTH ) and \ ( y1 >= 0.0 ) and ( y1 <= HEIGHT ) and ( y2 >= 0.0 ) and ( y2 <= HEIGHT ): return float( -1.0 ) if ( x1 < 0.0 ) or ( x2 < 0.0 ): s = intersect( [x1, y1], [x2, y2], [0.0, 0.0], [0.0, HEIGHT] ) if ( s > 0.0 ): return s if ( x1 > WIDTH ) or ( x2 > WIDTH ): # We allow going an extra pixel across in case there is drawing error s = intersect( [x1, y1], [x2, y2], [WIDTH+1.0, 0.0], [WIDTH+1.0, HEIGHT] ) if ( s > 0.0 ): return s if ( y1 < 0.0 ) or ( y2 < 0.0 ): s = intersect( [x1, y1], [x2, y2], [0.0, 0.0], [WIDTH, 0.0] ) if ( s > 0.0 ): return s if ( y1 > HEIGHT ) or ( y2 > HEIGHT ): s = intersect( [x1, y1], [x2, y2], [0.0, HEIGHT], [WIDTH, HEIGHT] ) if ( s > 0.0 ): return s return float( -1.0 ) # Plot a collection of line segments def plot( points, color='black' ): # First line segment s = clip( points[0][0], points[0][1], points[1][0], points[1][1] ) if ( s < 0.0 ): p = 'M %f,%f' % ( points[0][0], points[0][1] ) else: p = 'M %f,%f' % ( points[0][0] + s * ( points[1][0] - points[0][0] ), points[0][1] + s * ( points[1][1] - points[0][1] ) ) x0 = points[1][0] y0 = points[1][1] p += ' L %f,%f' % ( x0, y0 ) # Intermediate line segments for i in range(2, len( points ) - 1): x0 = points[i][0] y0 = points[i][1] p += ' L %f,%f' % ( x0, y0 ) # Final line segment x = points[-1][0] y = points[-1][1] s = clip( x0, y0, x, y ) if ( s < 0.0 ): p += ' L %f,%f' % ( x, y ) else: p += ' L %f,%f' % ( x0 + s * ( x - x0 ), y0 + s * ( y - y0 ) ) print '<path stroke="%s" stroke-width="1" fill="none" d="%s"/>' % ( color, p ) # Draw the vertical elements def vertical( x, y, color, down, up ): if ( y > ( scale + epsilon ) ): i = len( down ) - 1 while ( y > ( scale + epsilon) ): x -= down[i][0] y -= down[i][1] i -= 1 if ( i < 0 ): i = len( down ) - 1 else: i = -1 points = [[x, y]] while ( y < ( HEIGHT - epsilon ) ): i += 1 if ( i >= len( down ) ): i = 0 x += down[i][0] y += down[i][1] points.append( [x, y] ) plot( points, color ) x += DU_switch[i] points = [[x, y]] while ( y > epsilon ): x += up[i][0] y += up[i][1] points.append( [x, y] ) i -= 1 if ( i < 0 ): i = len( up ) - 1 plot( points, color ) # Draw the horizontal elements def horizontal( x, y, color, l2r, r2l ): if ( x > ( scale + epsilon ) ): i = len( l2r ) - 1 while ( x > ( scale + epsilon ) ): x -= l2r[i][0] y -= l2r[i][1] i -= 1 if ( i < 0 ): i = len( l2r ) - 1 else: i = -1 points = [[x, y]] while ( x < ( WIDTH - epsilon ) ): i += 1 if ( i >= len( l2r ) ): i = 0 x += l2r[i][0] y += l2r[i][1] points.append( [x, y] ) plot( points, color ) y += LR_switch[i] points = [[x, y]] while ( x > epsilon ): x += r2l[i][0] y += r2l[i][1] points.append( [x, y] ) i -= 1 if ( i < 0 ): i = len( r2l ) - 1 plot( points, color ) print '<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="%d" height="%d">' % ( int( WIDTH ), int( HEIGHT ) ) print '<g inkscape:groupmode="layer" inkscape:label="1 - vertical">' Color = 'green' x1 = 0.0 y1 = 0.0 x2 = 1.5 * scale y2 = 1.5 * scale while ( x1 < ( WIDTH - epsilon ) ): vertical( x1, y1, 'green', DOWN, UP ) if ( x2 < ( WIDTH - epsilon ) ): vertical( x2, y2, 'green', DOWN, UP ) x1 += 3 * scale x2 += 3 * scale print '</g>' print '<g inkscape:groupmode="layer" inkscape:label="2 - horizontal">' x1 = 0.0 y1 = 0.0 x2 = 1.5 * scale y2 = 1.5 * scale while ( y1 < ( HEIGHT - epsilon ) ): horizontal( x1, y1, 'blue', L2R, R2L) if ( y2 < ( HEIGHT - epsilon ) ): horizontal( x2, y2, 'blue', L2R, R2L) y1 += 3 * scale y2 += 3 * scale print '</g>' print '<g inkscape:groupmode="layer" inkscape:label="3 - border">' print '<path stroke="black" stroke-width="1" fill="none" d="M 0,0 l %d,0"/>' % ( int( WIDTH ) ) print '<path stroke="black" stroke-width="1" fill="none" d="M 0,%dl %d,0"/>' % ( int( HEIGHT ), int( WIDTH ) ) print '</g>' print '</svg>' 


рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрдбреЗ рдкрд░ рд╣реИ:

рдЫрд╡рд┐


рдЙрддреНрд╕рд╛рд╣реА рднреА рд░реЛрдЯреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╕реНрдЯреНрд░реЛрдмреЛрд╕реНрдХреЛрдкрд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:



рдЕрдкрдирд╛ рдПрдЧрдмреЛрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ $ 15 рдорд┐рд▓рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реБрдЖ :)ред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдореВрд▓ рдПрдЧрдмреЙрдЯ рдкреНрд░реЛ рдХреА рдХреАрдордд $ 325 рд╣реИ, рдЬреЛ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдПрдХ рдЖрджреЗрд╢ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ рдХреА рдореБрдЦреНрдп рд▓рд╛рдЧрдд рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░реНрд╕ рд╣реИред рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд╕реНрддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - 28BYJ-48-12V, рдЗрд╕рд▓рд┐рдП 15 рд░реБрдкрдпреЗ рдХрд╛ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдЯреИрдЧред

рддреЛ рдореЗрд░реЗ рдЕрдВрдбреЗрдмреЛрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

рдПрдмреАрдПрд╕ рдпрд╛ рдкреАрдПрд▓рдП рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдХрд╛ 1.110 рдЧреНрд░рд╛рдоред рдореИрдВрдиреЗ рдПрдмреАрдПрд╕, рдкреАрд▓реЗ рдкреАрдПрд▓рдП рдХреЗ рд╕рд╛рде рдХрд╛рд▓реЗ рднрд╛рдЧреЛрдВ рдХреЛ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред рдХрд╛рдВрдЪ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рджрд░реНрджрдирд╛рдХ рдкреАрдПрд▓рдП рд╕реБрдВрджрд░ рд╣реИ :)
2. рд╕реНрдЯреЙрдХ рдореЗрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕:

  • 250 рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЗрдмрд▓ рдХреЗ рд╕рд╛рде 1 рдПрдХреНрд╕ рдЪреАрдиреА Arduino UNO c Aliexpressред
  • 100 рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП 2 x 28BYJ-48-12V рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ + ULN2003 рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдбреНрд░рд╛рдЗрд╡рд░ред
  • 1 рдПрдХреНрд╕ SG90 рдорд╛рдЗрдХреНрд░реЛ рд╕рд░реНрд╡реЛ рдореЛрдЯрд░ 100 рд░рдЧрдбрд╝ред
  • 1 рдПрдХреНрд╕ 12 рд╡реА рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реИ рддреЛ рдЖрдк рдЦрд░реАрдж рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ)ред

3. рдЬрд┐рд╕реЗ рд╣рдо рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реНрдЯреЛрд░ рдореЗрдВ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВ:

  • рд╡рд╕рдВрддред
  • рдмреЛрд▓реНрдЯ, рд╢рд┐рдХрдВрдЬрд╛, рдирдЯ, рд╡рд╛рд╢рд░ред
  • рд░рдмрд░ рдЧреИрд╕рдХреЗрдЯ (рдЖрдк рдлреНрд▓реЗрдХреНрд╕ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  • рдЕрд╕рд░ 608ред

рд╣рдо рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдХреЛ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд░ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореЙрдбрд▓ рдореИрдВрдиреЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдпрд╣рд╛рдВ рд░рдЦреЗ рд╣реИрдВ ред

рдХреНрдпрд╛ рдФрд░ рдХрд┐рддрдирд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реИ, рдХрд╣рд╛рдВ рд╕реЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рд▓рд╛рдирд╛ рд╣реИ, рдХрд┐рддрдиреЗ рдФрд░ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдмреЛрд▓реНрдЯ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрдиреЗ рд╣реИрдВ ред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдПрдХ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд░ рдирд╣реАрдВ рдЦрд░реАрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреА рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рд╕рднреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВред рдкреАрдПрдо рд╕реЗ рд╕рдВрдкрд░реНрдХ, рд╕рдм рдХреБрдЫ рдмреЗрд╣рддрд░реАрди рддрд░реАрдХреЗ рд╕реЗ рд╣реЛрдЧрд╛! рдореИрдВ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реВрдВ!

рдореБрджреНрд░рдг рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЛрдбрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

рдЫрд╡рд┐

рдЖрдкрдХреЗ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рддреИрдпрд╛рд░ рдХрд┐рдПред рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдореБрджреНрд░рдг рдФрд░ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдЕрдВрдбреЗрдмреЛрдЯ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрд░реНрдбрд┐рдиреЛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

  1. рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЕрдирдкреИрдХ рдХрд░реЗрдВ ред
  2. Arduino IDE рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред
  3. рд╣рдо рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдмреЛрд░реНрдб рдХреЗ рдореЙрдбрд▓ рдФрд░ рдЕрд░реВрдбрд┐рдиреЛ рдЖрдИрдбреАрдИ рдореЗрдВ COM рдкреЛрд░реНрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
  4. рдлрд░реНрдорд╡реЗрдпрд░ рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ Eggduino.ino рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ Arduino рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВред

рдИрд╡рд┐рд▓ рдореИрдб рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯ рд▓реЗрдмреЛрд░реЗрдЯрд░реАрдЬ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рд┐рджреНрдз рдЗрдирдХрд╕реНрдХреЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреЛ рдПрдЧрдмреЙрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ, рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдзреНрдпрд╛рди рд╕реЗ Inkscape рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рд╛ рдФрд░ рддреИрдпрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдпрд╣рд╛рдБ рд░рдЦрд╛ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдХрд╕реНрдХреЗрдк рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдкреНрд▓рдЧ-рдЗрди рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдпрд╣рд╛рдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрдВрдХрд╕реНрдХреЗрдк рдЪрд▓рд╛рдПрдВред рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдиреВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдПрдЧрдмреЛрдЯ рд╕рдмрдореЗрдиреВ рджреЗрдЦреЗрдВред рдкреНрд▓рдЧ-рдЗрди рдЦреЛрд▓реЗрдВ, рдорд╣рд╕реВрд╕ рдХрд┐рдП рдЧрдП рдкреЗрди рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдВрдбреЗ рдкрд░ рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред

рдпрджрд┐ рдмреЙрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдВрдХрд╕реНрдХреЗрдк рд╣реИ, рддреЛ "рдПрдЧрдмреЙрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓" рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдирд┐рд░рд╛рд╢рд╛ рди рдХрд░реЗрдВред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦреЗрдВ, рдЖрдкрдХреЗ рдмреЛрд░реНрдб рдХрд╛ рдирд╛рдо рдХреНрдпрд╛ рд╣реИред рдлрд┐рд░, Inkscape рдкреНрд▓рдЧрдЗрди рдХреА ebb_serial.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд▓рд╛рдЗрди 52 рдкрд░ рдЕрдкрдиреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде "USB-SERIAL CH340" рдмрджрд▓реЗрдВред

рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рднреА рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдирддреАрдЬрддрди, рдЕрдВрдбреЗ рдХреА рдирд╛рд╡ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧрд┐рддреБрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдХрд╛рдВрдЯрд╛, рддрд╛рд░реЛрдВ рдХреЛ рд░рдЦреЛ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдореИрдВ рдпрд╛ рддреЛ thingiverse.com рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдирд╣реАрдВ рдерд╛ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi403293/


All Articles