Sisällysluettelo:

Yksinkertainen ja älykäs robottivarsi Arduinon avulla !!!: 5 vaihetta (kuvilla)
Yksinkertainen ja älykäs robottivarsi Arduinon avulla !!!: 5 vaihetta (kuvilla)

Video: Yksinkertainen ja älykäs robottivarsi Arduinon avulla !!!: 5 vaihetta (kuvilla)

Video: Yksinkertainen ja älykäs robottivarsi Arduinon avulla !!!: 5 vaihetta (kuvilla)
Video: 14 интересных товаров и гаджетов с Aliexpress, которые вам пригодятся 2024, Kesäkuu
Anonim
Image
Image
Asioita, joita tarvitset
Asioita, joita tarvitset

Tässä ohjeessa teen yksinkertaisen robottivarren. Sitä ohjataan päävarren avulla. Käsi muistaa liikkeet ja pelaa peräkkäin. Konsepti ei ole uusi Sain idean "minirobotti -käsivarsilta" Stoerpeakilta. Halusin tehdä tämän jo pitkään, mutta silloin olin täysin noob ja minulla ei ollut tietoa ohjelmoinnista. Nyt vihdoin rakennan sellaisen, pidän sen yksinkertaisena, halvalla ja jaan sen teidän kaikkien kanssa.

Aloitetaan siis….

Vaihe 1: Tarvitsemasi asiat:-

Asioita, joita tarvitset
Asioita, joita tarvitset
Asioita, joita tarvitset
Asioita, joita tarvitset

Tässä on luettelo tarvitsemistasi asioista:-

1. Servomoottorit x 5 Linkki Yhdysvaltoihin:- https://amzn.to/2OxbSH7Link for Europe:-

2. Potentiometrit x 5 (olen käyttänyt 100 kt.) Linkki Yhdysvaltoihin:- https://amzn.to/2ROjhDMLink for Europe:-

3. Arduino UNO. (Voit käyttää myös Arduino Nanoa) Linkki Yhdysvalloille:- https://amzn.to/2DBbENWLink for Europe:-

4. Leipälauta. (Ehdotan tätä sarjaa) Linkki meille:- https://amzn.to/2Dy86w4Link for Europe:-

5. Akku. (valinnainen, käytän 5v -sovitinta)

6. Pahvi/puu/aurinkopaneeli/akryyli mitä tahansa on saatavilla tai helppo löytää.

Ja tarvitset myös Arduino IDE: n asennettuna.

Vaihe 2: Varren valmistus:-

Käden valmistus
Käden valmistus
Käden valmistus
Käden valmistus

Tässä olen käyttänyt Popsicle -tikkuja käsivarren valmistamiseen. Voit käyttää mitä tahansa saatavilla olevaa materiaalia. Ja voit kokeilla erilaisia mekaanisia malleja tehdäksesi vielä paremman käsivarren. suunnitteluni ei ole kovin vakaa.

Kiinnitin vain kaksipuolista teippiä servojen kiinnittämiseen Popsicle -tikkuun ja kiinnitin ne ruuveilla.

Master -käsivarteen liimasin potentiometrit popsicle -tikkuihin ja tein varren.

Kuviin viittaaminen antaa sinulle paremman idean.

Olen asentanut kaiken A4 -kokoiselle kankaalle, jota käytetään pohjana.

Vaihe 3: Yhteyksien luominen:-

Yhteyksien luominen
Yhteyksien luominen
Yhteyksien luominen
Yhteyksien luominen
Yhteyksien luominen
Yhteyksien luominen

Tässä vaiheessa teemme kaikki tarvittavat liitännät, katso yllä olevat kuvat.

  • Liitä ensin kaikki servot rinnakkain virtalähteen kanssa (punainen johto +ve: hen ja musta tai ruskea johto Gnd: ään)
  • Liitä seuraavaksi signaalijohdot eli keltainen tai oranssi johto arduinon PWM -nastaan.
  • Kytke nyt potentiometrit arduinon +5v ja Gnd rinnakkain.
  • Liitä keskiliitin ardunion analogiseen nastaan.

Tässä digitaalisia nastoja 3, 5, 6, 9 ja 10 käytetään servojen ohjaamiseen

Analogisia nastoja A0 - A4 käytetään tuloon potentiometreistä.

Nastaan 3 kytkettyä servoa ohjataan potentiometrillä, joka on kytketty A0: een

Nastaan 5 kytkettyä servoa ohjataan potilla A1: llä ja niin edelleen.

Huomaa:- Vaikka servoja ei käytetä arduino, varmista, että liität servojen Gnd: n arduinoon, muuten varsi ei toimi.

Vaihe 4: Koodaus:-

Koodaus
Koodaus

Tämän koodin logiikka on melko yksinkertainen: potentiometrien arvot tallennetaan taulukkoon, jonka jälkeen tietueet kulkevat for -silmukan avulla ja servot suorittavat arvojen mukaiset vaiheet. Voit tarkistaa tämän opetusohjelman, jota käytin viitteeksi "Arduino Potentiometer Servo Control & Memory"

Koodi:- (Alla oleva ladattava tiedosto liitteenä.)

Ensin ilmoitamme kaikki tarvittavat muuttujat maailmanlaajuisesti, jotta voimme käyttää niitä koko ohjelman ajan. Tähän ei tarvita erityistä selitystä

#sisältää

// Servo -objektit Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentiometrikohteet int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Muuttuja tallennettavaan servoasentoon int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Tallennettava muuttuja Edelliset sijaintiarvot int Prev_0_Pos; int Prev_1_Pos; int Edelliset_2_Pos; int Edelliset_3_Pos; int Edelliset_4_Pos; // Muuttuja tallennettavaksi Nykyisen sijainnin arvot int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Nykyiset_3_Pos; int Nykyiset_4_Pos; int Servo_Position; // Tallentaa kulman int Servo_Number; // Säilytyspalvelut varastossa [600]; // Matriisi tietojen tallentamiseen (Matriisin koon kasvattaminen kuluttaa enemmän muistia) int Index = 0; // Array -indeksi alkaa 0 -sijainnista char data = 0; // muuttuja tallentaa tietoja sarjatulosta.

Kirjoitamme nyt asetustoiminnon, jossa asetamme nastat ja niiden toiminnot. Tämä on tärkein toiminto, joka suoritetaan ensin

mitätön asennus ()

{Serial.begin (9600); // Sarjaliikenteeseen arduinon ja IDE: n välillä. // Servo -objektit on kiinnitetty PWM -nastoihin. Servo_0.kiinnitys (3); Servo_1.kiinnitys (5); Servo_2.kiinnitys (6); Servo_3.kiinnitys (9); Servo_4.liitäntä (10); // Servot on asetettu 100 asentoon alustuksen yhteydessä. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Tallenna painamalla" R "ja toista" P "); }

Nyt meidän on luettava potentiometrien arvot käyttämällä analogisia sisääntulonappeja ja kartoitettava ne ohjaamaan servoja. Tätä varten määritämme funktion ja annamme sille nimen Map_Pot ();, voit nimetä sen haluamallasi tavalla, se on käyttäjän määrittämä toiminto

mitätön Map_Pot ()

{ / * Servot pyörivät 180 astetta, mutta niiden käyttäminen rajoihin ei ole hyvä idea, koska se saa servot surinaa jatkuvasti, mikä on ärsyttävää, joten rajoitamme servon siirtymisen välillä: 1-179 * / Pot_0 = analogRead (A0); // Lue syötteet potista ja tallenna ne muuttuvaan pottiin0. Servo_0_Pos = kartta (Pot_0, 0, 1023, 1, 179); // Karttaa servot arvon välillä 0 - 1023 Servo_0.write (Servo_0_Pos); // Siirrä servo tähän asentoon. Pot_1 = analoginenLue (A1); Servo_1_Pos = kartta (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analoginen (A2); Servo_2_Pos = kartta (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analoginen luku (A3); Servo_3_Pos = kartta (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analoginenLue (A4); Servo_4_Pos = kartta (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Kirjoitetaan nyt silmukkafunktio:

tyhjä silmukka ()

{Map_Pot (); // Funktion kutsu potin arvojen lukemiseen, kun (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Tallennusliikkeet …"); if (data == 'P') Serial.println ("Tallennettujen siirtojen toistaminen …"); } if (data == 'R') // Jos syötetään 'R', aloita tallennus. {// Tallenna arvot muuttujaan Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Edellinen_3_Pos = Servo_3_Pos; Edellinen_4_Pos = Servo_4_Pos; Map_Pot (); // Karttatoiminto palautetaan vertailuun, jos (abs (Prev_0_Pos == Servo_0_Pos)) // absoluuttinen arvo saadaan vertaamalla {Servo_0.write (Servo_0_Pos); // Jos arvot vastaavat servo sijoitetaan uudelleen, jos (Current_0_Pos! = Servo_0_Pos) // Jos arvot eivät vastaa {Storage [Index] = Servo_0_Pos + 0; // Arvo lisätään taulukkoon Index ++; // Indeksiarvoa lisätty 1} Current_0_Pos = Servo_0_Pos; } /* Samoin arvovertailu tehdään kaikille servoille, +100 lisätään joka kerta syötettäessä differentiaaliarvona. */ jos (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Indeksi ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Indeksi ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indeksi ++; } Current_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); if (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Indeksi ++; } Current_4_Pos = Servo_4_Pos; } / * Arvot tulostetaan sarjamonitoriin, '\ t' tarkoittaa arvojen näyttämistä taulukkomuodossa * / 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 ("Indeksi ="); Serial.println (hakemisto); viive (50); } jos (data == 'P') // JOS 'P' syötetään, aloita tallennettujen siirtojen toisto. {for (int i = 0; i <Index; i ++) // Kulje matriisi käyttämällä silmukkaa {Servo_Number = Storage /100; // Etsii servon määrän Servo_Position = Tallennus % 100; // Etsii servokytkimen asennon (Servonumero) {tapaus 0: Servo_0.write (Servo_Position); tauko; tapaus 1: Servo_1.write (Servo_Position); tauko; tapaus 2: Servo_2.write (Servo_Position); tauko; tapaus 3: Servo_3.write (Servo_Position); tauko; tapaus 4: Servo_4.write (Servo_Position); tauko; } viive (50); }}}

Kun koodi on valmis, lataa se nyt arduino -taululle

Smart -varsi on valmis toimimaan. Toiminto ei ole vielä yhtä sujuva kuin Stoerpeakin.

Jos voit parantaa koodia tai sinulla on ehdotuksia minulle, kerro minulle kommenttiosassa.

Tämän sanottuaan siirrytään testaukseen….

Vaihe 5: Testaus:-

Kun olet ladannut koodin taululle, avaa 'Sarjamonitori', löydät sen Työkalut -vaihtoehdosta. Kun sarjamonitori käynnistyy, arduino nollautuu. Nyt voit ohjata robottivartta päävarren avulla. Mutta mitään ei tallenneta.

Aloita tallennus kirjoittamalla 'R' näyttöön nyt, jolloin voit suorittaa tallennettavat liikkeet.

Kun liikkeet on tehty, sinun on syötettävä 'P', jotta voit toistaa tallennetut liikkeet. Servot suorittavat liikkeitä niin kauan kuin levyä ei ole nollattu.

Suositeltava: