Სარჩევი:

Robotic Arm Game - სმარტფონის კონტროლერი: 6 ნაბიჯი
Robotic Arm Game - სმარტფონის კონტროლერი: 6 ნაბიჯი

ვიდეო: Robotic Arm Game - სმარტფონის კონტროლერი: 6 ნაბიჯი

ვიდეო: Robotic Arm Game - სმარტფონის კონტროლერი: 6 ნაბიჯი
ვიდეო: My Bluetooth Robotic Arm 2024, ივლისი
Anonim
Robotic Arm Game - სმარტფონის კონტროლერი
Robotic Arm Game - სმარტფონის კონტროლერი

გამარჯობა!

აქ არის სახალისო საზაფხულო თამაში: სმარტფონის მიერ კონტროლირებადი რობოტული მკლავი !!

როგორც ხედავთ ვიდეოზე, თქვენ შეგიძლიათ აკონტროლოთ მკლავი თქვენს სმარტფონზე რამდენიმე ჯოისტიკით.

თქვენ ასევე შეგიძლიათ შეინახოთ ნიმუში, რომლითაც რობოტი გამრავლდება მარყუჟში, რათა შეასრულოს რამდენიმე განმეორებითი დავალება, როგორც მაგალითად. მაგრამ ეს ნიმუში მოდულირებადია როგორც გინდა !!!!

Იყავი კრეატიული !

ნაბიჯი 1: მასალები

მასალები
მასალები

აქ ნახავთ საჭირო მასალას.

დაგიჯდებათ დაახლოებით 50 ევრო ამ რობოტული მკლავის მშენებლობას. პროგრამული უზრუნველყოფა და ინსტრუმენტები შეიძლება შეიცვალოს, მაგრამ მე გამოვიყენე ისინი ამ პროექტისათვის.

ნაბიჯი 2: 3D ბეჭდვა Robotic Arm

3D ბეჭდვა Robotic Arm
3D ბეჭდვა Robotic Arm
3D ბეჭდვა Robotic Arm
3D ბეჭდვა Robotic Arm
3D ბეჭდვა Robotic Arm
3D ბეჭდვა Robotic Arm

Robotic Arm იყო 3D დაბეჭდილი (ჩვენი prusa i3– ით).

ვებგვერდის "HowtoMechatronics.com" წყალობით, მისი STL ფაილები გასაოცარია 3D მკლავის შესაქმნელად.

ყველა ნაწილის დაბეჭდვას დაახლოებით 20 საათი დასჭირდება.

ნაბიჯი 3: ელექტრონული მონტაჟი

ელექტრონული მონტაჟი
ელექტრონული მონტაჟი

მონტაჟი გამოყოფილია 2 ნაწილად:

ელექტრონული ნაწილი, სადაც arduino დაკავშირებულია სერვისებთან ციფრული ქინძისთავებით და Bluetooth მოწყობილობით (Rx, Tx).

დენის ნაწილი, სადაც servos იკვებება 2 ტელეფონის დამტენი (5V, 2A max).

ნაბიჯი 4: სმარტფონის აპლიკაცია

სმარტფონის აპლიკაცია
სმარტფონის აპლიკაცია

აპლიკაცია გაკეთდა აპლიკაციის გამომგონებელზე 2. ჩვენ ვიყენებთ 2 ჯოისტიკს 4 სერვისის გასაკონტროლებლად და კიდევ 2 ღილაკს საბოლოო გრიპის გასაკონტროლებლად.

ჩვენ ვაერთებთ მკლავს და სმარტფონს Bluetooth მოდულის (HC-06) გამოყენებით.

დაბოლოს, დაზოგვის რეჟიმი საშუალებას აძლევს მომხმარებელს შეინახოს 9 -მდე პოზიცია მკლავისთვის.

მკლავი გადადის ავტომატურ რეჟიმში, სადაც ის აღადგენს შენახულ პოზიციებს.

ნაბიჯი 5: Arduino კოდი

არდუინოს კოდი
არდუინოს კოდი
არდუინოს კოდი
არდუინოს კოდი

// 08/19 - Robotic Arm სმარტფონი კონტროლდება

#ჩართეთ #განსაზღვრეთ ჭეშმარიტი ჭეშმარიტი #განსაზღვრეთ ყალბი მცდარი // ******************** დეკლარაციები ***************** ***********

სიტყვის გამეორება; // mot envoyé du module Arduino და სმარტფონი

int chiffre_final = 0; int cmd = 3; // ცვლადი commande du servo moteur (troisième fil (ნარინჯისფერი, ყავისფერი)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activ_saving = 0; სერვო მოტეორი; // on definit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; int კუთხე, angle1, angle3, angle5, angle2; // angle int pas; int r, r1, r2, r3; int რეგისტრატორი; ლოგიკური ფარფლი = FALSE; boolean fin1 = FALSE; ლოგიკური fin2 = FALSE; ლოგიკური fin3 = FALSE; ლოგიკური fin4 = FALSE; სიტყვა w; // ცვლადი ელჩის სმარტფონი და მოდული 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];

// int კუთხე; // ბრუნვის კუთხე (0-180)

//********************ᲐᲬᲧᲝᲑᲐ*************************** ******** void setup () {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 (სმდ); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.atach (cmd3); // moteur4.attach (cmd4); moteur5.atach (cmd5); moteur. წერენ (6); კუთხე = 6; moteur1.write (100); კუთხე 1 = 100; moteur2.write (90); moteur3. დაწერეთ (90); //moteur4.write(12); moteur5. დაწერე (90); კუთხე = 6; კუთხე 1 = 100; კუთხე 2 = 90; კუთხე 3 = 90; კუთხე 5 = 90; სერიული.დაწყება (9600); // permettra de communiquer au module Bluetooth} // ******************** BOUCLE ****************** ***************** void loop () {

// Serial.print ("კუთხე");

//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 = მიმღები (); // სმარტფონის შესახებ ინფორმაციის მიღების შესახებ, ცვლადი w გადამრთველი (w) {შემთხვევა 1: TouchDown_Release (); შესვენება; შემთხვევა 2: TouchDown_Grab (); შესვენება; შემთხვევა 3: Base_Rotation (); შესვენება; შემთხვევა 4: Base_AntiRotation (); შესვენება; შემთხვევა 5: წელის_ბრუნვა (); შესვენება; შემთხვევა 6: წელის_მცირე (); შესვენება; შემთხვევა 7: მესამე_არმის_ბრუნვა (); შესვენება; შემთხვევა 8: მესამე_არმი_ანტიროტაცია (); შესვენება; შემთხვევა 9: მეოთხე_არმის_ბრუნება (); შესვენება; შემთხვევა 10: მეოთხე_არხი_საწინააღმდეგო როტაცია (); შესვენება; // შემთხვევა 11: მეხუთე_არმის_ბრუნვა (); შესვენება; // საქმე 12: მეხუთე_არმიანი_რებრუნვა (); შესვენება; საქმე 21: Serial.print ("საქმის ღილაკი 1"); chiffre_final = 1; sauvegarde_positions1 [0] = კუთხე; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3] sauvegarde_4 = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); შესვენება; შემთხვევა 22: chiffre_final = 2; sauvegarde_positions2 [0] = კუთხე; sauvegarde_positions2 [1] = კუთხე 1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; შესვენება; შემთხვევა 23: chiffre_final = 3; sauvegarde_positions3 [0] = კუთხე; sauvegarde_positions3 [1] = კუთხე 1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = კუთხე 5; შემთხვევა 24: chiffre_final = 4; sauvegarde_positions4 [0] = კუთხე; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; შესვენება; შემთხვევა 25: chiffre_final = 5; sauvegarde_positions5 [0] = კუთხე; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; შესვენება; შემთხვევა 26: chiffre_final = 6; sauvegarde_positions6 [0] = კუთხე; sauvegarde_positions6 [1] = კუთხე 1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; შესვენება; შემთხვევა 27: chiffre_final = 7; sauvegarde_positions7 [0] = კუთხე; sauvegarde_positions7 [1] = კუთხე 1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; შესვენება; საქმე 28: chiffre_final = 8; sauvegarde_positions8 [0] = კუთხე; sauvegarde_positions8 [1] = კუთხე 1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; შესვენება; შემთხვევა 29: chiffre_final = 9; sauvegarde_positions9 [0] = კუთხე; sauvegarde_positions9 [1] = კუთხე 1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; შესვენება;

საქმე 31: Serial.print ("31"); activ_saving = 1; chiffre_final = 0; შესვენება; // დაწყება

საქმე 33: Serial.print ("33"); activ_saving = 0; შესვენება; // ღილაკის შენახვა ნაგულისხმევი: შესვენება; } if (w == 32) {Serial.print ("\ n ხელახლა წარმოება / n ჩიფრის ფინალი:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde პოზიცია 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {სერიული დაბეჭდვა ("\ n / n დასაწყისი / n გადახვევა:"); Serial.print (i); Serial.print ("\ n"); გადართვა (i) {შემთხვევა 1: goto_moteur (*(sauvegarde_positions1)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions1+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions1+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions1+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions1+4)); დაგვიანებით (200); შესვენება; შემთხვევა 2: goto_moteur (*(sauvegarde_positions2)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions2+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions2+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions2+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions2+4)); დაგვიანებით (200); შესვენება; შემთხვევა 3: goto_moteur (*(sauvegarde_positions3)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions3+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions3+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions3+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions3+4)); დაგვიანებით (200); შესვენება; შემთხვევა 4: goto_moteur (*(sauvegarde_positions4)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions4+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions4+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions4+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions4+4)); დაგვიანებით (200); შესვენება; შემთხვევა 5: goto_moteur (*(sauvegarde_positions5)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions5+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions5+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions5+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions5+4)); დაგვიანებით (200); შესვენება; საქმე 6: goto_moteur (*(sauvegarde_positions6)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions6+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions6+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions6+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions6+4)); დაგვიანებით (200); შესვენება; შემთხვევა 7: goto_moteur (*(sauvegarde_positions7)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions7+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions7+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions7+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions7+4)); დაგვიანებით (200); შესვენება; საქმე 8: goto_moteur (*(sauvegarde_positions8)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions8+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions8+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions8+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions8+4)); დაგვიანებით (200); შესვენება; შემთხვევა 9: goto_moteur (*(sauvegarde_positions9)); დაგვიანებით (200); goto_moteur1 (*(sauvegarde_positions9+1)); დაგვიანება (200); goto_moteur2 (*(sauvegarde_positions9+2)); დაგვიანებით (200); goto_moteur3 (*(sauvegarde_positions9+3)); დაგვიანება (200); goto_moteur5 (*(sauvegarde_positions9+4)); დაგვიანებით (200); შესვენება; } Serial.print ("\ n ********************** FIN REPRODUCE ***************** / n "); დაგვიანება (500); }} /*Serial.print ("დებიუტი / 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");*/

დაგვიანება (100); } // ************************** ფუნქციები ****************** ******************

სიტყვა recevoir () {// fonction permettant de recevoir l'information du smartphone

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

Serial.flush ();

დაბრუნება w; }}

void goto_moteur (int angle_destination)

{while (კუთხის_ დანიშნულების კუთხე+საფეხუროვანი კუთხე) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (კუთხის_ დანიშნულება); Serial.print ("\ n angle1 = / t"); Serial.print (კუთხე); if (კუთხის_დანიშნვის კუთხე + ნაბიჯის_კუთხედი) {კუთხე = კუთხე + საფეხურის_კუთხედი; moteur.write (კუთხე);} დაყოვნება (100); } moteur.write (კუთხის_ დანიშნულება); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (კუთხის_ დანიშნულება); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); if (კუთხის_განსაზღვრვის კუთხე 1 +საფეხურის_კუთხედი) {კუთხე 1 += საფეხურკუთხედი; moteur1.write (angle1);;} დაგვიანებით (100); } moteur1.write (კუთხის_ დანიშნულება); } void goto_moteur2 (int angle_destination) {

ხოლო (კუთხის_ დანიშნულების კუთხე 2+ნაბიჯის_კუთხედი)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (კუთხის_ დანიშნულება); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); if (კუთხის_დანიშნვის კუთხე 2 +საფეხურკუთხედი) {კუთხე 2 += საფეხურკუთხედი; moteur2.write (angle2);} დაგვიანებით (100); } moteur2.write (კუთხის_ დანიშნულება); } void goto_moteur3 (int angle_destination) {

ხოლო (კუთხის_ დანიშნულების კუთხე 3+საფეხურის_კუთხედი)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (კუთხის_ დანიშნულება); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); თუ (კუთხის_დანიშნვის კუთხე 3 +საფეხურკუთხედი) {კუთხე 3 += საფეხურკუთხედი; moteur3.write (angle3);} დაგვიანებით (100); } moteur3.write (კუთხის_ დანიშნულება); } void goto_moteur5 (int angle_destination) {

ხოლო (კუთხის_ დანიშნულების კუთხე 5+საფეხურის_კუთხედი)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (კუთხის_ დანიშნულება); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (კუთხის_დანიშნვის კუთხე 5 +საფეხურკუთხედი) {კუთხე 5 += საფეხურკუთხედი; moteur5.write (angle5);} დაგვიანებით (100); } moteur5.write (კუთხის_ დანიშნულება); }

ბათილია TouchDown_Release () // TouchDown ღილაკის გამოშვება

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

ბათილია TouchDown_Grab () // TouchDown Button Grab

{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Base_Rotation () {if (კუთხე 0) {angle = angle-step_angle; } else კუთხე = 0; moteur.write (კუთხე); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else კუთხე 1 = 20; moteur1.write (კუთხე 1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (კუთხე 2); } ბათილია მეოთხე_არქივის_ბრუნება () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (angle3); }

ნაბიჯი 6: ეს არის

მადლობა ყურებისთვის, ვიმედოვნებ, რომ დაგაფასეთ!

თუ მოგეწონათ ეს ინსტრუქცია, შეგიძლიათ აუცილებლად გვეწვიოთ მეტი! =)

გირჩევთ: