Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Tampilan Kedalaman Bor dengan Sensor Gyro

Komponen dan persediaan

Arduino Nano R3
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Jika Anda harus mengebor kedalaman tertentu untuk suatu proyek, Anda memerlukan bor bangku dengan tampilan kedalaman. Kebanyakan latihan bangku memiliki penggaris dengan panah untuk membaca. Keberhasilan pengeboran tergantung pada seberapa akurat Anda dapat membaca posisi yang diinginkan. Dalam proyek Arduino ini saya menyajikan proposal alternatif:Tampilan kedalaman pengeboran dengan sensor gyro dan tampilan 7 segmen dengan dukungan Arduino.

Mesin yang paling sering saya gunakan di bengkel saya bukanlah gergaji atau mesin gerinda. Sejauh ini latihan bangku. Terlepas dari proyeknya, itu sebenarnya selalu digunakan. Jika saya membutuhkan kedalaman pengeboran tertentu, saya dapat menggunakan penggaris bawaan pada mesin. Dan ingat kedalaman yang harus saya bor. Ini benar-benar bekerja dengan baik.

Tetapi dengan bertambahnya usia - ya, ya, ya - semakin sulit bagi saya untuk membaca kedalaman dengan akurasi milimeter. Dan jika cahayanya tidak cukup terang, hampir tidak mungkin untuk membacanya. Tapi hanya memakai kacamata untuk ini? Dan setelah mengebor, di mana menyimpan kacamata? Saya belum sejauh itu.

Sesuai dengan moto Paul Akers dari "2 Secon Lean":

Harus ada solusi yang lebih baik, Anda hanya perlu memikirkan dan membuatnya.

Mengukur Kemungkinan

Tentu saja saya bisa meletakkan kaca pembesar di depan timbangan agar penggaris lebih mudah dibaca. Itu akan meningkatkan pembacaan, tetapi tidak membantu bahwa saya harus mengingat pengukuran dalam setiap kasus. Dan jika Anda membuat kerajinan tangan, pasti menyenangkan juga.

Itulah mengapa solusi elektronik jauh lebih baik. Lebih disukai di ruang kecil sehingga semuanya pas di sebelah sakelar hidup / mati bor. Untuk kasus seperti itu saya suka menggunakan Arduino Nano. Ini memiliki cukup pin untuk mengontrol hampir semua hal dan juga kecil.

Tapi bagaimana Anda mengukur kedalaman pengeboran? Ada beberapa kemungkinan untuk pengukuran panjang. Pasang pengukur ultrasonik? Bisa bekerja, tetapi hanya dengan sedikit mekanik, yang bergerak bersama bor sebagai permukaan refleksi. Atau gunakan encoder yang digerakkan kawat? Itu mungkin, tetapi sangat kompleks, jika Anda membuatnya sendiri:dengan meja putar, penghalang cahaya garpu, dan pegas kembali. Lebih baik mengambil rotary encoder segera? Itu berarti lebih sedikit komponen - ya, tetapi akan terlalu kasar, Anda harus memasang roda gigi untuk terjemahan.

Oke, jadi pikirkan lebih lanjut.

Bor saya, seperti kebanyakan, memiliki roda tangan di samping untuk menyesuaikan kedalaman. Hal ini dapat diputar kira-kira. 270 °. Jadi bahkan tidak satu putaran penuh.

Ini sempurna untuk pengukuran sudut dengan sensor gyro. Sambungan kabel tidak dapat dipelintir dan hanya diperlukan satu komponen murah. Sensor gyro juga dapat dipasang dengan sangat mudah langsung ke sumbu putar handwheel.

Konsep

Saya selalu melanjutkan dengan cara yang sama saat menentukan kedalaman pengeboran:gores permukaan dengan bor, catat koordinatnya, lalu tambahkan kedalaman pengeboran yang diinginkan dan terakhir bor sampai kedalaman tercapai.

Saya ingin mempertahankan proses dasar. Agar tidak mengebor terlalu dalam, saya ingin menerima informasi tentang kapan kedalaman pengeboran telah tercapai.

Sebuah tombol mengambil alih fungsi ini. Saat Anda menekannya, Arduino menyimpan posisi pengeboran saat ini sebagai nilai berhenti dan selalu dapat mengingatkan saya saat dicapai nanti.

Komponen yang tersisa, mengambil lebih banyak ruang dan lebih berat secara signifikan. Untungnya, rumah mesin saya terbuat dari logam. Itu sebabnya saya menggunakan magnet neodymium untuk memperbaikinya.

Pertanyaannya tetap, bagaimana seharusnya sensor dipasang ke mesin?

Sumbu bor memiliki mur segi enam SW17. Jadi saya hanya membutuhkan komponen cetak 3D yang menerima sensor dan dapat dipasang ke mur segi enam.

Komponen yang diperlukan

  • Arduino Nano
  • Sensor giroskop GY-521
  • Modul 7 segmen dengan 8 digit (versi SPI dengan IC MAX7219)
  • Tekan tombol
  • Tombol hidup/mati
  • Supply daya:klip baterai untuk baterai AA atau AAA atau bank daya
  • Rumah cetak 3D
  • Magnet neodimium

Koneksi Sensor Gyro

Sensor gyro 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 7-Segmen

Pin digital apa pun dapat digunakan saat menghubungkan modul 7-segmen. Pin diatur menggunakan sketsa Arduino.

  • VCC -> 3.3V
  • GND -> GND
  • DIN -> D12
  • CS -> H10
  • CLK -> H11

Tombol

Pin input tombol juga dapat dipilih secara bebas. Saya menggunakan pin D9.

Catu daya

Untuk power supply saya menggunakan 6 buah baterai AA. Setelah sakelar hidup / mati, mereka memasok listrik ke seluruh sistem.

Casing

Saya mendesain casing dengan Autodesk Fusion 360. Saya membuat cetakan 3D dengan Anycubic i3 Mega.

Magnet neodymium untuk pemasangan ke mesin direkatkan. Jika seluruh tampilan kedalaman pengeboran menghalangi, semuanya akan segera dilepas.

Sketsa Arduino

Saya menggunakan LedControl.h perpustakaan untuk mengontrol tampilan 7 segmen. Jika Anda belum menginstalnya, Anda harus menginstalnya terlebih dahulu menggunakan pengelola perpustakaan.

Sensor gyro terhubung melalui bus I2C. Saat mencari kemungkinan perpustakaan untuk sensor, saya kemudian memutuskan untuk tidak menggunakannya. Komunikasi dilakukan melalui Wire.h .

Di akhir artikel, Anda akan menemukan beberapa tautan yang membantu saya memahaminya.

Kontrol tampilan 7 segmen bekerja sangat baik dengan LedControl .

Setelah inisialisasi dengan pin, prosedur penyiapan hanya memerlukan beberapa persiapan untuk mengaktifkan tampilan dan menyesuaikan intensitas.

Di bagian loop, tampilan hanya menampilkan kedalaman pengeboran saat ini dan, jika disetel, posisi berhenti, juga sebagai angka.

Layar mengharapkan setiap digit sebagai tipe karakter. Saya ingin menggunakan tempat desimal sebagai akurasi. Fungsi dtostrf mengubah float menjadi array karakter. Kemudian menjadi string untuk menunjukkannya berdasarkan karakter di layar.

dtostrf ( currentPos, 4,1, txt );
s ='' + String ( txt );
lc. setChar ( 0,4, lihat charAt ( lihat panjang () -1 ) , false );
lc. setChar ( 0.5, lihat charAt ( lihat panjang () -3 ) , true );
lc. setChar ( 0.6, lihat charAt ( lihat panjang () -4 ) , false );
lc. setChar ( 0.7, lihat charAt ( lihat panjang () -5 ), false );

Ketika posisi berhenti tercapai, "StOP" muncul di layar. "t" kecil dapat dibuat menggunakan setRow prosedur dan pola bit yang sesuai B00001111.

Membaca sensor gyro bekerja melalui fungsi perpustakaan kawat. Saya hanya menggunakan akselerometer untuk menentukan posisi sudut.

Saat bekerja dengan koneksi USB ke Arduino IDE, semuanya bekerja dengan sempurna. Setelah mencabut dan menghubungkan ke sumber daya eksternal, sensor tidak memberikan data apa pun. Ini hanya berfungsi lagi setelah reset Arduino.

Itu memberi saya sakit kepala paling banyak di seluruh proyek. Bisa dibilang indikator kedalaman bor mungkin bisa menyelamatkan mata saya, tapi itulah sebabnya saya mencabut hampir semua rambut saya!

Setelah pencarian yang lama, menginstal waktu tunggu setelah bangun sensor adalah solusinya. Hal ini membuat penundaan (1000) perintah terpenting di seluruh kode sumber.

//menyiapkan sensor GY-521
//kami hanya menggunakan data akselerator
Wire.begin();
Wire.beginTransmission(MPU);
Wire .write(0x6B);
Wire.write(0x00); // membangunkan MPU
Wire.endTransmission(true);

//penundaan ini sangat diperlukan dalam kasus saya!
delay(1000);

Wire.beginTransmission(MPU);
Wire.write(0x1C); //daftar ACCEL_CONFIG
Wire.write(0x10); //Tetapkan sebagai 00010000 untuk +/- 8g rentang skala penuh
Wire.endTransmission(true);

Nilai offset harus ditentukan untuk sensor di awal, jika tidak, nilainya akan berfluktuasi. Di bagian penyiapan, 100 nilai diukur dan penyimpangannya dirata-rata.

Menghitung sudut dari data sensor tidak semudah itu. Tapi ada banyak petunjuk tentang cara melakukan perhitungan.

Sudut X dalam derajat dihitung menggunakan rumus ini:

AccAngleX =(atan ((AccY) / sqrt (pow ((AccX), 2) + pow ((AccZ), 2))) * rad_to_deg); 

Namun, nilai sensor akselerasi sangat berfluktuasi. Oleh karena itu, nilai yang dihitung saat ini dirata-ratakan dengan nilai sebelumnya masing-masing 50%.

TotalAngleX =0,5 * TotalAngleX + 0,5 * AccAngleX; 

Nilai sudut dikeluarkan dari -90 ° hingga + 90 ° oleh sensor. Tapi saya membutuhkan sudut dari 0 ° hingga 360 ° untuk konversi menjadi kedalaman pengeboran.

Saya belum menemukan solusi sederhana untuk ini. Namun, untuk aplikasi saya, cukup melihat apakah data sensor Z dan Y positif atau negatif. Dan ubah sudutnya sesuai dengan itu.

delta=0;
if ((AccZ<0)) {
delta=180.0-TotalAngleX*2.0;
}
jika ((AccZ>0 )&&(AccY<0)) {
delta=360.0;
}
DrillingMachineAngle=TotalAngleX+delta;

//jika mendekati 360°, tampilan lebih baik 0 °
if (DrillingMachineAngle>350) {DrillingMachineAngle=0;}

Apa yang masih hilang adalah sudut rotasi maksimum yang dimungkinkan oleh handwheel. Cara termudah untuk melakukannya adalah dengan menentukan output sudut melalui Serial.print dan catat nilai maksimumnya.

Bagi saya itu 316 °. Dengan kedalaman pengeboran maksimum 50 mm, posisi saat ini dihitung sebagai berikut:

currentPos=50.0/316.0*DrillingMachineAngle; 

Jika tombol ditekan, Arduino menyimpan posisi pengeboran saat ini. 8888 ditampilkan di layar dan menunggu sebentar selama 1 detik.

Jika posisi berhenti disetel, kedalaman pengeboran yang tersisa hingga berhenti akan ditampilkan di layar kanan.

Perakitan dan Uji

Sensor gyro paling baik diperbaiki dengan titik lem panas. Arahkan kabel koneksi melalui penutup. Itu saja untuk bagian ini.

Pada pengujian pertama, sensor gyro harus disejajarkan terlebih dahulu. Saya menginstalnya secara horizontal. Karena dudukan dirancang agar dapat diputar, dudukan dapat dengan mudah disesuaikan hingga 0,0 ditampilkan di layar.

Kemudian tes pertama dapat dimulai.

Secara keseluruhan, saya sangat senang dengan solusinya. Sensor bereaksi sangat cepat dan nilai yang dihitung sama persis dengan kedalaman bor.

Dan berkat layar LED besar, saya tidak perlu khawatir dengan kacamata berusia hingga 85 tahun untuk membaca kedalaman bor yang tepat.

Jadi, selalu ingat apa yang dikatakan Paul:Perbaiki apa yang mengganggu Anda!

Bersenang-senang membangunnya!

_______________________________________________________________

Beberapa tautan yang mungkin membantu:

https://medium.com/@kavindugimhanzoysa/lets-work-with-mpu6050-gy-521-part1-6db0d47a35e6

atau https://playground.arduino.cc/Main/MPU-6050/

atau juga https://circuitdigest.com/microcontroller-projects/mpu6050-gyro-sensor-interfacing-with-arduino/

Perpustakaan GY-521 oleh Rob Tilaart:https://github.com/RobTillaart/GY521

Dan lihat buku Paul Akers di https://paulakers.net/books/2-second-lean

Das Projekt gibt es auch auf Deutsch unter:https://techpluscode.de/bohrtiefenanzeige-mit-gyro-sensor/

Kode

  • kedalaman pengeboran.ino
drilling-depth.inoArduino
/* program:drilling-depth.ino * penulis:Thomas Angielsky * versi:2021-03-20 * * https://techpluscode.de/ * https://techpluscode.de/bohrtiefenanzeige-mit-gyro- sensor/ * * sketsa ini mengukur kedalaman pengeboran dari mesin bor meja * dengan menggunakan data sensor gyro GY-521 * kedalaman dilihat oleh tampilan 7 segmen * * ide kompensasi kesalahan kalk dari electronoobs.com - terima kasih! * */#include #include #include "LedControl.h"#define MPU 0x68char txt[8];String s;float currentPos,stopPos;float rad_to_deg;float AccX, AccY, AccZ; float AccAngleX, AccAngleY; float AccAngleErrorX, AccAngleErrorY; float TotalAngleX, TotalAngleY;float DrillingMachineAngle, delta;//init LED:pin D12, pin D11, pin D10, 1 moduleLedControl lc=LedControl(12,11,10,1);void setup() { //menyiapkan koneksi serial / /Serial.begin(9600); //nilai awal stopPos=0.0; saat iniPos=0.0; rad_to_deg =180/PI; //menyiapkan sensor GY-521 //kami hanya menggunakan data akselerator Wire.begin(); Wire.beginTransmission(MPU); Kawat.tulis (0x6B); Kawat.tulis (0x00); // membangunkan MPU Wire.endTransmission(true); //penundaan ini sangat diperlukan dalam kasusku! penundaan (1000); Wire.beginTransmission(MPU); Wire.write(0x1C); //daftar ACCEL_CONFIG Wire.write(0x10); //Tetapkan sebagai 00010000 untuk +/- 8g rentang skala penuh Wire.endTransmission(true); //hitung kesalahan data akselerator //lakukan 100 pengukuran untuk(int a=0; a<100; a++) { Wire.beginTransmission(MPU); Kawat.tulis (0x3B); Wire.endTransmission(salah); Wire.requestFrom(MPU,6,true); AccX=(Wire.read()<<8|Wire.read())/4096.0; AccY=(Wire.read()<<8|Wire.read())/4096.0; AccZ=(Wire.read()<<8|Wire.read())/4096.0; AccAngleErrorX=AccAngleErrorX+((atan((AccY)/sqrt(pow((AccX),2)+pow((AccZ),2)))*rad_to_deg)); //AccAngleErrorY=AccAngleErrorY+((atan(-1*(AccX)/sqrt(pow((AccY),2)+pow((AccZ),2)))*rad_to_deg)); } AccAngleErrorX=AccAngleErrorX/100; //AccAngleErrorY=AccAngleErrorY/100; //siapkan tombol:pin D9 pinMode(9,INPUT_PULLUP); //menyiapkan tampilan 7 segmen lc.shutdown(0,false); lc.setIntensity(0,8); lc.clearDisplay(0);}void loop() { Wire.beginTransmission(MPU); Kawat.tulis (0x3B); Wire.endTransmission(salah); Wire.requestFrom(MPU,6,true); AccX=(Wire.read()<<8|Wire.read())/4096.0; AccY=(Wire.read()<<8|Wire.read())/4096.0; AccZ=(Wire.read()<<8|Wire.read())/4096.0; AccAngleX=(atan((AccY)/sqrt(pow((AccX),2)+pow((AccZ),2)))*rad_to_deg)-AccAngleErrorX; //AccAngleY=(atan(-1*(AccX)/sqrt(pow((AccY),2)+pow((AccZ),2)))*rad_to_deg)-AccAngleErrorY; //nilai halus TotalAngleX=0.5*(TotalAngleX)+0.5*AccAngleX; //TotalAngleY=0,5*(TotalAngleY)+0,5*AccAngleY; //hitung sudut x hingga 360 dengan menggunakan +/- dari X,Y,Z delta=0; if ((AccZ<0)) { delta=180.0-TotalAngleX*2.0; } if ((AccZ>0)&&(AccY<0)) { delta=360.0; } DrillingMachineAngle=TotalAngleX+delta; //jika mendekati 360, tampilkan lebih baik 0 if (DrillingMachineAngle>350) {DrillingMachineAngle=0;} //menghitung kedalaman pengeboran //kedalaman pengeboran maks:50 mm (diukur pada mesin) //sudut maks roda tangan:316 (diukur dengan data Serial.print) currentPos=50.0/316.0*DrillingMachineAngle; /* Serial.print("X / X / Y / Z / E :BOHRTIEFE"); Serial.print(TotalAngleX); Serial.print(""); Serial.print(AccX); Serial.print(""); Serial.print(AccY); Serial.print(""); Serial.print(AccZ); Serial.print(">>"); Serial.print(DrillingMachineAngle); Serial.print(">>"); Serial.print(Pos saat ini); Serial.println(" ");*/ //tombol ditekan? if (digitalRead(9)==LOW) { //simpan posisi stop stopPos=currentPos; lc.setChar(0,3,'8',salah); lc.setChar(0,2,'8',salah); lc.setChar(0,1,'8',salah); lc.setChar(0,0,'8',salah); //Serial.println("Tombol ditekan"); penundaan (1000); } if (stopPos>0) { //stop posisi tercapai? if (currentPos>=stopPos) { //yes:tampilkan STOP (5t0P) di sebelah kanan lc.setChar(0,3,'5',false); lc.setRow(0,2,B00001111); lc.setChar(0,1,'0',false); lc.setChar(0,0,'P',salah); } else { //no:menampilkan jarak ke posisi berhenti dtostrf(stopPos-currentPos,4,1,txt); s=' '+String(txt); lc.setChar(0,0,s.charAt(s.length()-1),false); lc.setChar(0,1,s.charAt(s.length()-3),true); lc.setChar(0,2,s.charAt(s.length()-4),false); lc.setChar(0,3,s.charAt(s.length()-5),false); } } else { //tidak menampilkan apa-apa lc.setChar(0,3,' ',false); lc.setChar(0,2,' ',salah); lc.setChar(0,1,' ',false); lc.setChar(0,0,' ',false); } //menampilkan kedalaman pengeboran saat ini di sisi kiri //format sebagai string dtostrf(currentPos,4,1,txt); s=' '+String(txt); lc.setChar(0,4,s.charAt(s.length()-1),false); lc.setChar(0,5,s.charAt(s.length()-3),true); lc.setChar(0,6,s.charAt(s.length()-4),false); lc.setChar(0,7,s.charAt(s.length()-5),false); delay(200);}

Suku cadang dan penutup khusus

pengeboran-kedalaman-3d-model_Yn2q0MSNa4.zip

Skema


Proses manufaktur

  1. Integrasi Data Sensor dengan Mikroprosesor Raspberry Pi
  2. Sensor pelacakan garis dengan RPi
  3. API sensor lingkungan dengan RPi
  4. Aeroponik dengan Raspberry Pi dan sensor kelembapan
  5. Raspberry Pi GPIO dengan sensor gerak PIR:Tutorial terbaik
  6. Menggunakan Sensor Radar Berdenyut A111 dengan Raspberry Pi
  7. Menghubungkan Sensor Gerak PIR HC-SR501 dengan Raspberry Pi
  8. Python/MicroPython Sensor Logger dengan Google Spreadsheet
  9. Portenta dan Sensor Termokopel (dengan MAX6675)
  10. Perangkat Pengukur Aliran Udara Tekanan dengan Sensor Analog