Perahu telur cetak 3D hanya dengan $ 15. Resep memasak

Halo semuanya!

gambar

Paskah berakhir dan tema pencetakan berbagai pola pada telur menjadi sedikit kurang relevan, tetapi ini tidak membuat perahu telur kurang dibutuhkan, yang dibutuhkan semua orang dan selalu sepanjang tahun :)

Bagi mereka yang tidak tahu, kapal telur adalah mesin yang dapat menggambar benda-benda berbentuk bola dengan spidol biasa: telur, bola tenis, dekorasi pohon Natal. Konsep mekanisme ini ditemukan oleh desainer Bruce Shapiro pada tahun 1990, dan belum lama ini perusahaan terkenal Evil Mad Scientist Laboratories merilis versinya dengan nama The EggBot . Kita harus membayar upeti kepada Laboratorium Ilmuwan Mad Kejahatan, proyek ini dibuat terbuka dan memungkinkan penggunaan perangkat lunak untuk bot telur lainnya, bahkan dalam proyek komersial.

Berikut adalah karya seni yang didapat di output:

gambar


Gambar sederhana dapat diambil dalam editor vektor apa pun, dan objek geometris yang kompleks dapat dibuat, misalnya, dengan python.

Ini adalah contoh dari program semacam itu:
# 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>' 


Tapi gambar yang dihasilkan sudah ada di telur:

gambar


Penggemar bahkan membuat gambar dengan efek stroboskopik selama rotasi:



Ketika membuat eggboat saya, saya tidak menetapkan sendiri tujuan untuk memenuhi $ 15, tetapi itu terjadi :). Sebagai perbandingan, Eggbot Pro asli berharga $ 325, yang merupakan urutan besarnya lebih mahal. Biaya utama dari setiap kapal telur adalah motor stepper. Saya menggunakan yang paling terjangkau - 28BYJ-48-12V, maka harga akhir 15 dolar.

Jadi untuk menyiapkan perahu terong saya, Anda perlu:

1.110 gram plastik ABS atau PLA. Saya mencetak bagian hitam dengan ABS, PLA kuning. PLA yang menyakitkan itu indah saat mencetak di atas kaca :)
2. Barang elektronik:

  • 1 x Cina Arduino UNO c Aliexpress dengan kabel untuk komputer untuk 250 rubel.
  • 2 x 28BYJ-48-12V Motor stepper + ULN2003 driver motor stepper untuk 100 rubel.
  • 1 x SG90 Micro Servo Motor 100 gosok.
  • 1 x 12V Power supply (Anda tidak dapat membeli jika Anda memilikinya).

3. Apa yang tidak dapat kita cetak, tetapi kita dapat membeli di hampir semua toko perangkat keras:

  • musim semi.
  • baut, sekrup, mur, ring.
  • paking karet (Anda dapat mencetak jika Anda memiliki Flex).
  • bantalan 608.

Kami memasukkan plastik ke dalam printer 3D dan mencetak detailnya, model yang saya letakkan dengan hati-hati di sini .

Rincian tentang apa dan berapa banyak untuk dicetak, di mana tepatnya untuk mendapatkan elektronik, berapa banyak dan jenis baut apa yang perlu Anda lihat di sini .

Bagi mereka yang belum membeli printer 3D, tetapi benar-benar ingin menyiapkan perahu telur mereka, saya dapat mencetak semua detail dan mengirimkannya melalui pos. Kontak di PM, semuanya akan dengan cara terbaik! Saya jamin itu!

Setelah mencetak, Anda dapat mulai menyusun. Perakitan perangkat terlihat seperti ini:

gambar

Agar Anda berhasil, saya menghabiskan banyak waktu dan menyiapkan instruksi untuk merakit dan menghubungkan elektronik dalam gambar. Anda dapat mengunduh instruksi di sini .

Setelah mencetak dan merakit, Anda harus mendapatkan perangkat seperti itu:

gambar

Setelah perakitan selesai, Anda harus meletakkan firmware di dalam eggboat. Karena otak perangkat adalah arduino biasa, Anda seharusnya tidak memiliki masalah dengan ini.

  1. Unduh dan buka kemasan firmware dari sini .
  2. Unduh Arduino IDE , instal dan jalankan.
  3. Kami menghubungkan kapal telur ke komputer, pilih model papan dan port COM di Arduino IDE.
  4. Buka file Eggduino.ino dari folder dengan firmware dan muat ke Arduino.

Inkscape yang terkenal dengan sebuah plugin yang ditulis oleh Evil Mad Scientist Laboratories digunakan sebagai program kontrol. Plugin ini memungkinkan Anda untuk menyesuaikan eggbot, mengelolanya secara manual dan mengirim gambar untuk dicetak. Dengan hati-hati saya menambahkan plugin ke Inkscape dan meletakkan arsip yang sudah selesai di sini .

Jika Anda sudah memiliki Inkscape, tetapi tidak ada plug-in, maka Anda dapat menggunakannya secara terpisah di sini .

Unduh, instal, dan jalankan Inkscape. Kami pergi ke menu plugins, cari submenu EggBot di sana. Buka plug-in, sesuaikan tinggi pena felt-tip dan cetak apa saja pada telur.

Jika Anda memiliki Inkscape ketika mencoba untuk mengontrol bot memberikan kesalahan "Gagal terhubung ke EggBot", maka jangan putus asa. Masalahnya dapat dengan mudah diselesaikan. Lihat di daftar peralatan yang terhubung, apa nama papan Anda. Kemudian, dalam file ebb_serial.py dari plugin Inkscape, ganti "USB-SERIAL CH340" dengan nama Anda pada baris 52.

Saya juga mengumpulkan dan mengunggah koleksi kecil dengan contoh. Anda bisa melihatnya di sini .

Akibatnya, kapal telur harus bekerja seperti ini:


Saya memposting proyek saya di github . Fork, beri bintang, modifikasi, dan sebagainya. Saya juga tidak melupakan thingiverse.com.

Terima kasih atas perhatian anda!

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


All Articles