Indholdsfortegnelse:

Arduino kontrolleret robotarm m/ 6 frihedsgrader: 5 trin (med billeder)
Arduino kontrolleret robotarm m/ 6 frihedsgrader: 5 trin (med billeder)

Video: Arduino kontrolleret robotarm m/ 6 frihedsgrader: 5 trin (med billeder)

Video: Arduino kontrolleret robotarm m/ 6 frihedsgrader: 5 trin (med billeder)
Video: Lesson 92: Controlling Multiple servo each with potentiometer| Arduino Step By Step Course 2024, Juli
Anonim
Arduino kontrolleret robotarm m/ 6 frihedsgrader
Arduino kontrolleret robotarm m/ 6 frihedsgrader
Arduino kontrolleret robotarm m/ 6 frihedsgrader
Arduino kontrolleret robotarm m/ 6 frihedsgrader
Arduino kontrolleret robotarm m/ 6 frihedsgrader
Arduino kontrolleret robotarm m/ 6 frihedsgrader

Jeg er medlem af en robotgruppe, og hvert år deltager vores gruppe i en årlig Mini-Maker Faire. Fra 2014 besluttede jeg at bygge et nyt projekt til hvert års begivenhed. På det tidspunkt havde jeg cirka en måned før begivenheden til at sammensætte noget og anede ikke, hvad jeg ville gøre.

Et medmedlem sendte et link til "en interessant open source robotarmsbygning", der toppede min interesse. Planerne var bare en arm uden kontroller eller en controller. I betragtning af mine tidsbegrænsninger virkede det som et rigtig godt udgangspunkt. Det eneste problem var, at jeg virkelig ikke havde nogen værktøjer til at komme i gang.

Ved hjælp af nogle af gruppemedlemmerne kunne jeg få skåret akryldelene og sendt til mig samt de to 3D -udskrevne dele vist herunder. Kombineret med nogle hardware -ordrer natten over og flere ture til den lokale isenkræmmer afsluttede jeg et arbejdsprojekt natten før begivenheden!

Som normalt er der mere i historien og flere inkarnationer til bygningen, der er blevet kondenseret til det, du ser nedenfor. Hvis du har interesse i baghistorien, kan du finde mere her:

Trin 1: Hvad du har brug for - Hardware og elektronik

Hvad du har brug for - Hardware og elektronik
Hvad du har brug for - Hardware og elektronik
Hvad du har brug for - hardware og elektronik
Hvad du har brug for - hardware og elektronik

Den originale projektdesigner boede i Europa og brugte efterfølgende metriske målinger og materialer, der er almindelige der. For eksempel var pressebrættet, han brugte til kroppen, en standard på 5 mm tyk. Lignende materiale her i USA er 1/8 som er omkring 3,7 mm tykt. Dette efterlod et hul i åbningerne, der oprindeligt var designet til at blive pressemonteret. I stedet for at korrigere tegningerne brugte jeg simpelthen Gorilla Lim til at sikre disse samlinger.

Han brugte også M3 gevindskruede møtrikker og bolte, som ikke er standard i din lokale isenkræmmer i USA. I stedet for at konvertere disse til lokalt tilgængelige valgmuligheder, bestilte jeg simpelthen hardware online som vist i min liste nedenfor.

  • 22 - M3 x 0,5 x 23 mm afstand
  • 15 - M3 x 15 mm afstandsstykker
  • 40 - M3 skruer
  • M3 sekskantnødder
  • M3 25 mm skruer
  • 1 - Forår
  • 3/4 "dobbeltsidet monteringstape
  • 5 - SG 5010 TowerPro Servo
  • 1 - SG92R TowerPro miniservo
  • 1 - SG90 TowerPro miniservo
  • 2,54 mm enkeltrække lige stifthoved
  • 1 - Brødbræt i halv størrelse
  • 1 - Kvindelige/mandlige 'forlængelse' jumperwire - 40 x 6"
  • 1 - 12 "x 24" blå akrylark eller laserskårne stykker fra din foretrukne tjenesteudbyder
  • 2 - 3 mm x 20 mm + 4 mm x 5 mm ledelejerafstandsstykker 3D -printet (se nedenfor)
  • 1 - Kontrolpanel *Se note i ledningsafsnittet
  • 1 - Diffunderet RGB (trefarvet) 10 mm LED
  • 1 - Arduino Uno
  • 1 - Standard LCD 16x2 + ekstra - hvid på blå
  • 1 - i2c / SPI karakter LCD rygsæk
  • 1-Adafruit 16-kanals 12-bit PWM/Servo Driver
  • 1 - MCP3008 - 8 -kanals 10 -bit ADC med SPI -interface
  • 3 - JoyStick Breakout Modulesensor *Se note i ledningsafsnittet
  • DC Barrel Jack
  • AC til DC adapter
  • Servo forlængerkabler - forskellige længder

Næsten alle delene til denne arm blev skåret fra 1/8 tommer akryl. De to ledelejeringsafstandsstykker skal dog udskrives. Den originale konstruktion krævede også, at de to fælles afstandsstykker blev 7 mm høje til lejeakslen. Da jeg begyndte at samle overarmen, blev det hurtigt klart, at disse var for høje på grund af højden på TowerPro -servoerne. Jeg skulle have lavet nye ledlejer med en base på kun 3 mm høje, som i øvrigt stadig var lidt for høje, men overskuelige. Du vil være opmærksom på den relative højde på dine servoer og tage højde for afstanden mellem de to underarme:

Servohøjde + servohorn + ledleje + dobbeltsidet tape = 47 mm +/- 3 mm.

Trin 2: Armmontering

Arm samling
Arm samling
Arm samling
Arm samling
Arm samling
Arm samling
Arm samling
Arm samling

Inden du begynder, skal du sørge for at centrere alle dine servoer! Hvis du på et hvilket som helst tidspunkt under konstruktionen, hvis du manuelt flytter servoens position, bliver nødt til at gentage den, før du fastgør den til rammen. Dette er især vigtigt med skulderservoerne, der altid skal bevæge sig i fællesskab.

  1. Fastgør basisservoen til den øverste bundplade ved hjælp af M3 25 mm skruer og sekskantmøtrikker. BEMÆRK: Det kan være en god ide at anvende låsestramme på gevindene for at minimere, at møtrikkerne løsner under brug.

  2. Hvis du bruger den deleliste, jeg har ovenfor, vil du derefter gerne samle de 5 bundafstandsstykker ved at tråde 2 hver af M3 x 0,5 x 23 mm afstandsstykker sammen og derefter fastgøre dem til den øverste bundplade med sekskantmøtrikker.
  3. Fastgør den nederste bundplade til standoffs med 5 M3 skruer.
  4. Fastgør skulderpladen til de to servomontageplader ved hjælp af et sikkert akrylklæbemiddel. Jeg brugte Gorilla Lim her. BEMÆRK: Hver af de to servoplader har et hul i ryggen, som gør det muligt at indsætte et forstærkningsafstandsstykke, der forbinder dem. Sørg for, at hullerne er på linje!* Mens du har limen ved hånden, skal du gå videre og forbinde håndledsmonteringspladen med griberens hovedplade.* Du kan eventuelt også lime håndledsservopladen til de to håndledsforbindelsesplader. Jeg gjorde ikke dette valg i stedet for at bolt dem sammen med standoffs som beskrevet nedenfor.
  5. Fastgør den nu hærdede skulder til basisservoen. Jeg brugte det bredeste horn, der fulgte med servoen, som var det seks stangmonterede horn.

  6. Tilføjelse af underarmsrammen til skulderservoerne kan være vanskelig. Jeg foreslår at sikre hornene til underarmens rammer, inden du fortsætter. BEMÆRK: Sørg for at centrere dine servoer til skulderenheden, FØR du fastgør dem til rammen. Disse to servoer skal bevæge sig i fællesskab, og hvis de er forkert justeret, vil det i det mindste forårsage servo -jitter og, hvis det er forkert justeret nok, kan det beskadige rammen eller servoerne. * Hver af skulder -servoerne er monteret med deres beslag på bagsiden af monteringspladerne i stedet for at føre servoerne gennem pladerne - dette giver dig mulighed for at skubbe hornet på servoakslen i en vinkel og sikre skruen. Fastgør endnu ikke servoen til monteringspladen. * Tilføj derefter den indre servo og monter armen
  7. Saml overarmsrammen og servoer ved at skubbe servoerne gennem mellemrummene i armene og derefter indsætte afstandsstykkerne mellem begge overarmsplader og fastgør dem med M3 -skruer.
  8. Tilføj dobbeltklæbende tape på bagsiden af albueleddets afstandsstykke og trim overskydende.
  9. Fastgør afstandsstykket til bunden af servoen, der fungerer som albueaktuatoren.
  10. Skub overarmenheden ind i den nederste armmonteringsramme, og fastgør servohornsskruerne.
  11. Tilføj forstærkningsafstand mellem to underarmsplader. Jeg brugte to i stedet for alle fire til at sænke vægten.
  12. Tilføj dobbeltklæbende tape på bagsiden af afstandsstykket på det øvre håndled og trim det overskydende.
  13. Fastgør afstandsstykket til bunden af servoen, der fungerer som håndledsaktuatoren.
  14. Fastgør den ydre håndledsplade til håndledets servohorn og fastgør den med en hornskrue.
  15. Saml håndledsservopladen med de to håndledsfelter og afstandsstykker.
  16. Fastgør håndledsservoen på servopladen med servoklemmen.
  17. Du bliver nødt til at fastgøre håndledshornet til servoen, før griberen monteres på hornet på grund af åbningen til hornskruen er blokeret.
  18. Monter griberstykkerne løst for at passe, før du fastgør griberens servohorn til servoen. Dette giver dig plads til at skrue hornet ned i det foregående trin.
  19. Fastgør griberhornet til servoen, og stram yderligere skruerne, der holder griberforbindelserne. BEMÆRK: Spænd ikke disse møtrikker og bolte helt, da de skal være løse for at griberen kan bevæge sig.

Trin 3: Ledningsføring og kontrolpanel

Kabelføring og kontrolpanel
Kabelføring og kontrolpanel
Kabelføring og kontrolpanel
Kabelføring og kontrolpanel
Kabelføring og kontrolpanel
Kabelføring og kontrolpanel

Jeg byggede dette projekt som en udviklingsplatform for nogle ideer, jeg har til et senere uddannelsesprojekt. Så de fleste af mine forbindelser er simple dupont -stik. Den eneste lodning, jeg lavede, var til MCP3008. Hvis du kan finde et breakout board til denne komponent, så skal du være i stand til at konstruere denne armlodning fri.

Der er 3 grupper af komponenter:

  1. Indgange - Disse elementer tager oplysninger fra brugeren og består af joysticks og mcp3008 ADC.
  2. Output - Disse elementer formidler data til verden enten ved at vise status til brugeren eller opdatere servoer med positionsdata. Disse varer er LCD -skærmen, LCD -rygsæk, RGB -LED, Servo -driverkortet og sidst servoer.
  3. Behandling - Arduino indpakker den sidste gruppe, der tager data fra input og skubber data ud til output i henhold til kodeinstruktionerne.

Fritzing -skematikken ovenfor beskriver stiftforbindelserne til alle komponenterne.

Indgange

Vi starter med input. Joysticks er analoge enheder - hvilket betyder, at de præsenterer en variabel spænding som input til Arduino. Hver af de tre joysticks har to analoge udgange til X og Y (op, ned, venstre til højre), hvilket giver i alt 6 indgange til Arduino. Mens Arduino Uno har 6 analoge indgange til rådighed, skal vi bruge to af disse ben til I2C -kommunikation til skærmen og servokontrolleren.

På grund af dette indarbejdede jeg MCP3008 analog til digital konverter (ADC). Denne chip tager op til 8 analoge indgange og konverterer dem til et digitalt signal over Arduinos SPI -kommunikationsnåle som følger:

  • MCP Pins 1-6> Variable udgange af tommelfinger joysticks
  • MCP Pins 7 & 8> Ingen forbindelse
  • MCP Pin 9 (DGND)> Jord
  • MCP Pin 10 (CS/SHDN)> Uno Pin 12
  • MCP Pin 11 (DIN)> Uno Pin 11
  • MCP Pin 12 (DOUT)> Uno Pin 10
  • MCP Pin 13 (CLK)> Uno Pin 9
  • MCP Pin 14 (AGND)> Jord
  • MCP Pin 15 & 16> +5V

Joystickforbindelserne i skematikken er kun vist som et eksempel. Afhængigt af hvilke joysticks der købes, og hvordan de er monteret, kan dine forbindelser afvige fra mine. Forskellige mærker på joysticket kan have en anden pinout og kan også orientere X og Y forskelligt. Det, der er vigtigt, er at forstå, hvad hvert input på ADC repræsenterer. Hver pin repræsenterer følgende forhold i min kode:

  • Pin 1 - Basen - Analoge data på denne pin roterer den laveste servo på robotten
  • Pin 2 - Skulderen - Analoge data på denne pin vil rotere de to servoer over basisservoen
  • Pin 3 - Albuen - Analoge data på denne pin vil rotere den næste servo op fra skulder servoer
  • Pin 4 - UP/DN Wrist - Analoge data på denne pin vil dreje håndledsservoen, hæve og sænke griberenheden
  • Pin 5 - Griberen - Analoge data på denne pin åbner og lukker griberen
  • Pin 6 - Rotate Wrist - Analoge data på denne pin roterer griberen

BEMÆRK: Når du køber og monterer de tommelfinger joysticks, der refereres til i listen med dele, skal du huske på, at orienteringen af modulerne kan afvige fra min, så test x og y udgange for korrekt forbindelse til ADC. Hvis du også bruger mit 3D -printede kontrolpanel, kan monteringshullerne muligvis forskydes fra mit.

Udgange

Adafruit PWM/Servo Controller gør dette projekt superenkelt. Tilslut bare servoerne til servohovederne, og alle strøm- og signalforbindelser håndteres. Medmindre du finder servoer med ekstra lange ledninger, vil du gerne have et sæt servokabelforlængere i forskellige længder, så alle dine servokabler når dit controllerkort.

Servoer er forbundet som følger:

  • Position 0 - Base servo
  • Position 1 - Skulder servo (Servo Y -kabel)
  • Position 2 - Albue Servo
  • Position 3 - Håndled 1 Servo
  • Position 4 - Gripper Servo
  • Position 5 - Wrist 2 Servo

Derudover er VCC og V + begge forbundet til +5 volt, og GND er forbundet til jord.

BEMÆRK 1: En STOR note her: Forsyningsspændingen for hele projektet kommer ind gennem strømklemrækken på Servokontrolkortet. V+ pin på Servo Controller leverer faktisk strøm fra terminalblokken til resten af kredsløbet. Hvis du har brug for at programmere din Uno, anbefaler jeg stærkt at frakoble V+ -pinden, før du slutter Uno til din pc, da den nuværende trækning fra servoerne kan beskadige din USB -port.

BEMÆRK 2: Jeg bruger en 6V AC til DC vægadapter til at drive projektet. Jeg anbefaler en adapter, der kan levere mindst 4A strøm, så når en eller flere af servoerne bliver bundet, brænder den pludselige stigning i strømmen ikke dit system og nulstiller din Arduino.

16X2 LCD -skærmen er forbundet til Adafruit LCD -rygsæk for at drage fordel af I2C -grænsefladen, der allerede bruges af Servo Controller. SCL'en på Servo Controlleren og CLK'en på rygsækken forbinder begge til Pin A5 på Uno. På samme måde kan SDA'en på Servo -controlleren og DAT'en på rygsækken begge forbindes til Pin A4 på Uno. Derudover er 5V tilsluttet +5 volt, og GND er forbundet til jord. LAT på rygsækken er ikke forbundet med noget.

Endelig er RGB LED'en forbundet til ben 7 (RØD), 6 (grøn) og 5 (blå) på Uno. Jordens ben på LED'en er forbundet til jorden via en 330Ohm modstand.

Forarbejdning

Sidst men ikke mindst er resten af Arduino -forbindelserne, der ikke er anført ovenfor, som følger: Pin 5V er forbundet til +5 volt, og GND er forbundet til jord.

I min opsætning brugte jeg sideskinnerne på brødbrættet til at binde alle strøm- og jordledningerne sammen samt I2C -benene til alle enhederne.

Trin 4: Kode

Kode
Kode

Som tidligere nævnt bygger jeg oprindeligt dette projekt som en demonstration for min lokale Maker Faire. Jeg havde til hensigt, at det var noget for børn og voksne at lege med, mens vi var på vores bod. Som det viser sig, var det langt mere populært, end jeg havde forestillet mig - så meget, at børn kæmpede om det. Så da tiden kom til en omskrivning, indarbejdede jeg en "Demotilstand", der implementerer en tidsbegrænsning.

Armen sidder der og venter på, at nogen skal flytte et joystick, og når de gør det, starter den en 60 sekunders timer. I slutningen af de 60 sekunder stopper den med at tage input fra brugeren og "hviler" i 15 sekunder. Kort opmærksomhed strækker sig over at være, hvad de er, denne hvileperiode reducerede i høj grad striden om stick -tid.

Grundlæggende betjening

Koden, der er anført i referenceafsnittet herunder, er ret simpel. Et array holder styr på de 6 led med min, max extents, en hjemmeposition og den aktuelle position. Når armen tændes, definerer opstartsfunktionen de biblioteker, der kræves for at tale med MCP3008, LCD -rygsækken (og efterfølgende skærmen), og definerer LED -stifterne. Derfra foretager det en grundlæggende systemkontrol og fortsætter med at få armen hjem. Hjemmefunktionen starter med griberen og arbejder sig ned til basen, så den minimerer chancen for binding under normale forhold. Hvis armen er helt udstrakt, kan det være bedst at manuelt sætte armen i hus, før du tænder den. Da generiske servoer ikke giver feedback om dens position, er vi nødt til at placere hver enkelt på et foruddefineret punkt og holde styr på, hvor langt hver som flyttet.

Hovedløkken starter først i en ventetilstand - på udkig efter joysticks til at bevæge sig væk fra deres midterposition. Når det sker, ændrer hovedsløjfen tilstandene til nedtællingstilstand. Når brugeren bevæger hvert joystick, vil joystickets relative position fra midten tilføje til eller trække fra den aktuelle kendte position og opdatere den relevante servo. Når en servo har nået sin definerede grænse i en retning, stopper joysticket. Brugeren skal flytte joysticket i den anden retning for at flytte det igen. Dette er en softwaregrænse, der skal pålægges servoerne, uanset deres hardware -stop. Denne funktion giver dig mulighed for at holde armens bevægelser inden for et specifikt operationsområde, hvis det er nødvendigt. Hvis joysticket slippes til midten, stopper bevægelsen.

Denne kode er blot et generelt udgangspunkt. Du kan tilføje dine egne tilstande, som du ønsker. Et eksempel kan være en timerløs kontinuerlig kørselstilstand eller måske tilføje joystick-trykknapper som input og skrive en optagelse/afspilningstilstand.

Trin 5: Links og ressourcer

Armreferencer

  • Indlæg, der inspirerede dette projekt
  • Originale designers blogindlæg Min egen robotarm Mine miniservogribere og færdige robotarm Multiplicer robotarmen og elektronikken
  • Thingiverse Arm
  • Thingiverse Mini Servo Gripper

Software Libries

  • Adafruit PWM/Servo Controller -ressourcer
  • MCP3008 bibliotek
  • MCP3008 Datablad

Kontrolpanel og kode

  • Tinkercad tegning af panelet jeg lavede
  • Nuværende kodelager

Anbefalede: