Bote de huevos impreso en 3D por solo $ 15. Receta de cocina

Hola a todos!

imagen

La Pascua termina y el tema de imprimir varios patrones en los huevos se vuelve un poco menos relevante, pero esto no hace que el bote del huevo sea menos necesario, lo que todos necesitan y siempre está durante todo el año :)

Para aquellos que no lo saben, un bote de huevos es una máquina que puede dibujar cualquier objeto esférico con un rotulador común: huevos, pelotas de tenis, decoraciones para árboles de Navidad. El concepto del mecanismo fue inventado por el diseñador Bruce Shapiro en 1990, y no hace mucho tiempo la famosa compañía Evil Mad Scientist Laboratories lanzó su versión bajo el nombre de The EggBot . Debemos rendir homenaje a Evil Mad Scientist Laboratories, el proyecto se ha abierto y permite el uso de software para otros robots de huevo, incluso en proyectos comerciales.

Aquí están las obras de arte obtenidas en la salida:

imagen


Se pueden dibujar imágenes simples en cualquier editor de vectores, y se pueden crear objetos geométricos complejos, por ejemplo, en python.

Aquí hay un ejemplo de dicho programa:
# 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>' 


Pero la imagen resultante ya está en el huevo:

imagen


Los entusiastas incluso crean imágenes con un efecto estroboscópico durante la rotación:



Al crear mi eggboat, no me propuse el objetivo de alcanzar los $ 15, pero sucedió :). En comparación, el Eggbot Pro original cuesta $ 325, que es un orden de magnitud más costoso. El costo principal de cualquier barco de huevos son los motores paso a paso. Usé los más asequibles: 28BYJ-48-12V, de ahí el precio final de 15 dólares.

Entonces, para preparar mi bote de huevos, necesitarás:

1.110 gramos de plástico ABS o PLA. Imprimí las partes negras con ABS, PLA amarillo. Es doloroso PLA es hermoso cuando se imprime en vidrio :)
2. Electrónica en stock:

  • 1 x Arduino chino UNO c Aliexpress con cable para computadora por 250 rublos.
  • 2 x 28BYJ-48-12V Motor paso a paso + ULN2003 Motor paso a paso para 100 rublos.
  • 1 x SG90 Micro Servo Motor 100 rub.
  • 1 x fuente de alimentación de 12V (no puede comprar si tiene una).

3. Lo que no podemos imprimir, pero podemos comprar en casi cualquier ferretería:

  • primavera
  • pernos, tornillos, tuercas, arandelas.
  • junta de goma (puede imprimir si tiene Flex).
  • rodamiento 608.

Ponemos el plástico en la impresora 3D e imprimimos los detalles, cuyos modelos coloqué cuidadosamente aquí .

Detalles sobre qué y cuánto imprimir, dónde obtener exactamente la electrónica, cuántos y qué tipo de pernos debe buscar aquí .

Para aquellos que aún no han comprado una impresora 3D, pero realmente quieren preparar su bote de huevos, puedo imprimir todos los detalles y enviarlo por correo. Contacto en PM, ¡todo estará de la mejor manera posible! Te lo garantizo!

Después de imprimir, puede comenzar a ensamblar. El ensamblaje del dispositivo se ve así:

imagen

Para que tenga éxito, pasé mucho tiempo y preparé instrucciones para ensamblar y conectar dispositivos electrónicos en imágenes. Puede descargar las instrucciones aquí .

Después de imprimir y ensamblar, debe obtener dicho dispositivo:

imagen

Una vez completado el ensamblaje, debe colocar el firmware en el eggboat. Dado que el cerebro del dispositivo es un arduino ordinario, no debería tener problemas con esto.

  1. Descargue y desempaquete el firmware desde aquí .
  2. Descargue el IDE de Arduino , instálelo y ejecútelo.
  3. Conectamos el barco de huevos a la computadora, seleccionamos el modelo de la placa y el puerto COM en el IDE de Arduino.
  4. Abra el archivo Eggduino.ino de la carpeta con el firmware y cárguelo en Arduino.

El conocido Inkscape con un complemento escrito por Evil Mad Scientist Laboratories se utiliza como programa de control. El complemento le permite personalizar el eggbot, administrarlo manualmente y enviar imágenes para imprimir. Agregué cuidadosamente el complemento a Inkscape y puse el archivo terminado aquí .

Si ya tiene Inkscape, pero no hay un complemento, puede tomarlo por separado aquí .

Descargue, instale y ejecute Inkscape. Vamos al menú de complementos, buscamos el submenú EggBot allí. Abra el complemento, ajuste la altura del rotulador e imprima cualquier cosa en el huevo.

Si tienes Inkscape cuando intentas controlar el bot da el error "No se pudo conectar a EggBot", entonces no te desesperes. El problema se puede resolver fácilmente. Mire en la lista de equipos conectados, cuál es el nombre de su placa. Luego, en el archivo ebb_serial.py del complemento Inkscape, reemplace "USB-SERIAL CH340" con su nombre en la línea 52.

También recopilé y subí una pequeña colección con ejemplos. Puedes verlo aquí .

Como resultado, el bote de huevos debería funcionar así:


Publiqué mi proyecto en github . Bifurcar, poner estrellas, modificar, etc. Tampoco me olvidé de thingiverse.com.

Gracias por su atencion!

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


All Articles