Sisukord:

Lihtne ja nutikas robotkäsi Arduino abil !!!: 5 sammu (piltidega)
Lihtne ja nutikas robotkäsi Arduino abil !!!: 5 sammu (piltidega)

Video: Lihtne ja nutikas robotkäsi Arduino abil !!!: 5 sammu (piltidega)

Video: Lihtne ja nutikas robotkäsi Arduino abil !!!: 5 sammu (piltidega)
Video: 30 лучших советов и рекомендаций по Windows 10 на 2020 год 2024, Juuni
Anonim
Image
Image
Asjad, mida vajate
Asjad, mida vajate

Selles juhendis valmistan lihtsa robotkäe. Seda juhitakse juhthoova abil. Käsi mäletab liigutusi ja mängib järjest. Kontseptsioon ei ole uus. Idee sain "minirobotilt Stoerpeakilt". Tahtsin seda juba ammu teha, kuid toona olin totaalne ja ei teadnud programmeerimisest. Nüüd lõpuks ehitan ühe, hoian selle lihtsana, odavalt ja jagan seda teiega.

Nii et alustame….

Samm: asjad, mida vajate:-

Asjad, mida vajate
Asjad, mida vajate
Asjad, mida vajate
Asjad, mida vajate

Siin on nimekiri asjadest, mida vajate:-

1. Servomootorid x 5 Link USA jaoks:- https://amzn.to/2OxbSH7Link Euroopa jaoks:-

2. Potentsiomeetrid x 5 (olen kasutanud 100k.) Link USA jaoks:- https://amzn.to/2ROjhDMLink for Europe:-

3. Arduino UNO. (Võite kasutada ka Arduino Nano) Link USA jaoks:- https://amzn.to/2DBbENWLink Euroopa jaoks:-

4. Leivalaud. (Soovitan seda komplekti) Link USA-le:- https://amzn.to/2Dy86w4Link Euroopa jaoks:-

5. Aku. (valikuline, kasutan 5v adapterit)

6. Papp/puit/päikesepaneel/akrüül, mis kunagi on saadaval või kergesti leitav.

Ja teil on vaja installida ka Arduino IDE.

2. samm: käe valmistamine:-

Käe tegemine
Käe tegemine
Käe tegemine
Käe tegemine

Siin olen käe valmistamiseks kasutanud Popsicle pulgakesi. Võite kasutada kõiki teile kättesaadavaid materjale. Ja võite proovida erinevaid mehaanilisi konstruktsioone, et muuta käed veelgi paremaks. minu disain pole eriti stabiilne.

Ma lihtsalt kasutasin kahepoolset teipi servode kinnitamiseks Popsicle pulga külge ja kinnitasin need kruvidega.

Master -käe jaoks liimisin potensomeetrid popsick -pulgade külge ja tegin käe.

Piltidele viitamine annab teile parema idee.

Olen paigaldanud kõik A4 -formaadis lõuendplaadile, mida kasutatakse alusena.

3. samm: ühenduste loomine:-

Ühenduste loomine
Ühenduste loomine
Ühenduste loomine
Ühenduste loomine
Ühenduste loomine
Ühenduste loomine

Selles etapis teeme kõik vajalikud ühendused, vaadake ülaltoodud pilte.

  • Ühendage esmalt kõik servod paralleelselt toiteallikaga (punane juhe +ve ja must või pruun juhe Gnd -ga)
  • Seejärel ühendage signaalijuhtmed, st kollane või oranž juhe arduino PWM -pistikuga.
  • Nüüd ühendage potentsiomeetrid paralleelselt arduino +5v ja Gnd -ga.
  • Ühendage keskmine terminal ardunio analoogpistikuga.

Siin kasutatakse servode juhtimiseks digitaalseid kontakte 3, 5, 6, 9 ja 10

Potentsiomeetrite sisendiks kasutatakse analoogpistikuid A0 kuni A4.

Pistikuga 3 ühendatud servot juhitakse potentsiomeetriga, mis on ühendatud A0 -ga

Pistikuga 5 ühendatud servot juhitakse potil A1 ja nii edasi….

Märkus:- Kuigi servosid ei toida arduino, ühendage kindlasti servode Gnd arduinoga, vastasel juhul ei tööta käsi.

4. samm: kodeerimine:-

Kodeerimine
Kodeerimine

Selle koodi loogika on üsna lihtne: potentsiomeetrite väärtused salvestatakse massiivi, seejärel liigutatakse kirjed for -ahela abil ja servod teevad väärtustele vastavaid samme. Saate vaadata seda õpetust, mida kasutasin viitamiseks "Arduino potentsiomeetri servo juhtimine ja mälu"

Kood:- (allalaaditav fail on lisatud allpool.)

Esiteks deklareerime kõik vajalikud muutujad globaalselt, et saaksime neid kogu programmi jooksul kasutada. Selle jaoks pole erilist selgitust vaja

#kaasake

// Servoobjektid Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentsiomeetri objektid int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Muutuja Servo positsiooni salvestamiseks int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Muutuja salvestamiseks Eelmise positsiooni väärtused int Prev_0_Pos; int Eelmised_1_Pos; int Eelmised_2_Pos; int Eelmised_3_Pos; int Eelmised_4_Pos; // Muutuja praeguse positsiooni väärtuste salvestamiseks int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Praegune_3_Pos; int Praegune_4_Pos; int Servo_Position; // Salvestab nurga int Servo_Number; // Servo int kaupluste arv Storage [600]; // Massiiv andmete salvestamiseks (massiivi suurendamine võtab rohkem mälu) int Index = 0; // Massiiviindeks algab 0 positsioonist char data = 0; // muutuja jadasisendist andmete salvestamiseks.

Nüüd kirjutame seadistusfunktsiooni, kus määrame tihvtid ja nende funktsioonid. See on peamine funktsioon, mis kõigepealt täidetakse

tühine seadistus ()

{Serial.begin (9600); // jadaühenduseks arduino ja IDE vahel. // Servoobjektid on kinnitatud PWM tihvtide külge. Servo_0.kinnitus (3); Servo_1.kinnitus (5); Servo_2.kinnitus (6); Servo_3.kinnitus (9); Servo_4.kinnitus (10); // Servod on lähtestamisel seatud 100 asendisse. Servo_0.write (100); Servo_1.kirjutada (100); Servo_2.kirjutada (100); Servo_3.kirjutada (100); Servo_4.kirjutada (100); Serial.println ("Vajutage salvestamiseks" R "ja esitamiseks" P "); }

Nüüd peame lugema potentsiomeetrite väärtusi, kasutades analoogsisendi tihvte ja kaardistama need servode juhtimiseks. Selleks määratleme funktsiooni ja nimetame selle Map_Pot ();, saate sellele nimetada mida iganes soovite, see on kasutaja määratud funktsioon

tühine Map_Pot ()

{ / * Servod pöörlevad 180 kraadi, kuid piirangute kasutamine pole hea mõte, kuna see ajab servod pidevalt sumisema, mis on tüütu, nii et piirame servo liikumist: 1-179 * / Pot_0 = analogRead (A0); // Loe poti sisendit ja salvesta see muutuvasse potti0. Servo_0_Pos = kaart (Pot_0, 0, 1023, 1, 179); // Kaardista servod väärtuse vahemikus 0 kuni 1023 Servo_0.write (Servo_0_Pos); // Liigutage servo sellesse asendisse. 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); }

Nüüd kirjutame silmuse funktsiooni:

tühine tsükkel ()

{Map_Pot (); // Funktsioonikõne poti väärtuste lugemiseks samas (Serial.available ()> 0) {data = Serial.read (); if (andmed == 'R') Serial.println ("Salvestus liigub …"); if (andmed == 'P') Serial.println ("Salvestatud käikude esitamine …"); } kui (andmed == 'R') // Kui sisestate 'R', alustage salvestamist. {// Salvesta väärtused muutuja Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Eelmine_2_Pos = Servo_2_Pos; Eelmine_3_Pos = Servo_3_Pos; Eelmine_4_Pos = Servo_4_Pos; Map_Pot (); // Kaardifunktsioon tuletati võrdluseks meelde, kui (abs (Prev_0_Pos == Servo_0_Pos)) // absoluutväärtus saadakse, kui võrrelda {Servo_0.write (Servo_0_Pos); // Kui väärtuste vaste servo paigutatakse ümber, kui (Current_0_Pos! = Servo_0_Pos) // Kui väärtused ei ühti {Storage [Index] = Servo_0_Pos + 0; // Väärtus lisatakse massiivile Index ++; // Indeksiväärtust suurendatud 1} Current_0_Pos = Servo_0_Pos; } /* Sarnaselt tehakse väärtuste võrdlus kõigi servode puhul, +100 lisatakse iga sisestuse jaoks diferentsiaalväärtusena. */ if (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; Indeks ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Eelmine_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Indeks ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Eelmised_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indeks ++; } 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; Indeks ++; } Praegune_4_Pos = Servo_4_Pos; } / * Väärtused trükitakse jadamonitorile, '\ t' on väärtuste kuvamiseks tabelivormingus * / 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 ("Indeks ="); Serial.println (indeks); viivitus (50); } kui (andmed == 'P') // KUI 'P' on sisestatud, alustage salvestatud käikude esitamist. {for (int i = 0; i <Index; i ++) // Massiivi läbimine, kasutades tsüklit {Servo_Number = Storage /100; // Leiab servo arvu Servo_Position = Storage % 100; // Leiab servolüliti asendi (Servo_Number) {case 0: Servo_0.write (Servo_Position); murda; juhtum 1: Servo_1.write (Servo_Position); murda; juhtum 2: Servo_2.write (Servo_Position); murda; juhtum 3: Servo_3.write (Servo_Position); murda; juhtum 4: Servo_4.write (Servo_Position); murda; } viivitus (50); }}}

Kui kood on valmis, laadige see nüüd üles arduino tahvlile

Smart arm on töövalmis. Funktsioon pole veel nii sujuv kui Stoerpeak.

Kui saate koodi paremaks muuta või on teil mingeid ettepanekuid, andke mulle sellest kommentaaride osas teada.

Seda öeldes liigume edasi testimise juurde….

5. samm: testimine:-

Pärast koodi edukale tahvlile üleslaadimist avage jadakuva, mille leiate tööriistade valikust. Kui jadamonitor käivitub, lähtestatakse arduino. Nüüd saate juhthoova abil juhtida robotkätt. Kuid midagi ei salvestata.

Salvestamise alustamiseks sisestage monitorile 'R' ja saate nüüd teha liigutusi, mida soovite salvestada.

Pärast liigutuste tegemist peate salvestatud käikude esitamiseks sisestama 'P'. Servod jätkavad liigutusi seni, kuni plaati pole lähtestatud.

Soovitan: