Inhoudsopgave:

Arduino gestuurde robotarm met 6 vrijheidsgraden - Ajarnpa
Arduino gestuurde robotarm met 6 vrijheidsgraden - Ajarnpa

Video: Arduino gestuurde robotarm met 6 vrijheidsgraden - Ajarnpa

Video: Arduino gestuurde robotarm met 6 vrijheidsgraden - Ajarnpa
Video: 6 DOF Robot arm 2024, Juli-
Anonim
Arduino gestuurde robotarm met 6 vrijheidsgraden
Arduino gestuurde robotarm met 6 vrijheidsgraden
Arduino gestuurde robotarm met 6 vrijheidsgraden
Arduino gestuurde robotarm met 6 vrijheidsgraden
Arduino gestuurde robotarm met 6 vrijheidsgraden
Arduino gestuurde robotarm met 6 vrijheidsgraden

Ik ben lid van een roboticagroep en elk jaar neemt onze groep deel aan een jaarlijkse Mini-Maker Faire. Begin 2014 besloot ik voor elk jaar een nieuw project te bouwen. Ik had op dat moment ongeveer een maand voor het evenement om iets in elkaar te zetten en had geen idee wat ik wilde doen.

Een medelid plaatste een link naar "een interessante open source robotarm-build" die mijn interesse wekte. De plannen waren slechts een arm zonder bedieningselementen of een controller. Gezien mijn beperkte tijd leek het me een heel goed uitgangspunt. Het enige probleem was dat ik echt geen tools had om aan de slag te gaan.

Met de hulp van enkele groepsleden kon ik de acrylonderdelen uitknippen en naar mij opsturen, evenals de twee 3D-geprinte onderdelen die hieronder worden getoond. Gecombineerd met enkele nachtelijke hardwarebestellingen en verschillende uitstapjes naar de plaatselijke ijzerhandel, heb ik de avond voor het evenement een werkend project voltooid!

Zoals meestal het geval is, is er meer aan het verhaal en verschillende incarnaties aan de build die is samengevat tot wat je hieronder ziet. Als je interesse hebt in het achtergrondverhaal, kun je hier meer vinden:

Stap 1: Wat u nodig hebt - hardware en elektronica

Wat u nodig heeft - Hardware en elektronica
Wat u nodig heeft - Hardware en elektronica
Wat u nodig heeft - Hardware en elektronica
Wat u nodig heeft - Hardware en elektronica

De oorspronkelijke projectontwerper woonde in Europa en gebruikte vervolgens metrische metingen en materialen die daar gebruikelijk waren. De drukplaat die hij voor de carrosserie gebruikte, was bijvoorbeeld een standaard van 5 mm dik. Vergelijkbaar materiaal hier in de VS is 1/8 wat ongeveer 3,7 mm dik is. Dit liet een opening achter in de openingen die oorspronkelijk waren ontworpen om te worden geperst. In plaats van de tekeningen te corrigeren, gebruikte ik gewoon Gorilla Glue om deze verbindingen vast te zetten.

Hij gebruikte ook M3-schroefdraadmoeren en -bouten die niet standaard zijn bij uw plaatselijke ijzerhandel in de VS. In plaats van deze om te zetten naar lokaal beschikbare opties, heb ik de hardware eenvoudig online besteld, zoals weergegeven in mijn onderdelenlijst hieronder.

  • 22 - M3 x 0,5 x 23 mm afstandhouders
  • 15 - M3 x 15 mm afstandhouders
  • 40 - M3-schroeven
  • M3 zeskantmoeren
  • M3 25 mm schroeven
  • 1 - Lente
  • 3/4" dubbelzijdige montagetape
  • 5 - SG 5010 TowerPro-servo
  • 1 - SG92R TowerPro mini-servo
  • 1 - SG90 TowerPro mini-servo
  • 2,54 mm enkele rij rechte penkop
  • 1 - Halve broodplank
  • 1 - Vrouwelijk/Mannelijk 'Extensie' jumperdraden - 40 x 6"
  • 1 - 12 "x 24" blauwe acrylplaat of de lasergesneden stukken van uw favoriete serviceprovider
  • 2 - 3 mm x 20 mm + 4 mm x 5 mm verbindingslagers 3D geprint (zie hieronder)
  • 1 - Bedieningspaneel *Zie opmerking in het gedeelte over bedrading
  • 1 - Diffuus RGB (driekleurig) 10 mm LED
  • 1 - Arduino Uno
  • 1 - Standaard LCD 16x2 + extra's - wit op blauw
  • 1 - i2c / SPI karakter LCD rugzak
  • 1 - Adafruit 16-kanaals 12-bit PWM/servo-stuurprogramma
  • 1 - MCP3008 - 8-kanaals 10-bit ADC met SPI-interface
  • 3 - JoyStick Breakout Module Sensor *Zie opmerking in het gedeelte over bedrading
  • DC Barrel Jack
  • AC naar DC-adapter
  • Servo Verlengkabels - diverse lengtes

Bijna alle onderdelen voor deze arm zijn gesneden uit 1/8 inch acryl. De twee verbindingslagers moeten echter worden afgedrukt. Het originele ontwerp vereiste ook dat de twee verbindingsafstandhouders 7 mm hoog waren ten opzichte van de lageras. Toen ik begon met het monteren van de bovenarm werd al snel duidelijk dat deze te hoog waren vanwege de hoogte van de TowerPro servo's. Ik moest nieuwe scharnierlagers laten maken met een basis van slechts 3 mm hoog, wat overigens nog steeds een beetje te hoog was maar beheersbaar. U wilt de relatieve hoogte van uw servo's noteren en rekening houden met de afstand tussen de twee onderarmen:

Servohoogte + servohoorn + scharnierlager + dubbelzijdige tape = 47mm +/- 3mm.

Stap 2: Armmontage

Armmontage
Armmontage
Armmontage
Armmontage
Armmontage
Armmontage
Armmontage
Armmontage

Zorg ervoor dat u al uw servo's centreert voordat u begint! Als u op enig moment tijdens de constructie de positie van de servo handmatig verplaatst, moet u deze opnieuw positioneren voordat u deze aan het frame bevestigt. Dit is vooral belangrijk bij de schouderservo's die altijd tegelijk moeten bewegen.

  1. Bevestig de basisservo aan de bovenste basisplaat met behulp van de M3 25 mm schroeven en zeskantmoeren. Niet te vast aandraaien!OPMERKING: U kunt de schroefdraad vastzetten om het losraken van de moeren tijdens het gebruik tot een minimum te beperken.

  2. Als u de onderdelenlijst gebruikt die ik hierboven heb, wilt u vervolgens de 5 basisafstandhouders monteren door 2 van elk van de M3 x 0,5 x 23 mm afstandhouders aan elkaar te rijgen en ze vervolgens met zeskantmoeren aan de bovenste basisplaat te bevestigen.
  3. Bevestig de onderste basisplaat aan de afstandhouders met 5 M3-schroeven.
  4. Bevestig de schouderplaat aan de twee servo-montageplaten met behulp van een acrylveilige lijm. Ik heb hier Gorilla Glue gebruikt. OPMERKING: Elk van de twee servoplaten heeft een gat aan de achterkant waardoor een versterkingsafstandsstuk kan worden geplaatst om ze te verbinden. Zorg ervoor dat de gaten op één lijn liggen!* Terwijl je de lijm bij de hand hebt, ga je gang en verbind je de polsmontageplaat met de hoofdplaat van de grijper.* Optioneel kun je de polsservoplaat ook op de twee polsgewrichtsplaten lijmen. Ik heb dit niet gedaan, maar in plaats daarvan gekozen om deze aan elkaar te schroeven met afstandhouders zoals hieronder beschreven.

  5. Bevestig de nu uitgeharde schouderconstructie aan de basisservo. Ik gebruikte de breedste hoorn die bij de servo werd geleverd, de montagehoorn met zes stangen.
  6. Het toevoegen van het onderarmframe aan de schouderservo's kan lastig zijn. Ik stel voor om de hoorns aan de onderarmframes te bevestigen voordat u verder gaat. OPMERKING: Zorg ervoor dat u uw servo's centreert voor de schoudermontage VOORDAT u ze aan het frame bevestigt. Deze twee servo's moeten tegelijk bewegen en als ze niet goed zijn uitgelijnd, zullen ze minimaal servo-jitter veroorzaken en, als ze voldoende verkeerd zijn uitgelijnd, het frame of de servo's kunnen beschadigen. * Elk van de schouderservo's is met hun beugels aan de achterkant van de montageplaten gemonteerd in plaats van de servo's door de platen te leiden - hierdoor kunt u de hoorn onder een hoek op de servo-as duwen en de schroef vastzetten. Bevestig de servo nog niet aan de montageplaat. * Voeg vervolgens de binnenservo toe en monteer de arm
  7. Monteer het bovenarmframe en de servo's door de servo's door de ruimtes in de armen te duwen en vervolgens de afstandhouders tussen beide bovenarmplaten te plaatsen en vast te zetten met M3-schroeven.
  8. Plak dubbelzijdig plakband op de achterkant van de afstandhouder van het ellebooggewricht en knip het overtollige af.
  9. Bevestig het afstandsstuk aan de onderkant van de servo die zal fungeren als de elleboogactuator.
  10. Schuif de bovenarmconstructie in het onderarmconstructieframe en zet de servohoornschroeven vast.
  11. Voeg versterkingsafstanden toe tussen twee onderarmplaten. Ik gebruikte er twee in plaats van alle vier om het gewicht te verlagen.
  12. Plak dubbelzijdig plakband op de achterkant van het bovenste afstandsstuk van het polsgewricht en knip het overtollige af.
  13. Bevestig de spacer aan de onderkant van de servo die zal fungeren als de polsactuator.
  14. Bevestig de buitenste polsplaat aan de polsservohoorn en zet deze vast met een hoornschroef.
  15. Monteer de polsservoplaat met de twee polsgewrichtplaten en afstandhouders.
  16. Zet de polsservo vast op de servoplaat met de servoklemplaat.
  17. U moet de polshoorn aan de servo bevestigen voordat u de grijper aan die hoorn bevestigt, omdat de opening voor de hoornschroef is geblokkeerd.
  18. Monteer de grijperstukken losjes om ze passend te maken voordat u de grijperservohoorn aan de servo bevestigt. Dit geeft je ruimte om de hoorn in de vorige stap vast te schroeven.
  19. Bevestig de grijperhoorn aan de servo en draai de schroeven die de grijperverbindingen vasthouden verder vast. OPMERKING: draai deze moeren en bouten niet volledig vast omdat ze los moeten zitten om de grijper te laten bewegen.

Stap 3: Bedrading en Configuratiescherm

Bedrading en bedieningspaneel
Bedrading en bedieningspaneel
Bedrading en bedieningspaneel
Bedrading en bedieningspaneel
Bedrading en bedieningspaneel
Bedrading en bedieningspaneel

Ik heb dit project gebouwd als een ontwikkelingsplatform voor enkele ideeën die ik heb voor een later educatief project. Dus de meeste van mijn verbindingen zijn eenvoudige dupont-connectoren. Het enige solderen dat ik deed was voor de MCP3008. Als je een breakout board voor dit onderdeel kunt vinden, dan zou je deze arm soldeervrij moeten kunnen bouwen.

Er zijn 3 groepen componenten:

  1. Ingangen - Deze items nemen informatie van de gebruiker op en zijn samengesteld uit de joysticks en de mcp3008 ADC.
  2. Uitgangen - Deze items brengen gegevens naar de wereld door ofwel de status aan de gebruiker te tonen of de servo's bij te werken met positiegegevens. Deze items zijn het LCD-scherm, de LCD-rugzak, de RGB-LED, het servo-stuurprogrammabord en als laatste de servo's.
  3. Verwerking - De Arduino sluit de laatste groep af die de gegevens van de invoer opneemt en gegevens naar de uitvoer stuurt volgens de code-instructies.

Het bovenstaande Fritzing-schema geeft de pinverbindingen voor alle componenten weer.

Ingangen

We beginnen met de invoer. De joysticks zijn analoge apparaten - wat betekent dat ze een variabele spanning presenteren als invoer voor de Arduino. Elk van de drie joysticks heeft twee analoge uitgangen voor X en Y (omhoog, omlaag, links rechts), waardoor er in totaal 6 ingangen voor de Arduino zijn. Hoewel de Arduino Uno 6 analoge ingangen beschikbaar heeft, moeten we twee van deze pinnen gebruiken voor I2C-communicatie naar het scherm en de servocontroller.

Daarom heb ik de MCP3008 analoog naar digitaal converter (ADC) ingebouwd. Deze chip neemt tot 8 analoge ingangen op en converteert ze als volgt naar een digitaal signaal via de SPI-communicatiepinnen van de Arduino:

  • MCP-pinnen 1-6 > Variabele uitgangen van de duimjoysticks
  • MCP Pins 7&8 > Geen verbinding
  • MCP Pin 9 (DGND) > Aarde
  • 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) > Aarde
  • MCP Pin 15 & 16 > +5V

De joystickaansluitingen in het schema zijn slechts als voorbeeld weergegeven. Afhankelijk van welke joysticks worden gekocht en hoe ze zijn gemonteerd, kunnen uw verbindingen verschillen van de mijne. Verschillende merken joystick kunnen een verschillende pinout hebben en kunnen ook X en Y anders oriënteren. Wat belangrijk is, is begrijpen wat elke ingang op de ADC vertegenwoordigt. Elke pin vertegenwoordigt de volgende relaties in mijn code:

  • Pin 1 - The Base - Analoge gegevens op deze pin draaien de laagste servo op de robot
  • Pin 2 - The Shoulder - Analoge gegevens op deze pin draaien de twee servo's boven de basisservo
  • Pin 3 - The Elbow - Analoge gegevens op deze pin draaien de volgende servo omhoog vanaf de schouderservo's
  • Pin 4 - UP / DN-pols - Analoge gegevens op deze pin zullen de polsservo draaien, waardoor de grijpereenheid omhoog en omlaag gaat
  • Pin 5 - The Gripper - Analoge gegevens op deze pin openen en sluiten de grijper
  • Pin 6 - Draai pols - Analoge gegevens op deze pin zullen de grijper draaien

OPMERKING: Houd er bij het kopen en monteren van de duimjoysticks waarnaar in de onderdelenlijst wordt verwezen, rekening mee dat de oriëntatie van de modules kan verschillen van de mijne, dus test x- en y-uitgangen voor een juiste aansluiting op de ADC. Als u mijn 3D-geprinte bedieningspaneel gebruikt, kunnen de montagegaten ook afwijken van de mijne.

Uitgangen

De Adafruit PWM/Servo Controller maakt dit project supereenvoudig. Sluit gewoon de servo's aan op de servo-headers en alle stroom- en signaalverbindingen worden afgehandeld. Tenzij u servo's met extra lange kabels vindt, wilt u een set servokabelverlengingen in verschillende lengtes krijgen, zodat al uw servokabels uw controllerkaart bereiken.

Servo's zijn als volgt aangesloten:

  • Positie 0 - Basisservo
  • Positie 1 - Schouderservo (Servo Y-kabel)
  • Positie 2 - Elleboogservo
  • Positie 3 - Pols 1 Servo
  • Positie 4 - Grijperservo
  • Positie 5 - Pols 2 Servo

Bovendien zijn VCC en V+ beide verbonden met +5 volt en is GND verbonden met aarde.

OPMERKING 1: Een GROTE opmerking hier: de voedingsspanning voor het hele project komt binnen via het voedingsaansluitblok op de servobesturingskaart. De V+-pin op de servocontroller levert in feite stroom van het aansluitblok naar de rest van het circuit. Als u uw Uno moet programmeren, raad ik u ten zeerste aan om de V+-pin los te koppelen voordat u de Uno op uw pc aansluit, omdat de stroomafname van de servo's uw USB-poort kan beschadigen.

OPMERKING 2: Ik gebruik een 6V AC naar DC-muuradapter om het project van stroom te voorzien. Ik raad een adapter aan die ten minste 4A stroom kan leveren, zodat wanneer een of meer van de servo's vastlopen, de plotselinge stroompiek uw systeem niet bruin maakt en uw Arduino opnieuw instelt.

Het 16X2 LCD-scherm is verbonden met de Adafruit LCD-rugzak om te profiteren van de I2C-interface die al door de servocontroller wordt gebruikt. De SCL op de servocontroller en de CLK op de rugzak worden beide aangesloten op pin A5 op de Uno. Evenzo maken de SDA op de servocontroller en de DAT op de rugzak beide verbinding met pin A4 op de Uno. Bovendien is 5V verbonden met +5 volt en is GND verbonden met aarde. LAT op de rugzak is nergens op aangesloten.

Ten slotte is de RGB-LED aangesloten op pinnen 7 (ROOD), 6 (Groen) en 5 (Blauw) op de Uno. De massapoot van de LED is via een weerstand van 330 Ohm met massa verbonden.

Verwerken

Last but not least, de overige Arduino-verbindingen die hierboven niet zijn vermeld, zijn als volgt: Pin 5V is verbonden met +5 volt en GND is verbonden met aarde.

In mijn opstelling heb ik de zijrails van het breadboard gebruikt om alle stroom- en grondlijnen aan elkaar te binden, evenals de I2C-pinnen voor alle apparaten.

Stap 4: Coderen

Code
Code

Zoals eerder vermeld, heb ik dit project oorspronkelijk gebouwd als een demonstratie voor mijn lokale Maker Faire. Het was mijn bedoeling dat het iets zou zijn voor kinderen en volwassenen om mee te spelen op onze stand. Het bleek dat het veel populairder was dan ik me had voorgesteld - zo erg zelfs dat kinderen erover vochten. Dus toen het tijd was voor een herschrijving, heb ik een "demomodus" ingebouwd die een tijdslimiet implementeert.

De arm zit daar te wachten tot iemand een joystick beweegt en als ze dat doen, begint een timer van 60 seconden. Aan het einde van de 60 seconden stopt het met het nemen van input van de gebruiker en "rust" gedurende 15 seconden. Korte aandachtsspannes zijn wat ze zijn, deze rustperiode verminderde de strijd om stick-tijd aanzienlijk.

Basis operatie

De code in de referentiesectie hieronder is vrij eenvoudig. Een array houdt de 6 gewrichten bij met min, max extensies, een thuispositie en de huidige positie. Wanneer de arm is ingeschakeld, definieert de opstartfunctie de bibliotheken die nodig zijn om te praten met de MCP3008, de LCD-rugzak (en vervolgens het scherm), en definieert de LED-pinnen. Van daaruit voert het een basissysteemcontrole uit en gaat het verder met de arm. De thuisfunctie begint bij de grijper en werkt zich naar beneden naar de basis, zodat deze de kans op vastbinden onder normale omstandigheden minimaliseert. Als de arm volledig is uitgestrekt, is het misschien het beste om de arm handmatig naar huis te sturen voordat u hem van stroom voorziet. Omdat generieke servo's geen feedback geven over hun positie, moeten we ze allemaal op een vooraf gedefinieerd punt plaatsen en bijhouden hoe ver ze zijn verplaatst.

De hoofdlus begint eerst in een wachtmodus - op zoek naar de joysticks om weg te gaan van hun middenpositie. Zodra dat gebeurt, verandert de hoofdlus van status naar aftelstatus. Terwijl de gebruiker elke joystick beweegt, wordt de relatieve positie van de joystick vanuit het midden toegevoegd aan of afgetrokken van de huidige bekende positie en wordt de juiste servo bijgewerkt. Zodra een servo zijn gedefinieerde limiet in één richting heeft bereikt, stopt de joystick. De gebruiker moet de joystick in de andere richting bewegen om hem opnieuw te bewegen. Dit is een softwarelimiet die aan de servo's wordt opgelegd, ongeacht hun hardware-stops. Met deze functie kunt u de armbewegingen indien nodig binnen een gespecificeerd werkgebied houden. Als de joystick naar het midden wordt losgelaten, stopt de beweging.

Deze code is slechts een algemeen startpunt. U kunt uw eigen modi toevoegen zoals u wilt. Een voorbeeld kan een timerloze continue run-modus zijn of misschien de joystick-drukknoppen toevoegen als invoer en een opname-/afspeelmodus schrijven.

Stap 5: Links en bronnen

Armreferenties

  • Bericht dat dit project inspireerde
  • Original Designers blogpostsMijn eigen robotarmMijn mini-servogrijpers en voltooide robotarm Vermenigvuldig de robotarm en elektronica
  • Thingiverse arm
  • Thingiverse Mini Servo Grijper

Softwarebibliotheken

  • Bronnen voor Adafruit PWM/Servo-controllers
  • MCP3008-bibliotheek
  • MCP3008-gegevensblad

Configuratiescherm en code

  • Tinkercad-tekening van het paneel dat ik heb gemaakt
  • Huidige coderepository

Aanbevolen: