Bouw een 4-DOF-robotarm: PCA9685, servomotoren en kinematica
Een bureaurobotarm die de standen aanneemt die u opgeeft — gestuurd door een PCA9685 en afgesteld met inverse kinematica die u in simulatie begreep vóór u één servo aansloot.
Een robotarm is het eerste project waarin een robot niet meer rondbeweegt, maar iets met de wereld doet. Een lijnvolger volgt; een robot voor obstakelvermijding wijkt uit; een arm bereikt, positioneert en grijpt. Die overgang van rijden naar manipulatie brengt het ene idee dat aan elke manipulator ten grondslag ligt: kinematica, de geometrie die de hoeken die u kunt instellen verbindt met het punt in de ruimte dat u werkelijk wilt.
Dit bouwpad behandelt de arm precies zo: als een toegankelijke les in kinematica. U begint met begrijpen hoe een arm met twee koppels gewrichtshoeken in een gereedschapsstand en weer terug verandert, verzamelt de onderdelen die een servomotorarm nodig heeft en leert wat elk onderdeel doet. Daarna — voordat u iets koopt of tandwielen uit elkaar haalt — verkent u het bereik, de twee elleboogoplossingen en de onbereikbare standen in de browsersimulator. Pas dan bekabelt u de echte arm, kalibreert u de servomotoren handmatig en voert u de inverse kinematica uit op de hardware.
Volg de technologieboom hieronder van boven naar beneden. Elk knooppunt gaat open zodra de vereisten zijn afgerond en uw voortgang wordt op dit apparaat opgeslagen, zodat u de arm in een weekend kunt bouwen zonder uw plaats kwijt te raken.
Materialenlijst
| Onderdeel | Aantal | Geschatte kosten | Opmerkingen |
|---|---|---|---|
| Arduino Uno | 1 | $5–8 | Elk bord voldoet — hier wordt alleen I²C gebruikt |
| PCA9685, 16-kanaals servodriver | 1 | $3 | Voor vier servomotoren niet strikt vereist, maar wel het juiste hulpmiddel |
| SG90-servomotor | 4 | $8 | Koop voor de schouder een MG90S — metalen tandwielen, en dit is het gewricht dat kapotgaat |
| 4-DOF-armkit | 1 | $12–25 | Acryl is prima om mee te leren; aluminium buigt veel minder |
| 5–6 V-voeding, ≥3 A | 1 | $8 | Vier servomotoren die tegelijk vastlopen vragen ~2,6 A |
| Condensator van 1000 µF | 1 | $1 | Over V+, dicht bij de aansluiting |
| Reserve hoornschoenen | 1 set | $2 | U bevestigt er ooit één verkeerd. Iedereen doet dat |
Totaal: ongeveer $40–60.
Twee aanschaffingen verdienen nadenke in plaats van de standaardkeuze. Een MG90S met metalen tandwielen voor de schouder kost een dollar meer en draagt het gewicht van alle andere gewrichten — nylonen tandwielen breken daar door langdurige belasting, niet door een impact. Kies daarnaast een voeding die is gedimensioneerd voor het vastlooppunt, want de kenmerkende storing van een arm is dat bij een botsing met het eigen frame of het vasthouden van een vast voorwerp alle servomotoren tegelijk vastlopen.
Meet de arm voordat u code schrijft
Inverse kinematica is rekenwerk met koppellengtes. Deze vier getallen vormen de volledige invoer, en de meest voorkomende reden dat een arm vol vertrouwen de verkeerde plek bereikt, is dat ze uit een productvermelding in plaats van met een lineaal komen.
| Symbool | Meten vanaf | Tot | Typisch |
|---|---|---|---|
L1 |
As van het schoudergewricht | As van het ellebooggewricht | 90–105 mm |
L2 |
As van het ellebooggewricht | Het werkelijke grijppunt van de grijper | 80–95 mm |
Die laatste rij doet meer werk dan hij lijkt. Het werkelijke grijppunt van de grijper verschuift naarmate de vingers sluiten, en het dimensioneren van de grijper zelf is een apart probleem — met eigen wanden, eigen rekenwerk en eigen storingsmodi. Als uw arm het onderdeel bereikt en het vervolgens laat vallen of platdrukt, staat het antwoord niet op deze pagina: begin bij de grippersimulator.
| h | Tafeloppervlak | As van het schoudergewricht | 50–70 mm |
| d | Draaias van de basis | As van de schouder, horizontaal | 0–15 mm |
Meet tussen de gewrichtsassen, niet tussen de randen van de beugels. De as is het middelpunt van de uitgaande spline van de servomotor en ligt vaak 5–10 mm binnen de zichtbare beugel. Bij een koppeltje van 95 mm is een fout van 10 mm meer dan 10%, waardoor de arm systematisch te kort is op een manier die geen enkele versterking kan corrigeren.
Die twee lengtes geven u direct de werkruimte:
maximum reach = L1 + L2 e.g. 100 + 90 = 190 mm
minimum reach = |L1 - L2| e.g. |100 - 90| = 10 mm
De werkruimte is een ringvormig gebied, geen schijf. In het midden zit een gat dat de arm fysiek niet kan bereiken. Een doelpunt nabij de basis dat als “onbereikbaar” terugkomt, is dus correct gedrag en geen bug.
Bouw hem in mijlpalen
De montagevolgorde bevat één stap die vrijwel onomkeerbaar is, en dat is stap 2.
| # | Mijlpaal | De test | Slagen ziet er zo uit |
|---|---|---|---|
| 1 | Servodriver reageert | Doorzoek de I²C-bus | 0x40 verschijnt; V+ heeft een eigen voeding |
| 2 | Servomotoren in huis vóór montage | Stel elke servomotor in op 90° voordat u een hoornschoen aandrukt | Elk hoornschoen zit in de beoogde nulstand |
| 3 | Eindstop per servomotor | Stap vanaf het midden naar buiten totdat de servomotor zoemt | U hebt minimale en maximale tellingen per servomotor, geen bibliotheekstandaardwaarden |
| 4 | Gewrichtskaart vastgelegd | Stel elk gewricht in over het volledige bereik | Verschuiving, teken en mechanische grenzen staan voor alle vier vastgelegd |
| 5 | Botsingscontrole | Doorloop elk gewricht langzaam over het volledige bereik | Niets raakt het frame; de grenzen komen overeen met wat u hebt waargenomen |
| 6 | Voorwaartse kinematica | Stel bekende hoeken in, bereken de gereedschapsstand en meet die | Berekende en gemeten stand wijken slechts enkele millimeters af |
| 7 | Heen en terug | Voer de berekende stand terug door inverse kinematica | De uitgaande hoeken komen overeen met de ingaande hoeken |
| 8 | Alle vier kwadranten | Vraag doelpunten voor, achter, links en rechts op | Alle vier werken — als er twee spiegelen, gebruikt u atan in plaats van atan2 |
| 9 | Bereikbaarheid | Vraag een doelpunt ruim voorbij L1 + L2 |
Een zuiver “onbereikbaar” — geen NaN en geen ruk |
| 10 | Vloeiende beweging | Stel een grote beweging in | In stappen geïnterpoleerd, alle gewrichten samen, zonder schok |
| 11 | Herhaalbaarheid | Keer tien keer vanuit verschillende richtingen naar dezelfde stand terug | Meet de spreiding van de eindstand — dat getal is de speling |
Mijlpaal 2 kan later niet worden hersteld. Een hoornschoen heeft een spline met ongeveer 20 tanden en past daarom alleen in discrete standen die ongeveer 18° uit elkaar liggen. Monteert u eerst en kalibreert u daarna, dan kunt u een gewricht aantreffen waarvan het bruikbare bereik 40° verschoven is zonder mechanische manier om dat te herstellen. Voed elke servomotor, stel 90° in en druk pas daarna het hoornschoen aan.
Beweeg hem altijd voorzichtig
Een servomotor die op een nieuwe hoek wordt ingesteld, gaat daar met volle snelheid naartoe. Bij een arm betekent dat een heftige beweging, een stroompiek over alle vier servomotoren en een mechanische schok door de nylonen tandwielen die het hefboomeffect van de arm zelf versterkt.
// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
static float cur[3] = {0, 0, 0};
const float target[3] = {base, shoulder, elbow};
for (int s = 1; s <= steps; s++) {
const float t = (float)s / steps;
for (int j = 0; j < 3; j++) {
const float a = cur[j] + (target[j] - cur[j]) * t;
pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
}
delay(stepMs);
}
memcpy(cur, target, sizeof(cur));
}
Alle gewrichten tegelijk interpoleren is minstens zo belangrijk als de vloei zelf. Als u gewrichten één voor één beweegt, volgt het gereedschap een vreemde boog door de werkruimte — langzamer en veel gevoeliger voor een botsing onderweg.
Zo ziet goed eruit
| Meting | Acrylkit, SG90-servomotoren | Aluminium, MG90S |
|---|---|---|
| Herhaalbaarheid, dezelfde naderingsrichting | ±3–5 mm | ±1–2 mm |
| Herhaalbaarheid, gemengde naderingsrichtingen | ±8–15 mm | ±3–5 mm |
| Bruikbaar draagvermogen bij volle uitstrekking | 20–30 g | 40–60 g |
| Doorzakken bij volle uitstrekking, onbelast | 3–8 mm | 1–3 mm |
Het verschil tussen de twee rijen voor herhaalbaarheid is de speling, en dat is de grootste afzonderlijke foutbron bij een hobbyarm. Vier graden speling bij de schouder over een bereik van 190 mm betekent meer dan 13 mm bij de grijper. Het praktische antwoord is niet betere wiskunde — u moet doelpunten altijd vanuit dezelfde richting naderen, waardoor de tekenomkeer volledig verdwijnt en een fout van ±13 mm verandert in een reproduceerbare verschuiving die u kunt kalibreren.
Storingzoeken
| Symptoom | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| De arm bereikt volledig het verkeerde punt | Hoornschoen op een willekeurige hoek bevestigd | Stel elke servomotor vooraf in op 90° voordat u hoornschoenen bevestigt |
| Het bereik van een gewricht is ongeveer 18° verschoven | Hoornschoen één spline-tand verkeerd | Verwijder en hermonteer — software kan dit niet corrigeren |
| Bereikt correct aan de voorkant, spiegelt aan de achterkant | atan in plaats van atan2 |
atan2 verwerkt alle vier kwadranten |
| Inverse kinematica geeft NaN en de arm schiet naar voren | Argument van acos buiten −1..1 |
Controleer bereikbaarheid vóór de trigonometrie |
| Doelpunten nabij de basis mislukken | Binnen het gat voor minimale afstand | Correct gedrag — de werkruimte is ringvormig |
| Het bord reset wanneer de arm beweegt | Servostroom via de Arduino | Eigen V+-voeding, gemeenschappelijke massa, condensator van 1000 µF |
| De arm zakt bij volle uitstrekking | Schouder verder dan het haalbare draaimoment | MG90S op de schouder; compenseer met een rubberband |
| Zoemen tijdens het vasthouden van een stand | Servomotor voert een last uit aan zijn grens | Verlaag de last of gebruik detach wanneer vasthouden niet nodig is |
| Plotselinge snelheid van een gewricht bij volle uitstrekking | Bewegen door een singulariteit | Houd geplande paden binnen een marge van de grens |
| Landt verschillend vanuit elke richting | Speling | Nader altijd vanuit dezelfde richting aan |
| Alle hoeken zijn systematisch te klein | De oscillator van de PCA9685 is niet exact 25 MHz | Meet de werkelijke uitvoerfrequentie en roep setOscillatorFrequency aan |
Waar u hierna mee kunt beginnen
Voeg een rechte beweging toe. Interpoleren in de gewrichtsruimte, zoals de bovenstaande code doet, laat het gereedschap een kromme volgen. Interpoleren in de Cartesiaanse ruimte — bij elke stap langs een rechte lijn inverse kinematica berekenen — laat het recht bewegen, en dat is wat elk echt grijp- en plaatssysteem nodig heeft. De wijziging is klein en juist hier worden singulariteiten minder theoretisch: een recht pad door de buurt van volledige uitstrekking vraagt om enorme snelheden van de gewrichten.
Voeg een camera toe en sluit de regelkring. Alles hier is een open regelkring: de arm gaat waar hem wordt gezegd en controleert niets. Een camera die een ArUco-marker op het object leest, kan de arm de fout laten corrigeren die speling en doorzakken achterlaten — zo wordt een goedkope arm nauwkeurig.
Ga een niveau omhoog zodra u de grens bereikt. Aluminiumen koppels nemen het meeste doorzakken weg, MG90S-servomotoren nemen het meeste speling weg en een arm met 6-DOF voegt een pols toe, zodat u de naderingshoek van het gereedschap zelf kunt kiezen. Niets daarvan verandert de wiskunde: de oplosser voor twee koppels die u hier hebt geschreven is dezelfde als die van een betere arm, en juist daarom was het bouwen op het eenvoudige frame de moeite waard.
Projectroadmap
De bouwroute
Volg de techboom van onderdelen tot een werkende robot. Elk knooppunt wordt ontgrendeld zodra de voorwaarden klaar zijn, en je voortgang wordt op dit apparaat opgeslagen.
0 / 13 klaar
Componenten
- ControllerArduino UnoHet vergevingsgezinde 8-bits bord waarmee de meeste mensen robotica leren.
- DriverPCA9685-servodriverBestuur 16 servo's via twee I²C-pins—het bord achter de meeste robotarmen en hexapoden.
- ActuatorSG90-servomotorDe servomotor van negen gram achter de meeste robotarmen, grijpers en stuurmechanismen.
- Chassis4-DOF-robotarmkitFrame van acryl of metaal dat van vier servo's een manipulator maakt: basis, schouder, elleboog, grijper.
- VoedingAccu- en voedingspakket voor robotsHet verschil tussen een robot die blijft draaien en een robot die steeds opnieuw opstart.
Tutorials in deze route
- Expert · 22 min lezenInverse kinematica van een robotarm met twee linksWaarom een arm met twee links twee oplossingen heeft, waar hij wel en niet bij kan, en wat een singulariteit werkelijk is.
- Gevorderd · 18 min lezenServo's aansturen met de PCA9685 (I²C PWM-driver)Stel de frequentie in, zet hoeken om in pulsbreedtes, en bestuur zestien servo's vanaf twee I²C-pinnen — veilig en gekalibreerd.
Oefen voordat je bedraadt
Stem het af in de live simulator
De bouwroute loopt via een lab in de browser. Krijg het gedrag hier goed en zet je instellingen daarna over naar de echte robot.
Veelgestelde vragen
Hoe maakt u een robotarm met Arduino?
Monteer vier servomotoren in een frame met 4-DOF—basis, schouder, elleboog en grijper—en bestuur ze met een PCA9685 via I²C, zodat de Arduino niet uit PWM-pinnen raakt. Kalibreer voor elke servomotor het bereik tussen hoek en puls en geef doelpunten aan een inverse-kinematica-oplosser voor twee koppels die de hoeken voor schouder en elleboog teruggeeft. Dit bouwpad volgt die hele keten, en u stemt de geometrie in een simulator af voordat u iets aansluit.
Hoeveel servomotoren heeft een robotarm met 4-DOF nodig?
Vier—één per vrijheidsgraad: een draaibare basis, een schouder, een elleboog en een grijper. Elke servomotor heeft een eigen PWM-kanaal nodig, en juist daarom gebruikt een robotarm met meerdere gewrichten een PCA9685-driver in plaats van de beperkte hardware-PWM-pinnen van de Arduino.
Heb ik een PCA9685 nodig voor een robotarm?
Het is het juiste hulpmiddel, maar strikt genomen niet verplicht. Vier servomotoren kunnen op een Arduino draaien als u ze afzonderlijk voedt, maar de PCA9685 ontlast de timers van de microcontroller, bestuurt elk gewricht via twee I²C-pinnen en voert de servostroom via een eigen V+-voeding—zo blijft de hoge stroom bij de logica vandaan en krijgt het bord geen brown-out.
Moet ik onderdelen kopen voordat ik aan dit project begin?
Nee. De kinematica en het bepalen van standen draaien in de browsersimulator, zodat u het bereik van de arm, de twee oplossingen en de onbereikbare standen kunt begrijpen en verkennen voordat u iets koopt. Alleen de laatste stappen—bekabelen, kalibreren en inverse kinematica uitvoeren—vereisen de fysieke Arduino, PCA9685, servomotoren, armframe en voeding.
Hoe wordt inverse kinematica bij een robotarm gebruikt?
Voorwaartse kinematica vertelt waar het gereedschap terechtkomt bij gegeven gewrichtshoeken; inverse kinematica doet de nuttige omgekeerde bewerking—bij een gegeven doelpunt retourneert het de gewrichtshoeken waarmee u dat bereikt. Bij deze arm vormen schouder en elleboog een planaire oplosser voor twee koppels, richt de basis dat vlak en verzorgt de grijper het oppakken. In de simulator kunt u de oplosser zien werken, inclusief waar een doelpunt buiten bereik ligt.