Kami menggunakan Lulzbot Mini yang bekerja sempurna selama lebih dari 1 tahun (kecuali kepala flexystruder kami yang tidak pernah bekerja :( )
Aplikasi dan layanan online
Arduino IDE
Autodesk Netfabb
fritzing
Tentang proyek ini
Avenger Assembled: 3D Printed & Arduino Controlled Iron Man Helmet and Arc Reactor.
Pengantar dan Motivasi:
Motivasi di balik pembuatan helm ini dimulai dari helm pertama yang pernah saya buat. Itu adalah helm Antman dari karton dari beberapa video yang saya temukan online. Ini sangat keren (sebagai penggemar Marvel yang besar), jadi saya memutuskan saya benar-benar ingin membuat helm Iron Man. Saya baru saja hadir di National Maker Faire di Washington D.C. dan semua orang suka helm Antman itu. Ini memotivasi saya lebih jauh untuk membuat yang Iron Man. Saya melalui beberapa prototipe, dimulai dengan helm karton lain. Helm itu terlalu kecil jadi saya merancang helm saya sendiri, kali ini saat saya merakitnya terlihat lebih seperti bola di kepala saya daripada yang ada di film. Akhirnya, saya pergi ke model kertas. Model kertas ini ternyata terlihat luar biasa, tetapi saya menemukan satu masalah lagi. Model kertas terlalu tipis. Saya mencoba memperbaikinya tetapi itu tidak berhasil, jadi saya memutuskan untuk mencetak helm 3D. Akhirnya saya membuat satu yang cukup stabil dan juga cukup besar untuk memasuki kepalaku dan motor.
Membuat Helm & Arc Reactor:
Cetak 3D:
1) Memecah menjadi bagian - perangkat lunak
Langkah pertama dalam membuat helm ini adalah menemukan file online, lalu mencetaknya. File yang saya temukan adalah helm Iron Man ber-motor. File yang saya unduh dari thingiverse terdiri dari tiga bagian: bagian utama, dagu, dan plat wajah. Karena ketiga bagian tersebut terlalu besar untuk plat build printer saya, saya harus mencari perangkat lunak yang dapat memotong helm saya menjadi bagian. Sambil mencari online, saya menemukan perangkat lunak gratis online bernama netfabb basic. Saya mengunduh alat dan mengunggah file saya ke sana. Netfabb basic sangat mudah digunakan dan saya mampu memotong bagian helm. Kemudian saya mencetak bagian untuk helm utama, bagian dagu, dan plat wajah. Sambil melalui proses cetak, saya akan menempelkan bagian-bagian dengan lem dua sisi dan memeriksa apakah ukurannya pas. Setelah semua bagian selesai dicetak dan 1 ½ gulungan filamen habis, saya memiliki helm 24 bagian.
2) Memilih perekat yang tepat
Tantangan selanjutnya adalah menemukan perekat yang tepat untuk menempelkan bagian-bagian. Agar lem bekerja, ia harus memenuhi tiga persyaratan:
Harus dapat menempelkan bagian dengan ikatan yang kuat,
memiliki waktu penyulingan yang cepat
mudah digosok.
Kami menguji 4 jenis lem yang berbeda, E6000, JB Weld KwikWeld, JB Weld Plastic Bonder, dan Loctite Plastic Bonder epoxy. Akhirnya, kami akhirnya menggunakan KwikWeld karena ia memenuhi ketiga persyaratan tersebut. Untuk memasang bagian, langkah pertama adalah mengasarkan sisi yang akan dipelekat. Saya menggunakan borkas untuk mengasarkan sisi yang halus sampai bagian memiliki sisi yang kasar dengan lubang dan kantong kecil. Ini akan membantu bagian menempel bersama. Kami kemudian mencampur JB KwikWeld dengan bagian yang sama antara pemeras dan baja dan menyebarkannya merata di kedua sisi yang diasarkan lalu menekannya bersama. Jika Anda memiliki klem, maka masukkan ke dalam klem dan bersihkan sisa lem. Membutuhkan waktu sekitar 10 menit untuk kering tetapi lebih baik untuk membiarkannya lebih lama dari itu.
3) Merancang mekanisme servo
Tantangan selanjutnya dalam pembuatan helm Iron Man adalah merancang mekanisme servo. Karena saya kesulitan mencari tahu cara memasang servo ke helm dengan gambar di halaman thingiverse, saya memutuskan untuk membuat saya sendiri. Pertama, saya merencanakan di mana servo akan diletakkan dan mengukur garis lurus dari servo ke tempat pemasangan. Kemudian saya memperkirakan sudut yang akan dibuat servo. Desain pertama sedikit salah dengan sudut yang terlalu tajam. Yang berikutnya saya perbaiki dan itu tepat. Kemudian saya memasang lengan ke servo dan tempat pemasangan untuk melihat apakah pas. Itu pas! Akhirnya, saya merancang klem untuk mengelilingi servo dan mencetaknya. Saya merakit semuanya dan kami melakukan tes pertama. Itu tidak stabil dan plat wajah tidak naik hingga akhir secara halus dan rata. Untuk memperbaiki masalah ini, saya membungkus sebuah baju kawat logam ke dalam bentuk persegi panjang dan memasukkannya ke dalam slot tempat bagian cetak 3D seharusnya pergi. Kemudian saya merancang klips untuk di bawah baju kawat untuk mencegahnya jatuh. Saya memotong slot di bagian atas helm dengan besi bubut lalu memasang semuanya kembali. Kami mencobanya untuk kalinya kedua dan bekerja dengan baik!
4) Rangkaian & Pengecatan
Akhirnya, siap untuk dicat. Saya melepas semuanya dan melapisi primer putih pertama. Setelah primer selesai, saya menutupi sebagian bagian dagu dengan kait pemas dan saya mencat helm merah. Untuk plat wajah, saya mencat semuanya emas. Karena emas kering cepat, segera selesai tetapi cat merah kering sangat lambat jadi saya membiarkannya kering. Setelah semua bagian kering, saya melepas kait dari bagian dagu dan menutupi semua di dekat bagian yang masih putih. Kemudian, saya menggunakan aluminium foil dan melilitinya di sekitar sisa helm. Kemudian saya mencat bagian putih emas dan menunggu sampai kering. Kemudian saya merakit helm kembali lagi dan memasang semuanya. Kemudian saya melakukan tes akhir dan itu berhasil!
5) Arc Reactor:
Membuat arc reactor adalah berikutnya. Saya pertama-tama mengukur ukuran lingkaran neo-pixel dan merancang kotak untuk menampungnya. Kemudian, untuk tutup, saya menggunakan desain dari seseorang di thingiverse dan memodifikasinya untuk kebutuhan saya. Anda dapat menemukan model asli di sini: https://www.thingiverse.com/thing:33021 Desain baru hampir memiliki fitur yang sama meskipun beberapa bagian sedikit tidak proporsional. Saya mencetak kotak dan tutupnya dan mereka cukup pas. Masalahnya adalah, NeoPixel terlalu kecil untuk kotak. ternyata saya melakukan perhitungan salah jadi saya kembali dan mengubahnya. Kali ini pas. Selanjutnya, saya menambahkan dua lubang untuk kabel melalui dan sebuah batas di atas untuk tali masuk jadi saya dapat mengenakannya di sekitar leher saya. Akhirnya, saya menambahkan difuser yang dibuat dari filamen abs transparan yang pas di dalam kotak. Bagian cetak akhirnya selesai!
Elektronika:
Setelah cetak 3D selesai, kami tahu kami memiliki platform yang bagus untuk menyisipkan elektronika. Untuk proyek ini, kami ingin mengontrol 1 servo motor yang terpasang di plat wajah helm. Kami juga ingin mengontrol lingkaran NeoPixel di Arc Reactor. Kami menggunakan Arduino Uno sebagai fondasi sistem kontrol untuk proyek ini. Namun, ada banyak jenis papan lain yang dapat digunakan dan kami telah menjaga perangkat lunak dan perangkat keras generik untuk alasan ini. Sebagai kenyataannya, kami telah menggunakan baik Uno dan Arduino101 secara bergantian dalam proyek ini. Ini juga akan memungkinkan ekspansi di masa depan dan potensi membuat helm yang terhubung dengan BLE bawaan 101!
Iron Man perlu mengaktifkan servo motor helm dan lingkaran neo-pixel arc reactor. Kami menggunakan MPR121 ADAFRUIT 12-KEY CAPACITIVE TOUCH SENSOR BREAKOUT untuk menyediakan antarmuka berbasis sentuh. Breakout board ini memungkinkan 12 input berbeda dan berkomunikasi dengan Uno menggunakan I2C. 12 kontak memberi banyak ruang untuk ekspansi di masa depan dan I2C adalah bagian dari paket IDE standar untuk keluarga Arduino yang memberi kami kemampuan untuk menukar papan tanpa pemrograman ulang. Ini terdokumentasi dengan baik dan contoh perangkat lunak yang disediakan membuat mudah untuk memahami cara menggunakannya dalam skets kami.
Kami melepas kabel dengan ujung terpapar untuk bertindak sebagai saklar sentuh kapasitif kami. Sementara kami tidak melihat "switch bounce" tradisional seperti yang diamati dengan saklar mekanik, satu sentuhan akan menghasilkan banyak hit karena loop() dalam skets arduino meng-poll papan. Untuk menghindari servo "bergetar" sebagai respons terhadap hit ini, kami mengimplementasikan mekanisme penundaan perangkat lunak 1/4 detik saat membaca sentuhan. Setelah menguji Uno dan MPR121, kami menambahkan servo motor dan sumber daya.
Mengpertimbangkan penggunaan servo motor di bawah beban dan keinginan untuk "menjadikan proyek ini dapat diimplementasikan di lapangan" di 2016 NYC Maker Faire, salah satu pertimbangan terpenting dari proyek ini adalah sumber daya. Kami telah diberitahu bahwa desain sumber daya adalah salah satu area yang lebih penting, tetapi paling tidak glamor, dari teknik elektro. Keduanya bukan insinyur elektro, jadi solusi yang kami temukan adalah kombinasi dari apa yang kami baca akan bekerja, apa yang kami pahami, apa yang kami miliki dan apa yang berhasil bekerja. Jadi kami tidak mengklaim bahwa ini adalah solusi terbaik dan menantikan saran apa pun untuk perbaikan.
Karena beban yang diletakkan pada servo, potensi back emf dan rekomendasi dari https://www.arduino.cc/en/Reference/Servo, kami memilih untuk memberi daya pada servo secara terpisah dari Uno. Daya servo dan ground terhubung ke daya dan ground dari tampungan baterai 4xAA. Sangat penting ground dari Uno, servo dan tampungan baterai semuanya harus terhubung untuk melengkapi rangkaian. Kami melakukannya menghubungkan ground rail papan Perma-Proto, tampungan baterai 4xAA dan kabel dari pin ground Uno bersama-sama seperti yang dapat dilihat dalam skematik Fritzing di bawah.
Awalnya kami juga memiliki lingkaran NeoPixel juga diberi daya dari tampungan baterai 4xAA. Kami mengubah ini karena tampaknya ada beberapa "getaran" servo saat lingkaran NeoPixel dinyalakan dan dimatikan. Ini, namun, mungkin disebabkan oleh baterai rendah saat kami sedang menguji. Sayangnya kami menyadari ini malam sebelum Maker Faire dan kami sudah di Perma-Proto. Kami memutuskan untuk menyalurkan kabel Lingkaran NeoPixel langsung ke Uno dan mengganti baterai segar pada waktu yang sama. Ini memperbaiki masalah, tetapi tidak menjawab pertanyaan. Mungkin saat kami bekerja untuk memperbaiki proyek di masa depan kami akan mengejar ini.
Seluruh rangkaian dicoba di breadboard lalu dipindahkan ke papan Adafruit ¼ Perma-Proto. Dengan pelapis yang aman, ini adalah salah satu cara termudah untuk dengan cepat membuat paket yang dapat diimplementasikan untuk proyek Anda. Kami merancang dan mencetak pelapis kustom dalam filamen HIPS biru, terlihat di bawah. Keseluruhan unit dengan baterai dimasukkan ke dalam kotak kamera untuk Maker Faire!
Perangkat Lunak:
Saat ini ada 2 versi skets, IronMan02.ino dan IronMan04.ino. Keduanya akan bekerja dengan pengaturan perangkat keras seperti yang dijelaskan dalam artikel ini.
Pertama, IronMan02.ino adalah versi "selesaikan" yang mengikuti semangat, “Perfection is the enemy of completion.” Kami memiliki tenggat waktu yang harus dipenuhi dan versi ini, meskipun tidak elegan, menyelesaikan pekerjaan. Dalam versi ini Anda akan melihat bahwa kami membuat objek untuk mewakili Helm dan Arc Reactor. Ini dilakukan dalam antisipasi implementasi multitasking pada arduino di versi mendatang, jadi bukan pekerjaan terburu-buru sepenuhnya. Kami sangat merekomendasikan membaca serangkaian tiga artikel tentang multitasking arduino oleh Bill Earl dari Adafruit. Kode kami didasarkan, terutama IronMan04.ino, didasarkan pada contoh, ide dan rekomendasi dari serangkaian 3 tutorial ini. Artikel ini akan membawa Anda di luar dasar-dasar pemrograman arduino dan memungkinkan proyek Anda untuk benar-benar terbang!
Salah masalah yang kami hadapi adalah plat wajah terbuka dan tertutup terlalu cepat. Kami menyelesaikannya dengan menggunakan fungsi delay() untuk melambatkan dan melancarkan gerakan plat wajah. Ya, jika Dr. Reallyevilbadguy akan meledakkan Iron Man di wajah dengan sinar maut super-nya, Anda ingin helm tertutup cepat, tetapi untuk tujuan demonstrasi gerakan yang lebih lambat dan lebih halus terlihat jauh lebih baik.
// move helmet up, 1/4 second time block to avoid chatter/bounce on touch cap. switch void up() { if((millis() - lastSwitched) > 250 ) { lastSwitched = millis(); if (!helmetUp int currPos = 0; while( currPos < upAngle ) { helmetServo.write(currPos); currPos = currPos + 2; delay(20); // delay(20) blocks all processor activity for 20 milliseconds! } helmetUp = true; } else {/* do nothing, helmet already up*/} } }
Masalah dengan menggunakan fungsi delay() adalah mikrokontroler tidak dapat melakukan apa pun selama delay(). Kami menyelesaikan masalah ini menggunakan petunjuk dalam tutorial adafruit di atas di versi kedua, IronMan04.ino.
Versi kedua, IronMan04.ino, mencakup 2 elemen besar yang kami ingin implementasikan, tetapi kehabisan waktu mencoba untuk menyelesaikannya sebelum Maker Faire:
Satu tombol/sentuh kontrol plat wajah
Multitasking
Saat kami berbicara dengan orang tentang proyek awal kami, reaksi semua orang adalah, Anda harus hanya memiliki satu tombol/sensor sentuh untuk menggerakkan helm naik dan turun. Kami tidak bisa setuju lebih dan memutuskan untuk mengimplementasikan ini saat kami memiliki waktu. Solusi kami melibatkan penggunaan beberapa variabel status:
flip - untuk mempertahankan status plat wajah
flipping - untuk menunjukkan apakah plat wajah saat ini sedang berubah posisi
directionality - untuk menunjukkan menggerakkan plat wajah naik atau turun
Di setup(), kami selalu memulai helm dalam konfigurasi terbuka atau naik. Ini tidak mutlak penting. Terlepas dari status awal, mengaktifkan saklar plat wajah akan membawa Anda ke status yang benar pada tekanan kedua. Kami telah, namun, menulis kode untuk mempertimbangkan bahwa status awal plat wajah adalah naik, dan oleh karena itu tidak ada tekanan tombol yang sia-sia di awal. Apakah ini cara terbaik? Kami tidak yakin, tetapi karena beberapa dari pemikiran ilmiah terhebat menghabiskan banyak tahun bekerja pada teori kontrol, saya pikir kami cukup baik dengan proyek ini!
Karena kami mem-poll sentuhan dari MPR121 dalam loop, satu sentuhan yang dipandang pengguna akan menghasilkan banyak sinyal sentuh. Ini mirip dengan switch bounce tradisional dan kami menanganinya melalui perangkat lunak. Kami ingin respons cepat ke sensor sentuh dan kami ingin mengimplementasikan multitasking, jadi alih-alih memblokir sentuhan berganda dalam switch/case fungsi loop() , kami menempatkan blok waktu menggunakan fungsi millis() dalam objek Helmet dan ArcReactor, seperti yang terlihat dalam fragmen kode ini dari objek Helmet :
void flipFaceplate() { // timing block to protect against chatter/bounce if ((millis()-lastFlipped) > 500 ) { . . .
Sekali lagi, dengan tidak menggunakan fungsi delay() kami melestarikan multitasking dalam proyek kami. Mungkin lebih bijak untuk menggunakan variabel untuk interval penundaan 500 milidetik untuk memungkinkan perubahan dan pengujian, tetapi kami mendapatkannya tepat dengan tebakan kedua kami sebesar 500 dan kami sedikit asal di sini.
Untuk menggerakkan servo dengan halus melalui sudut rotasinya, kami perlu meningkatkan rotasi servo secara lambat. Dengan menempatkan blok waktu pada langkah sudut servo motor dengan memeriksa waktu saat ini dengan fungsi millis():
Sekali lagi kami mengimplementasikan ini tanpa fungsi delay() . Jika Anda membangun proyek ini, dan memperhatikan dengan seksama, Anda akan memperhatikan bahwa dengan IronMan04.ino yang berjalan di Uno, Anda dapat membalikkan plat wajah dan menyala/mematikan NeoPixel pada saat yang sama. Dengan IronMan02.ino, delay() membuatnya diblokir sampai servo selesai bergerak. Terima kasih Bill Earl!
Baris terakhir dari fungsi update ini memastikan kita tidak melebihi posisi atas atau bawah plat wajah, karena fungsi loop() memanggil Update() itu akan terus memeriksa ini setelah gerakan terakhir helm lalu menyetel variabel flipping ke false untuk menunjukkan bahwa plat wajah selesai bergerak naik atau turun. Pada siklus berikutnya, dengan flipping false, seluruh fungsi pada dasarnya dilewati.
Tidak ada banyak hal yang bisa kita lakukan dengan proyek ini tidak tahu tepat di mana memulai! Mata yang bersinar adalah salah satu. Mungkin menambahkan konektivitas BLE dengan arduino101? Antarmuka suara? Jarvis pasti memanggil untuk ini!