Isi kandungan:

Robot Arm Game - Pengawal Telefon Pintar: 6 Langkah
Robot Arm Game - Pengawal Telefon Pintar: 6 Langkah

Video: Robot Arm Game - Pengawal Telefon Pintar: 6 Langkah

Video: Robot Arm Game - Pengawal Telefon Pintar: 6 Langkah
Video: Dikira Warga Gadungan Ternyata Gerakannya Bikin Ngeriii😱 2024, Julai
Anonim
Robot Arm Game - Pengawal Telefon Pintar
Robot Arm Game - Pengawal Telefon Pintar

Helo!

Inilah permainan musim panas yang menyeronokkan: Lengan robotik yang dikendalikan oleh Telefon Pintar !!

Seperti yang anda lihat di Video, anda boleh mengawal Lengan dengan beberapa Joysticks pada telefon pintar anda.

Anda juga dapat menyimpan corak, yang akan dihasilkan oleh robot dalam satu gelung, untuk melakukan beberapa tugas berulang sebagai contoh. Tetapi corak ini dapat diubah mengikut kehendak anda !!!!

Jadilah kreatif!

Langkah 1: Bahan

Bahan
Bahan

Di sini anda dapat melihat bahan yang anda perlukan.

Anda akan memerlukan sekitar 50 € untuk membina Arm robot ini. Perisian dan alat boleh diganti, tetapi saya menggunakannya untuk projek ini.

Langkah 2: Cetak 3D Lengan Robotik

3D Cetak Lengan Robotik
3D Cetak Lengan Robotik
3D Cetak Lengan Robotik
3D Cetak Lengan Robotik
3D Cetak Lengan Robotik
3D Cetak Lengan Robotik

Lengan Robotik dicetak 3D (dengan prusa i3 kami).

Terima kasih kepada laman web "HowtoMechatronics.com", STL Filesnya sangat hebat untuk membina lengan 3D.

Masa akan dicetak sekitar 20 jam untuk mencetak semua kepingan.

Langkah 3: Montaj Elektronik

Montaj Elektronik
Montaj Elektronik

Montaj terpisah dalam 2 bahagian:

Bahagian elektronik, di mana arduino disambungkan ke servo oleh Digital Pins, dan dengan peranti Bluetooth (Rx, Tx).

Bahagian Daya, di mana servo dihidupkan dengan 2 pengecas telefon (5V, maksimum 2A).

Langkah 4: Aplikasi Telefon Pintar

Aplikasi Telefon Pintar
Aplikasi Telefon Pintar

Aplikasi dibuat pada penemu Aplikasi 2. Kami menggunakan 2 Joystick untuk mengawal 4 Servos dan 2 Butang lagi untuk mengawal Grip akhir.

Kami menghubungkan Arm dan Smartphone bersama-sama dengan menggunakan modul Bluetooth (HC-06).

Akhirnya, mod penjimatan membolehkan pengguna menyimpan sehingga 9 posisi untuk Lengan.

Lengan kemudian akan memasuki mod automatik, di mana dia akan menghasilkan semula kedudukan yang disimpan.

Langkah 5: Kod Arduino

Kod Arduino
Kod Arduino
Kod Arduino
Kod Arduino

// 08/19 - Telefon Pintar Robotik dikawal

#include #define TRUE true #define FALSE false // ******************** PENGAKUAN ***************** ***********

wakil perkataan; // mot envoyé du modul telefon pintar Arduino au

int chiffre_final = 0; int cmd = 3; // variabel commande du servo moteur (troisième fil (oren, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activate_saving = 0; Servo moteur; // pada définit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; sudut int, sudut1, sudut3, sudut5, sudut2; // sudut int pas; int r, r1, r2, r3; int pendaftar; sirip boolean = SALAH; boolean fin1 = SALAH; boolean fin2 = SALAH; boolean fin3 = SALAH; boolean fin4 = SALAH; perkataan w; // pemboleh ubah envoyé du smartphone au modul Arduino int sauvegarde_positions1 [5]; int sauvegarde_positions2 [5]; int sauvegarde_positions3 [5]; int sauvegarde_positions4 [5]; int sauvegarde_positions5 [5]; int sauvegarde_positions6 [5]; int sauvegarde_positions7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_positions9 [5];

// sudut int; // sudut putaran (0 a 180)

// ******************** PENYEDIAAN *************************** ******** persediaan kosong () {sauvegarde_positions1 [0] = sauvegarde_positions1 [1] = sauvegarde_positions1 [2] = sauvegarde_positions1 [3] = sauvegarde_positions1 [4] = 0; sauvegarde_positions2 [0] = sauvegarde_positions2 [1] = sauvegarde_positions2 [2] = sauvegarde_positions2 [3] = sauvegarde_positions2 [4] = 0; sauvegarde_positions3 [0] = sauvegarde_positions3 [1] = sauvegarde_positions3 [2] = sauvegarde_positions3 [3] = sauvegarde_positions3 [4] = 0; sauvegarde_positions4 [0] = sauvegarde_positions4 [1] = sauvegarde_positions4 [2] = sauvegarde_positions4 [3] = sauvegarde_positions4 [4] = 0; sauvegarde_positions5 [0] = sauvegarde_positions5 [1] = sauvegarde_positions5 [2] = sauvegarde_positions5 [3] = sauvegarde_positions5 [4] = 0; sauvegarde_positions6 [0] = sauvegarde_positions6 [1] = sauvegarde_positions6 [2] = sauvegarde_positions6 [3] = sauvegarde_positions6 [4] = 0; sauvegarde_positions7 [0] = sauvegarde_positions7 [1] = sauvegarde_positions7 [2] = sauvegarde_positions7 [3] = sauvegarde_positions7 [4] = 0; sauvegarde_positions8 [0] = sauvegarde_positions8 [1] = sauvegarde_positions8 [2] = sauvegarde_positions8 [3] = sauvegarde_positions8 [4] = 0; sauvegarde_positions9 [0] = sauvegarde_positions9 [1] = sauvegarde_positions9 [2] = sauvegarde_positions9 [3] = sauvegarde_positions9 [4] = 0; moteur.attach (cmd); // pada relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); sudut = 6; moteur1.write (100); sudut1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); sudut = 6; sudut1 = 100; sudut2 = 90; sudut3 = 90; sudut5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************** BOUCLE ****************** ***************** gelung kosong () {

// Serial.print ("sudut");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t ") Serial.print (angle3); Serial.print (" / t "); Serial.print (angle5); Serial.print (" / n ");

//Serial.print("angle ");

int i; w = penerima (); // on va recevoir une information du smartphone, la variable w switch (w) {case 1: TouchDown_Release (); rehat; kes 2: TouchDown_Grab (); rehat; kes 3: Base_Rotation (); rehat; kes 4: Base_AntiRotation (); rehat; kes 5: Pinggang_Rotasi (); rehat; kes 6: Waist_AntiRotation (); rehat; kes 7: Ketiga_Arm_Rotasi (); rehat; kes 8: Third_Arm_AntiRotation (); rehat; kes 9: Keempat_Arm_Rotasi (); rehat; kes 10: Keempat_Arm_AntiRotasi (); rehat; // kes 11: Kelima_Arm_Rotasi (); rehat; // kes 12: Kelima_Arm_AntiRotation (); rehat; kes 21: Serial.print ("case case 1"); chiffre_final = 1; sauvegarde_positions1 [0] = angle; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3; sauvegarde_ = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); rehat; kes 22: chiffre_final = 2; sauvegarde_positions2 [0] = angle; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = sudut5; rehat; kes 23: chiffre_final = 3; sauvegarde_positions3 [0] = angle; sauvegarde_positions3 [1] = angle1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = sudut5; putus; kes 24: chiffre_final = 4; sauvegarde_positions4 [0] = angle; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = sudut5; rehat; kes 25: chiffre_final = 5; sauvegarde_positions5 [0] = angle; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = sudut5; rehat; kes 26: chiffre_final = 6; sauvegarde_positions6 [0] = angle; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = sudut5; rehat; kes 27: chiffre_final = 7; sauvegarde_positions7 [0] = angle; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = sudut5; rehat; kes 28: chiffre_final = 8; sauvegarde_positions8 [0] = angle; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = sudut5; rehat; kes 29: chiffre_final = 9; sauvegarde_positions9 [0] = angle; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = sudut5; rehat;

kes 31: Serial.print ("31"); activate_saving = 1; chiffre_final = 0; rehat; // MULA

kes 33: Serial.print ("33"); activate_saving = 0; rehat; // BUTTON JIMAT lalai: rehat; } if (w == 32) {Serial.print ("\ nReproduce / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde kedudukan 1: / n"); untuk (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde kedudukan 2: / n"); untuk (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde kedudukan 3: / n"); untuk (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} untuk (i = 1; i <= chiffre_final; i ++) {Serial. cetak ("\ n / n BEGIN / nLop:"); Serial.print (i); Serial.print ("\ n"); tukar (i) {kes 1: goto_moteur (* (sauvegarde_positions1)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions1 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions1 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions1 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions1 + 4)); kelewatan (200); rehat; kes 2: goto_moteur (* (sauvegarde_positions2)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions2 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions2 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions2 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions2 + 4)); kelewatan (200); rehat; kes 3: goto_moteur (* (sauvegarde_positions3)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions3 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions3 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions3 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions3 + 4)); kelewatan (200); rehat; kes 4: goto_moteur (* (sauvegarde_positions4)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions4 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions4 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions4 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions4 + 4)); kelewatan (200); rehat; kes 5: goto_moteur (* (sauvegarde_positions5)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions5 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions5 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions5 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions5 + 4)); kelewatan (200); rehat; kes 6: goto_moteur (* (sauvegarde_positions6)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions6 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions6 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions6 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions6 + 4)); kelewatan (200); rehat; kes 7: goto_moteur (* (sauvegarde_positions7)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions7 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions7 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions7 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions7 + 4)); kelewatan (200); rehat; kes 8: goto_moteur (* (sauvegarde_positions8)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions8 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions8 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions8 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions8 + 4)); kelewatan (200); rehat; kes 9: goto_moteur (* (sauvegarde_positions9)); kelewatan (200); goto_moteur1 (* (sauvegarde_positions9 + 1)); kelewatan (200); goto_moteur2 (* (sauvegarde_positions9 + 2)); kelewatan (200); goto_moteur3 (* (sauvegarde_positions9 + 3)); kelewatan (200); goto_moteur5 (* (sauvegarde_positions9 + 4)); kelewatan (200); rehat; } Serial.print ("\ n *********************** FIN REPRODUCE ***************** / n "); kelewatan (500); }} /*Serial.print ("debut / n"); Serial.print (sauvegarde_positions1 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions2 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions3 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions4 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [4]); Serial.print ("\ n");

Serial.print ("\ nfin / n"); * /

kelewatan (100); } // **************************** FUNGSI ****************** ******************

kata penerima () {// fonction permettant de recevoir l'information du smartphone

jika (Serial.available ()) {w = Serial.read ();

Serial.flush ();

pulangan w; }}

batal goto_moteur (int sudut_destinasi)

{while (angle_destination angle + step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (sudut_destinasi); Serial.print ("\ n angle1 = / t"); Serial.print (sudut); if (angle_destination angle + step_angle) {angle = angle + step_angle; moteur.write (angle);} kelewatan (100); } moteur.write (sudut_destinasi); } batal goto_moteur1 (int angle_destination) {sementara (angle_destination angle1 + step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (sudut_destinasi); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); jika (angle_destination angle1 + step_angle) {angle1 + = step_angle; moteur1.write (angle1);;} kelewatan (100); } moteur1.write (sudut_destinasi); } batal goto_moteur2 (int angle_destination) {

sambil (sudut_destinasi sudut2 + step_angle)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (sudut_destinasi); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); jika (angle_destination angle2 + step_angle) {angle2 + = step_angle; moteur2.write (angle2);} kelewatan (100); } moteur2.write (sudut_destinasi); } batal goto_moteur3 (int angle_destination) {

sambil (sudut_destinasi sudut3 + step_angle)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (sudut_destinasi); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); jika (angle_destination angle3 + step_angle) {angle3 + = step_angle; moteur3.write (angle3);} kelewatan (100); } moteur3.write (sudut_destinasi); } batal goto_moteur5 (int angle_destination) {

sambil (sudut_destinasi sudut5 + step_angle)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (sudut_destinasi); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); jika (angle_destination angle5 + step_angle) {angle5 + = step_angle; moteur5.write (angle5);} kelewatan (100); } moteur5.write (sudut_destinasi); }

batal TouchDown_Release () // Pelepasan Butang TouchDown

{if (angle5 <180) {angle5 = angle5 + step_angle_mini; } moteur5.write (sudut5); }

batal TouchDown_Grab () // Ambil Butang TouchDown

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (sudut5); } batal Base_Rotation () {if (sudut 0) {angle = angle-step_angle; } sudut lain = 0; moteur.write (sudut); } batal Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } sudut lain1 = 20; moteur1.write (sudut1); } batal Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (sudut2); } batal Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (sudut3); }

Langkah 6: Itu sahaja

Terima kasih kerana menonton, saya harap anda menghargai!

Sekiranya anda menyukai Instructable ini, anda pasti boleh mengunjungi kami untuk lebih banyak lagi! =)

Disyorkan: