Proses manufaktur
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
| ||||
|
| ||||
|
Ide
Beberapa tahun yang lalu, saya melihat sebuah proyek yang memamerkan turret semi-otonom yang bisa menembak sendiri sekali diarahkan. Itu memberi saya ide untuk menggunakan kamera Pixy 2 untuk mendapatkan target dan kemudian mengarahkan pistol nerf secara otomatis, yang kemudian bisa mengunci dan menembak dengan sendirinya.
Komponen
Untuk proyek ini, pistol membutuhkan mata, jadi saya memilih untuk menggunakan Pixy 2 karena mudahnya berinteraksi dengan mainboard. Kemudian saya membutuhkan mikrokontroler, jadi saya memilih Arduino Mega 2560 karena jumlah pin yang dimilikinya.
Karena pistol membutuhkan dua sumbu, yaw dan pitch, itu membutuhkan dua motor stepper. Karena itu, DFRobot mengirimi saya papan driver motor DRV8825 ganda mereka.
CAD
Saya mulai dengan memuat Fusion 360 dan memasukkan kanvas pistol nerf yang terpasang. Kemudian saya membuat tubuh yang kokoh dari kanvas itu. Setelah pistol dirancang, saya membuat platform dengan beberapa penyangga berbasis bantalan yang memungkinkan pistol berputar dari kiri ke kanan. Saya menempatkan motor stepper di sebelah platform yang berputar untuk menggerakkannya.
Tapi pertanyaan yang lebih besar adalah bagaimana membuat pistol naik dan turun. Untuk itu, diperlukan sistem penggerak linier dengan satu titik menempel pada blok bergerak dan titik lain di belakang senjata. Sebuah batang akan menghubungkan dua titik, memungkinkan pistol berputar di sepanjang poros tengahnya.
Memproduksi Suku Cadang
Hampir semua bagian dalam desain saya dimaksudkan untuk dicetak 3D, jadi saya menggunakan dua printer saya untuk membuatnya. Kemudian saya membuat platform yang dapat dipindahkan dengan terlebih dahulu menggunakan Fusion 360 untuk menghasilkan jalur alat yang diperlukan untuk router CNC saya, lalu saya memotong disk dari selembar kayu lapis.
Perakitan
Setelah semua bagian dibuat, saatnya untuk merakitnya. Saya mulai dengan menghubungkan penyangga bantalan ke disk yang berputar. Kemudian saya mengumpulkan rakitan pitch linier dengan menjalankan batang aluminium 6mm dan batang berulir melalui potongan.
Terakhir, saya memasang pistol nerf itu sendiri dengan batang baja dan dua tiang yang terbuat dari aluminium ekstrusi.
Pemrograman
Sekarang untuk bagian tersulit dari proyek ini:pemrograman. Mesin penembakan proyektil sangat kompleks, dan matematika di baliknya bisa membingungkan. Saya mulai dengan menulis alur program dan logika selangkah demi selangkah, merinci apa yang akan terjadi pada setiap kondisi mesin. Status yang berbeda adalah sebagai berikut:
Memperoleh target melibatkan penyiapan Pixy terlebih dahulu untuk melacak objek neon pink sebagai target. Kemudian pistol bergerak hingga target berada di tengah pandangan Pixy, di mana jaraknya dari laras senapan ke target kemudian diukur. Dengan menggunakan jarak ini, jarak horizontal dan vertikal dapat ditemukan dengan menggunakan beberapa fungsi trigonometri dasar. Kode saya memiliki fungsi yang disebut get_angle() yang menggunakan dua jarak ini untuk menghitung berapa banyak sudut yang diperlukan untuk mencapai target itu.
Pistol kemudian bergerak ke posisi ini dan menyalakan motor melalui MOSFET. Setelah digulung selama lima detik kemudian menggerakkan motor servo untuk menarik pelatuk. MOSFET kemudian mematikan motor dan kemudian nerf gun kembali mencari target.
Bersenang-senang
Saya meletakkan kartu indeks merah muda neon ke dinding untuk menguji akurasi pistol. Itu berhasil dengan baik, karena program saya mengkalibrasi dan menyesuaikan sudut untuk jarak yang diukur. Berikut adalah video yang menunjukkan cara kerja senjata:
#include#include #include "BasicStepperDriver.h"#include #include //X adalah pitch, Y adalah yawconst int pin[] ={6,7,8,5,4,12}; //MX STEP, DIR, EN, MY STEP, DIR, ENconst int limit_switch =26, laser_pin =11, spool_pin =10, servo_pin =13, distance_trig =29, distance_echo =30;kecepatan ganda =21.336;kecepatan ganda_kuadrat =455.225; float_sudut arus =0,0; jarak_hip mengambang; //jarak dari pistol ke target dalam meter# tentukan X_MID 164# tentukan Y_MID 150# tentukan DEADZONE 15# tentukan G 9.8# tentukan STP_PER_DEG_YAW 3.333 # tentukan STP_PER_DEG_PITCH 184859# tentukan MICROSTEPS 32 # tentukan RPM_STEPS_TORX 120_STEPS_STEPS /17.7777 langkah / degreeBasicStepperDriver pitch_stepper(MOTOR_STEPS_X, pin[1], pins[0]);BasicStepperDriver yaw_stepper(MOTOR_STEPS_X, pins[4], pins[3]);Pemicu servo;Pixy2I2C pixy;enum Serikat { ACQUIRE, POSISI , FIRE, WIND_DOWN, RETURN};Status status =ACQUIRE;pengaturan batal() { Serial.begin(115200); init_pin(); penundaan (1000); //rumah_pitch(); pixy.init(); Serial.println("Siap...");}void loop() { switch(state){ case ACQUIRE:acquire_target(); negara =POSISI; digitalWrite(laser_pin,TINGGI); merusak; POSISI kasus:Serial.println("posisi"); posisi_gun(); negara =SPOOL; merusak; kasus SPOOL:Serial.println("spooling"); digitalWrite(spool_pin,HIGH); penundaan(5000); negara =KEBAKARAN; merusak; kasus KEBAKARAN:fire_gun(); status =WIND_DOWN; merusak; kasus WIND_DOWN:Serial.println("berhenti"); digitalWrite(spool_pin,RENDAH); penundaan(2000); negara =KEMBALI; digitalWrite(laser_pin,RENDAH); negara =ACQUIRE; merusak; }}void fire_gun(){ Serial.println("Menembakkan pistol!"); trigger.write(108); penundaan (400); trigger.write(90); delay(2000);}void position_gun(){ float x, y; jarak_hip =ping(); hyp_distance /=100; while(!hyp_distance){ hyp_distance =ping(); hyp_distance /=100; }Serial.println(hyp_distance); x =cos(sudut_arus) * jarak_hip; y =sin(sudut_arus) * jarak_hip; float target_angle =get_angle(x,y); target_angle /=100; Serial.println(target_angle); move_pitch(sudut_target - sudut_saat ini); current_angle =target_angle;}kosongkan akuisisi_target(){ int x=0, y=0; langkah panjang_diambil=0; kunci bool =salah; while(!lock){ pixy.ccc.getBlocks(); if(pixy.ccc.numBlocks){ x =pixy.ccc.blocks[0].m_x; y =pixy.ccc.blocks[0].m_y; Serial.print("Target terlihat di lokasi X:");Serial.print(x);Serial.print(", Y:");Serial.println(y); if(x <=(X_MID - DEADZONE)){ //Jika terlalu kiri, pindahkan pistol ke kiri move_yaw(1); } else if(x>=(X_MID + DEADZONE)){ move_yaw(-1); } else if(y <=(Y_MID - DEADZONE)){ //terlalu jauh ke atas, pindahkan pistol ke atas pitch_stepper.move(33152); langkah_diambil +=33152; } else if(y>=(Y_MID + DEADZONE)){ pitch_stepper.move(33152); langkah_diambil +=33152; } lain{ kunci =benar; Serial.print("Target terkunci di lokasi X:");Serial.print(x);Serial.print(", Y:");Serial.println(y); Serial.print("Langkah yang diambil:");Serial.println(langkah_diambil); } } } current_angle =langkah_diambil / STP_PER_DEG_PITCH; Serial.print("Sudut saat ini:");Serial.println(current_angle);}void init_pins(){ pinMode(pin[2],OUTPUT); pinMode(pin[5],OUTPUT); pinMode(limit_switch, INPUT_PULLUP); pinMode(laser_pin, OUTPUT); pinMode(spool_pin, OUTPUT); pinMode(jarak_gema, INPUT); pinMode(distance_trig, OUTPUT); digitalWrite(pin[2],RENDAH); digitalWrite(pin[5],RENDAH); digitalWrite(laser_pin,RENDAH); digitalWrite(spool_pin,RENDAH); trigger.attach(servo_pin); pitch_stepper.begin(RPM, MICROSTEPS); yaw_stepper.begin(5, MICROSTEPS); trigger.write(90);}void move_yaw(float derajat){ yaw_stepper.move(degrees*STP_PER_DEG_YAW*32);}void move_pitch(float derajat){ current_angle +=derajat; pitch_stepper.move(derajat*STP_PER_DEG_PITCH);}float get_angle(jarak float, tinggi float){ float i =2 * tinggi * 455.225; float j =G * jarak * jarak; saya +=j; j =9,8 * saya; i =kuadrat(pow(kuadrat_kecepatan,2) - j); return atan((velocity_squared-i) / (G * jarak))*(180/PI);}float ping(){ Serial.println("Mendapatkan jarak..."); durasi panjang; digitalWrite(distance_trig, RENDAH); delayMicroseconds(5); digitalWrite(distance_trig, TINGGI); delayMicroseconds(10); digitalWrite(distance_trig, RENDAH); durasi =pulseIn(jarak_gema, TINGGI); durasi pengembalian / 2 / 29.1; //jarak dalam meter}void home_pitch(){ Serial.println(digitalRead(limit_switch)); if(!digitalRead(limit_switch)){ //Jika sakelar aktif pitch_stepper.rotate(720); } while(digitalRead(limit_switch)){ //Serial.println(digitalRead(limit_switch)); pitch_stepper.move(-32); } pitch_stepper.rotate(2880*2);}
Proses manufaktur
Motor stepper membagi putaran penuh menjadi beberapa langkah yang sama untuk mencapai kontrol posisi yang presisi. Topik diskusi hari ini adalah 28BYJ-48 unipolar delapan ketukan empat fase motor stepper permanen yang digerakkan oleh magnet. Misalkan Anda sedang mengerjakan sebuah proyek dan membu
Motor adalah komponen penting saat mengubah energi dalam koneksi sistem Anda. Yang penting, bagi penggemar elektronik yang mencari motor, prioritas Anda adalah menemukan motor yang andal dengan efisiensi motor tinggi. Oleh karena itu, artikel ini membahas motor stepper nema23, konfigurasi pinnya, sp
Izinkan kami membantu mengajari Anda cara memilih perusahaan untuk perbaikan motor stepper Anda. Apa itu Motor Stepper? Motor stepper adalah perangkat elektromekanis yang mencapai gerakan mekanis dari konversi pulsa listrik. Alih-alih tegangan yang diberikan secara terus-menerus, ia digerakkan ol
Komponen dan Koneksi Sistem Sherline CNC. Komponen Sistem 1) Handwheel manual 1-5/8″2) Motor stepper sumbu Z3) Dudukan motor stepper4) Mill vertikal Sherline dengan aksesori standar (Model 2000 mill ditampilkan)5) Cadangan CD penginstalan Linux/EMC2, CD instruksi Sherline6) Motor stepper sumbu Y7