Daftar Isi:

[WIP] Membuat Drawbot yang Dikendalikan oleh Myo Armband: 11 Langkah
[WIP] Membuat Drawbot yang Dikendalikan oleh Myo Armband: 11 Langkah

Video: [WIP] Membuat Drawbot yang Dikendalikan oleh Myo Armband: 11 Langkah

Video: [WIP] Membuat Drawbot yang Dikendalikan oleh Myo Armband: 11 Langkah
Video: Custom Center Console 2024, November
Anonim
[WIP] Membuat Drawbot yang Dikendalikan oleh Myo Armband
[WIP] Membuat Drawbot yang Dikendalikan oleh Myo Armband

Halo semua!

Beberapa bulan yang lalu, kami memutuskan untuk mencoba dan menangani gagasan membangun drawbot kerangka terbuka yang hanya menggunakan pita Myo untuk mengendalikannya. Ketika kami pertama kali memulai proyek, kami tahu bahwa itu perlu dipecah menjadi beberapa fase yang berbeda. Fase utama pertama kami adalah mencoba dan membungkus kepala kami di sekitar desain bingkai terbuka untuk bot gambar kami. Ini adalah pengaturan yang tidak standar, dan kami ingin melihat apa manfaat dari desain ini.

Kedua, kami tahu bahwa membangun prototipe ini hanya akan berguna bagi diri kami sendiri. Desain dan rencana kami adalah memindahkan bingkai terakhir kami ke dalam logam, dan menggunakan arduino, menerima posisi kami dari akselerometer dan giroskop yang terpasang pada pita Myo. Informasi itu kemudian akan dikirim ke motor, dan akan meniru gerakan pengguna. Kami tahu bahwa ini akan membuat fase kedua kami pecah menjadi tiga aspek utama:

  1. pemrograman dari Myo ke motor, melalui Arduino
  2. desain listrik untuk menerjemahkan data kami menjadi gerakan
  3. desain mekanis untuk membuat bingkai berukuran cukup yang akan memfasilitasi gerakan kami

Setiap anggota tim kami merasa paling nyaman dengan bagian unik dari proses desain kami, jadi kami memutuskan untuk membagi pekerjaan kami di antara setiap orang. Kami juga membuat blog selama seluruh proses desain kami untuk melacak pemikiran kami dari hari ke hari, yang bertentangan dengan tampilan yang lebih global.

Langkah 1: Apa yang Kami Rencanakan

Image
Image

Tujuan kami adalah menggabungkan kedua produk ini dengan cara yang belum pernah kami lihat sebelumnya. Kami berangkat untuk membuat siaran langsung antara ban lengan Myo kami dan versi desain kami sendiri yang terinspirasi oleh AxiDraw dari Evil Mad Scientist.

Langkah 2: Daftar Bahan Prototipe

2 2 x 4 papan kayu 1 Sabuk atau rantai berukuran >= 65” 4 Paku kayu 3 Roda gigi dengan gigi yang sesuai dengan sabuk atau rantai 4 3 x 8 pelat berlubang vex 30” Karet spacer 8 1 ring diameter 1” kayu diameter 1” paku kayu panjang 1' 8 Sekrup Vex 1”8” Sekrup Vex 8 2” Sekrup Vex 8” Spacer karet 48 Kacang vex 1 Ikat ritsleting kecil

Langkah 3: [Prototipe] Woodworking Arms and Carriage Interior Kami

[Prototipe] Woodworking Arms and Carriage Interior Kami
[Prototipe] Woodworking Arms and Carriage Interior Kami

Kami mengambil dua 2x4 dan memotongnya menjadi panjang yang sama (33”)

Menggunakan gergaji meja, kami membuat takik di sepanjang sisi bagian sempit papan” dalam dan” lebar di tengah

Potong dowel menjadi 4 bagian 2” dan bor lubang di tengah dowel dengan diameter sekitar” menggunakan bor tekan

Langkah 4: [Prototipe] Membuat Kereta Kami

[Prototipe] Membuat Kereta Kami
[Prototipe] Membuat Kereta Kami
[Prototipe] Membuat Kereta Kami
[Prototipe] Membuat Kereta Kami
[Prototipe] Membuat Kereta Kami
[Prototipe] Membuat Kereta Kami

Idealnya kami akan menggunakan dua potong 7x7 baja berlubang vex tetapi yang kami miliki hanyalah strip 2x7 jadi kami menguncinya bersama-sama dalam konfigurasi "X"

Tumpuk 5 spacer karet” dan kencangkan sudut pelat vex satu sama lain

