3D gedrucktes Eierboot für nur 15 US-Dollar. Kochrezept

Hallo allerseits!

Bild

Ostern endet und das Thema des Druckens verschiedener Muster auf die Eier wird etwas weniger relevant, aber dies macht das Eierboot nicht weniger nötig, was jeder braucht und immer das ganze Jahr über ist :)

Für diejenigen, die es nicht wissen, ist ein Eierboot eine Maschine, die mit einem gewöhnlichen Filzstift auf alle kugelförmigen Objekte zeichnen kann: Eier, Tennisbälle, Christbaumschmuck. Das Konzept des Mechanismus wurde bereits 1990 vom Designer Bruce Shapiro erfunden, und vor nicht allzu langer Zeit veröffentlichte die berühmte Firma Evil Mad Scientist Laboratories ihre Version unter dem Namen The EggBot . Wir müssen den Evil Mad Scientist Laboratories Tribut zollen. Das Projekt wurde eröffnet und ermöglicht die Verwendung von Software für andere Eierbots, auch in kommerziellen Projekten.

Hier sind die Kunstwerke, die am Ausgang erhalten wurden:

Bild


Einfache Bilder können in jedem Vektoreditor gezeichnet werden, und komplexe geometrische Objekte können beispielsweise in Python erstellt werden.

Hier ist ein Beispiel für ein solches Programm:
# 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>' 


Das resultierende Bild befindet sich jedoch bereits auf dem Ei:

Bild


Enthusiasten erstellen sogar Bilder mit einem stroboskopischen Effekt während der Rotation:



Bei der Erstellung meines Eierboots habe ich mir nicht das Ziel gesetzt, 15 US-Dollar zu verdienen, aber es ist passiert :). Zum Vergleich: Der ursprüngliche Eggbot Pro kostet 325 US-Dollar, was eine Größenordnung teurer ist. Die Hauptkosten eines Eierboots sind Schrittmotoren. Ich habe die günstigsten verwendet - 28BYJ-48-12V, daher der endgültige Preis von 15 Dollar.

Um mein Eierboot vorzubereiten, benötigen Sie:

1.110 Gramm ABS oder PLA-Kunststoff. Ich habe die schwarzen Teile mit ABS, gelbem PLA gedruckt. Es ist schmerzhaft, dass PLA beim Drucken auf Glas wunderschön ist :)
2. Elektronik auf Lager:

  • 1 x chinesisches Arduino UNO c Aliexpress mit Kabel für Computer für 250 Rubel.
  • 2 x 28BYJ-48-12V Schrittmotor + ULN2003 Schrittmotortreiber für 100 Rubel.
  • 1 x SG90 Micro Servo Motor 100 reiben.
  • 1 x 12V Netzteil (Sie können nicht kaufen, wenn Sie eines haben).

3. Was wir nicht drucken können, aber in fast jedem Baumarkt kaufen können:

  • Frühling.
  • Bolzen, Schrauben, Muttern, Unterlegscheiben.
  • Gummidichtung (Sie können drucken, wenn Sie Flex haben).
  • Lager 608.

Wir legen den Kunststoff in den 3D-Drucker und drucken die Details, deren Modelle ich hier sorgfältig platziert habe .

Details darüber, was und wie viel gedruckt werden soll, wo genau die Elektronik erhältlich ist, wie viele und welche Art von Schrauben Sie hier suchen müssen.

Für diejenigen, die noch keinen 3D-Drucker gekauft haben, aber wirklich ihr Eierboot vorbereiten möchten, kann ich alle Details ausdrucken und per Post senden. Kontakt in PM, alles wird bestmöglich! Ich garantiere es!

Nach dem Drucken können Sie mit dem Zusammenbau beginnen. Die Montage des Geräts sieht ungefähr so ​​aus:

Bild

Damit Sie erfolgreich sind, habe ich viel Zeit aufgewendet und Anweisungen für die Montage und den Anschluss von Elektronik in Bildern vorbereitet. Sie können die Anleitung hier herunterladen.

Nach dem Drucken und Zusammenbauen sollten Sie ein solches Gerät erhalten:

Bild

Nach Abschluss der Montage müssen Sie die Firmware in das Eierboot legen. Da das Gehirn des Geräts ein gewöhnliches Arduino ist, sollten Sie damit keine Probleme haben.

  1. Laden Sie die Firmware von hier herunter und entpacken Sie sie.
  2. Laden Sie die Arduino IDE herunter, installieren Sie sie und führen Sie sie aus.
  3. Wir verbinden das Eierboot mit dem Computer, wählen das Modell der Karte und den COM-Port in der Arduino IDE aus.
  4. Öffnen Sie die Datei Eggduino.ino aus dem Ordner mit der Firmware und laden Sie sie in Arduino.

Das bekannte Inkscape mit einem Plugin von Evil Mad Scientist Laboratories wird als Kontrollprogramm verwendet. Mit dem Plugin können Sie den Eggbot anpassen, manuell verwalten und Bilder zum Drucken senden. Ich habe das Plugin sorgfältig zu Inkscape hinzugefügt und das fertige Archiv hier abgelegt.

Wenn Sie bereits über Inkscape verfügen, aber kein Plug-In vorhanden ist, können Sie es hier separat verwenden.

Laden Sie Inkscape herunter, installieren Sie es und führen Sie es aus. Wir gehen zum Plugins-Menü und suchen dort nach dem EggBot-Untermenü. Öffnen Sie das Plug-In, stellen Sie die Höhe des Filzstifts ein und drucken Sie alles auf das Ei.

Wenn Sie Inkscape haben, wenn Sie versuchen, den Bot zu steuern, wird der Fehler "Verbindung zu EggBot fehlgeschlagen" angezeigt, dann verzweifeln Sie nicht. Das Problem kann leicht gelöst werden. Sehen Sie in der Liste der angeschlossenen Geräte nach, wie Ihr Board heißt. Ersetzen Sie dann in der Datei ebb_serial.py des Inkscape-Plugins "USB-SERIAL CH340" durch Ihren Namen in Zeile 52.

Ich habe auch eine kleine Sammlung mit Beispielen gesammelt und hochgeladen. Sie können es hier sehen .

Infolgedessen sollte das Eierboot folgendermaßen funktionieren:


Ich habe mein Projekt auf github gepostet. Gabel, Sterne setzen, modifizieren und so weiter. Ich habe thingiverse.com auch nicht vergessen .

Vielen Dank für Ihre Aufmerksamkeit!

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


All Articles