Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
Onderdelen en benodigdheden
| 6 DoF Robotarm Kit | 1 |
| Nintendo Nunchuk Controller | 1 |
| Arduino Mega 2560 | 1 |
| Control Shield | 1 |
Apps en online services
- Arduino IDE
Over dit project
Robotarmen zijn geweldig! Fabrieken over de hele wereld gebruiken ze om te spuiten, te solderen en dingen met precisie te verplaatsen. Ze zijn ook te vinden in ruimtevaart, onderzeese ROV's, en zelfs in medische toepassingen!
En nu kun je een goedkopere versie thuis, op kantoor of in je lab hebben! Moe van een repetitieve taak? Programmeer je eigen robot om je te helpen... of dingen in de war te schoppen! :D
In deze tutorial laat ik zien hoe je een robotarm monteert en programmeert met een Arduino Mega. Ik wilde ook een andere controleermethode ervaren: een Nintendo Nunchuk! Ze zijn goedkoop, makkelijk te vinden, en hebben een boel sensoren.
Je kunt deze tutorial op verschillende manieren gebruiken. Als je geen robotarm kit hebt (en geen wilt kopen/bouwen), kun je er nog steeds Arduino programmeren leren en hoe je een Wii Nunchuk koppelt aan je eigen projecten. Je kunt er ook je elektronica- en mechanische vaardigheden mee oefenen.
Stap 1: Tools en materialen
Benodigde tools en materialen:
- Solderbout en draad. Ik moest enkele draden aan de Nunchuk solderen om het met de Arduino te verbinden;
- Krimpkous. Voor betere isolatie van de geleiders;
- Schroevendraaier. De structuur wordt gemonteerd met bouten en moeren;
- 6-as mechanische desktop robotarm. Deze kit bevat al diverse componenten. Betrouwbaar en makkelijk te monteren;
- 12V voeding (2A of meer);
- Nunchuk controller. Wordt aangesloten op de Arduino en gebruikt om de robotarm te besturen;
- Mannelijke draadbruggen (4 draden);
- Arduino Mega. Let op: de robotarm kit die ik gebruikte bevat al een bord en controller bundle met deze Arduino. Als je zo'n kit niet gebruikt, kun je andere Arduino boards gebruiken;
Ik werd later geïnformeerd dat er een Nunchuk adapter bestaat die de verbinding met een breadboard makkelijker maakt. Goede optie als je tijd wilt besparen op solderen en de originele connector niet wilt vernielen (zoals beschreven in Stap 9).
De SainSmart 6-as mechanische desktop arm wordt standaard geleverd met:
- Arduino Mega 2560 R3
- Control board shield
- NRF24L01+ Draadloze Transceiver Module
- MPU6050 3-as gyroscoop en 3-as versnellingsmeter
- 71x M3x8 schroef, 47x M3 moer
- 2x U-beugel, 5x servo beugel
- 4x 9kg servo, 2x 20kg servo
- 6x metaal servo schaal, 3x U-beugel, 21x rechte hoek beugel
- 3x flenslager, 1x gripper
Je kunt andere robotarm kits online vinden, of je eigen ontwerpen. Er zijn geweldige 3D-printbare projecten.
In de volgende 7 stappen laat ik zien hoe je de arm kit monteert voordat we de elektronica aan de slag gaan. Als je geen vergelijkbare kit hebt, voel je vrij om stappen over te slaan. Je kunt een andere kit gebruiken, deze monteren en direct springen naar de elektronica- en programmeringsstappen.
Stap 2: Robotarm monteren Deel 1 - Basis
Het eerste deel is de basis van de robot. Het bestaat uit twee U-vormige beugels, achteraan aan elkaar bevestigd met vier M3 bouten en moeren. Dit is waarschijnlijk het makkelijkste deel om te monteren.
Stap 3: Robotarm monteren Deel 2 - Servo #1
De eerste servomotor wordt loodrecht op de basis gemonteerd, met een servo beugel. Dit profiel wordt met vier M3 bouten en moeren aan de basis bevestigd. Servo #1 wordt erbovenop geplaatst en met vier M3 bouten en moeren bevestigd. Een cirkelvormige metaal horning wordt aan de servo-as bevestigd. De kit wordt geleverd met verschillende plastic horningen; deze worden niet gebruikt voor de robot.
Stap 4: Robotarm monteren Deel 3 - Servo #2
Een andere servo beugel wordt loodrecht op de vorige gemonteerd. Het wordt verbonden met de horning van servo #1 met vier M3 bouten. Servo #2 wordt geïnstalleerd met vier M3 bouten en moeren, en gebruikt ook een cirkelvormige metaal horning. Een U-beugel wordt aan de horning bevestigd met vier bouten. Een M3 bout wordt tegenover de servo-as gebruikt voor stabiliteit. Een lager past op deze bout en wordt vastgezet met een M3 moer. Zo is de U-beugel stevig aan de middelpuntas van servo #2 bevestigd.
Stap 5: Robotarm monteren Deel 4 - Servo #3
Een andere U-beugel wordt gemonteerd met vier M3 bouten en moeren. Aan de andere kant wordt servo #3 geïnstalleerd, met een cirkelvormige metaal horning en vier bouten. Een servo beugel wordt aan de servomotor gekoppeld, en een L-vormig profiel wordt aan de servo beugel gekoppeld met bouten en moeren. Let op dat weer een lager tegenover de servo-as wordt gebruikt, zoals eerder beschreven.
Stap 6: Robotarm monteren Deel 4 - Servo #4
Een andere U-beugel wordt verbonden met het L-vormige profiel met vier M3 bouten en moeren. Net als de vorige stap, wordt servo #4 aan de U-beugel gemonteerd met vier bouten. Een andere servo beugel wordt aan de servo gekoppeld.
Stap 7: Robotarm monteren Deel 4 - Servo #5
De vijfde servo wordt loodrecht op servo #4 aangesloten met een andere servo beugel, geïnstalleerd met vier M3 bouten en moeren.
Stap 8: Robotarm monteren Deel 4 - Servo #6
De gripper wordt aan de as van servo #5 bevestigd. Erbovenop wordt servo #6 aangesloten met bouten, moeren en een metaal horning. De gripper heeft tandwielen die de rotatie van de servo omzetten in een lineaire beweging van de gripper.
Stap 9: Nunchuk controller voorbereiden
Voor dit project koos ik een Nintendo Nunchuk controller om diverse redenen:
- Ze zijn goedkoop! Replica's kunnen een mindere kwaliteit hebben, maar ik had geen robuuste controller nodig;
- Ze zijn makkelijk te vinden! Er zijn diverse originele en goedkope replica's online;
- Het heeft veel sensoren! Elke controller heeft twee knoppen (Z en C), een 2-as joystick (X en Y) en een 3-as versnellingsmeter;
- Het heeft een Arduino bibliotheek. Robert Eisele ontwierp een geweldige en makkelijk te gebruiken bibliotheek. Bekijk het: https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/
Helaas heeft de Nunchuk een ingewikkelde connector, moeilijk te koppelen aan andere elektronica. Om het met de Arduino te verbinden, moest ik de kabel knippen en de draden blootleggen. Hierdoor werkt het niet meer met een Nintendo Wii... :/
Eerst knipte ik de connector af en verwijderde de isolatie van de draden. Met een multimeter, en gebaseerd op de kleur van elke draad, bepaalde ik de functie van elke draad (Vcc, GND, SCL, SDA) gebaseerd op het schema van de connector. De kleur van de draden heeft geen standaard. Ik heb al de volgende mogelijkheden gehoord:
Origineel: SDA=groen, SCL=geel, 3V3=rood, GND=wit
Replica #1: SDA=geel, SCL=wit, 3V3=groen, GND=rood
Replica #2: SDA=blauw, SCL=wit, 3V3=roze, GND=groen
Ik solderde de draden aan een mannelijke draadbrug voor makkelijkere verbinding met de Arduino. Hiervoor gebruikte ik een solderbout en krimpkous.
Stap 10: De schakelingen bedraden
Eenmaal de structuur gemonteerd en de Nunchuk connectors klaar, ben je klaar om de schakelingen te bedraden. Ik gebruikte het control board shield dat bij mijn robotarm kit zat. Het maakt de verbinding van componenten makkelijker, omdat het al specifieke connectors heeft voor de servomotoren, voeding, etc.
Nunchuk aansluiting:
- Nunchuk pin 6 (SCL) → Arduino Mega Pin 21 (SCL) (op de shield)
- Nunchuk pin 1 (SDA) → Arduino Mega Pin 20 (SDA) (op de shield)
- Nunchuk pin 3 (Vcc) → Arduino Mega Pin 3V3 (op de shield)
- Nunchuk pin 4 (Gnd) → Arduino Mega Pin Gnd (op de shield)
Als je een Arduino Uno gebruikt, moeten de SCL en SDA pinnen van de Nunchuk op andere Arduino pinnen aangesloten worden:
- Nunchuk pin 6 (SCL) → Arduino Uno Pin A5
- Nunchuk pin 1 (SDA) → Arduino Uno Pin A4
- Nunchuk pin 3 (Vcc) → Arduino Uno Pin 3V3
- Nunchuk pin 4 (Gnd) → Arduino Uno Pin Gnd
Servo's:
- Control shield terminal 11 → Servo #1
- Control shield terminal 12 → Servo #2
- Control shield terminal 13 → Servo #3
- Control shield terminal 8 → Servo #4
- Control shield terminal 9 → Servo #5
- Control shield terminal 10 → Servo #6
Als je geen control shield gebruikt, gebruik dan deze pinconfiguratie:
- Arduino Pin 11 → Servo #1 (Signaal)
- Arduino Pin 12 → Servo #2 (Signaal)
- Arduino Pin 13 → Servo #3 (Signaal)
- Arduino Pin 8 → Servo #4 (Signaal)
- Arduino Pin 9 → Servo #5 (Signaal)
- Arduino Pin 10 → Servo #6 (Signaal)
- Arduino GND → Servo's GND
- 6V Voeding → Servo's VCC
Je hebt ook een externe 12V voeding nodig. Ik raad er een aan van meer dan 2A output. De servo's consumeren veel stroom, en als de voeding niet krachtig genoeg is, zullen de servo's trillen en erg heet worden. Ze verliezen ook hun kracht.
Sluit de voeding pas aan nadat je de Arduino code hebt geüpload (getoond in latere stappen). Er zit een aan/uit knop op de shield. Houd deze in de uit-positie. Plug een USB-kabel in de Arduino en ga door naar de volgende stap.
Stap 11: Arduino IDE instellen
Nu de hardware klaar is, is het tijd om aan de Arduino code te werken.
1. Download en installeer de nieuwste Arduino IDE Je vindt de nieuwste versie voor Windows, Linux of Mac OSX op de Arduino website: https://www.arduino.cc/en/main/software
2. Bibliotheken toevoegen Voor dit project gebruikte ik Robert Eisele's geweldige Nunchuk Arduino bibliotheek! Meer info op zijn website: https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/ Download de bibliotheek op https://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk. Navigeer in de Arduino IDE naar Sketch → Include Library → Manage Libraries om de bibliotheek toe te voegen.
Hoe werkt de bibliotheek? De Nunchuk bibliotheek komt met een set functies voor het uitlezen van de controller sensoren:
- nunchuk_buttonZ(): geeft 1 als Z-knop ingedrukt, 0 als niet;
- nunchuk_buttonC(): geeft 1 als C-knop ingedrukt, 0 als niet;
- nunchuk_joystickX(): geeft X-waarde joystick (tussen -127 en 127);
- nunchuk_joystickY(): geeft Y-waarde joystick (tussen -127 en 127);
- nunchuk_pitch(): geeft pitch-hoek in radialen (tussen -180° en 180°);
- nunchuk_roll(): geeft roll-hoek in radialen (tussen -180° en 180°).
De hoeken worden in radialen teruggegeven. Ik converteerde deze waarden naar graden in mijn Arduino code.
Stap 12: Arduino Code
Download het Arduino sketch bestand. Plug de USB-kabel in je computer en upload de code. Het uploaden duurt even. Je kunt die tijd gebruiken om een 'like' en 'share' te geven aan deze tutorial! :D
Na het uploaden, haal de USB-kabel eruit, sluit de voeding aan en zet de aan/uit knop aan. De code begint direct te draaien.
Waarschuwing: wanneer de code start, beweegt de robotarm heel snel naar de startpositie. Wees voorzichtig om niet gewond te raken of apparatuur te beschadigen tijdens opstart!
Je moet waarschijnlijk de starthoek van elke servomotor aanpassen, afhankelijk van hoe je servos gemonteerd zijn.
Code uitleg: Voor de setup importeert de code de gebruikte bibliotheken (nunchuk.h, wire.h en servo.h). Pinnen worden gedefinieerd en globale variabelen gedeclareerd. De angle# integer variabelen slaan de beginpositie voor elke servo op. Als je wilt dat de robot op een andere positie start, verander de waarden in die variabelen. servo#_speed variabelen definiëren de snelheid van de beweging van elke servo. angle#min en angle#max worden gebruikt om de maximale en minimale hoek voor elke servo te beperken, om botsingen tussen opeenvolgende gewrichten te voorkomen.
De setup koppelt elke servo aan een specifieke pin en start de positie. Seriële communicatie (naar Serial Monitor) en I2C communicatie met de Nunchuk worden hier ook gestart.
De main loop herhaalt zich continu. Nunchuk status wordt elke cyclus uitgelezen. Afhankelijk van de metingen worden verschillende commando's uitgevoerd. Joystick X wordt gebruikt voor servo #1. Eerst wordt gecheckt of de joystickwaarde groot genoeg is om ruis te negeren. Zo ja, wordt de hoek van de servo verhoogd/verlaagd met een gegeven snelheid. Een vergelijkbaar blok wordt gebruikt voor joystick Y, voor servo #3. Servo #2 blijft vast in deze code. Rotatie van de gripper wordt gegeven door de roll en pitch hoeken van de controller, gemeten door de versnellingsmeter. Om de besturing makkelijker te maken, wordt de hoek van de gripper alleen geüpdate wanneer C of Z knoppen ingedrukt zijn. Alleen C ingedrukt: roll hoek wordt gebruikt als setpoint voor servo #5. Snelheid is evenredig aan de fout tussen actuele en gewenste positie. Vergelijkbare code voor servo #4 die pitch hoek volgt. De gripper sluit wanneer zowel C als Z ingedrukt zijn. Bij loslaten van een van de knopen opent de gripper. Aan het einde van de sketch staat een blok code dat de actuele hoek van elke servomotor op de Serial Monitor toont. Handig voor het kiezen van de starthoek.
Stap 13: Gebruik
Nu alles klaar is, zet de robot aan en veel plezier! De Nunchuk wordt gebruikt om de vijf bewegingen te controleren die in de afbeeldingen getoond worden: rechts/links rotatie, omhoog/omlaag beweging, gripper rotatie, gripper omhoog/omlaag, en gripper open/dicht. Je kunt die bewegingen combineren voor verschillende taken. Je kunt de code aanpassen voor andere bewegingen op basis van combinaties van knoppen en joystick hoeken.
Productieproces
- Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Externe IoT-besturing van een zelfgebouwde robotarm
- Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
- Bouw een Stemgecontroleerde Robot met Arduino Nano
- Ethernet-gestuurde robotarm: Remote control gemaakt simpel
- Spraakgestuurde huishoudapparaten: Bluetooth-besturing met Google Assistant
- Bouw een Slimme Arduino-gestuurde Robotarm: Eenvoudige DIY Handleiding
- DIY Handgebaren-gestuurde Arduino Robotarm – Stap‑voor‑Stap Bouwhandleiding