Tampilkan Kedalaman Bor Akurat dengan Sensor Giros & Arduino Nano
Komponen dan Perlengkapan
Komponen
Jumlah
Arduino Nano R3
1
Alat dan Mesin yang Diperlukan
Printer 3D (umum)
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek
Jika Anda perlu membuat luboran pada kedalaman tertentu untuk suatu proyek, Anda memeruka bor dinding dengan tampilan kedalaman. Sebagian besar bor dinding memiliki penggaris dengan panah untuk pembacaan. Keberhasilan pemborongan tergantung pada seberapa akurat Anda dapat membaca posisi yang diinginkan. Dalam proyek Arduino ini, saya menyajikan alternatif: tampilan kedalaman bor dengan sensor giros dan layar 7-segmen dengan dukungan Arduino.
Mesin yang paling sering saya gunakan di bengkel saya bukanlah gerinda atau mesin gerinda. Ini adalah bor dinding. Terlepas dari proyek apa pun, mesin ini selalu digunakan. Jika saya perlu kedalaman bor tertentu, saya dapat menggunakan penggaris bawaan pada mesin dan mengingat kedalaman yang harus saya capai. Metode ini sebenarnya bekerja cukup baik.
Namun, seiring bertambahnya usia, semakin sulit bagi saya untuk membaca kedalaman dengan akurasi milimeter. Dan jika pencahayaan tidak cukup terang, hampir tidak mungkin untuk membacanya. Namun, apakah saya harus memakai kacamata hanya untuk ini? Dan setelah bor, di mana saya menyimpan kacamata? Saya belum sampai titik itu.
Sejalan dengan motto Paul Akers dari "2 Second Lean":
Harus ada solusi yang lebih baik, Anda hanya perlu berpikir dan mewujudkannya.
Kemungkinan Pengukuran
Saya tentu dapat memasang kaca pembesar di depan skala untuk membuat penggaris lebih mudah dibaca. Ini akan meningkatkan pembacaan, tetapi tidak akan membantu saya harus mengingat pengukuran setiap kali. Dan jika Anda sedang berkecimpung di bidang kerajinan tangan, proses itu juga harus menyenangkan.
Itulah sebabnya solusi elektronik jauh lebih baik. Preferably dalam ruang yang kecil sehingga semuanya muat di samping tombol on/off bor. Untuk kasus seperti ini, saya suka menggunakan Arduino Nano. Ini memiliki cukup pin untuk mengontrol hampir segalanya dan ukurannya relatif kecil.
Tetapi bagaimana cara mengukur kedalaman bor? Ada beberapa kemungkinan untuk pengukuran panjang. Pasang pengukuran ultrasonik? Bisa bekerja, tetapi hanya dengan sedikit mekanisme yang bergerak bersama bor sebagai permukaan pantulan. Atau gunakan enkoder dengan kawat tarik? Mungkin mungkin, tetapi sangat kompleks jika Anda membangunnya sendiri: dengan piring putar, rintangan cahaya cabang, dan pengembalian spring. Lebih baik langsung ambil enkoder rotatif? Itu akan berarti banyak kurang komponen - ya, tetapi itu akan terlalu kasar, Anda harus memasang roda gigi untuk translasi.
Oke, jadi pikirkan lebih jauh.
Bor saya, seperti kebanyakan, memiliki roda genggam di samping untuk menyesuaikan kedalaman. Roda ini dapat diputar sekitar 270 °. Jadi bahkan tidak satu putaran penuh.
Ini sempurna untuk pengukuran sudut dengan sensor giros. Koneksi kabel tidak dapat berputar dan hanya satu komponen murah yang diperlukan. Sensor giros juga dapat dipasang dengan sangat mudah secara langsung pada sumbu rotasi roda genggam.
Konsep
Saya selalu melakukan hal yang sama ketika menentukan kedalaman bor: gores permukaan dengan bor, catat koordinat, kemudian tambahkan kedalaman bor yang diinginkan dan akhirnya bor sampai kedalaman tercapai.
Saya ingin menjaga proses dasar. Agar tidak terlalu dalam, saya ingin menerima informasi tentang kapan kedalaman bor telah tercapai.
Tombol mengambil fungsi ini. Saat Anda menekannya, Arduino menyimpan posisi bor saat ini sebagai nilai batas dan dapat selalu mengingatkan saya padanya ketika tercapai nanti.
Komponen yang tersisa memakan lebih banyak ruang dan jauh lebih berat. Untungnya, casing mesin saya terbuat dari logam. Itulah sebabnya saya menggunakan magnet neodymium untuk memasangnya.
Pertanyaannya tersisa, bagaimana sensor harus dipasang pada mesin?
Sumbu bor memiliki dadu segi enam SW17. Jadi saya hanya perlu komponen cetak 3D yang terima sensor dan dapat dipasang pada dadu segi enam.
Komponen yang Diperlukan
Arduino Nano
Sensor giros GY-521
Modul layar 7-segmen dengan 8 digit (versi SPI dengan IC MAX7219)
Tombol push
Tombol on/off
Sumber daya: klip baterai untuk baterai AA atau AAA atau power bank
Casing cetak 3D
Magnet neodymium
Koneksi Sensor Giros
Sensor giros terhubung melalui I2C. Jadi kita harus menggunakan A5 dan A4 untuk Nano.
VCC → 5V
GND → GND
SCL → A5
SDA → A4
XDA → tidak terhubung
XCL → tidak terhubung
ADO → tidak terhubung
INT → tidak terhubung
Modul Layar 7-Segmen
Pin digital mana pun dapat digunakan saat menghubungkan modul layar 7-segmen. Pin diatur menggunakan sketsa Arduino.
VCC → 3.3V
GND → GND
DIN → D12
CS → D10
CLK → D11
Tombol
Pin input tombol juga dapat dipilih bebas. Saya menggunakan pin D9.
Sumber Daya
Untuk sumber daya, saya menggunakan 6 baterai AA. Setelah tombol on/off, baterai menyeluruh sistem dengan listrik.
Casing
Saya mendesain casing dengan Autodesk Fusion 360. Saya membuat cetakan 3D dengan Anycubic i3 Mega.
Magnet neodymium untuk pemasangan pada mesin dilem. Jika tampilan kedalaman bor keseluruhan mengganggu, semuanya segera dilepas.
Sketsa Arduino
Saya menggunakan perpustakaan LedControl.h untuk mengontrol layar 7 segmen. Jika Anda belum menginstalnya, Anda harus menginstalnya terlebih dahulu menggunakan manajer perpustakaan.
Sensor giros terhubung melalui bus I2C. Saat mencari perpustakaan yang mungkin untuk sensor, saya kemudian memutuskan untuk tidak menggunakan yang mana pun. Komunikasi melalui Wire.h.
Di akhir artikel Anda akan menemukan beberapa tautan yang membantu saya memahami.
Pengontrolan layar 7 segmen bekerja sangat baik dengan LedControl.
Setelah inisialisasi dengan pin, prosedur setup hanya memerlukan beberapa persiapan untuk membangun layar dan menyesuaikan intensitas.
Dalam bagian loop, layar hanya menampilkan kedalaman bor saat ini dan, jika diatur, posisi berhenti, juga sebagai angka.
Layar mengharapkan setiap digit sebagai tipe karakter. Saya ingin menggunakan satu desimal sebagai akurasi. Fungsi dtostrf mengubah float menjadi array karakter. Kemudian menjadi string untuk menampilkan karakter demi karakter pada layar.
dtostrf ( currentPos, 4,1, txt ) ;
s = '' + String ( txt ) ;
lc. setChar ( 0,4, see charAt ( see length () -1 ) , false ) ;
lc. setChar ( 0.5, see charAt ( see length () -3 ) , true ) ;
lc. setChar ( 0.6, see charAt ( see length () -4 ) , false ) ;
lc. setChar ( 0.7, see charAt ( see length () -5 ) , false ) ;
Ketika posisi berhenti tercapai, "StOP" muncul pada layar. Huruf kecil "t" dapat dihasilkan menggunakan prosedur setRow dan pola bit yang tepat B00001111.
Pembacaan sensor giros bekerja melalui fungsi dari perpustakaan wire. Saya hanya menggunakan accelerometer untuk menentukan posisi sudut.
Saat bekerja dengan koneksi USB ke Arduino IDE, semuanya bekerja sempurna. Setelah mencabut dan menghubungkan ke sumber daya eksternal, sensor tidak menyediakan data apa pun. Ini hanya bekerja lagi setelah reset Arduino.
Ini yang memberikan saya pusingan paling besar dalam seluruh proyek. Anda bisa mengatakan bahwa indikator kedalaman bor mungkin telah menyelamatkan mata saya, tetapi itulah sebabnya saya hampir mencabut semua rambut saya!
Setelah pencarian panjang, pemasangan waktu tunggu setelah membangun sensor adalah solusi. Ini membuat delay (1000) perintah paling penting dalam seluruh kode sumber.
//persiapkan sensor GY-521
//kita hanya menggunakan data accelerometer
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0x00); // bangunkan MPU
Wire.endTransmission(true);
//delay ini sangat diperlukan dalam kasus saya!
delay(1000);
Wire.beginTransmission(MPU);
Wire.write(0x1C); //register ACCEL_CONFIG
Wire.write(0x10); //Set sebagai 00010000 untuk rentang skala penuh +/- 8g
Wire.endTransmission(true);
Nilai offset harus ditentukan untuk sensor pada awalnya, jika tidak nilai akan fluctuate. Pada bagian setup, 100 nilai diukur dan deviasi dirata-rata.
Menghitung sudut dari data sensor tidak begitu mudah. Namun ada banyak petunjuk tentang cara melakukan perhitungan.
Sudut X dalam derajat dihitung menggunakan rumus ini:
Namun, nilai sensor akselerasi fluctuate sangat besar. Oleh karena itu, nilai yang saat ini dihitung dirata-rata dengan nilai sebelumnya pada 50% masing-masing.
Nilai sudut dikeluarkan dari -90 ° hingga + 90 ° oleh sensor. Namun saya membutuhkan sudut dari 0 ° hingga 360 ° untuk konversi menjadi kedalaman bor.
Saya belum menemukan solusi sederhana untuk ini. Namun untuk aplikasi saya, sudah cukup untuk melihat apakah data sensor Z dan Y positif atau negatif. Dan mengonversi sudut sesuai dengan itu.
delta=0;
if ((AccZ<0)) {
delta=180.0-TotalAngleX*2.0;
}
if ((AccZ>0)&&(AccY<0)) {
delta=360.0;
}
DrillingMachineAngle=TotalAngleX+delta;
//jika di dekat 360°, tampilan lebih baik 0°
if (DrillingMachineAngle>350) {DrillingMachineAngle=0;}
Yang masih belum ada adalah sudut rotasi maksimum yang memungkinkan roda genggam. Cara termudah untuk melakukan ini adalah dengan memastikan sudut yang ditentukan dieluarkan melalui Serial.print dan mencatat nilai maksimum.
Untuk saya itu 316 °. Dengan kedalaman bor maksimum 50 mm, posisi saat ini dihitung sebagai berikut:
currentPos=50.0/316.0*DrillingMachineAngle;
Jika tombol ditekan, Arduino menyimpan posisi bor saat ini. 8888 ditampilkan pada layar dan ada jeda singkat 1 detik.
Jika posisi berhenti diatur, kedalaman bor yang tersisa sampai ke berhenti ditampilkan pada layar kanan.
Rangkaian dan Pengujian
Sensor giros paling baik dipasang dengan sejumlah lem panas. Pandu kabel koneksi melalui tutup. Itu saja untuk bagian ini.
Dalam pengujian pertama, sensor giros harus difokuskan terlebih dahulu. Saya memasangnya secara horizontal. Karena pengawad dirancang untuk dapat diputar, dapat dengan mudah disesuaikan sampai 0.0 ditampilkan pada layar.
Lalu pengujian pertama dapat dimulai.
Secara keseluruhan, saya sangat senang dengan solusi ini. Sensor bereaksi sangat cepat dan nilai yang dihitung cocok persis dengan kedalaman bor.
Dan berkat layar LED besar, saya tidak perlu khawatir tentang kacamata hingga berusia 85 tahun untuk membaca kedalaman bor yang tepat.
Jadi selalu ingat apa yang dikatakan Paul: Perbaiki yang mengganggu Anda!