Daftar Isi:

Slider Kamera Pelacakan Objek Dengan Sumbu Rotasi. 3D Dicetak & Dibangun di RoboClaw DC Motor Controller & Arduino: 5 Langkah (dengan Gambar)
Slider Kamera Pelacakan Objek Dengan Sumbu Rotasi. 3D Dicetak & Dibangun di RoboClaw DC Motor Controller & Arduino: 5 Langkah (dengan Gambar)

Video: Slider Kamera Pelacakan Objek Dengan Sumbu Rotasi. 3D Dicetak & Dibangun di RoboClaw DC Motor Controller & Arduino: 5 Langkah (dengan Gambar)

Video: Slider Kamera Pelacakan Objek Dengan Sumbu Rotasi. 3D Dicetak & Dibangun di RoboClaw DC Motor Controller & Arduino: 5 Langkah (dengan Gambar)
Video: Eleksmaker Eleksmill Cnc Mill — сборка фрезерного и лазерного станка, обучение и тестирование 2024, Juni
Anonim
Image
Image
Desain Perangkat Keras + Bangun + Pencetakan 3D
Desain Perangkat Keras + Bangun + Pencetakan 3D

Proyek Fusion 360 »

Proyek ini menjadi salah satu proyek favorit saya sejak saya menggabungkan minat saya membuat video dengan DIY. Saya selalu melihat dan ingin meniru bidikan sinematik dalam film di mana kamera bergerak melintasi layar sambil menggeser untuk melacak objek. Ini menambahkan efek kedalaman yang sangat menarik ke video 2d. Ingin meniru ini tanpa menghabiskan ribuan dolar untuk peralatan Hollywood, saya memutuskan untuk membuat slider kamera sendiri.

Seluruh proyek dibangun di atas bagian-bagian yang dapat Anda cetak 3D, dan kodenya berjalan di papan Arduino yang populer. Semua file proyek seperti file & kode CAD tersedia untuk diunduh di bawah.

File cetak CAD / 3D tersedia di sini

File Kode Arduino tersedia di sini

Proyek ini berkisar pada 2 motor DC yang disikat dan pengontrol Motor Roboclaw Mikro Dasar. Pengontrol motor ini dapat mengubah motor DC yang disikat menjadi jenis servo yang unggul dengan akurasi posisi yang luar biasa, torsi yang berton-ton, dan putaran 360 derajat penuh. Lebih lanjut tentang ini nanti.

Sebelum kita melanjutkan, tonton dulu video tutorial yang ditautkan di sini. Tutorial itu akan memberi Anda gambaran umum tentang bagaimana membangun proyek ini dan panduan Instructables ini akan lebih mendalam tentang bagaimana saya membangun proyek ini.

Bahan-

  • Batang ulir m10 panjang 2x 1 meter digunakan untuk menghubungkan semua bagian
  • 8x mur M10 untuk memasang bagian-bagian ke batang berulir
  • 2x 95 cm panjang 8mm batang baja halus untuk slider untuk meluncur
  • 4x bantalan lm8uu agar penggeser dapat meluncur dengan mulus pada batang baja
  • 4x 10mm mur m3 panjang untuk memasang motor
  • 2 x bantalan skateboard (diameter luar 22mm, diameter dalam 8mm) untuk sumbu rotasi
  • 1x15mm bantalan untuk sisi pemalas
  • Baut m4 panjang 1x 4cm dengan mur pengunci m4 untuk memasang bantalan pemalas ke bagian cetakan 3d pemalas.
  • 20 gigi gigi dengan diameter dalam 4mm untuk motor slider. Katrol yang tepat tidak terlalu penting karena motor DC Anda harus diarahkan untuk torsi yang cukup. Pastikan nadanya sama dengan ikat pinggang Anda
  • Sabuk GT2 panjang 2 meter. Sekali lagi Anda dapat menggunakan sabuk apa pun asalkan sesuai dengan nada gigi katrol Anda.

Elektronik

  • 2 * Motor DC yang diarahkan dengan encoder (satu mengontrol gerakan lateral, sedangkan yang lain mengontrol sumbu rotasi). Berikut adalah salah satu yang saya gunakan. Lebih lanjut tentang ini di bagian Elektronik dari panduan ini
  • Pengontrol motor DC RoboClaw. (Saya menggunakan pengontrol 15Amp ganda karena memungkinkan saya untuk mengontrol kedua motor dengan satu pengontrol)
  • Arduino apa saja. Saya menggunakan Arduino UNO
  • Baterai / Sumber daya. (Saya menggunakan baterai LiPo 7.4V 2 sel)
  • Layar (Untuk menampilkan menu. Semua layar yang kompatibel dengan U8G akan berfungsi, saya menggunakan layar OLED 1,3 inci ini)
  • Rotatry encoder (Untuk menavigasi dan mengonfigurasi opsi di menu)
  • Tombol tekan fisik (Untuk memicu gerakan penggeser)

Langkah 1: Desain Perangkat Keras + Bangun + Pencetakan 3D

Elektronik
Elektronik

Selanjutnya mari kita beralih ke elektronik. Elektronik adalah tempat proyek ini memiliki banyak fleksibilitas.

Mari kita mulai dengan inti dari proyek ini - 2 motor DC yang disikat.

Saya memilih motor DC yang disikat karena beberapa alasan.

  1. Motor yang disikat jauh lebih mudah dipasang dan dioperasikan dibandingkan dengan motor stepper
  2. Motor DC brushed jauh lebih ringan daripada motor DC yang sangat penting untuk motor sumbu rotasi karena motor tersebut secara fisik bergerak secara lateral dengan kamera dan membuatnya seringan mungkin penting untuk mencegah ketegangan berlebihan pada motor slider kamera utama.

Saya memilih motor DC khusus ini. Motor ini memberi saya jumlah torsi yang sangat tinggi yang diperlukan untuk memindahkan beban kamera yang begitu berat. Selanjutnya, gearing tinggi berarti bahwa RPM puncak lambat yang berarti saya dapat merekam gerakan lebih lambat, dan gearing tinggi juga menghasilkan akurasi posisi yang lebih tinggi karena satu putaran 360 derajat dari poros output berarti 341,2 hitungan encoder motor.

Ini membawa kita ke pengontrol gerak RoboClaw. Pengontrol motor DC ganda motor Roboclaw mengambil instruksi sederhana dari Arduino Anda melalui perintah kode sederhana dan melakukan semua pemrosesan berat dan pengiriman daya untuk membuat motor Anda berfungsi sebagaimana dimaksud. Arduino dapat mengirimkan sinyal ke Roboclaw melalui PWM, tegangan Analog, serial sederhana, atau serial paket. Serial paket adalah cara terbaik karena memungkinkan Anda untuk mendapatkan kembali informasi dari Roboclaw yang diperlukan untuk pelacakan posisi. Saya akan menyelam lebih dalam ke bagian perangkat lunak/pemrograman dari Roboclaw di langkah berikutnya (pemrograman).

Intinya, Roboclaw dapat mengubah motor DC brushed dengan encoder menjadi lebih seperti servo berkat kemampuan Roboclaw untuk melakukan kontrol posisi. Namun tidak seperti servo tradisional, sekarang motor DC brush Anda memiliki torsi yang jauh lebih besar, akurasi posisi yang jauh lebih tinggi karena gearing motor yang tinggi, dan yang terpenting, motor DC Anda dapat berputar 360 derajat secara terus menerus yang tidak dapat dilakukan oleh servo tradisional.

Bagian elektronik selanjutnya adalah layar. Untuk layar saya, saya memilih panel OLED ini karena ukurannya, dan kontrasnya yang tinggi. Kontras tinggi ini luar biasa dan membuat layar sangat mudah digunakan di bawah sinar matahari langsung tanpa mengeluarkan terlalu banyak cahaya yang dapat mengganggu potensi bidikan kamera gelap. Layar ini dapat dengan mudah ditukar dengan layar lain yang kompatibel dengan U8G. Daftar lengkap layar yang kompatibel tersedia di sini. Sebenarnya proyek ini sengaja dikodekan di sekitar perpustakaan U8G sehingga pembuat DIY seperti Anda memiliki lebih banyak fleksibilitas di bagian mereka

Bagian elektronik terakhir untuk proyek ini adalah rotary encoder, dan tombol tekan untuk memulai gerakan slider. Encoder memungkinkan Anda untuk menavigasi menu layar dan mengkonfigurasi semua menu slider hanya dengan satu tombol. Rotary encoder tidak memiliki posisi 'akhir' seperti potensiometer tradisional, dan ini sangat berguna untuk menyesuaikan koordinat x dan y dari pelacakan objek di layar. Tombol push digunakan secara eksklusif untuk memulai gerakan slider tanpa harus mengutak-atik rotary encoder.

Langkah 3: Memprogram Slider Kamera

Memprogram Slider Kamera
Memprogram Slider Kamera
Memprogram Slider Kamera
Memprogram Slider Kamera

Coding sejauh ini merupakan tantangan terberat dari proyek ini. Anda lihat, sejak awal saya ingin slider dapat dikontrol dari layar. Untuk membuat proyek ini kompatibel dengan layar sebanyak mungkin, saya harus menggunakan Perpustakaan U8Glib untuk Arduino. Pustaka ini memiliki dukungan untuk lebih dari 32 layar. Namun, perpustakaan U8Glib menggunakan loop gambar untuk menggambar menu di layar dan ini bertentangan dengan kemampuan Arduino untuk secara bersamaan mengumpulkan informasi tentang posisi kamera yang diperlukan untuk fungsi perhitungan sudut kamera (Hal ini dibahas dalam beberapa paragraf berikutnya).). U8Glib2 memiliki alternatif untuk loop gambar dengan menggunakan sesuatu yang disebut opsi buffer halaman penuh tetapi perpustakaan menghabiskan terlalu banyak memori dan membuatnya sulit untuk menyesuaikan sisa kode mengingat kendala memori Arduino Uno. Ini berarti saya terjebak dengan U8G dan harus mengatasi masalah ini dengan mencegah layar memperbarui kapan pun penggeser bergerak dan Arduino perlu mengumpulkan data posisi dari Roboclaw. Saya juga terpaksa memicu penggeser untuk mulai bergerak di luar lingkaran menu karena begitu saya masuk ke sub-menu, saya akan berada di dalam lingkaran gambar, dan penggeser tidak akan berfungsi sebagaimana mestinya. Saya juga menghindari masalah ini dengan memiliki tombol fisik terpisah yang memicu gerakan slider.

Selanjutnya mari kita bicara tentang elemen pelacakan rotasi. Bagian ini tampaknya sangat kompleks untuk diintegrasikan, tetapi sebenarnya agak sederhana. Implementasi untuk ini ada di bawah fungsi 'motor()' di dalam kode Arduino saya. Langkah pertama adalah membuat grid 2 dimensi dan memutuskan di mana objek yang ingin Anda lacak ditempatkan. Berdasarkan itu Anda dapat menggambar segitiga ke lokasi Anda saat ini. Anda bisa mendapatkan lokasi Anda saat ini dari nilai encoder motor. Jika Anda ingin mengonfigurasi posisi objek yang dilacak dalam cm/mm, Anda perlu menerjemahkan nilai encoder Anda ke nilai cm/mm. Ini cukup dilakukan dengan menggerakkan slider kamera 1 cm dan mengukur peningkatan nilai encoder. Anda dapat memasukkan nilai ini di bagian atas kode di bawah variabel encoder_mm.

Selanjutnya, sekarang kita akan menggunakan fungsi inverse tangent untuk mendapatkan sudut yang harus dihadapi kamera untuk menunjuk objek Anda. Garis singgung terbalik mengambil sisi yang berlawanan dan bersebelahan dari segitiga. Sisi berlawanan dari segitiga tidak pernah berubah karena jarak y dari penggeser Anda ke objek. Namun, sisi penggeser kamera yang berdekatan memang berubah. Sisi yang berdekatan ini dapat dihitung dengan mengambil posisi x objek dan mengurangi posisi Anda saat ini darinya. Saat slider bergerak melalui rentang geraknya, itu akan terus memperbarui Arduino pada nilai encoder. Arduino akan berulang kali mengubah nilai encoder ini menjadi nilai posisi cm/mm x dan kemudian menghitung panjang sisi yang berdekatan, dan akhirnya menghitung sudut yang harus dihadapi kamera setiap saat untuk menunjuk ke objek.

Sekarang Arduino kami memproses sudut kamera secara dinamis, kami dapat menangani konversi sudut ini ke nilai posisi untuk motor rotasi untuk dipindahkan. Ini membawa kita ke fitur terbesar RoboClaw untuk proyek ini. Dengan memberikan Roboclaw nilai posisi, pada dasarnya dapat membuat motor DC brushed berperilaku seperti servo. Kecuali tidak seperti servo, motor kami memiliki torsi yang lebih banyak, akurasi yang jauh lebih tinggi, dan juga dapat berputar 360 Derajat.

Kode Arduino untuk memindahkan Roboclaw ke posisi tertentu adalah sebagai berikut:

roboclaw. SpeedAccelDeccelPositionM1(alamat, 'kecepatan', 'percepatan', 'perlambatan', 'posisi yang ingin Anda tuju', 1);

Untuk menyetel nilai posisi motor agar sesuai dengan sudut kamera Anda, Anda perlu menggerakkan pelat kamera 180 derajat secara manual. Selanjutnya lihat seberapa besar perubahan nilai encoder dari menggerakkan pelat kamera dari 0 derajat menjadi 180 derajat. Ini memberi Anda rentang pembuat enkode. Anda dapat memasukkan rentang ini dalam fungsi motor yang memetakan sudut kamera Arduino ke nilai posisi. Ini juga dikomentari dalam kode sehingga mudah ditemukan *****

RoboClaw juga memberi saya kemampuan untuk menyetel faktor lain seperti akselerasi, deselerasi, dan nilai PID. Hal ini semakin memungkinkan saya untuk menghaluskan gerakan sumbu rotasi terutama ketika perubahan sudutnya kecil dan menambahkan sentakan tanpa nilai PID 'D' yang tinggi. Anda juga dapat menyetel nilai PID Anda secara otomatis melalui aplikasi desktop Roboclaw.

Langkah 4: Mengoperasikan Penggeser Kamera

Mengoperasikan Penggeser Kamera
Mengoperasikan Penggeser Kamera

Sekarang kita sampai pada bagian yang menyenangkan, mengoperasikan penggeser Menu memiliki 4 tab utama. Tab atas didedikasikan untuk kontrol kecepatan. Baris tengah menu berisi tab untuk mengonfigurasi posisi X & Y objek yang dilacak dalam mm, dan juga mengonfigurasi jika kita ingin slider berputar dan melacak objek kita atau hanya melakukan gerakan geser sederhana tanpa rotasi. Memutar encoder putar memungkinkan kita menavigasi berbagai opsi menu. Untuk mengonfigurasi salah satu opsi, navigasikan ke opsi dan tekan rotary encoder. Setelah ditekan, memutar rotary encoder akan mengubah nilai submenu yang disorot daripada menghapus menu. Setelah Anda mencapai nilai yang diinginkan, Anda dapat mengklik lagi rotary encoder. Sekarang Anda kembali ke menu utama dan dapat menavigasi di antara tab yang berbeda. Setelah Anda siap, cukup tekan tombol go di sebelah layar dan penggeser akan melakukan tugasnya!

Pastikan bahwa setelah Anda selesai menggunakan penggeser kamera, kamera berada di posisi 'rumah': sisi penggeser tempat dimulainya. Alasan untuk ini adalah bahwa encoder motor bukan encoder absolut yang berarti bahwa Roboclaw/Arduino tidak dapat mengetahui di mana encoder berada. Mereka hanya dapat mengetahui seberapa banyak encoder telah berubah sejak terakhir kali dinyalakan. Artinya, saat Anda mematikan penggeser kamera, penggeser akan 'melupakan' posisi penggeser dan menyetel ulang encoder ke 0. Oleh karena itu, jika Anda mematikan penggeser di sisi lain, saat Anda menyalakannya, penggeser akan mencoba untuk bergerak lebih jauh dari tepi dan menabrak dinding slider. Perilaku encoder ini juga menjadi alasan kamera menyetel ulang sudut rotasinya setelah setiap gerakan slide kamera. Sumbu rotasi juga melindungi dirinya dari menabrak ujung jangkauan geraknya.

Anda dapat memperbaikinya dengan menambahkan end-stops dan prosedur homing saat Anda boot. Inilah yang digunakan printer 3d.

Langkah 5: Pemikiran Akhir + Perbaikan di Masa Depan

Saya sangat menyarankan agar setiap pembuat membuat versi mereka sendiri dari penggeser ini daripada membuat penggeser yang sama persis. Tweak desain saya akan memungkinkan Anda untuk membangun slider Anda dengan spesifikasi yang tepat Anda sementara juga lebih memahami cara kerja elektronik & kode.

Saya membuat kode yang dapat dibaca dan dikonfigurasi mungkin sehingga Anda dapat men-tweak/mengkalibrasi variabel kode yang berbeda untuk spesifikasi slider Anda. Kode ini juga sepenuhnya dibangun di sekitar fungsi jadi jika Anda ingin menyalin/mengubah/menulis ulang perilaku tertentu dari penggeser, Anda tidak perlu merekayasa balik dan mengerjakan ulang seluruh kode melainkan hanya bagian yang ingin Anda edit.

Akhirnya, jika saya membuat versi 2.0, berikut adalah beberapa perbaikan yang akan saya lakukan

  1. Rasio gigi yang lebih tinggi untuk motor sumbu rotasi. Rasio roda gigi yang lebih tinggi berarti saya dapat melakukan gerakan kecil yang lebih presisi. Ini sangat penting ketika kamera jauh dari objek Anda dan sudut kamera Anda berubah sangat lambat. Saat ini, motor saya tidak digiring terlalu tinggi dan dapat mengakibatkan gerakan sedikit tersentak saat penggeser kamera berjalan terlalu lambat atau saat ada sedikit perubahan sudut rotasi. Menambahkan nilai PID 'D' yang tinggi telah membantu saya menghilangkan ini, tetapi harus mengorbankan akurasi pelacakan objek yang sedikit lebih rendah.
  2. Panjang modular. Ini adalah tujuan yang dibuat-buat, tetapi saya ingin penggeser kamera memiliki panjang modular yang berarti Anda dapat dengan mudah memasang trek yang lebih panjang untuk digeser oleh kamera. Ini cukup sulit karena seseorang harus menyelaraskan kedua trek dengan sempurna dan mencari cara agar sistem sabuk bekerja. Namun demikian, itu akan menjadi peningkatan yang keren!
  3. Keyframing gerakan kustom. Saya ingin memperkenalkan konsep gerakan keyframed ke dalam penggeser kamera ini. Keyframing adalah teknik yang sangat umum digunakan dalam produksi video & audio. Ini akan memungkinkan gerakan kamera non-linier di mana kamera pergi ke suatu posisi, menunggu, kemudian bergerak ke posisi lain dengan kecepatan yang berbeda, menunggu, lalu pergi ke posisi ketiga dll.
  4. Bluetooth/kontrol telepon nirkabel. Akan sangat keren untuk dapat mengonfigurasi parameter penggeser kamera secara nirkabel dan dapat menggunakan penggeser kamera di lokasi yang sulit diakses. Aplikasi telepon juga dapat membuka peluang untuk mengintegrasikan keyframing seperti yang disebutkan dalam paragraf terakhir.

Itu saja untuk tutorial ini. Jangan ragu untuk menjatuhkan pertanyaan apa pun di bagian komentar di bawah.

Untuk tutorial konten & elektronik lainnya, Anda juga dapat melihat saluran YouTube saya di sini.

Direkomendasikan: