INHOUDSOPGAWE:

Eenvoudige en slim robotarm met Arduino !!!: 5 stappe (met foto's)
Eenvoudige en slim robotarm met Arduino !!!: 5 stappe (met foto's)

Video: Eenvoudige en slim robotarm met Arduino !!!: 5 stappe (met foto's)

Video: Eenvoudige en slim robotarm met Arduino !!!: 5 stappe (met foto's)
Video: How to use MicroPython on Your Arduino? 2024, November
Anonim
Image
Image
Dinge wat u benodig
Dinge wat u benodig

In hierdie instruksies maak ek 'n eenvoudige robotarm. Dit word beheer met behulp van 'n meesterarm. Die arm sal bewegings onthou en in volgorde speel. Die konsep is nie nuut nie. Ek het die idee gekry van 'mini -robotarm -deur Stoerpeak', ek wou dit lankal maak, maar ek was destyds heeltemal ongemaklik en het geen kennis van programmering gehad nie. Nou bou ek uiteindelik een, hou dit eenvoudig, goedkoop en deel dit met julle almal.

Laat ons dus begin …

Stap 1: Dinge wat u benodig:-

Dinge wat u benodig
Dinge wat u benodig
Dinge wat u benodig
Dinge wat u benodig

Hier is 'n lys van dinge wat u benodig:-

1. Servomotors x 5 Skakel vir die VSA:- https://amzn.to/2OxbSH7Link vir Europa:-

2. Potensiometers x 5 (ek het 100k gebruik.) Skakel vir ons:- https://amzn.to/2ROjhDMLink vir Europa:-

3. Arduino UNO. (U kan ook Arduino Nano gebruik) Skakel vir die VSA:- https://amzn.to/2DBbENWLink vir Europa:-

4. Broodbord. (Ek stel hierdie kit voor) Skakel vir die VSA:- https://amzn.to/2Dy86w4Link vir Europa:-

5. Battery. (opsioneel, ek gebruik 'n 5v -adapter)

6. Karton/hout/sonplank/akriel wat ook al beskikbaar is of maklik gevind kan word.

En u moet ook Arduino IDE geïnstalleer.

Stap 2: Maak die arm:-

Maak die arm
Maak die arm
Maak die arm
Maak die arm

Hier het ek Popsicle -stokke gebruik om die arm te maak. U kan enige materiaal wat tot u beskikking is, gebruik. En u kan verskillende meganiese ontwerpe probeer om die arm nog beter te maak. my ontwerp is nie baie stabiel nie.

Ek het net dubbelband gebruik om die servo's aan die Popsicle -stok vas te maak en dit met skroewe vas te maak.

Vir die Master -arm het ek potensiometers aan popsicle sticks vasgeplak en arm gemaak.

As u na die foto's verwys, kry u 'n beter idee.

Ek het alles gemonteer op 'n seilbord van A4 -grootte wat as basis gebruik is.

Stap 3: Verbindings maak:-

Verbindings maak
Verbindings maak
Verbindings maak
Verbindings maak
Verbindings maak
Verbindings maak

In hierdie stap maak ons al die nodige verbindings; verwys na die foto's hierbo.

  • Koppel eers al die servo's parallel met die kragtoevoer (The Red wire to +ve en Black or Brown Wire to Gnd)
  • Koppel dan die seindrade, dit wil sê geel of oranje draad, aan die PWM -pen van arduino.
  • Koppel nou die potensiometers parallel aan +5v en Gnd van arduino.
  • Koppel die middelste terminaal aan die analoog pen van ardunio.

Hier word Digital Pins 3, 5, 6, 9 & 10 gebruik om die servo's te beheer

Analoog penne A0 tot A4 word gebruik vir die invoer van potensiometers.

Die servo wat aan pen 3 gekoppel is, word beheer deur 'n potensiometer wat op A0 gekoppel is

Servo wat aan pen 5 gekoppel is, word beheer deur pot op A1, ensovoorts ….

Let wel:- Alhoewel servo's nie deur arduino aangedryf word nie, moet u die Gnd van die servo's aan arduino koppel, anders werk die arm nie.

Stap 4: Kodering:-

Kodering
Kodering

Die logika van hierdie kode is redelik eenvoudig, die waardes van potensiometers word in 'n skikking gestoor, waarna die rekords deur 'n for -lus gaan en die servo's die stappe doen volgens die waardes. U kan hierdie handleiding wat ek gebruik het, raadpleeg "Arduino Potentiometer Servo Control & Memory"

Kode:- (Aflaaibare lêer hier onder aangeheg.)

Eerstens verklaar ons al die nodige veranderlikes wêreldwyd sodat ons dit regdeur die program kan gebruik. Hiervoor is geen spesiale verduideliking nodig nie

#insluit

// Servo -voorwerpe Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potensiometer Voorwerpe int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Veranderlik om Servoposisie in Servo_0_Pos op te slaan; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Veranderlik om te stoor Vorige posisie waardes int Prev_0_Pos; int Prev_1_Pos; int Vorige_2_Pos; int Prev_3_Pos; int Vorige_4_Pos; // Veranderlik om huidige posisie waardes int Current_0_Pos op te slaan; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Posisie; // Stoor die hoek int Servo_Number; // Stoor geen van servo int Storage [600]; // Array om data te stoor (toenemende skikking sal meer geheue verbruik) int Index = 0; // Array -indeks begin by 0de posisie char data = 0; // veranderlike om data vanaf seriële invoer te stoor.

Nou skryf ons 'n opstelfunksie, waar ons penne en hul funksies stel. Dit is die belangrikste funksie wat eers uitgevoer word

leemte opstelling ()

{Serial.begin (9600); // Vir seriële kommunikasie tussen arduino en IDE. // Servo -voorwerpe word aan PWM -penne geheg. Servo_0.aanheg (3); Servo_1.aanheg (5); Servo_2.aanheg (6); Servo_3.aanheg (9); Servo_4.aanheg (10); // Servo's word by inisialisering op 100 posisies gestel. Servo_0.write (100); Servo_1.skryf (100); Servo_2.skryf (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Druk 'R' om op te neem en 'P' om te speel"); }

Nou moet ons die waardes van potensiometers lees met behulp van analoge invoerpenne en dit in kaart bring om servo's te beheer. Hiervoor definieer ons 'n funksie en noem dit Map_Pot (); U kan dit alles noem wat u wil, dit is 'n gebruikersgedefinieerde funksie

maak Map_Pot leeg ()

{ / * Die servo's draai 180 grade, maar dit is nie 'n goeie idee om dit tot die uiterste te gebruik nie, aangesien dit die servo's aanhoudend laat gons, wat irriterend is, so ons beperk die servo om te beweeg tussen: 1-179 * / Pot_0 = analogRead (A0); // Lees die insette van die pot en stoor dit in die veranderlike pot_0. Servo_0_Pos = kaart (Pot_0, 0, 1023, 1, 179); // Kaart servo's volgens die waarde tussen 0 en 1023 Servo_0.write (Servo_0_Pos); // Beweeg die servo na daardie posisie. Pot_1 = analogRead (A1); Servo_1_Pos = kaart (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = kaart (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = kaart (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = kaart (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Nou skryf ons lusfunksie:

leemte lus ()

{Map_Pot (); // Funksie -oproep om potwaardes te lees terwyl (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Opneem beweeg …"); if (data == 'P') Serial.println ("Opgetekende bewegings speel …"); } as (data == 'R') // As 'R' ingevoer word, begin opname. {// Stoor die waardes in 'n veranderlike Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Vorige_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Kaartfunksie herroep vir vergelyking as (abs (Prev_0_Pos == Servo_0_Pos)) // absolute waarde verkry word deur {Servo_0.write (Servo_0_Pos) te vergelyk; // As waardes ooreenstem met servo, word dit herposisioneer as (Current_0_Pos! = Servo_0_Pos) // As waardes nie ooreenstem met {Storage [Index] = Servo_0_Pos + 0; // Waarde word toegevoeg tot skikking Index ++; // Indekswaarde verhoog met 1} Current_0_Pos = Servo_0_Pos; } /* Net so word die waardevergelyking vir al die servo's gedoen, +100 word bygevoeg vir die invoer as 'n differensiële waarde. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); as (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Indeks ++; } Huidige_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); as (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Indeks ++; } Huidige_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); as (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indeks ++; } Huidige_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); as (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Indeks ++; } Huidige_4_Pos = Servo_4_Pos; } / * Waardes word op seriële monitor gedruk, '\ t' is vir die vertoon van waardes in tabelformaat * / Serial.print (Servo_0_Pos); Serial.print ("\ t"); Serial.print (Servo_1_Pos); Serial.print ("\ t"); Serial.print (Servo_2_Pos); Serial.print ("\ t"); Serial.print (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("Index ="); Serial.println (indeks); vertraging (50); } as (data == 'P') // AS 'P' ingevoer is, begin opnames beweeg. {for (int i = 0; i <Index; i ++) // Gaan deur die skikking met lus {Servo_Number = Storage /100; // Vind aantal servo Servo_Position = Berging % 100; // Vind posisie van servoskakelaar (Servo_Number) {saak 0: Servo_0.write (Servo_Posisie); breek; saak 1: Servo_1.write (Servo_Position); breek; geval 2: Servo_2.write (Servo_Position); breek; saak 3: Servo_3.write (Servo_Position); breek; saak 4: Servo_4.write (Servo_Position); breek; } vertraging (50); }}}

Sodra die kode gereed is, laai dit nou op na die arduino -bord

Die Smart -arm is gereed om te werk. Die funksie is nog nie so glad soos die van Stoerpeak nie.

As u die kode beter kan maak of voorstelle vir my het, laat weet my asseblief in die kommentaarafdeling.

Met dit gesê, gaan ons voort met die toets …

Stap 5: Toets:-

Nadat u die kode suksesvol na die bord opgelaai het, maak u 'Serial Monitor' oop, u kan dit vind in die opsie Gereedskap. As die seriële monitor begin, sal die arduino herstel word. Nou kan u die robotarm met die hoofarm beheer. Maar niks word aangeteken nie.

Om die opname te begin, voer 'R' in op die monitor, en u kan nou die bewegings uitvoer wat u wil opneem.

Nadat die bewegings gedoen is, moet u 'P' invoer om die aangetekende bewegings te speel. Die servo's sal voortgaan met die bewegings, solank die bord nie herstel word nie.

Aanbeveel: