Component · Chassis
4-DOF-robotarmkit
Een 4-DOF-robotarmkit verandert vier hobby-servomotoren in een desktopmanipulator: een draaibare basis, schouder, elleboog en grijper die je kunt positioneren.
Wat het is
Een 4-DOF-robotarmkit is het mechanische skelet van een desktopmanipulator: een set lasergesneden beugels van acryl of aluminium, een draaibare basis en montagesleuven voor vier servomotoren. Op zichzelf doet de kit niets; het is de constructie die servomotoren verandert in een machine die kan reiken, positioneren en grijpen. Monteer de servomotoren, bestuur ze met een PCA9685 en je hebt een arm die je naar een punt in de ruimte kunt sturen.
De vier gewrichten
Elke vrijheidsgraad is één servomotor met één taak:
- Basis — draait de hele arm naar links en rechts (yaw) en bepaalt het werkvlak.
- Schouder — beweegt het bovenste armsegment omhoog; dit is het eerste van twee gewrichten die reikwijdte en hoogte bepalen.
- Elleboog — buigt de onderarm; samen met de schouder plaatst dit het gereedschap op elke plek in een verticaal vlak.
- Grijper — opent en sluit de bekken om een voorwerp vast te houden.
De schouder en elleboog zijn het paar dat tweeledige inverse kinematiek oplost: geef een doelpunt in het werkvlak van de arm, dan berekenen ze de twee gewrichtshoeken die het bereiken. De basis draait dat vlak vervolgens naar de richting van het doelpunt en de grijper voert het oppakken uit.
Wanneer je het gebruikt
Kies een 4-DOF-armkit wanneer je manipulatie wilt leren in plaats van mobiliteit: pick-and-place, blokjes stapelen, tekenen of een camera op een positioneerbare houder. Het is het equivalent van een 2WD-chassis voor armen: de gedeelde constructie waarop een hele klasse projecten wordt gebouwd. De kit is bewust voor lichte belasting ontworpen; behandel hem als leerplatform, niet als zwaar machine.
Ga voor zwaarder of nauwkeuriger werk naar servomotoren met metalen tandwielen, een stijvere constructie of een 5–6 DOF-arm met pols. Voor mobiele robots wil je juist het chassis gebruiken.
Bedrading en valkuilen
- Eén servomotor per gewricht, elk met een eigen kanaal. Nummer de kanalen (0 = basis, 1 = schouder, …) en bewaar die toewijzing in je code, zodat een commando als “beweeg de elleboog” de juiste servomotor aanstuurt.
- Voed de servomotoren apart. Vier servomotoren die tegelijk bewegen veroorzaken een stroompiek; voed ze via de V+-aansluiting van de PCA9685, nooit via de Arduino.
- Stel de nulstand in vóór de montage. Zet elke servomotor op een bekende hoek (bijvoorbeeld 90°) voordat je de hoorns monteert, zodat de nulpose van de arm overeenkomt met die in je code.
- Respecteer de reikwijdte. Het gereedschap bereikt alleen het gebied binnen de ring die door de segmentlengtes wordt bepaald. Een doelpunt daarbuiten is onbereikbaar, ongeacht de gewrichtshoeken; zie de robotarmsimulator.
- Houd rekening met de hefboomarm. Het draagvermogen neemt snel af naarmate de arm uitrekt; houd de last licht, anders lopen de servomotoren vast en slijten de nylon tandwielen.
De maten die je nodig hebt vóór het schrijven van code
Inverse kinematiek is rekenwerk met segmentlengtes. Als die verkeerd zijn, bereikt de arm zeker de verkeerde plek, zonder fout in de code.
| Maat | Waar meten | Gemiddeld |
|---|---|---|
L1 — bovenste segment |
As van het schoudergewricht tot as van het ellebooggewricht | 90–105 mm |
L2 — onderarm |
As van het ellebooggewricht tot het grijpunt | 80–95 mm |
| Basis hoogte | Van tafel tot as van het schoudergewricht | 50–70 mm |
| Basisverplaatsing | Horizontaal van de draaias van de basis tot de as van de schouder | 0–15 mm |
Meet tussen gewrichtassen, niet tussen de randen van beugels. De as is het midden van de uitgaande spline van de servomotor en ligt vaak 5–10 mm binnen het zichtbare deel van de beugel. Bij een segment van 95 mm is een fout van 10 mm meer dan 10%. De arm wordt dan systematisch te kort en geen enkele afstelling lost dat op.
Deze twee lengtes leveren de werkruimte rechtstreeks:
maximum reach = L1 + L2
minimum reach = |L1 - L2|
Met L1 = 100 en L2 = 90 bereikt de arm een afstand van 10 mm tot 190 mm vanaf de schouder:
een ringvormig gebied, geen cirkelvormig gebied. In het midden zit een gebied dat de arm
fysiek niet kan bereiken. De eerste keer dat een doelpunt dicht bij de basis onbereikbaar
blijkt, is dat een echte verrassing. Zijn de twee segmenten even lang, dan verdwijnt het gat en
kan de arm volledig inklappen.
Koppel van de servomotor: waarom de arm bij uitgestrekte reikwijdte zakt
De schouderservomotor draagt de volledige massa van de arm en de last, en het benodigde koppel neemt toe naarmate die massa verder van het gewricht ligt.
Voor een volledig uitgestrekte arm met L1 = L2 = 95 mm, een last van 30 g en segmenten van elk
ongeveer 20 g:
Shoulder torque ~= (forearm+elbow mass x 0.095) + (payload x 0.190)
~= (0.05 kg x 9.5 cm) + (0.03 kg x 19 cm)
~= 0.48 + 0.57 = 1.05 kg.cm
Het stallkoppel van een SG90 is ongeveer 1,8 kg·cm bij 4,8 V. Een continu benodigd koppel van 1,05 kg·cm betekent 58% van het stallkoppel, ver voorbij het punt waarop een hobby-servomotor nauwkeurig blijft. De arm zakt onder de ingestelde hoek, zoemt en wordt warm.
| Configuratie | Benodigd schouderkoppel | SG90 (1,8 kg·cm) | MG90S (2,2 kg·cm) |
|---|---|---|---|
| Ingeklapt, zonder last | ~0,2 kg·cm | Ruim voldoende | Ruim voldoende |
| Uitgestrekt, zonder last | ~0,5 kg·cm | Voldoende | Voldoende |
| Uitgestrekt, last van 30 g | ~1,05 kg·cm | Zakt duidelijk | Grenzend |
| Uitgestrekt, last van 50 g | ~1,4 kg·cm | Loopt vast | Zakt |
Drie praktische gevolgen. De nauwkeurigheid van de arm is het slechtst bij volledige uitstrekking, precies waar ook een singulariteit ligt; plan dus paden binnen de grens. Gebruik MG90S-servomotoren met metalen tandwielen voor de schouder, ook als de rest SG90 is, want dit is het gewricht dat als eerste faalt en nylon tandwielen slijten onder aanhoudende belasting. En gebruik een tegengewicht als dat kan: een rubberband van het bovenste segment terug naar de basis neemt verrassend veel statische belasting zonder kosten van de schouderservomotor.
Zo monteren dat de wiskunde klopt
De volgorde is belangrijk en één stap is bijna onomkeerbaar.
1. Zet elke servomotor in het midden voordat je een hoorn monteert. Voed de servomotor, geef 90° op en monteer daarna pas de hoorn. Een servohoorn heeft een spline van ongeveer 20 of 24 tanden en kan daarom alleen in discrete standen worden gemonteerd; de fijnste beschikbare afstelling is ongeveer 15–18°. Monteer je de arm eerst en kalibreer je daarna, dan kan een gewricht een bruikbaar bereik hebben dat 40° is verschoven en mechanisch volledig onherstelbaar is.
2. Monteer de hoorns in de pose die je als nulstand wilt gebruiken. Voor de schouder betekent dat meestal dat het bovenste segment verticaal staat. Voor de elleboog moet de onderarm horizontaal staan. Kies de afspraak, schrijf hem op en bouw ernaar.
3. Controleer het volledige bereik van elk gewricht voordat je iets vastzet. Geef 0° en 180° op en controleer of niets in aanraking komt met de constructie. Een gewricht dat bij 160° tegen zijn eigen beugel stuit, heeft een effectieve grens van 160°; je code moet dat weten.
4. Leg de verschuivingen en tekens per gewricht vast. Sommige gewrichten draaien door de bouw van het mechanisme tegen je wiskundige afspraak in. Leg dit eenmaal vast:
struct Joint {
uint8_t channel;
int offsetDeg; // servo angle when the joint is at its mathematical zero
int8_t sign; // +1 or -1
int minDeg, maxDeg; // mechanical limits, measured
};
const Joint BASE = {0, 90, +1, -85, 85};
const Joint SHOULDER = {1, 90, -1, -10, 120};
const Joint ELBOW = {2, 90, +1, -120, 10};
const Joint GRIPPER = {3, 20, +1, 0, 55};
int servoAngle(const Joint &j, float jointDeg) {
float clamped = constrain(jointDeg, j.minDeg, j.maxDeg);
return constrain((int)(j.offsetDeg + j.sign * clamped), 0, 180);
}
Deze struct vormt de hele brug tussen kinematiek en hardware. Als die expliciet is, kun je de arm begrijpelijk houden in plaats van telkens te sleutelen.
Vier servomotoren voeden
Vier micro-servomotoren die tegelijk bewegen, vragen veel meer dan een microcontroller kan leveren. De manier waarop de arm faalt, verergert dat: wanneer de arm zijn eigen constructie raakt of iets stevigs vastgrijpt, lopen alle servomotoren in de keten tegelijk vast.
| Situatie | Stroom |
|---|---|
| Inactief, positie vasthouden | ~40 mA totaal |
| In beweging, onbelast | ~600 mA – 1 A |
| Alle vier vastgelopen | ~2,6 A |
Kies de voeding op basis van de stallstroom. Gebruik een aparte 5–6 V-voeding op de V+-aansluiting van de PCA9685, met een condensator van 470–1000 µF erboven, en verbind de massa’s met die van de regelaar. Voeding via de 5V-pin van de Arduino veroorzaakt brown-out van het bord. Omdat dit alleen bij een bepaalde armstand gebeurt, lijkt het sterk op een softwarefout.
Beweeg de arm rustig
Na een commando voor een nieuwe hoek beweegt de servomotor met volle snelheid naar die hoek. Op een mobiele robot is dat alleen abrupt; bij een arm is het een echt probleem: een abrupte beweging, een stroompiek en een mechanische schok door de nylon tandwielen, die door de hefboomarm van de arm nog wordt versterkt.
// Interpolate every joint together so the tool moves in a straight-ish line
// and no single servo takes the whole load at once.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
static float cur[3] = {0, 0, 0};
float target[3] = {base, shoulder, elbow};
for (int s = 1; s <= steps; s++) {
float t = (float)s / steps;
for (int j = 0; j < 3; j++) {
float a = cur[j] + (target[j] - cur[j]) * t;
pwm.setPWM(JOINTS[j].channel, 0, countsFor(JOINTS[j], a));
}
delay(stepMs);
}
memcpy(cur, target, sizeof(cur));
}
Het gelijktijdig interpoleren van alle gewrichten is net zo belangrijk als het gladstrijden. Beweeg je de gewrichten één voor één, dan volgt het gereedschap een vreemd pad door de werkruimte. Dat is trager en leidt veel vaker tot een botsing onderweg.
Problemen oplossen
| Symptoom | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| Arm bereikt volledig het verkeerde punt | Hoorn op een willekeurige hoek gemonteerd | Zet elke servomotor op 90° voordat je hoorns monteert |
| Bereik van één gewricht verschoven met ~20° | Hoorn één spline-tand uit | Verwijder en monteer opnieuw; dit is niet in software op te lossen |
| Bord herstart zodra de arm beweegt | Servostroom loopt via de regelaar | aparte V+-voeding, gemeenschappelijke massa, grote condensator |
| Arm zakt bij volledige uitstrekking | Schouderservomotor boven zijn comfortabele koppel | MG90S bij de schouder; tegengewicht; minder last |
| Zoemen tijdens het vasthouden van een pose | Servomotor vecht tegen een last op de grens | Verminder de last of ontkoppel de servomotor als vasthouden niet nodig is |
| Bereiken dicht bij de basis mislukt | Doelpunt binnen de ring voor de minimale reikwijdte | Verwachte geometrie; |L1 − L2| is onbereikbaar |
| IK geeft NaN | Doelpunt voorbij L1 + L2 |
Controleer vóór de trigonometrie of het doel bereikbaar is |
| Bereikt vanuit verschillende richtingen anders | terugslag in de versnellingsbak, versterkt door segmentlengte | Nader elk doel vanuit dezelfde richting |
| Plotselinge beweging na een nieuw commando | Servomotor beweegt op volle snelheid | Interpoleer de beweging over meerdere stappen |
| Grijper verplettert of laat voorwerpen vallen | Geen krachtterugkoppeling | Beperk de sluithoek; breng schuimrubber op de bekken aan |
Wanneer je deze kit ontgroeit
Een 4-DOF-acrylkit is een leerplatform en geeft dat ook eerlijk toe. Je ontmoet de grenzen in deze volgorde:
Draagvermogen. Enkele tientallen grammen. Zwaarder kan de schouderservomotor niet vasthouden.
Herhaalbaarheid. Terugslag in de versnellingsbaken van de servomotoren plus doorbuiging van de acrylsegmenten zorgt ervoor dat dezelfde ingestelde pose enkele millimeters uit elkaar ligt. Vier graden speling bij de schouder leidt bij een reikwijdte van 190 mm tot meer dan 13 mm bij het gereedschap.
Polsstand. Met vier vrijheidsgraden kun je het gereedschap ergens plaatsen, maar niet onafhankelijk de hoek bepalen van waaraar het object benadert. Een 5- of 6-DOF-arm voegt een pols toe, waardoor je “dit object vanaf de zijkant oppakken” mogelijk wordt.
| Upgrade | Wat het oplevert |
|---|---|
| MG90S-servomotoren door de hele arm | Metalen tandwielen; overleeft schokken en heeft minder terugslag |
| Aluminiumen segmenten | Veel minder doorbuiging en betere herhaalbaarheid |
| MG996R-servomotoren en een grotere constructie | Echt draagvermogen van honderden grammen |
| 6-DOF-arm | Onafhankelijke stand van het gereedschap |
| Arm met stappenmotor of BLDC | Herhaalbaarheid tot op een tiende van een millimeter |
Niets daarvan verandert de wiskunde. De tweeledige kinematiek die je voor deze kit schrijft, gebruikt dezelfde oplossing als een betere arm; juist daarom is het zinvol om eerst met de betaalbare constructie te bouwen.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de 4-DOF-robotarmkit voorkomt.
Vragen
FAQ over de 4-DOF-robotarmkit
Wat is een 4-DOF-robotarm?
Een 4-DOF-robotarm (vier vrijheidsgraden) heeft vier onafhankelijk geregelde gewrichten: meestal een draaibare basis, een schouder, een elleboog en een grijper. Met deze vier bewegingen kan het gereedschap diverse posities op een bureau bereiken en voorwerpen oppakken. Het is de kleinste arm die zich als een echte manipulator gedraagt en tegelijk goedkoop en eenvoudig te besturen blijft.
Hoeveel servomotoren heeft een robotarm nodig?
Eén per gewricht. Een 4-DOF-arm gebruikt vier servomotoren: basisdraai, schouder, elleboog en grijper. Grotere armen voegen polsneiging en polsdraai toe voor 5 of 6 DOF. Omdat elke servomotor een eigen PWM-kanaal nodig heeft, zijn armen de klassieke reden om een PCA9685-driver toe te voegen in plaats van servomotoren rechtstreeks aan de microcontroller te sluiten.
Wat is de MeArm?
De MeArm is een populaire open-source 4-DOF-armkit van lasergesneden acryl die door vier micro-servomotoren wordt aangedreven. Het is het archetype van de betaalbare desktoprobotarm; veel van de hedendaagse kits zijn MeArm-klonen of kleine varianten daarvan. Ze worden allemaal op dezelfde manier bedraad en geprogrammeerd, waardoor je kennis van kinematiek en drivers direct overdraagbaar is.
Hoeveel kan een hobbyrobotarm tillen?
Niet veel: enkele tientallen grammen bij de grijper. De grens wordt bepaald door het koppel van de servomotor en de hefboomarm. Het stallkoppel van een SG90 van ~1,8 kg·cm klinkt fors totdat je dat over een arm van 15 cm verdeelt; dan daalt het bruikbare draagvermogen tot enkele tientallen grammen. Servomotoren met metalen tandwielen en een kortere arm helpen. Voor echt tillen heb je een grotere arm met reductie nodig.
Heb ik een PCA9685 nodig voor een robotarm?
Niet strikt genomen, maar het is wel het juiste hulpmiddel. Vier servomotoren kunnen op de PWM-pinnen van een Arduino draaien als je ze apart voedt. Een PCA9685 maakt echter de timers van de microcontroller vrij, bestuurt alle gewrichten via twee I²C-pinnen en voedt de servomotoren via de eigen V+-voeding; precies wat een arm met meerdere gewrichten nodig heeft.
Verder lezen