Daftar Isi:
- Langkah 1: Kumpulkan Bagian Cetakan Non-3D
- Langkah 2: Cetak 3D Modul Kemudi Cermin
- Langkah 3: Pasang Modul Laser
- Langkah 4: Cetak Kerah Penunjuk Laser
- Langkah 5: Merakit Sirkuit Mengemudi
- Langkah 6: Unggah Kode Sampel
- Langkah 7: Mengecilkan Volume
- Langkah 8: Menyetel Tegangan untuk Mengurangi Distorsi
- Langkah 9: Menyempurnakan Perangkat Lunak, Dengan Math
- Langkah 10: Penguji Komponen Murah Menyelamatkan Hari
- Langkah 11: Temukan Konstanta Pegas K, Selesaikan Masalah
- Langkah 12: Tanya Jawab Tentang Sirkuit Driver Menggunakan Komponen Diskrit
- Langkah 13: Analisis Masalah Saat Ini dan Solusi yang Mungkin
- Langkah 14: Pekerjaan Masa Depan dan Kemungkinan Aplikasi
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Dalam Instruksi ini, saya akan mendemonstrasikan konstruksi modul kemudi sinar laser sumbu ganda, cermin tunggal menggunakan komponen cetak 3D dan komponen murah dari eBay.
Proyek ini memiliki kesamaan dengan Arduino Laser Show dengan Kendali XY Control dan Arduino Laser Show Dengan Galvos Nyata tapi saya percaya adalah yang pertama menggunakan desain cetak 3D dengan solenoida murah. Saya meletakkan semua file desain di bawah GPLv3 sehingga desain dapat ditingkatkan dan diperbaiki.
Meskipun saat ini saya hanya merakit modul dan menulis beberapa kode pengujian yang sangat mendasar, harapan saya adalah suatu hari saya dapat membawanya ke tingkat berikutnya dengan memasukkan kode grafik vektor dari Tegangan Analog Super Cepat yang Dapat Diinstruksikan sebelumnya dari Arduino.
Langkah 1: Kumpulkan Bagian Cetakan Non-3D
Perakitan laser terdiri dari bagian-bagian berikut:
- 4 mikro solenoida
- Satu cermin 1/2 inci
- Empat sekrup M3
Solenoida khusus yang saya gunakan dibeli di eBay seharga $ 1,45 masing-masing. Cermin bundar ditemukan di lorong kerajinan di HobbyLobby -- satu pak berisi 25 harganya kurang dari $3 dolar. Anda juga dapat menemukan cermin di eBay.
Anda juga akan membutuhkan laser pointer murah, sekali lagi, dari eBay. Laser ungu bersama dengan lembaran vinil yang bersinar dalam gelap adalah kombinasi yang sangat baik untuk proyek ini!
Satu set uluran tangan tidak diperlukan, tetapi akan sangat berguna untuk memegang dan memposisikan penunjuk laser. Klip pengikat besar dapat digunakan untuk menahan tombol daya.
Anda akan membutuhkan Arduino (saya menggunakan Arduino Nano) dan cara untuk menggerakkan solenoida. Seperti yang telah dinyatakan VajkF dalam komentar, Anda dapat menggunakan jembatan-H yang sudah jadi seperti yang didasarkan pada L298 atau L9110. Ini sudah tersedia di eBay untuk beberapa dolar dan juga dapat digunakan untuk mengemudi motor dan proyek robotika.
Karena saya tidak memiliki H-bridge, saya membuat driver sendiri dari komponen diskrit:
- Empat transistor bipolar NPN (saya menggunakan MPS3704)
- Empat resistor (saya menggunakan resistor 1.2k ohm)
- Empat dioda (saya menggunakan 1N4004)
- Baterai 9V dan konektor baterai
Komponen elektronik berasal dari lab saya, jadi saya tidak memiliki biaya pasti untuk itu, tetapi kecuali Anda sudah memiliki suku cadangnya atau dapat mengaisnya, mungkin lebih hemat biaya untuk menggunakan jembatan-H pra-bangun. Meskipun demikian, saya akan memberikan skema untuk membangun Anda sendiri.
Langkah 2: Cetak 3D Modul Kemudi Cermin
Modul kemudi laser terdiri dari dua bagian cetak 3D: alas untuk memasang empat solenoida dan platform artikulasi untuk cermin.
Saya telah melampirkan dua file STL untuk Anda cetak 3D, serta file FreeCAD jika Anda perlu memodifikasi desain. Semua konten berada di bawah GPLv3, jadi Anda bebas membuat dan membagikan peningkatan Anda!
Langkah 3: Pasang Modul Laser
- Gunakan lem panas untuk menempelkan keempat solenoida ke bagian bawah.
- Gunakan lem panas untuk menempelkan cermin di tengah bagian atas.
- Masukkan piston logam ke dalam solenoida dan kemudian posisikan bagian atas pada tiang (tetapi jangan kencangkan). Putar bagian atas sedikit dan menggunakan obeng kecil, angkat setiap piston ke posisinya. Bibir cakram harus meluncur ke dalam alur pada piston. Hati-hati, karena engsel yang dicetak 3D sangat rapuh. Dengan kesabaran dan kemungkinan beberapa kali gagal, Anda seharusnya dapat memposisikan keempat piston tanpa memutar atau menekan engsel.
- Setelah semua piston diposisikan, masukkan sebagian sekrup M3, tetapi sebelum mengencangkannya, tekan setiap piston dengan lembut dan pastikan kaca spion miring dengan bebas. Jika tidak bergerak bebas atau tersangkut, mungkin perlu melepas pelat atas, melepaskan satu atau lebih solenoida yang longgar dan memasangnya kembali dengan sedikit miring ke luar (menempatkan spacer di antara itu dan tiang pusat dapat membantu dalam hal ini).
Langkah 4: Cetak Kerah Penunjuk Laser
Kerah penunjuk laser pas di kepala penunjuk laser. Anda kemudian dapat menggunakan satu set tangan penolong untuk memegang kerah dan memungkinkan Anda memposisikan laser dengan tepat di bangku Anda.
Langkah 5: Merakit Sirkuit Mengemudi
Sirkuit penggerak ditunjukkan dalam skema. Seperti yang dinyatakan sebelumnya, versi saya dibuat dari komponen terpisah, tetapi Anda juga dapat menggunakan jembatan-H yang tersedia. Jika Anda memilih untuk membangun sendiri, Anda perlu membuat empat salinan sirkuit ini, satu untuk masing-masing dari empat solenoida.
Setiap rangkaian akan terhubung ke pin Arduino, dua untuk mengontrol solenoid kiri dan kanan, dan dua untuk solenoida atas dan bawah. Ini perlu dihubungkan ke pin yang mampu PWM, seperti:
- Pin 9: Solenoid Atas
- Pin 3: Solenoid Bawah
- Pin 11: Solenoid Kiri
- Pin 10: Solenoid Kanan
Baterai 9V tunggal dapat digunakan untuk menggerakkan keempat sirkuit driver solenoida atau Anda dapat menggunakan catu daya benchtop. Arduino akan kehabisan daya USB dan tidak boleh dihubungkan ke sisi positif baterai 9V. Namun, sisi negatif baterai digunakan sebagai referensi ground dan harus disambungkan ke pin GND pada Arduino serta ke pin emitor pada transistor.
Langkah 6: Unggah Kode Sampel
Kode sampel telah diperbarui dengan fitur berikut:
- Menyesuaikan frekuensi PWM sehingga mekanisme hampir senyap pada kecepatan rendah. Dengungan di Motion Test 1 benar-benar hilang!
- Menambahkan sebagai persamaan tegangan berdasarkan kertas oleh Schimpf untuk "linearisasi" respon non-linear dari solenoida.
Saya juga menyertakan implementasi Lorenz Attractor berdasarkan kode dari blog ini.
Kesetiaan hasil meninggalkan sedikit yang diinginkan, tetapi saya masih mengerjakannya!:)
Langkah selanjutnya mengilustrasikan beberapa teknik yang digunakan dalam kode.
Langkah 7: Mengecilkan Volume
Dalam Tes Gerak 1 saya, Anda dapat mendengar dengungan keras, khususnya selama gerakan naik dan turun. Ternyata ini disebabkan oleh frekuensi pencacahan PWM default Arduino berada dalam rentang yang dapat didengar. Pergantian tegangan koil yang cepat dan mati akan menyebabkan mereka bergetar pada frekuensi itu, membuatnya menjadi pengeras suara kecil.
Untuk mengatasi masalah ini, saya meningkatkan frekuensi PWM dalam kode:
#define PWM_FREQ_31372Hz 0x01 // Menyetel frekuensi PWM ke 31372,55 Hz#define PWM_FREQ_3921Hz 0x02 // Menyetel frekuensi PWM ke 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Menyetel frekuensi PWM ke 980,39 Hz batal setPWM1 (UrF TCCR1 frekuensi batal TCCR1 Hz void setPWM & 0b11111000) | frekuensi; // Atur frekuensi timer1 (pin 9 & 10) TCCR2B = (TCCR2B & 0b11111000) | frekuensi; // Atur frekuensi timer2 (pin 3 & 11) }
Mengatur frekuensi PWM Arduino adalah trik yang berguna untuk menenangkan solenoida atau motor. Bereksperimenlah dengan berbagai pilihan frekuensi untuk melihat mana yang memberi Anda hasil terbaik. Meskipun melibatkan beberapa pemrograman yang lebih maju, sumber yang bagus tentang cara kerja pengatur waktu ada di sini.
Langkah 8: Menyetel Tegangan untuk Mengurangi Distorsi
Tes gerak awal saya menunjukkan bahwa ada distorsi yang signifikan dalam respons solenoida. Dalam Tes Gerak 3 (gambar kiri), apa yang seharusnya menjadi spiral melingkar malah menjadi jaring persegi panjang dengan tepi bergerigi.
Memecahkan masalah ini membutuhkan sedikit matematika, tetapi saya dapat menemukan makalah luar biasa di web yang membantu saya memahami masalah dengan cukup baik untuk menyelesaikannya dalam perangkat lunak.
Berikut langkah-langkah Anda melalui proses yang saya lalui untuk menyetel sistem dan meningkatkan tampilan jejak yang dihasilkan!
Langkah 9: Menyempurnakan Perangkat Lunak, Dengan Math
Rahasia untuk menyetel sistem ini ternyata adalah makalah yang sangat bagus berjudul "A Detailed Explanation of Solenoid Force" oleh Paul H. Schimpf dari Eastern Washington University (tautan). Secara khusus, persamaan 17 memberi saya gaya solenoida dalam berbagai istilah.
Istilah-istilah berikut mudah diukur:
- R - Resistansi solenoida saya
- l - Panjang solenoida
- x - Perpindahan piston di solenoida
- V - Tegangan melintasi solenoida
Saya juga tahu bahwa gaya yang dikeluarkan oleh solenoida harus mengimbangi gaya dari pegas cetak 3D pada cermin sumbu ganda. Gaya pegas diatur oleh hukum Hooke, yang dinyatakan sebagai berikut:
F = -kx
Meskipun saya tidak tahu nilai k, setidaknya saya tahu bahwa gaya yang saya dapatkan dari persamaan 17 dari kertas Schimpf harus sama dengan gaya dari hukum Hooke.
Nilai alpha (α) adalah salah satu yang rumit. Meskipun persamaan 13 dan 14 menunjukkan bagaimana menghitung nilai-nilai ini dari luas solenoida (A), jumlah lilitan (N) dan nilai permeabilitas magnetik (μ), saya tidak ingin harus merobek solenoida untuk menghitung jumlah putaran, saya juga tidak tahu bahan dari mana inti solenoid saya dibuat.
Langkah 10: Penguji Komponen Murah Menyelamatkan Hari
Namun ternyata, persamaan 15 dan 16 memberi saya apa yang saya butuhkan. Saya memiliki penguji komponen M328 murah yang saya beli dari eBay seharga $10. Itu dapat menggunakannya untuk mengukur induktansi solenoida saya dan saya menemukan bahwa dengan mendorong angker pada kedalaman yang berbeda memberi saya nilai induksi yang berbeda.
Mengukurnya dengan angker yang dimasukkan sepenuhnya memberi saya nilai L(0).
Panjang solenoid saya adalah 14mm, jadi saya mengukur induktansi dengan jangkar di lima posisi dan ini memberi saya berbagai nilai untuk L(x):
- L(0,0) = 19,8 mH
- L(3.5) = 17,7 mH
- L(7.0) = 11,1 mH
- L(10,5) = 9,3 mH
- L(14) = 9,1 mH
Saya kemudian menggunakan spreadsheet untuk memplot nilai saya vs. nilai persamaan 15 dan 16, untuk pilihan r tertentu dan kemudian memvariasikan pilihan saya sampai saya menemukan kecocokan yang baik. Ini terjadi ketika r adalah 2,9, seperti yang ditunjukkan pada grafik.
Langkah 11: Temukan Konstanta Pegas K, Selesaikan Masalah
Satu-satunya yang tersisa tidak diketahui adalah K, konstanta pegas. Saya mengukur ini dengan menerapkan 9V ke salah satu solenoida di rakitan sumbu ganda saya dan mengukur jarak di mana cermin ditarik ke bawah. Dengan nilai-nilai ini, saya dapat menyelesaikan persamaan untuk K, yang saya temukan adalah sekitar 10,41.
Saya sekarang memiliki nilai yang saya butuhkan untuk menghitung tarikan solenoida pada berbagai posisi di sepanjang langkah. Dengan mengatur F(x) sama dengan gaya pegas dari hukum Hooke, saya dapat menyelesaikan tegangan yang diperlukan V.
Grafik menunjukkan tegangan yang diperlukan untuk menggerakkan solenoida ke posisi x yang diinginkan.
Di sebelah kanan, di mana tegangannya nol dan posisinya 3 mm, ini sesuai dengan titik istirahat netral dari solenoida ketika engsel yang dicetak 3D direnggangkan sepenuhnya. Bergerak ke kiri pada grafik sesuai dengan menarik angker ke dalam solenoid melawan tarikan engsel yang dicetak 3D-ini awalnya membutuhkan lebih banyak tegangan, tetapi karena angker semakin dalam ke dalam solenoid, tarikan meningkat dan tegangan penggerak yang diperlukan berkurang.
Hubungan ini jelas non-linear, tetapi dengan persamaan dari makalah Schimpf, saya dapat menulis kode Arduino saya untuk menghasilkan tegangan yang benar sehingga defleksi balok linier:
float positionToVoltage(float x) {
// Memulihkan gaya yang diberikan oleh engsel (Hukum Hooke) pada x yang diinginkan. const float spring_F = -spring_K * (x - spring_X0); // Tegangan sedemikian rupa sehingga gaya tarik solenoida cocok dengan // gaya pemulihan engsel mengembalikan kuadrat(-2*R*R*(-spring_F)*solenoid_len/(a*L_0*exp(-a*x/solenoid_len))); }
Ini mengarah ke spiral yang jauh lebih melingkar daripada dalam tes gerak asli saya. Misi selesai!
Langkah 12: Tanya Jawab Tentang Sirkuit Driver Menggunakan Komponen Diskrit
Mengapa saya tidak dapat menghubungkan solenoid langsung ke Arduino?
Ini masalah seberapa banyak arus yang dapat disediakan Arduino tanpa mengalami kerusakan. Ini sekitar 40mA per pin. Mengetahui bahwa Arduino beroperasi pada 5V, kita dapat menggunakan hukum Ohm untuk menghitung resistansi beban minimum yang diperlukan (dalam hal ini, solenoida). Membagi 5 volt dengan 0,040 amp memberi kita, 125 ohm. Jika beban memiliki hambatan yang lebih besar, kita dapat menghubungkannya langsung ke Arduino, jika tidak, kita tidak bisa. Sebuah solenoida kecil biasanya memiliki hambatan 50 ohm, jadi kita tidak bisa mengendarainya langsung dari Arduino. Jika kami melakukannya, itu akan menarik 100mA, yang jelas terlalu banyak.
Mengapa Anda menggunakan 9V untuk solenoid, tetapi 5V untuk Arduino?
Arduino berjalan pada 5V, tetapi ini terlalu sedikit untuk sebuah solenoida. Menggunakan transistor memungkinkan kita untuk memilih tegangan untuk solenoid yang tidak tergantung pada 5V yang digunakan untuk Arduino.
Bagaimana saya tahu apakah transistor cocok untuk proyek ini?
Sama seperti Arduino, persyaratan utama adalah bahwa arus yang mengalir melalui solenoida tidak melebihi nilai maksimum untuk transistor (khususnya, arus kolektor). Kita dapat dengan mudah menghitung skenario terburuk dengan mengukur resistansi solenoida dan kemudian membagi tegangan suplai dengan itu. Dalam kasus arus suplai 9V untuk solenoida, dan resistansi solenoida 50 ohm, skenario terburuk menempatkan kita pada 180mA. MPS3704, misalnya, dinilai untuk arus kolektor maksimum 600 mA, yang memberi kita margin sekitar 3.
Bagaimana cara menentukan nilai minimum resistansi untuk diletakkan di antara output Arduino dan basis transistor?
Output dari Arduino akan menghubungkan kaki dasar transistor bipolar melalui resistor pembatas arus. Karena Arduino beroperasi pada 5V, kita dapat kembali menggunakan hukum Ohm untuk menghitung resistansi yang diperlukan untuk membatasi arus di bawah 40mA. Artinya, bagi 5 volt dengan 0,04 ampere untuk mendapatkan nilai setidaknya 125 ohm. Nilai resistor yang lebih tinggi akan menurunkan arus, sehingga memberi kita margin keamanan yang lebih besar.
Apakah ada nilai maksimum untuk resistansi yang tidak boleh saya lewati?
Ternyata, ya. Sebuah transistor memiliki apa yang dikenal sebagai gain arus. Misalnya, jika penguatannya adalah 100, itu berarti bahwa jika kita memasukkan 1mA ke basis, maka hingga 100mA akan mengalir melalui beban yang dikendalikan oleh transistor. Jika kita memasukkan 1,8mA ke dalam basis, maka hingga 180mA akan mengalir melalui beban. Karena kami menghitung sebelumnya bahwa pada 9V, 180mA mengalir melalui solenoida, maka arus basis 1,8mA adalah "sweet spot", dan kurang dan solenoid kami tidak akan menyala sepenuhnya.
Kami tahu Arduino mengeluarkan 5V dan kami ingin arus 1,8mA mengalir, jadi kami menggunakan hukum Ohm (R=V/I) untuk menghitung resistansi (R=V/I). 5V dibagi 1,8mA memberikan resistansi 2777 ohm. Jadi dengan asumsi yang kami buat, kami berharap resistensi harus berada di antara 125 dan 2777 -- memilih sesuatu seperti 1000 ohm memberi kami margin keamanan yang cukup baik.
Langkah 13: Analisis Masalah Saat Ini dan Solusi yang Mungkin
Prototipe saat ini menunjukkan potensi, tetapi beberapa masalah tetap ada:
- Gerak sepanjang sumbu X dan Y tampaknya tidak tegak lurus.
- Ada lompatan ketika cermin berubah arah.
- Resolusinya cukup rendah dan ada pola tangga yang terlihat.
- Pada kecepatan gerak yang lebih tinggi, jalur laser terdistorsi oleh getaran dan dering.
Masalah 1) mungkin disebabkan oleh desain engsel fleksibel cetak 3D yang mentransmisikan gerakan sepanjang satu sumbu ke sumbu tegak lurus.
Masalah 2) disebabkan oleh kendurnya kopling antara piston penggerak dan platform cermin, hal ini menyebabkan cermin menyentak dan melompati transisi antara sumbu X dan Y. Gerakan tiba-tiba ini mengarah ke celah berbentuk X yang gelap di mana titik laser melakukan gerakan tak terkendali lebih cepat.
Masalah 3) terjadi karena PWM Arduino default hanya memiliki 255 level dan tidak sedikit yang terbuang karena bentuk kurva tegangan. Ini dapat ditingkatkan secara signifikan dengan penggunaan timer1, yaitu 16-bit dan akan mampu menghasilkan 65536 nilai unik.
Masalah 4) terjadi karena cermin dan armature geser solenoida (piston) membentuk sejumlah besar massa yang bergerak.
Karena masalah 1) dan 2) terkait dengan desain mekanis, satu kemungkinan adalah melepas piston logam dan menggantinya dengan magnet tanah jarang kecil yang dipasang langsung ke pelat kemiringan. Solenoida akan menjadi kumparan terbuka yang akan menarik atau menolak magnet tanpa melakukan kontak fisik. Ini akan menghasilkan gerakan yang lebih halus dan menghilangkan kemungkinan menyentak, sekaligus mengurangi massa total.
Mengurangi massa adalah solusi utama untuk masalah 4), tetapi masalah yang tersisa dapat ditargetkan secara langsung dalam perangkat lunak dengan menerapkan profil kontrol gerakan dalam perangkat lunak untuk mempercepat dan memperlambat cermin secara terkendali. Ini sudah banyak dilakukan di firmware printer 3D dan metode serupa mungkin bekerja di sini juga. Berikut adalah beberapa sumber yang terkait dengan kontrol gerak yang berlaku untuk printer 3D:
- "Matematika Profil Kontrol Gerak", Chuck Lewin (tautan)
- "Dijelaskan Gerak Terkendali Jerk", (tautan)
Saya menduga bahwa menambahkan profil kontrol gerak trapesium akan memungkinkan cermin digerakkan pada kecepatan yang jauh lebih tinggi tanpa artifak dering atau getaran.
Langkah 14: Pekerjaan Masa Depan dan Kemungkinan Aplikasi
Meskipun mengembangkan solusi untuk masalah ini akan membutuhkan banyak pekerjaan, saya berharap modul kemudi balok sumber terbuka ini dapat menjadi alternatif yang terjangkau untuk proyek berbasis galvanometer dalam aplikasi seperti:
- Pertunjukan laser murah untuk DJ dan VJ.
- Tampilan vektor elektro-mekanis untuk game arcade vintage seperti Vectrex.
- Printer SLA 3D tipe resin DIY yang dalam semangat gerakan RepRap, dapat mencetak modul kemudi lasernya sendiri.
- Panning digital atau stabilisasi gambar optik untuk kamera.
Juara Kedua dalam Kontes Arduino 2017