Isi kandungan:
- Langkah 1: Bahan
- Langkah 2: Cetak 3D Lengan Robotik
- Langkah 3: Montaj Elektronik
- Langkah 4: Aplikasi Telefon Pintar
- Langkah 5: Kod Arduino
- Langkah 6: Itu sahaja
Video: Robot Arm Game - Pengawal Telefon Pintar: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
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
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
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 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 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
// 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:
Ubah Telefon Pintar Tidak Digunakan Ke Paparan Pintar: 6 Langkah (dengan Gambar)
Ubah Telefon Pintar yang Tidak Digunakan Ke Paparan Pintar: Tutorial Deze ada di Engels, voor de Nederlandse versie klik hier. Adakah anda mempunyai telefon pintar (lama) yang tidak digunakan? Ubahnya menjadi paparan pintar menggunakan Helaian Google dan beberapa pen dan kertas, dengan mengikuti tutorial langkah demi langkah yang mudah ini. Apabila anda selesai
Lampu LED Pintar yang dikendalikan oleh Telefon Pintar Bluetooth: 7 Langkah
Lampu LED Pintar yang dikendalikan oleh Telefon Pintar Bluetooth: Saya selalu bermimpi untuk mengawal peralatan pencahayaan saya. Kemudian seseorang membuat lampu LED berwarna-warni yang luar biasa. Saya baru-baru ini menemui Lampu LED oleh Joseph Casha di Youtube. Dengan mendapat inspirasi daripadanya, saya memutuskan untuk menambah beberapa fungsi sambil menjaga
Troli Beli-belah Pintar Dikendalikan Telefon Pintar: 7 Langkah
Keranjang Belanja Pintar Terkawal Telefon Pintar: Mengunjungi pusat membeli-belah boleh menyeronokkan. Tetapi menyeret Keranjang Belanja semasa anda mengisinya dengan sesuatu adalah sesuatu yang benar-benar menjengkelkan. Rasa sakit mendorongnya melalui lorong-lorong sempit itu, membuat belokan tajam! Jadi, inilah (jenis) tawaran yang anda
Dail Pintar - Telefon Tradisional Pintar Pembetulan Automatik: 8 Langkah
Panggilan Pintar - Telefon Tradisional Pintar Pembetulan Otomatis: Panggilan Pintar adalah telefon pintar automatik yang pintar yang dibuat untuk warga tua dengan keperluan khas, dan ia membolehkan warga emas menghubungi terus dari telefon tradisional yang biasa mereka gunakan. Hanya melalui sukarela di pusat jagaan warga tua tempatan, saya
Cara Mengawal Suis Pintar Asas Sonoff Berasaskan ESP8266 Dengan Telefon Pintar: 4 Langkah (dengan Gambar)
Cara Mengawal Suis Pintar Asas Sonoff Berasaskan ESP8266 Dengan Telefon Pintar: Sonoff adalah barisan peranti untuk Rumah Pintar yang dibangunkan oleh ITEAD. Salah satu peranti yang paling fleksibel dan murah dari talian tersebut adalah Sonoff Basic. Ia adalah suis berkemampuan Wi-Fi berdasarkan cip hebat, ESP8266. Artikel ini menerangkan cara menyiapkan Cl