Innholdsfortegnelse:

Arduino kontrollert robotarm med 6 frihetsgrader: 5 trinn (med bilder)
Arduino kontrollert robotarm med 6 frihetsgrader: 5 trinn (med bilder)

Video: Arduino kontrollert robotarm med 6 frihetsgrader: 5 trinn (med bilder)

Video: Arduino kontrollert robotarm med 6 frihetsgrader: 5 trinn (med bilder)
Video: Six axis robotic arm Base on ROS-Kinetic and V-REP 2024, Juli
Anonim
Arduino kontrollert robotarm med 6 frihetsgrader
Arduino kontrollert robotarm med 6 frihetsgrader
Arduino kontrollert robotarm med 6 frihetsgrader
Arduino kontrollert robotarm med 6 frihetsgrader
Arduino kontrollert robotarm med 6 frihetsgrader
Arduino kontrollert robotarm med 6 frihetsgrader

Jeg er medlem av en robotikkgruppe, og hvert år deltar gruppen vår i en årlig Mini-Maker Faire. Fra 2014 bestemte jeg meg for å bygge et nytt prosjekt for hvert års arrangement. På den tiden hadde jeg omtrent en måned før hendelsen til å sette sammen noe og ante ikke hva jeg ville gjøre.

Et medmedlem la ut en lenke til "en interessant åpen kildekode robotarmbygning" som toppet min interesse. Planene var bare en arm uten kontroller eller kontroller. Med tanke på mine tidsbegrensninger virket det som et veldig godt utgangspunkt. Det eneste problemet var at jeg egentlig ikke hadde noen verktøy for å komme i gang.

Ved hjelp av noen av gruppemedlemmene klarte jeg å få kuttet og sendt akryldelene til meg i tillegg til de to 3D -trykte delene vist nedenfor. Kombinert med noen maskinvareordrer over natten og flere turer til den lokale maskinvarebutikken, fullførte jeg et arbeidsprosjekt kvelden før arrangementet!

Som det vanligvis er tilfellet, er det mer i historien og flere inkarnasjoner til bygget som har blitt kondensert til det du ser nedenfor. Hvis du har interesse for historien bak, kan du finne mer her:

Trinn 1: Det du trenger - Maskinvare og elektronikk

Det du trenger - Maskinvare og elektronikk
Det du trenger - Maskinvare og elektronikk
Det du trenger - Maskinvare og elektronikk
Det du trenger - Maskinvare og elektronikk

Den opprinnelige prosjektdesigneren bodde i Europa og brukte deretter metriske målinger og materialer som er vanlige der. For eksempel var pressbrettet han brukte til kroppen en standard på 5 mm tykk. Lignende materiale her i USA er 1/8 som er omtrent 3,7 mm tykt. Dette etterlot et hull i åpningene som opprinnelig var designet for å være pressmontert. I stedet for å korrigere tegningene brukte jeg ganske enkelt Gorilla Lim for å sikre disse skjøtene.

Han brukte også M3 gjengede muttere og bolter som ikke er standard i din lokale jernvarehandel i USA. I stedet for å konvertere disse til lokalt tilgjengelige alternativer, bestilte jeg ganske enkelt maskinvaren online som vist i delelisten nedenfor.

  • 22 - M3 x 0,5 x 23 mm avstand
  • 15 - M3 x 15 mm avstandsstykker
  • 40 - M3 skruer
  • M3 sekskantmutter
  • M3 25 mm skruer
  • 1 - Vår
  • 3/4 "dobbeltsidig monteringstape
  • 5 - SG 5010 TowerPro Servo
  • 1 - SG92R TowerPro miniservo
  • 1 - SG90 TowerPro miniservo
  • 2,54 mm enkel rad rett pinneoverskrift
  • 1 - Brødbrett i halv størrelse
  • 1 - Kvinnelige/mannlige forlengelsesledninger for forlengelse - 40 x 6"
  • 1 - 12 "x 24" blå akrylark eller laserskårne stykker fra din favorittleverandør
  • 2-3 mm x 20 mm + 4 mm x 5 mm leddavstandsstykker 3D -trykt (se nedenfor)
  • 1 - Kontrollpanel *Se merknad i ledningsdelen
  • 1 - Diffusert RGB (trefarget) 10 mm LED
  • 1 - Arduino Uno
  • 1 - Standard LCD 16x2 + statister - hvitt på blått
  • 1 - i2c / SPI karakter LCD -ryggsekk
  • 1-Adafruit 16-kanals 12-biters PWM/servodriver
  • 1 - MCP3008 - 8 -kanals 10 -biters ADC med SPI -grensesnitt
  • 3 - JoyStick Breakout Modulesensor *Se merknad i ledningsdelen
  • DC fat Jack
  • AC til DC adapter
  • Servo forlengelseskabler - forskjellige lengder

Nesten alle delene til denne armen ble kuttet av 1/8 tommer akryl De to leddavstandsstykkene må imidlertid skrives ut. Den originale designet ba også om at de to felles avstandsholderene var 7 mm høye til lagerakselen. Da jeg begynte å montere overarmen ble det raskt klart at disse var for høye på grunn av høyden på TowerPro -servoene. Jeg måtte lage nye leddlagre med en base på bare 3 mm høye, som forresten fortsatt var litt for høye, men håndterbare. Du vil legge merke til den relative høyden på servoene dine og ta hensyn til avstanden mellom de to underarmene:

Servohøyde + servohorn + leddlager + dobbeltsidig tape = 47 mm +/- 3 mm.

Trinn 2: Armmontering

Armmontering
Armmontering
Armmontering
Armmontering
Armmontering
Armmontering
Armmontering
Armmontering

Sørg for å sentrere alle servoene dine før du begynner! Hvis du når som helst under konstruksjonen, hvis du manuelt flytter posisjonen til servoen, må du sette den på nytt før du fester den til rammen. Dette er spesielt viktig med skulderservoene som alltid trenger å bevege seg i samklang.

  1. Fest baseservoen til den øverste bunnplaten ved hjelp av M3 25 mm skruer og sekskantmuttere. MERK: Det kan være lurt å påføre gjengene låst for å minimere at mutrene løsner under bruk.

  2. Hvis du bruker delelisten jeg har ovenfor, vil du deretter montere de 5 basisavstandsstykkene ved å tre 2 hver av M3 x 0,5 x 23 mm avstandsstykker sammen og deretter feste dem til den øvre bunnplaten med sekskantmuttere.
  3. Fest den nedre bunnplaten til avstandene med 5 M3 -skruer.
  4. Fest skulderplaten til de to servomonteringsplatene ved hjelp av et akrylsikkert lim. Jeg brukte Gorilla Lim her. MERK: Hver av de to servoplater har et hull på baksiden som gjør det mulig å sette inn et forsterkningsavstandsstykke som forbinder dem. Sørg for at hullene står på linje!* Mens du har limet tilgjengelig, kan du gå sammen og feste håndleddsmonteringsplaten med griperens hovedplate.* Alternativt kan du også lime håndleddservoplaten til de to håndleddsplatene. Jeg gjorde ikke dette ved å velge å skru disse sammen med avstander som beskrevet nedenfor.
  5. Fest den nå herdede skulderenheten til basisservoen. Jeg brukte det bredeste hornet som fulgte med servoen, som var det seks stengelmonteringshornet.

  6. Det kan være vanskelig å legge til underarmen til skulderservoene. Jeg foreslår at du fester hornene til underarmsrammene før du fortsetter. MERK: Sørg for å sentrere servoene dine for skulderenheten FØR du fester dem til rammen. Disse to servoene må bevege seg i samklang, og hvis de er feiljustert, vil det i det minste forårsake servojitter og, hvis det er feiljustert nok, kan det skade rammen eller servoene. * Hver av skulder -servoene er montert med brakettene på baksiden av festeplatene i stedet for å føre servoene gjennom platene - dette lar deg skyve hornet på servoakselen i en vinkel og sikre skruen. Ikke fest servoen til festeplaten ennå. * Deretter legger du til den indre servoen og monterer armen
  7. Monter overarmsrammen og servoene ved å skyve servoene gjennom mellomrommene i armene og deretter sette avstandsstykkene mellom begge overarmplatene og fest med M3 -skruer.
  8. Legg på dobbeltsidig teip på baksiden av avstandsstykket på albueleddet og trim overflødig.
  9. Fest avstandsstykket til bunnen av servoen som vil fungere som albueaktuatoren.
  10. Sett overarmenheten inn i underarmen og fest servoskruene.
  11. Legg til forsterkningsavstand mellom to underarmsplater. Jeg brukte to i stedet for alle fire for å senke vekten.
  12. Legg på dobbeltsidig teip på baksiden av avstandsstykket på det øvre håndleddet og trim overflødig.
  13. Fest avstandsstykket til bunnen av servoen som vil fungere som håndleddsaktuatoren.
  14. Fest den ytre håndleddsplaten til servohornet for håndleddet og fest den med en skrue.
  15. Monter håndleddservoplaten med de to håndleddsplatene og avstandene.
  16. Fest håndleddservoen på servoplaten med servoklemmen.
  17. Du må feste håndleddet til servoen før du fester griperenheten til hornet på grunn av at åpningen for hornskruen er blokkert.
  18. Monter gripestykkene løst for å passe før du fester griperens servohorn til servoen. Dette gir deg plass til å skru ned hornet i forrige trinn.
  19. Fest griperhornet til servoen og stram skruene som holder gripeleddene ytterligere. MERK: Ikke stram disse mutrene og boltene helt, da de må være løse for at griperen skal kunne bevege seg.

Trinn 3: Kabling og kontrollpanel

Kabling og kontrollpanel
Kabling og kontrollpanel
Kabling og kontrollpanel
Kabling og kontrollpanel
Kabling og kontrollpanel
Kabling og kontrollpanel

Jeg bygde dette prosjektet som en utviklingsplattform for noen ideer jeg har for et senere utdanningsprosjekt. Så de fleste av tilkoblingene mine er enkle dupont -kontakter. Det eneste loddet jeg gjorde var for MCP3008. Hvis du kan finne et utbruddstavle for denne komponenten, bør du være i stand til å konstruere denne armlodden gratis.

Det er 3 grupper av komponenter:

  1. Innganger - Disse elementene tar inn informasjon fra brukeren og består av styrespakene og mcp3008 ADC.
  2. Utganger - Disse elementene formidler data til verden enten ved å vise status til brukeren eller oppdatere servoene med posisjonsdata. Disse elementene er LCD -skjermen, LCD -ryggsekken, RGB -LED, Servo -driverkortet og til slutt servoene.
  3. Behandling - Arduino pakker inn den siste gruppen som tar inn data fra inngangene og skyver data ut til utgangene i henhold til kodeinstruksjonene.

Fritzing -skjemaet ovenfor beskriver stiftforbindelsene for alle komponentene.

Innganger

Vi starter med inngangene. Styrespakene er analoge enheter - noe som betyr at de presenterer en variabel spenning som inngang til Arduino. Hver av de tre joystickene har to analoge utganger for X og Y (opp, ned, venstre til høyre) og utgjør totalt 6 innganger til Arduino. Mens Arduino Uno har 6 analoge innganger tilgjengelig, må vi bruke to av disse pinnene for I2C -kommunikasjon til skjermen og servokontrolleren.

På grunn av dette integrerte jeg MCP3008 analog til digital omformer (ADC). Denne brikken tar opp til 8 analoge innganger og konverterer dem til et digitalt signal over Arduinos SPI -kommunikasjonsnåler som følger:

  • MCP-pinner 1-6> Variable utganger for tommel joysticks
  • MCP Pins 7 & 8> Ingen tilkobling
  • MCP Pin 9 (DGND)> Bakken
  • 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)> Bakken
  • MCP Pin 15 & 16> +5V

Joystick -tilkoblingene i skjematikken er bare vist for et eksempel. Avhengig av hvilke joysticks som kjøpes og hvordan de er montert, kan tilkoblingene dine avvike fra mine. Ulike merker på joysticken kan ha en annen pinout og kan også orientere X og Y annerledes. Det som er viktig er å forstå hva hver inngang på ADC representerer. Hver pin representerer følgende forhold i koden min:

  • Pin 1 - Base - Analoge data på denne pin vil rotere den laveste servoen på roboten
  • Pin 2 - The Shoulder - Analoge data på denne pin vil rotere de to servoene over basisservoen
  • Pinne 3 - albuen - Analoge data på denne pinnen roterer neste servo opp fra skulder -servoen
  • Pinne 4 - UP/DN Håndledd - Analoge data på denne pinnen vil rotere håndleddservoen, heve og senke griperenheten
  • Pin 5 - Gripper - Analoge data på denne pin vil åpne og lukke griperen
  • Pinne 6 - Roter håndleddet - Analoge data på denne pinnen roterer griperen

MERK: Når du kjøper og monterer tommel joystickene som er referert til i delelisten, må du huske på at orienteringen til modulene kan avvike fra min, så test x og y utgangene for riktig tilkobling til ADC. Hvis du bruker mitt 3D -trykte kontrollpanel, kan monteringshullene forskyves fra mitt.

Utganger

Adafruit PWM/Servo Controller gjør dette prosjektet superenkelt. Bare koble servoene til servooverskriftene, og alle strøm- og signaltilkoblinger håndteres. Med mindre du finner servoer med ekstra lange ledninger, vil du få et sett med servokabelforlengelser i forskjellige lengder, slik at alle servokablene når frem til kontrollerkortet.

Servoer er koblet til som følger:

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

I tillegg er VCC og V + begge koblet til +5 volt og GND er koblet til jord.

MERKNAD 1: En STOR merknad her: Forsyningsspenningen for hele prosjektet kommer inn gjennom strømklemmeblokken på Servokontrollkortet. V+ -pinnen på servokontrolleren leverer faktisk strøm fra rekkeklemmen til resten av kretsen. Hvis du trenger å programmere din Uno, anbefaler jeg på det sterkeste å koble fra V+ -pinnen før du kobler Uno til PC -en, ettersom strømmen fra servoene kan skade USB -porten.

MERKNAD 2: Jeg bruker en 6V AC til DC veggadapter for å drive prosjektet. Jeg anbefaler en adapter som kan levere minst 4A strøm, slik at når en eller flere av servoene blir bundet, vil den plutselige økningen i strømmen ikke brune ut systemet og tilbakestille Arduino.

16X2 LCD -skjermen er koblet til Adafruit LCD -ryggsekk for å dra nytte av I2C -grensesnittet som allerede brukes av Servokontrolleren. SCL på servokontrolleren og CLK på ryggsekken kobles begge til pin A5 på Uno. På samme måte kobles SDA på servokontrolleren og DAT på ryggsekken til Pin A4 på Uno. I tillegg er 5V koblet til +5 volt og GND er koblet til jord. LAT på ryggsekken er ikke koblet til noe.

Til slutt er RGB -LED -en koblet til pinne 7 (RØD), 6 (grønn) og 5 (blå) på Uno. Jordbenet på LED -en er koblet til Ground gjennom en 330Ohm motstand.

Behandling

Sist, men ikke minst, er resten av Arduino -tilkoblingene som ikke er nevnt ovenfor, som følger: Pin 5V er koblet til +5 volt og GND er koblet til Ground.

I oppsettet mitt brukte jeg sideskinnene på brødbrettet til å knytte alle kraft- og jordledningene sammen, så vel som I2C -pinnene for alle enhetene.

Trinn 4: Kode

Kode
Kode

Som nevnt tidligere, bygde jeg opprinnelig dette prosjektet som en demonstrasjon for min lokale Maker Faire. Jeg tenkte at det skulle være noe for barn og voksne å leke med mens de var på boden vår. Som det viser seg, var det mye mer populært enn jeg hadde sett for meg - så mye at barn kjempet om det. Så da det var på tide å skrive om, innlemmet jeg en "Demomodus" som implementerer en tidsbegrensning.

Armen sitter der og venter på at noen skal flytte en joystick, og når de gjør det, starter den en 60 sekunders timer. På slutten av de 60 sekundene slutter den å ta innspill fra brukeren og "hviler" i 15 sekunder. Kort oppmerksomhet strekker seg over det de er, denne hvileperioden reduserte striden om stikktid kraftig.

Grunnleggende bruk

Koden oppført i referansedelen nedenfor er ganske enkel. En matrise holder oversikt over de 6 leddene med min, maksimal lengde, en hjemmeposisjon og den nåværende posisjonen. Når armen slås på, definerer oppstartsfunksjonen bibliotekene som kreves for å snakke med MCP3008, LCD -ryggsekken (og deretter skjermen), og definerer LED -pinnene. Derfra sjekker den en grunnleggende systemkontroll og fortsetter å sette armen hjem. Hjemmefunksjonen starter med griperen og jobber seg ned til basen slik at den minimerer sjansen for binding under normale forhold. Hvis armen er helt forlenget, kan det være best å manuelt sette armen hjem før du slår den på. Siden generiske servoer ikke gir tilbakemelding på posisjonen, må vi plassere hver enkelt på et forhåndsdefinert punkt og holde oversikt over hvor langt hver enkelt flyttes.

Hovedløkken starter først i ventemodus - på jakt etter styrespakene for å bevege seg bort fra senterposisjonen. Når det skjer, endrer hovedløkken tilstandene til nedtellingstilstand. Når brukeren flytter hver joystick, vil den relative posisjonen til joysticken fra midten legge til eller trekke fra den nåværende kjente posisjonen og oppdatere den aktuelle servoen. Når en servo har nådd sin definerte grense i en retning, stopper joysticken. Brukeren må flytte joysticken i den andre retningen for å flytte den igjen. Dette er en programvaregrense for servoer uansett maskinvarestopp. Denne funksjonen lar deg beholde armbevegelsene innenfor et spesifisert operasjonsområde om nødvendig. Hvis styrespaken slippes til midten, vil bevegelsen stoppe.

Denne koden er bare et generelt utgangspunkt. Du kan legge til dine egne moduser som du vil. Ett eksempel kan være en timerløs kontinuerlig kjøremodus eller kanskje legge til joystick-knappene som innganger og skrive en opptaks-/avspillingsmodus.

Trinn 5: Lenker og ressurser

Armreferanser

  • Innlegg som inspirerte dette prosjektet
  • Originale designers blogginnlegg Min egen robotarm Min miniservogrip og fullført robotarm Multipliser robotarmen og elektronikken
  • Thingiverse Arm
  • Thingiverse Mini Servo Gripper

Software Libries

  • Adafruit PWM/Servo Controller Resources
  • MCP3008 bibliotek
  • MCP3008 Datablad

Kontrollpanel og kode

  • Tinkercad -tegning av panelet jeg laget
  • Gjeldende kodelager

Anbefalt: