Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Nunchuk-gestuurde robotarm (met Arduino)

Componenten en benodigdheden

6 DoF robotarm
× 1
Nunchuk
× 1
Arduino Mega 2560
× 1
Besturingsschild
× 1

Apps en online services

Arduino IDE

Over dit project

Robotarmen zijn geweldig! Fabrieken over de hele wereld hebben ze, waar ze met precisie schilderen, solderen en spullen vervoeren. Ze zijn ook te vinden in ruimteverkenning, onderzeese op afstand bediende voertuigen en zelfs in medische toepassingen!

En nu kunt u er een goedkopere versie van hebben bij u thuis, op kantoor of in het laboratorium! Ben je het repetitieve werk zat? Programmeer je eigen robot om je te helpen... of om dingen te verknoeien! :D

In deze tutorial laat ik je zien hoe je een robotarm monteert en programmeert met een Arduino Mega. Voor dit project wilde ik ook een andere methode ervaren om een ​​robotarm te besturen:met een Nintendo Nunchuk! Ze zijn goedkoop, gemakkelijk te vinden en hebben een heleboel sensoren.

Er zijn verschillende manieren waarop u deze zelfstudie kunt gebruiken. Als je geen robotarmkit hebt (en er geen wilt kopen of bouwen), kun je deze toch gebruiken om iets te leren over Arduino-programmering en hoe je een Wii Nunchuk kunt koppelen aan je eigen projecten. Je kunt het ook gebruiken om je elektronica en mechanische vaardigheden te oefenen.

Stap 1:Gereedschappen en materialen

In dit project zijn de volgende gereedschappen en materialen gebruikt:

Gereedschappen en materialen:

  • Soldeer ijzer en draad. Ik moest wat terminals aan de draden van Nunchuk solderen om het op de Arduino aan te sluiten;
  • Krimpbuis. Voor een betere isolatie van de geleiders werden enkele stukken krimpkous gebruikt;
  • Schroevendraaier. De structuur wordt gemonteerd met behulp van enkele bouten en moeren;
  • 6-assige mechanische desktop robotarm (koppeling). Deze geweldige kit wordt al geleverd met verschillende componenten zoals hieronder beschreven. Het is betrouwbaar en eenvoudig te monteren;
  • 12V voeding (2A of meer);
  • Nunchuk-controller (koppeling). Het is gekoppeld aan het Arduino-bord en wordt gebruikt om de robotarm te besturen;
  • Mannelijke jumperdraden (4 draden);
  • Arduino Mega (link/link/link). Merk op dat de robotarmkit die ik heb gebruikt ook een bord- en controllerbundel heeft die al bij dit Arduino-bord wordt geleverd. Als je een van die kits niet gebruikt, kun je ook andere Arduino-boards gebruiken;

Ik kreeg later te horen dat er een Nunchuk-adapter is die maakt de koppeling met een breadboad makkelijker (link/link). Het is een goede optie als je wat tijd wilt besteden aan solderen en niet de originele connector wilt vernietigen zoals beschreven in stap 9.

Sain Smart 6-assige mechanische desktop-arm wordt al geleverd met de volgende componenten:

  • Arduino Mega 2560 R3 (link)
  • Besturingskaart schild (link)
  • NRF24L01+ draadloze zendontvangermodule (link)
  • MPU6050 3-assige gyroscoop en een 3-assige versnellingsmeter (link)
  • 71 x M3X8 schroef
  • 47 x M3-moer
  • 2 x U-beugel
  • 5 x servobeugel
  • 4 x 9kg servo (link)
  • 2 x 20kg servo (link)
  • 6 x metalen servotray
  • 3 x U-beugel
  • 21 x haakse beugel
  • 3 x flenslager
  • 1 x grijper

U kunt online andere robotarmkits vinden of zelfs uw eigen kits ontwerpen. Er zijn een aantal geweldige projecten die je bijvoorbeeld in 3D kunt printen.

In de volgende 7 stappen laat ik je zien hoe je de armkit monteert voordat je de circuits aansluit. Als u geen vergelijkbare kit heeft, kunt u enkele stappen overslaan. Je kunt een andere robotarmkit gebruiken, deze in elkaar zetten en direct naar de elektronica- en programmeerstappen gaan.

Bij elke stap is er een geanimeerde gif, die laat zien hoe mijn robotarm in elkaar werd gezet. Het werkt alleen op de desktopversie van de website.

Stap 2:Montage van de robotarm Pt1 - basis

Het eerste onderdeel dat moet worden geassembleerd, is de basis van de robot.

Het is gemaakt van twee U-vormige beugels, rug aan rug verbonden met vier M3-bouten en moeren, zoals te zien is op de foto's. Dit is waarschijnlijk het gemakkelijkste onderdeel om te monteren.

Stap 3:Montage van de robotarm Pt2 - Servo #1

De eerste servomotor wordt loodrecht op de basis gemonteerd met behulp van een servobeugel. Dit profiel wordt aan de basis bevestigd met vier M3 bouten en moeren, zoals te zien is op de foto's. Servo #1 wordt bovenop geplaatst en bevestigd met vier M3-bouten en moeren.

Aan de servo-as is een ronde metalen hoorn bevestigd. De kit wordt geleverd met verschillende plastic hoorns. Ze worden niet gebruikt om de robot in elkaar te zetten.

Stap 4:Montage van de robotarm Pt3 - Servo #2

Een andere servobeugel is loodrecht op de vorige gemonteerd. Het is verbonden met servo # 1 hoorn met behulp van vier M3-bouten. Servo #2 is geïnstalleerd met vier M3-bouten en moeren en maakt ook gebruik van een ronde metalen hoorn.

Een U-beugel wordt vervolgens met vier bouten aan de hoorn bevestigd. Merk op dat een M3-bout wordt gebruikt tegenover de servo-as. Het geeft stabiliteit aan de structuur. Op deze bout past een lager en deze wordt met een andere M3-moer op zijn plaats vergrendeld. Op deze manier is de U-beugel stevig bevestigd aan de middenas van servo #2.

Stap 5:Montage van de robotarm Pt4 - Servo #3

Een andere U-beugel wordt gemonteerd met vier M3-bouten en moeren.

Aan de andere kant is servo #3 geïnstalleerd, met behulp van een ronde metalen hoorn en vier bouten. Een servobeugel is verbonden met de servomotor en een L-vormig profiel is met enkele bouten en moeren aan de servobeugel gekoppeld.

Merk op dat een andere peiling wordt gebruikt tegenover de servo-as, zoals eerder beschreven.

Stap 6:Montage van de robotarm Pt4 - Servo #4

Een andere U-beugel wordt met een set van vier M3-bouten en moeren aan het L-profiel bevestigd. Net als bij de vorige stap, wordt servo #4 met vier bouten op de U-beugel gemonteerd. Een andere servobeugel is aangesloten op de servo.

Stap 7:Montage van de robotarm Pt4 - Servo #5

De vijfde servo is loodrecht op servo #4 aangesloten met een andere servobeugel, geïnstalleerd met vier M3-bouten en moer.

Stap 8:Montage van de robotarm Pt4 - Servo #6

De grijper wordt dan verbonden met servo #5-as. Aan de bovenkant is servo #6 verbonden met behulp van enkele bouten, moeren en een metalen hoorn. De grijper heeft enkele versnellingen, waardoor de rotatie van de servo in een lineaire beweging van de grijper zal veranderen.

Stap 9:Nunchuk-controller voorbereiden

Voor dit project besloot ik om een ​​aantal redenen een Nintendo Nunchuk-controller te gebruiken:

  • Ze zijn goedkoop! Replica's hebben misschien een inferieure kwaliteit, maar ik had geen robuuste controller nodig voor dit project;
  • Ze zijn gemakkelijk te vinden! Er zijn verschillende originele en goedkope replica's online.
  • Hij heeft veel sensoren! Elke controller heeft twee knoppen (Z- en C-knoppen), een joystick met twee assen (X en Y) en een versnellingsmeter met drie assen;
  • Het heeft een Arduino-bibliotheek. Robert Eisele ontwierp een verbazingwekkende en gebruiksvriendelijke bibliotheek voor het lezen van de Nunchuk-sensor. Check it out:https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

Helaas hebben Nunchuk-joysticks een gecompliceerde connector, moeilijk te koppelen met andere elektronica. Om het op de Arduino aan te sluiten, moest ik de kabel doorknippen en de draden blootleggen. Op deze manier werkt het niet meer met een Nintendo Wii... :/

Eerst moest ik de connector van de joystick doorknippen en de isolatie van de draden verwijderen. Met behulp van een multimeter en op basis van de kleur van elke draad, heb ik de functie van elke draad (Vcc, GND, SCL en SDA) bepaald op basis van het schema van de connector in de afbeelding. De kleur van de draden heeft geen standaard. Ik heb al gehoord van de volgende mogelijkheden:

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 heb de draden aan een mannelijke jumper gesoldeerd, voor een gemakkelijkere verbinding met het Arduino-bord. Daarvoor heb ik een soldeerbout en een krimpkous gebruikt, zoals op de foto's te zien is.

Later hoorde ik dat er een Nunchuk-adapter is die de verbinding met een breadboad makkelijker maakt (link/link). Het is een goede optie als je even wilt solderen en de originele connector niet wilt vernietigen.

Stap 10:bedrading van de circuits

Zodra de structuur is gemonteerd en de Nunchuk-connectoren klaar zijn, bent u klaar om de circuits aan te sluiten. Ik heb het schild van de besturingskaart gebruikt dat bij mijn robotarmkit is geleverd. Het vereenvoudigt de aansluiting van de componenten, omdat het al wordt geleverd met specifieke connectoren voor de servomotoren, voeding, enz.

Sluit de componenten als volgt aan:

Nunchuk:

  • Nunchuk pin 6 (SCL) => Arduino Mega Pin 21 (SCL) (op het schild)
  • Nunchuk pin 1 (SDA) => Arduino Mega Pin 20 (SDA) (op het schild)
  • Nunchuk pin 3 (Vcc) => Ardino Mega Pin 3V3 (op het schild)
  • Nunchuk pin 4 (Gnd) => Arduino Mega Pin Gnd (op het schild)

Als je een Arduino Uno gebruikt, worden de SCL- en SDA-pinnen van Nunchuk als volgt op verschillende Arduino-pinnen aangesloten:

  • Nunchuk pin 6 (SCL) => Arduino Uno Pin A5
  • Nunchuk pin 1 (SDA) => Arduino Uno Pin A4
  • Nunchuk pin 3 (Vcc) => Ardino Uno Pin 3V3
  • Nunchuk pin 4 (Gnd) => Arduino Uno Pin Gnd

Servo's:

  • Besturingsschermaansluiting 11 => Servo #1
  • Besturingsschermaansluiting 12 => Servo #2
  • Besturingsschermaansluiting 13 => Servo #3
  • Besturingsschermaansluiting 8 => Servo #4
  • Besturingsschermaansluiting 9 => Servo #5
  • Besturingsschermaansluiting 10 => Servo #6

Als u het bedieningsschild niet gebruikt, moet u de volgende pinconfiguratie gebruiken:

  • Arduino Pin 11 => Servo #1 (Sgn)
  • Arduino Pin 12 => Servo #2 (Sgn)
  • Arduino Pin 13 => Servo #3 (Sgn)
  • Arduino Pin 8 => Servo #4 (Sgn)
  • Arduino Pin 9 => Servo #5 (Sgn)
  • Arduino Pin 10 => Servo #6 (Sgn)
  • Arduino Gnd => Servo Gnd
  • 6V voeding => Servo's Vcc

Je moet ook een externe 12V-voeding aansluiten. Ik stel voor een met meer dan 2A output. De servo's verbruiken veel stroom, en als de voeding niet krachtig genoeg is, gaan de servo's trillen en worden ze erg heet. Ze zullen ook hun kracht verliezen.

Sluit de stroombron pas aan nadat u de Arduino-code hebt geüpload (getoond in latere stappen). Er zit een aan/uit-knop op het schild. Houd het in de uit-stand.

Sluit een USB-kabel aan op de Arduino en ga verder met 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 Arduino IDE nieuwste versie Je kunt de nieuwste versie voor Windows, Linux of MAC OSX vinden op de Arduino-website:https://www.arduino.cc/en/main/software

Download het gratis, installeer het op uw computer en start het.

2. De bibliotheken toevoegen

Voor dit project heb ik de geweldige Nunchuk Arduino-bibliotheek van Robert Eisele gebruikt! Je kunt er meer over vinden 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 naar Schets-> Bibliotheek opnemen -> Bibliotheken beheren ... op uw Arduino IDE om de bibliotheek toe te voegen.

Hoe werkt de bibliotheek?

Nunchuk-bibliotheek wordt geleverd met een reeks functies voor het lezen van de sensoren van de controller:

nunchuk_buttonZ() :geeft 1 terug als de Z-knop wordt ingedrukt, of 0 als dat niet het geval is; nunchuk_buttonC() :geeft 1 terug als de C-knop wordt ingedrukt, of 0 als dat niet het geval is; nunchuk_joystickX() :geeft de x-waarde van de joystick terug (tussen -127 en 127); nunchuk_joystickY() :geeft de y-waarde van de joystick terug (tussen -127 en 127); nunchuk_pitch() :retourneert de hoek van de controller in radialen (tussen -180º en 180º); nunchuk_roll() :geeft de rolhoek van de controller terug in radialen (tussen -180º en 180º).

De hoeken worden geretourneerd in radialen. Ik heb die waarden omgezet in graden in mijn Arduino-code.

Stap 12:Arduino-code

Download Arduino's schetsbestand.

Steek de USB-kabel in de USB-poort van uw computer en upload de code. Het uploaden van de code duurt even. Je kunt die tijd gebruiken om deze tutorial te 'liken' en te 'delen' terwijl je wacht! :D

Nadat het uploaden is voltooid, koppelt u de USB-kabel los, sluit u de voeding aan en zet u de aan/uit-knop aan. De code wordt onmiddellijk uitgevoerd.

Waarschuwing:wanneer de code begint te lopen, zal de robotarm heel snel naar zijn oorspronkelijke positie bewegen. Pas op dat u tijdens het opstarten geen letsel oploopt of apparatuur in de buurt beschadigt!

Mogelijk moet u de starthoek van elke servomotor vervangen, afhankelijk van hoe uw servo's zijn gemonteerd.

Code uitgelegd:

Vóór de installatie importeert de code de bibliotheken die op de schets worden gebruikt (nunchuk.h, wire.h en servo.h ).

De te gebruiken pinnen worden gedefinieerd en globale variabelen worden gedeclareerd. De hoek# integer-variabelen slaan de beginpositie voor elke servo op. Als je wilt dat je robot op een andere positie begint, verander dan de waarden van die variabelen.

servo#_speed variabelen bepalen de snelheid van de beweging van elke servo. Als u wilt dat een specifieke servo sneller beweegt, verhoogt u de waarde ervan. hoek#min en hoek#max variabelen worden gebruikt om de maximale en minimale hoek voor elke servo te beperken. U kunt deze variabelen instellen om botsingen tussen opeenvolgende gewrichten van de robot te voorkomen.

//Include libraries#include #include #include //define variables#define SERV1 8 //servo 1 op digitale poort 8#define SERV2 9 //servo 2 op digitale poort 9#define SERV3 10 //servo 3 op digitale poort 10#define SERV4 11 //servo 4 op digitale poort 11#define SERV5 12 //servo 5 op digitale poort 12#define SERV6 13 / /servo 6 op digitale poort 13Servo s1; //servo 1Servo s2; //servo 2Servo s3; //servo 3Servo s4; //servo 4Servo s5; //servo 5Servo s6; //servo 6//definieer de starthoek voor elke servo//kies een veilige positie om vanuit te starten// het zal proberen om onmiddellijk naar die positie te gaan wanneer het wordt ingeschakeld!// die hoeken zullen afhangen van de hoek van elke servo tijdens de montagehoek1 =90; // servo 1 huidige angleint angle2 =30; // servo 2 huidige angleint angle3 =0; // servo 3 huidige angleint angle4 =90; // servo 4 huidige angleint angle5 =90; // servo 5 huidige angleint hoek6 =45; // servo 6 huidige angleint servo1_speed =3; // servo 1 speedint servo2_speed =3; // servo 2 speedint servo3_speed =3; // servo 3 speedint servo4_speed =1; // servo 4 speedint servo5_speed =1; // servo 5 speed//definieer beperkingen voor elke servo// die hoeken zullen afhangen van de hoek van elke servo tijdens de montage angle1min =0; // servo 1 minimum angleint angle1max =180; // servo 1 maximale hoekint angle2min =0; // servo 2 minimale angleint angle2max =180; // servo 2 maximale hoekint angle3min =0; // servo 3 minimum angleint angle3max =180; // servo 3 maximale hoekint angle4min =0; // servo 4 minimum angleint angle4max =180; // servo 4 maximale angleint angle5min =0; // servo 5 minimum angleint angle5max =180; // servo 5 maximale hoekhoek 6min =0; // servo 6 minimum angleint angle6max =180; // servo 6 maximale angleboolean display_angles =true; //boolean gebruikt om de hoek van elke servo op seriële monitor bij te werken 

Tijdens de installatie wordt elke servo aan een specifieke pin bevestigd en wordt de positie gestart.

Seriële communicatie (naar seriële monitor) en I2C-communicatie met de Nunchuk worden hier ook gestart.

//SETUPvoid ​​setup() {// bevestig elke servo aan een pin en start zijn positie s1.attach (SERV1); s1.write(hoek1); s2.bijvoegen (SERV2); s2.write(hoek2); s3.bijvoegen (SERV3); s3.write(hoek3); s4.attach(SERV4); s4.write(hoek4); s5.bijvoegen (SERV5); s5.write(hoek5); s6.attach(SERV6); s6.write(hoek6); //start seriële communicatie Serial.begin (9600); //start Nunchuk Wire.begin(); nunchuk_init();} 

De hoofdlus wordt keer op keer herhaald. De Nunchuk-status wordt bij elke cyclus afgelezen. Afhankelijk van de metingen worden verschillende commando's uitgevoerd.

void loop() { //lees Nunchuk-sensoren if (nunchuk_read()) { int x =nunchuk_joystickX(); //joystick X-positie int y =nunchuk_joystickY(); //joystick Y-positie boolean z =nunchuk_buttonZ(); //z knop status boolean c =nunchuk_buttonC(); //c knop status float pitch =nunchuk_pitch(); // pitch hoek float roll =nunchuk_roll(); //rolhoek 

Joystick X wordt gebruikt om servo #1 te bewegen.

Het volgende codeblok is gebruikt. Eerst wordt gecontroleerd of de waarde van de joystick groot genoeg is. Op deze manier worden ruis en kleine variaties buiten beschouwing gelaten. Als de waarde aan de eisen voldoet, wordt de hoek van de servo bij een bepaalde snelheid vergroot/verkleind.

//Sla links/rechts (met een vaste snelheid) //Sla linksaf als (x> 90) { angle1 -=servo1_speed; display_angles =waar; if (hoek1  hoek1max) { hoek1 =hoek1max; } } s1.write(hoek1); // update servopositie 

Een soortgelijk blok wordt gebruikt voor joystick y. Het wordt gebruikt om de hoek van servo #3 te veranderen. Servo #2 wordt vastgehouden in deze code.

De rotatie van de grijper wordt bepaald door de rol- en hellingshoeken van de controller, gemeten door de versnellingsmeter. Om de besturing van de arm gemakkelijker te maken, wordt de hoek van de grijper alleen bijgewerkt als de C- of Z-knop wordt ingedrukt.

Wanneer alleen de C-knop wordt ingedrukt, leest de code de rolhoek en gebruikt deze als een instelpunt. servo #5 wordt gedraaid totdat deze het instelpunt bereikt. Zijn snelheid is evenredig aan de fout tussen daadwerkelijke en gewenste positie. Een vergelijkbare code wordt gebruikt voor servo #4, die de pitchhoek van Nunchuk volgt.

// Schakel versnellingsmeter alleen in als de knoppen worden ingedrukt // Draai de grijper (alleen de Z-knop ingedrukt) als (c &&!z) { roll =roll * 57.0 + 90.0; // converteren graden servo5_speed =abs (angle5 - roll)/10 + 1; // proportionele snelheid doe de fout tussen de werkelijke en de gewenste hoek als (roll> angle5) { angle5 +=servo5_speed; display_angles =waar; } if (roll  

De grijper wordt gesloten wanneer zowel de C- als de Z-knop wordt ingedrukt. Wanneer een van deze knoppen wordt losgelaten, opent de robot zijn grijper.

//Grijper openen/sluiten (beide knoppen ingedrukt) if(z &&c) { s6.write(90); //close gripper display_angles =true; } else { s6.write(45); //open grijper } 

Er is een codeblok aan het einde van de schets. Het zal op de seriële monitor de werkelijke hoek van elke servomotor weergeven. Het kan handig zijn om de starthoek van elke motor te kiezen.

nunchuk.ino

Stap 13:Gebruik

Nu alles klaar is, zet je de robot aan en heb je plezier!

De Nunchuk wordt gebruikt om de vijf bewegingen te besturen die op de afbeeldingen worden getoond:rechts/links rotatie, omhoog/omlaag beweging, grijper rotatie, grijper omhoog/omlaag beweging en grijper open/dicht bewegingen. Je kunt die bewegingen combineren om verschillende taken uit te voeren.

U kunt de code voor verschillende bewegingen aanpassen op basis van een combinatie van de knoppen en hoeken van de joystick.

Code

  • nunchuk.ino
nunchuk.inoArduino
Geen voorbeeld (alleen downloaden).
Github
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukhttps://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk

Productieproces

  1. Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
  2. Bedien muntvangers met Arduino
  3. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  4. Met joystick bestuurde RC-auto
  5. Arduino met Bluetooth om een ​​LED te bedienen!
  6. Arduino 3D-geprinte robotarm
  7. Spraakgestuurde robot
  8. Robotarm bestuurd via Ethernet
  9. Bluetooth spraakgestuurde apparaten met OK Google
  10. Eenvoudige en slimme robotarm met Arduino
  11. DIY Arduino-robotarm – bestuurd door handgebaren