Kencangkan pasak kayu seperti yang ditunjukkan pada gambar 1 sehingga mereka berputar bebas dengan jarak sekitar 2 di antara mereka. Gunakan gambar untuk melihat di mana roda gigi harus diposisikan pada titik ini kami menggunakan mesin cuci tetapi kemudian menemukan bahwa roda gigi plastik kecil bekerja lebih baik.

Menggunakan “vex screws,” rubber spacer dan ring berdiameter 1” mengamankan ring pada posisi yang lebih tinggi seperti yang ditunjukkan pada gambar 1 (kami menggunakan roda gigi plastik hijau karena kami tidak dapat menemukan ring yang tepat) pastikan ring dapat digunakan berputar dengan mudah dan masuk ke dalam takik papan.

Langkah 5: [Prototipe] Menyatukan Semuanya

[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya
[Prototipe] Menyatukan Semuanya

Letakkan papan di atas permukaan dan geser kereta ke tengah sehingga ring menahan kereta di atas papan dan di kedua sisi papan, paku roda gigi ke bawah sehingga berputar bebas. Paku roda gigi ke salah satu ujung papan kedua untuk memastikannya berada di tengah dan geser ke kereta tegak lurus ke papan pertama.

Sekarang sabuk harus dilingkarkan melalui sistem seperti yang ditunjukkan, perhatikan dengan cermat bagaimana pasak berada di bagian luar sabuk dan bagaimana tidak ada apa pun di tengah sasis yang dapat menghalangi sabuk saat sedang bergerak.

Sekarang sabuk perlu diikat di sisi papan yang tidak memiliki roda gigi. Kami menggunakan paku ekstra dan dasi ritsleting untuk mengikat milik kami. Tetapi metode yang digunakan tidak masalah selama sabuk itu berlabuh di tempat itu

Langkah 6: [Prototipe] Selesai dan Bergerak

Image
Image

Seharusnya begitu, tarik sabuk dalam kombinasi yang berbeda dan lihat efek berbeda yang dimilikinya pada lengan!

Langkah 7: Menerjemahkan Model Kami Ke Dalam Desain Selesai Kami

Menerjemahkan Model Kami Ke Dalam Desain Selesai Kami
Menerjemahkan Model Kami Ke Dalam Desain Selesai Kami
Menerjemahkan Model Kami Ke Dalam Desain Selesai Kami
Menerjemahkan Model Kami Ke Dalam Desain Selesai Kami

Setelah kami menyelesaikan prototipe kami, kami sangat gembira. Tak satu pun dari kami yakin bagaimana sistem bekerja sebelum perakitan. Namun, begitu bagian kami menyatu, kami dengan cepat menemukan apa yang kami sukai dan bagaimana kami akan meningkatkannya saat membuat desain akhir. Keluhan utama kami dengan sistem yang harus diselesaikan adalah:

  1. Skala
    1. Prototipe kami sangat besar dan berat, yang membuatnya rentan terbalik di ujung lengan kami
    2. Kereta itu jauh lebih besar dari yang diperlukan, dan memiliki banyak ruang yang terbuang
    3. Sabuk kami (tapak tangki vex) jauh lebih besar dari yang diperlukan, yang memberikan ruang berlebih di antara lengan
  2. Gesekan

    1. Tapak vex kami tidak melewati rol dowel kayu dengan mudah di semua titik
    2. Plastik di atas kayu membuat kereta tidak mau bergerak dalam banyak kasus
  3. Motorisasi

    Kami perlu membuat sistem mampu daya

Dengan mengingat hal-hal ini, kami menggambar rencana kami untuk desain akhir. Kami ingin drawbot dikontrol dengan Myo melalui arduino, dan kami ingin membuat bingkai aluminium dan lebih kecil.

Untuk melakukan ini, kami mengambil persentase dari prototipe asli kami, dan mulai bekerja dari ukuran itu. Dengan menggunakan lembaran logam yang akan dikerjakan agar memiliki saluran yang cukup lebar untuk dilewati bantalan berpelindung, kami akan memiliki desain yang ringan namun kuat yang akan memiliki toleransi penggunaan yang lebih tinggi.

Prototipe kami juga memungkinkan kami, hanya dalam beberapa menit, untuk menentukan bagaimana putaran motor memengaruhi kepala drawbot kami. Ini membawa kita untuk memahami bahwa desain kontrol kita akan lebih sederhana daripada yang kita perkirakan. Setelah diperiksa lebih dekat, kami menemukan bahwa gerakan motor bersifat aditif! Ini berarti bahwa setiap motor memiliki efek independen yang diinginkan pada gerakan kita, tetapi ketika kita menggabungkannya bersama-sama, mereka mulai meniadakan.

Misalnya, jika dianggap seperti bidang koordinat, motor yang terletak di ekstremitas x negatif akan selalu cenderung menarik laci kita ke kuadran kedua dan keempat. Sebaliknya, motor yang diletakkan pada ekstremitas x positif akan selalu mendorong laci ke kuadran pertama dan ketiga. Jika kita menggabungkan gerak motor kita, itu akan membatalkan bagian-bagian yang mengarahkan konflik itu, dan akan memperkuat bagian-bagian yang setuju.

Langkah 8: Pengkodean

Sementara saya bekerja cukup ekstensif di C beberapa tahun yang lalu, saya tidak memiliki pengalaman dengan lua atau C++, dan ini berarti saya perlu menghabiskan banyak waktu untuk melihat-lihat dokumentasi. Saya tahu bahwa tugas umum yang akan saya coba selesaikan adalah mendapatkan posisi pengguna dalam interval waktu dan kemudian meneruskannya ke motor. Saya memutuskan untuk memecah tugas untuk diri saya sendiri untuk mencerna bagian-bagian yang saya perlukan dengan lebih baik.

1. Dapatkan Data dari Myo (lua)

Saya tahu bahwa saya perlu mencari cara untuk mengumpulkan informasi dari Myo. Ini adalah bagian pertama dari tantangan yang ingin saya dekati. Untuk melakukan ini, saya ingin pengguna mengkalibrasi ukuran kanvas mereka sebelum mulai menggambar. Ini akan memungkinkan saya untuk memiliki batas untuk bekerja. Saya kemudian dapat menormalkan program antara pengguna yang berbeda hanya dengan mengambil persentase dari kanvas maksimum sebagai titik data saya untuk lulus. Saya memutuskan untuk memiliki acara skrip yang akan melakukan pemeriksaan getOrientation setiap setengah detik, karena itu akan memungkinkan pemeriksaan untuk tidak pernah melakukan lompatan liar yang perlu Anda tebak (misalnya, jika pengguna berayun dengan liar ke belakang dan sebagainya).

Hal ini membuat penghalang jalan pertama saya memukul. Saya menemukan batasan lua yang sangat besar, dan itu tidak memungkinkan saya untuk menunggu sebelum melanjutkan skrip. Satu-satunya cara untuk melakukan tindakan ini adalah dengan menjeda CPU (yang akan menjedanya secara global, bahkan menahan jam sistem), atau menggunakan perintah khusus OS. Dalam kode contoh saya, saya meninggalkan pemeriksaan OS asli yang saya lakukan (berkomentar). Ini setelah melakukan sejumlah besar penelitian dalam dokumentasi lua, dan dilakukan dengan memeriksa pemformatan jalur sistem. Saat itulah saya memutuskan saya perlu melihat dokumentasi untuk proyek-proyek yang telah diterbitkan sebelumnya. Saya segera menyadari berapa banyak waktu yang saya buang, dan segera mengarah ke variabel platform. Dengan itu, saya dapat segera mengimplementasikan perintah tunggu khusus OS, berbeda dengan hari-hari yang saya perlukan untuk menyelesaikan solusi saya sebelumnya.

Sekitar waktu inilah desain yang bekerja pada aspek kelistrikan dimulai, dan saya menangguhkan pekerjaan pada aspek kode ini. Tujuannya adalah untuk mempelajari bagaimana motor kita terhubung dengan arduino.

2. Bekerja di Sekitar Arduino (C++)

Ketika bekerja dengan papan tempat memotong roti kami menjadi semakin kompleks, saya mengetahui bahwa arduino tidak mampu multithreading. Ini adalah kunci pas besar dalam desain kode asli saya, dan setelah membaca lebih lanjut tentang batasan yang disajikan dengan pengontrol kami, saya menemukan bahwa saya perlu memprogram bagaimana arduino akan beralih di antara keduanya. Ini menjadi fokus upaya saya ketika tenggat waktu kami semakin dekat. Saya harus menghapus sebagian besar skrip asli saya karena mereka dirancang untuk menulis data ke file secara sinkron dengan pengontrol motor yang membaca file. Ini untuk memungkinkan fungsi antrian untuk memastikan bahwa meskipun pengguna berada di depan laci kami, itu tidak akan merusak proyek.

Saya memutuskan bahwa fungsi antrian harus disimpan, jika tidak diimplementasikan dengan cara yang sama seperti sebelumnya. Untuk melakukan ini, saya membuat vektor array. Ini memungkinkan saya untuk tidak hanya menjaga semangat desain saya sebelumnya relatif utuh, itu juga berarti saya tidak perlu melacak tempat saya di file baik untuk membaca atau menulis. Sebagai gantinya, sekarang yang perlu saya lakukan hanyalah menambahkan nilai baru ke dalam vektor saya jika pengguna sedang bergerak (pengujian awal kurang dari 1% perbedaan ukuran kanvas di x dan y dari posisi terakhir yang direkam menghasilkan tidak ada perekaman data). Saya kemudian dapat mengambil nilai tertua dalam vektor saya dan dalam satu gerakan, mengirimkannya ke kontrol motor, menulisnya ke file kami, dan kemudian menghapusnya dari vektor saya. Ini membersihkan banyak kekhawatiran saya tentang menjalankan aliran IO yang konstan.

Langkah 9: Listrik

Image
Image
Listrik
Listrik

Sementara saya telah mengambil kelas elektronik di masa lalu, dan bekerja cukup banyak dengan arduino. Saya tidak pernah terjun jauh ke dalam membuat arduino menerima informasi dari sumber luar (myo), saya hanya memiliki pengalaman mengeluarkan informasi melalui arduino. Namun, saya menggunakan kabel motor pada drawbot kami, dan mengerjakan kode agar mereka dapat bekerja dengan kode myo.

Bahan yang saya gunakan:

2 x motor stepper

1 x papan tempat memotong roti

1 x Arduino (Uno)

2 x Driver IC L293DE

40 x Kabel jumper

2 x Penggemar

1. Menghubungkan Motor Stepper dan Kipas ke Breadboard

Mengikuti diagram sirkuit, kita dapat menghubungkan satu motor stepper ke driver di papan tempat memotong roti. Kemudian, mengikuti diagram yang sama berlaku untuk driver dan motor kedua, namun kabel jumper harus dicolokkan ke set pin yang berbeda di arduino (karena motor pertama menempati ruang 4 lainnya).

Peringatan/Kiat:

Drivernya sangat kecil dan pinnya sangat berdekatan. Akan lebih bijaksana untuk memisahkan kedua driver sehingga kabel tidak membingungkan.

Selanjutnya adalah memasang kipas. Ini cukup sederhana, kipas yang saya miliki adalah kipas prosesor komputer dasar, yang memiliki ground positif dan ground. Tancapkan keduanya ke masing-masing pin +/- di papan tempat memotong roti, dan miringkan masing-masing ke arah masing-masing driver. (Kami menemukan bahwa karena motor stepper menerima semburan informasi dan perintah dalam jangka waktu yang lama, driver cenderung terlalu panas dan bau. Menambahkan kipas untuk mendinginkannya memperbaiki masalah ini).

2. Kode Arduino

Ini adalah bagian yang mudah!

Buka Arduino IDE pergi ke tab "File" lalu turun ke tab "contoh" yang akan turun lebih jauh dan menunjukkan kepada Anda tab "stepper" Kemudian Anda ingin membuka "Stepper_OneStepAtATime"

Ini akan memuat kode contoh yang hampir plug-and-play ke kabel arduino/motor. Kami harus melakukan sedikit penyesuaian karena kami akan menjalankan dua motor, yang akan saya tunjukkan di bawah. Anda mungkin juga harus melakukan sedikit penyesuaian tergantung pada pin mana yang telah Anda putuskan untuk digunakan, karena Arduino IDE default ke pin 8-11.

Kode yang saya gunakan untuk membuat kedua motor bergerak "sinkron" di bawah ini:

//#termasuk

const int langkahPerRevolusi = 200;

Stepper myStepper1(stepsPerRevolution, 9, 10, 11, 12);

Stepper myStepper2(stepsPerRevolution, 4, 5, 6, 7);

int jumlah langkah = 0;

void setup() { // menginisialisasi port serial: Serial.begin(9600); }

lingkaran kosong() {

langkahku1.langkah(1);

Serial.print("langkah-langkahnya:");

Serial.println(Jumlah langkah);

jumlah langkah++;

penundaan(0.5);

langkahku2.langkah(1); penundaan(0.5); }

3. Kemungkinan Masalah

Masalah yang saya alami selama proses ini adalah tidak menggunakan contoh kode yang benar, menggunakan kabel jumper yang buruk, menggunakan IC driver yang salah.

Pastikan driver yang Anda gunakan mampu mengendalikan motor

Periksa nomor seri dan periksa spesifikasinya

Saya mengalami masalah kabel jumper mati, yang menyebabkan motor saya berputar aneh

Saya harus menggunakan multimeter untuk memeriksa setiap kabel

Dan selalu periksa ulang kode Anda untuk kesalahan kecil seperti kehilangan akhir “;” memerintah

Langkah 10: Mekanik

Mekanis
Mekanis
Mekanis
Mekanis
Mekanis
Mekanis
Mekanis
Mekanis

1. Bahan

Untuk model produksi penuh lengan, disarankan agar terbuat dari bahan yang kuat namun ringan, kami merasa bahwa aluminium sangat cocok.

Kami menggunakan lembaran aluminium pengukur 032 yang dipotong menjadi 9,125" x 17,5" dan menelusuri pola dari gambar yang ditunjukkan pada langkah sebelumnya.

2. Fabrikasi

Dengan menggunakan hemmer (mesin biru) kami menambahkan keliman yang menghadap ke arah yang berlawanan sehingga ketika potongan dipecah dan dilipat, kedua keliman akan saling mengunci membentuk satu bagian utuh.

Untuk tikungan besar kami menggunakan ahli tenis, karena presisinya tinggi.

Sekarang untuk tikungan yang lebih kecil, Anda akan ingin menggunakan mesin dengan kaki yang lebih kecil, di sinilah mesin seperti roto-die masuk. Karena kakinya yang lebih kecil, ini memungkinkan untuk membuat jeda yang lebih kecil, sayangnya, roto-die yang kami miliki masih terlalu besar untuk rel kami dan telah berubah bentuk.

**Atau, jika Anda tidak memiliki akses ke peralatan atau alat yang tepat, maka pengganti dapat dibuat.**

Dalam kasus kami, kami memotong lengan kami dari rel panel surya aluminium menggunakan pemotong plasma dan menggiling ujungnya dengan halus kemudian menguncinya kembali ke belakang untuk membuat sistem rel dua sisi. Idealnya, kami ingin mengelas rel bersama-sama, namun, tanpa akses ke stasiun las, kami malah menjepit rel dan mengebor lalu menguncinya bersama-sama. Tetapi jika rute ini diambil, maka perawatan khusus harus dilakukan untuk menggunakan mur pengunci dan washer untuk memastikan bahwa potongan memiliki kelenturan sesedikit mungkin.

3. Sabuk

Untuk sabuk kami menggunakan beberapa sabuk printer 3D lama yang dapat kami selamatkan.

Sabuk awalnya tidak cukup panjang sehingga menggunakan beberapa tabung panas menyusut kami menggabungkan dua bagian untuk membuat satu yang cukup panjang.

Roda gigi hijau dan pasak kayu diganti dengan bantalan cakram dengan ring ekstra lebar yang digunakan untuk menjaga sabuk agar tidak tergelincir dari tempatnya.

4. Kereta

Dan akhirnya kereta itu dibuat dari lembaran aluminium 032 5" x 5", dengan lubang bor ditekan di mana sekrup dan ring yang sesuai dimaksudkan untuk pergi. Jaraknya akan bervariasi tergantung pada seberapa lebar rel Anda dan seberapa banyak jarak bebas yang Anda miliki pada mesin cuci Anda.

Langkah 11: Refleksi

Sayangnya, setiap sisi proyek kami mengalami hambatan waktu yang besar, dan kami tidak dapat menyelesaikan desain kami pada tanggal target kami. Setiap anggota tim kami akhirnya berkolaborasi dalam setiap aspek lain dari desain kami setidaknya sampai batas tertentu, yang mengarah pada penurunan waktu kurva pembelajaran. Ini, ditambah dengan keinginan untuk merancang produk dengan sumber daya luar sesedikit mungkin (karena kita semua ingin membuat bagian masing-masing dari awal), menghasilkan banyak roda yang diciptakan kembali.

Setiap orang yang mengerjakan proyek belajar lebih banyak tentang aspek-aspek lain dari proyek tersebut. Membuat perangkat lunak melakukan tindakan tertentu adalah satu hal, kemudian membuat perangkat lunak bekerja sama dengan perangkat keras adalah hal lain. Saya akan mengatakan bahwa penting bahwa siapa pun yang mengerjakan aspek pengkodean proyek ini, harus akrab dengan pembuat kode proyek kami.

Secara keseluruhan, kami tidak dapat mencapai apa yang kami inginkan. Namun, saya merasa bahwa kami berada di jalur yang benar dan kami semua menemukan dan mempelajari konsep-konsep baru yang dapat kami terapkan pada proyek-proyek masa depan.

Direkomendasikan: