Innehållsförteckning:

Arduino kontrollerad robotarm med 6 frihetsgrader: 5 steg (med bilder)
Arduino kontrollerad robotarm med 6 frihetsgrader: 5 steg (med bilder)

Video: Arduino kontrollerad robotarm med 6 frihetsgrader: 5 steg (med bilder)

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

Jag är medlem i en robotgrupp och varje år deltar vår grupp i en årlig Mini-Maker Faire. Från och med 2014 bestämde jag mig för att bygga ett nytt projekt för varje års evenemang. På den tiden hade jag ungefär en månad innan evenemanget att sätta ihop något och hade ingen aning om vad jag ville göra.

En kollega lade upp en länk till "en intressant öppen källkod för robotarmar" som ökade mitt intresse. Planerna var bara en arm utan kontroller eller kontroller. Med tanke på mina tidsbegränsningar verkade det som en riktigt bra utgångspunkt. Det enda problemet var att jag egentligen inte hade några verktyg för att komma igång.

Med hjälp av några av gruppmedlemmarna kunde jag skära och skicka akryldelarna till mig samt de två 3D -tryckta delarna som visas nedan. Kombinerat med några hårdvarubeställningar över natten och flera resor till den lokala järnaffären slutförde jag ett fungerande projekt natten innan evenemanget!

Som vanligt är det mer i historien och flera inkarnationer till byggnaden som har kondenserats till vad du ser nedan. Om du är intresserad av den bakre historien kan du hitta mer här:

Steg 1: Vad du behöver - Hårdvara och elektronik

Vad du behöver - Hårdvara och elektronik
Vad du behöver - Hårdvara och elektronik
Vad du behöver - Hårdvara och elektronik
Vad du behöver - Hårdvara och elektronik

Den ursprungliga projektdesignern bodde i Europa och använde därefter metriska mätningar och material som är vanliga där. Till exempel var pressbrädan han använde för kroppen en standard på 5 mm tjock. Liknande material här i USA är 1/8 som är ungefär 3,7 mm tjockt. Detta lämnade ett gap i öppningarna som ursprungligen var avsedda att pressmonteras. I stället för att korrigera ritningarna använde jag helt enkelt Gorilla Lim för att säkra dessa skarvar.

Han använde också M3 gängade muttrar och bultar som inte är standard i din lokala järnaffär i USA. Istället för att konvertera dessa till lokalt tillgängliga alternativ, beställde jag helt enkelt hårdvaran online som visas i min listning nedan.

  • 22 - M3 x 0,5 x 23 mm avstånd
  • 15 - M3 x 15 mm distanser
  • 40 - M3 skruvar
  • M3 sexkantmuttrar
  • M3 25 mm skruvar
  • 1 - Vår
  • 3/4 "dubbelsidig monteringstejp
  • 5 - SG 5010 TowerPro Servo
  • 1 - SG92R TowerPro miniservo
  • 1 - SG90 TowerPro miniservo
  • 2,54 mm enkelradig rak stifthuvud
  • 1 - Halvstor brödbräda
  • 1 - Förlängningstrådar för kvinnor/män - 40 x 6 tum
  • 1 - 12 "x 24" blå akrylark eller laserskurna bitar från din favoritleverantör
  • 2-3 mm x 20 mm + 4 mm x 5 mm skarvlager distanser 3D -tryckta (se nedan)
  • 1 - Kontrollpanel *Se anmärkning i kabeldelen
  • 1 - Diffuserad RGB (trefärgad) 10 mm LED
  • 1 - Arduino Uno
  • 1 - Standard LCD 16x2 + tillbehör - vitt på blått
  • 1 - i2c / SPI -karaktär LCD -ryggsäck
  • 1-Adafruit 16-kanals 12-bitars PWM/servodrivrutin
  • 1 - MCP3008 - 8 -kanals 10 -bitars ADC med SPI -gränssnitt
  • 3 - JoyStick Breakout Modul Sensor *Se anmärkning i kabeldelen
  • DC Barrel Jack
  • AC till DC adapter
  • Servo förlängningskablar - olika längder

Nästan alla delar till denna arm skars från 1/8 tum akryl. De två skarvlagren måste dock skrivas ut. Också, originaldesignen krävde att de två gemensamma distansbaserna skulle vara 7 mm höga till lageraxeln. När jag började montera överarmen blev det snabbt klart att dessa var för höga på grund av höjden på TowerPro -servon. Jag var tvungen att få nya ledlager gjorda med en bas på bara 3 mm hög, som förresten fortfarande var lite för hög men hanterbar. Du kommer att vilja notera den relativa höjden på dina servon och ta hänsyn till avståndet mellan de två nedre armarna:

Servohöjd + servohorn + ledlager + dubbelsidig tejp = 47 mm +/- 3 mm.

Steg 2: Armmontering

Armmontering
Armmontering
Armmontering
Armmontering
Armmontering
Armmontering
Armmontering
Armmontering

Innan du börjar, se till att centrera alla dina servon! Om du vid något tillfälle under konstruktionen, om du manuellt flyttar servos position, måste du lägga in den igen innan du sätter fast den på ramen. Detta är särskilt viktigt med axelservon som alltid behöver röra sig i samklang.

  1. Fäst basserven på den övre bottenplattan med M3 25 mm skruvar och sexkantmuttrar. Dra inte för hårt! OBS: Du kanske vill applicera låstät på gängorna för att minimera att muttrarna lossnar under användning.

  2. Om du använder dellistan som jag har ovan, kommer du sedan att vilja montera de 5 basdistanserna genom att trä 2 var och en av M3 x 0,5 x 23 mm Standoffs tillsammans och sedan fästa dem på den övre bottenplattan med sexkantmuttrar.
  3. Fäst den nedre bottenplattan på avstånden med 5 M3 -skruvar.
  4. Fäst axelplattan på de två servomonteringsplattorna med ett akrylsäkert lim. Jag använde Gorilla Lim här. OBS: Var och en av de två servoplattorna har ett hål på baksidan som gör det möjligt att sätta in en förstärkningsdistans som ansluter dem. Se till att hålen är i linje!* Medan du har limmet till hands, gå vidare och fäst handledsmonteringsplattan med greppens huvudplatta.* Alternativt kan du även limma handledsservoplattan på de två handledsplattorna. Jag gjorde inte det här valet istället för att bulta ihop dessa med avstånd som beskrivs nedan.
  5. Fäst den nu härdade axelnheten till basserven. Jag använde det bredaste hornet som medföljde servon som var det sexstammiga monteringshornet.

  6. Att lägga till underarmsramen till axelservon kan vara svårt. Jag föreslår att du sätter fast hornen på underarmsramarna innan du fortsätter. OBS: Se till att centrera dina servon för axelmontaget INNAN du fäster dem på ramen. Dessa två servon måste röra sig i samklang och om de är feljusterade kommer det åtminstone att orsaka servojitter och, om det är tillräckligt felriktat, kan det skada ramen eller servon. * Var och en av axelservon är monterade med sina fästen på baksidan av monteringsplattorna istället för att föra servon genom plattorna - detta gör att du kan skjuta hornet på servoaxeln i en vinkel och säkra skruven. Fäst inte ännu servon på monteringsplattan. * Lägg sedan till den inre servon och montera armen
  7. Montera överarmsramen och servon genom att skjuta servona genom mellanrummen i armarna och sedan föra in distanserna mellan båda överarmsplattorna och fäst med M3 -skruvar.
  8. Lägg till dubbelhäftande tejp på baksidan av armbågsfogens distans och trimma överskottet.
  9. Fäst distansen på botten av servon som fungerar som armbågsaktuatorn.
  10. Skjut in överarmsenheten i underarmsramen och fäst servohornsskruvarna.
  11. Lägg till förstärkningsavstånd mellan två underarmsplattor. Jag använde två istället för alla fyra för att sänka vikten.
  12. Lägg till dubbelhäftande tejp på baksidan av distansbrickan på den övre handleden och trimma överskottet.
  13. Fäst distansen på botten av servon som fungerar som handledsmanövreringen.
  14. Fäst den yttre handledsplattan på servoshornet för handlederna och fäst med en hornskruv.
  15. Montera handledsservoplattan med de två handledsplattorna och distanserna.
  16. Fäst handledservon på servoplattan med servoklämplattan.
  17. Du måste fästa handledshornet på servon innan du fäster gripenheten på hornet på grund av att öppningen för hornskruven är blockerad.
  18. Montera gripstyckena löst för att passa innan du fäster gripservohornet på servon. Detta ger dig utrymme att skruva ner hornet i föregående steg.
  19. Fäst griparhornet på dess servo och dra åt skruvarna som håller kvar gripfogarna. OBS: dra inte åt muttrarna och bultarna helt eftersom de måste vara lösa för att griparen ska kunna röra sig.

Steg 3: Kabeldragning och kontrollpanel

Kabeldragning och kontrollpanel
Kabeldragning och kontrollpanel
Kabeldragning och kontrollpanel
Kabeldragning och kontrollpanel
Kabeldragning och kontrollpanel
Kabeldragning och kontrollpanel

Jag byggde det här projektet som en utvecklingsplattform för några idéer jag har för ett senare utbildningsprojekt. Så de flesta av mina anslutningar är enkla dupont -kontakter. Det enda lödet jag gjorde var för MCP3008. Om du kan hitta en brytbräda för denna komponent, bör du kunna konstruera denna armlödning fri.

Det finns tre grupper av komponenter:

  1. Ingångar - Dessa objekt tar in information från användaren och består av joysticks och mcp3008 ADC.
  2. Utgångar - Dessa objekt överför data till världen antingen genom att visa status för användaren eller uppdatera servon med positionsdata. Dessa artiklar är LCD -skärmen, LCD -ryggsäcken, RGB -LED, Servo -drivrutinen och slutligen servon.
  3. Bearbetning - Arduino avslutar den sista gruppen som tar in data från ingångarna och skjuter ut data till utgångarna enligt kodinstruktionerna.

Fritzing -schemat ovan beskriver stiftanslutningarna för alla komponenter.

Ingångar

Vi börjar med ingångarna. Joystickarna är analoga enheter - vilket innebär att de presenterar en variabel spänning som en ingång till Arduino. Var och en av de tre joystickarna har två analoga utgångar för X och Y (upp, ner, vänster höger) vilket gör totalt 6 ingångar till Arduino. Medan Arduino Uno har 6 analoga ingångar tillgängliga, måste vi använda två av dessa stift för I2C -kommunikation till skärmen och servokontrollen.

På grund av detta införlivade jag MCP3008 analog till digital omvandlare (ADC). Detta chip tar upp till 8 analoga ingångar och konverterar dem till en digital signal över Arduinos SPI -kommunikationsstift enligt följande:

  • MCP-stift 1-6> Variabla utgångar från tumstyrspakarna
  • MCP -stift 7 & 8> Ingen anslutning
  • 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)> Mark
  • MCP Pin 15 & 16> +5V

Joystickanslutningarna i schemat visas bara för ett exempel. Beroende på vilken joystick du köper och hur de är monterade kan dina anslutningar skilja sig från mina. Olika märken på joysticken kan ha en annan pinout och kan också orientera X och Y olika. Vad som är viktigt är att förstå vad varje ingång på ADC representerar. Varje pin representerar följande relationer i min kod:

  • Pin 1 - Basen - Analoga data på denna pin kommer att rotera den lägsta servon på roboten
  • Pin 2 - The Shoulder - Analoga data på denna pin kommer att rotera de två servon ovanför bas servo
  • Pin 3 - Armbågen - Analoga data på denna pin kommer att rotera nästa servo upp från axelservon
  • Pin 4 - UP/DN Wrist - Analoga data på denna pin kommer att rotera handleden servo, höja och sänka gripenheten
  • Pin 5 - Gripper - Analog data på denna pin öppnar och stänger griparen
  • Pin 6 - Rotate Wrist - Analoga data på denna pin kommer att rotera griparen

OBS: När du köper och monterar tumstyrspakarna som refereras till i listan med delar, tänk på att modulernas orientering kan skilja sig från min, så testa x- och y -utgångarna för korrekt anslutning till ADC. Om du använder min 3D -tryckta kontrollpanel kan monteringshålen förskjutas från min.

Utgångar

Adafruit PWM/Servo Controller gör detta projekt superenkelt. Anslut bara servon till servohuvudena och alla ström- och signalanslutningar hanteras. Om du inte hittar servon med extra långa ledningar vill du skaffa en uppsättning servokabelförlängningar i olika längder så att alla dina servokablar når ditt styrkort.

Servon är anslutna enligt följande:

  • Position 0 - Bas servo
  • Position 1 - Axelservo (Servo Y -kabel)
  • Position 2 - Armbågsservo
  • Position 3 - Handled 1 Servo
  • Position 4 - Grippservo
  • Position 5 - Handleds 2 Servo

Dessutom är VCC och V + båda anslutna till +5 volt och GND är ansluten till jord.

OBS 1: En STOR anmärkning här: Matningsspänningen för hela projektet kommer in genom kraftuttaget på servokontrollkortet. V+ -stiftet på servokontrollen levererar faktiskt ström från kopplingsblocket till resten av kretsen. Om du behöver programmera din Uno, rekommenderar jag starkt att du kopplar bort V+ -pinnen innan du ansluter Uno till din dator eftersom den nuvarande dragningen från servon kan skada din USB -port.

OBS 2: Jag använder en 6V AC till DC väggadapter för att driva projektet. Jag rekommenderar en adapter som kan leverera minst 4A ström så att när en eller flera av servona blir bundna, bryter den plötsliga ökningen i strömmen inte ut ditt system och återställer din Arduino.

16X2 LCD -skärmen är ansluten till Adafruit LCD -ryggsäck för att dra nytta av I2C -gränssnittet som redan används av Servokontrollen. SCL på servokontrollen och CLK på ryggsäcken ansluts båda till stift A5 på Uno. På samma sätt ansluter SDA på servokontrollen och DAT på ryggsäcken till Pin A4 på Uno. Dessutom är 5V ansluten till +5 volt och GND är ansluten till jord. LAT på ryggsäcken är inte ansluten till någonting.

Slutligen är RGB -lysdioden ansluten till stift 7 (RÖD), 6 (grön) och 5 (blå) på Uno. Lysdiodens markben är anslutet till jord via ett 330Ohm motstånd.

Bearbetning

Sist men inte minst är resten av Arduino -anslutningarna som inte listas ovan följande: Pin 5V är ansluten till +5 volt och GND är ansluten till jord.

I min installation använde jag brädbrädans sidoskenor för att knyta ihop alla kraft- och jordledningar samt I2C -stiften för alla enheter.

Steg 4: Kod

Koda
Koda

Som tidigare nämnts bygger jag ursprungligen detta projekt som en demonstration för min lokala Maker Faire. Jag tänkte att det skulle vara något för barn och vuxna att leka med på vår monter. Som det visar sig var det mycket mer populärt än jag hade tänkt mig - så mycket att barn kämpade om det. Så när det var dags för en omskrivning införlivade jag ett "Demoläge" som genomför en tidsgräns.

Armen sitter där och väntar på att någon ska flytta en joystick och när de gör det börjar den en 60 sekunders timer. I slutet av de 60 sekunderna slutar den att ta in input från användaren och "vilar" i 15 sekunder. Kort uppmärksamhet sträcker sig över att vara vad de är, den här viloperioden minskade kraftigt striden om sticktid.

Grundläggande användning

Koden som anges i referensavsnittet nedan är ganska enkel. En array håller koll på de 6 lederna med min, max extents, en hemmaposition och den aktuella positionen. När armen slås på definierar startfunktionen de bibliotek som krävs för att prata med MCP3008, LCD -ryggsäcken (och därefter skärmen) och definierar LED -stiften. Därifrån gör den en grundläggande systemkontroll och fortsätter att hämta armen. Hemmafunktionen börjar med griparen och arbetar sig ner till basen så att den minimerar risken för att binda under normala förhållanden. Om armen är helt utsträckt kan det vara bäst att manuellt sätta hem armen innan du drar på den. Eftersom generiska servon inte ger feedback om sin position måste vi placera var och en vid en fördefinierad punkt och hålla reda på hur långt var och en flyttas.

Huvudslingan börjar först i vänteläge - letar efter styrspakarna för att flytta bort från deras mittposition. När det händer ändrar huvudslingan tillstånd till nedräkningstillstånd. När användaren flyttar varje joystick, kommer den relativa positionen för joysticken från mitten att addera till eller subtrahera från den aktuella kända positionen och uppdatera lämplig servo. När en servo har nått sin definierade gräns i en riktning stannar joysticken. Användaren måste flytta joysticken åt andra hållet för att flytta den igen. Detta är en mjukvarugräns för servon oavsett maskinvarustopp. Med den här funktionen kan du hålla armens rörelser inom ett specifikt operationsområde om det behövs. Om joysticken släpps till mitten avbryts rörelsen.

Denna kod är bara en allmän utgångspunkt. Du kan lägga till dina egna lägen som du vill. Ett exempel kan vara ett timerlöst kontinuerligt körläge eller kanske lägga till joystickens tryckknappar som ingångar och skriva ett inspelnings-/uppspelningsläge.

Steg 5: Länkar och resurser

Armreferenser

  • Inlägg som inspirerade detta projekt
  • Original Designers blogginlägg Min egen robotarm Min miniservogrepp och färdig robotarm Multiplicera robotarmen och elektroniken
  • Thingiverse Arm
  • Thingiverse Mini Servo Gripper

Software Libries

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

Kontrollpanel och kod

  • Tinkercad -ritning av panelen jag gjorde
  • Nuvarande kodförvar

Rekommenderad: