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

PC-gestuurde robotarm

Componenten en benodigdheden

Arduino Nano R3
× 1
Servo's (Tower Pro MG996R)
× 4

Apps en online services

Microsoft Visual Studio 2015
Arduino IDE

Over dit project

Ik heb altijd bewondering gehad voor de moderne productietechnologieën en de belangrijke rol die deze machines spelen in verschillende productiegebieden, zoals:hijsen van materialen, installeren en verzamelen van onderdelen, lassen en snijden en last but not least de bruikbaarheid in magazijnen.

Mijn ervaring met het bouwen van deze robotarm was een uitdaging. Dus om te beginnen koos ik een eenvoudige robotarm ontworpen door fortzeroas in 2016, daarna besloot ik hem niet zoals gewoonlijk met de hand te bedienen. Dus maakte ik een automatiseringsapp door "C# Windows Application" en ik liet het eruit zien als automatiseringsapps voor productie.

Dus op basis van mijn ervaring met programmeervaardigheden, heb ik deze automatiseringstoepassing gemaakt om de robotarm volledig te besturen, de beweging ervan te bewaken en verschillende taken uit te voeren.

Stap 1:Materiaal

Het belangrijkste materiaal is MDF-hout en ik heb 2 mm gebruikt voor de structuur en 4 mm voor de basis.

Blauwdrukken zijn beschikbaar om te downloaden in de laatste stap, u moet het patroon afdrukken en vervolgens rechtstreeks op MDF lijmen.

Knip mee met de contouren en boor gaten. Ik heb roterend gereedschap gebruikt om het hout te boren en te zagen, en voor de basis heb ik geen blauwdrukken, maar ik denk dat je kunt improviseren.

Stap 2:Schilderen en stylen

Om het project een aantrekkelijk uiterlijk te geven, gebruikte ik dezelfde blauwdrukken, daarna ontwierp ik een omslag met Photoshop om een ​​aantal emblemen en geometrische vormen te maken om er realistisch uit te zien, daarna lijm ik het op hout met witte lijm.

Stap 3:Framemontage

Deze robotarm was eenvoudig te monteren omdat alles van tevoren gepland was, dus het is eenvoudigweg de servomotoren op hun plaats te bevestigen met schroeven, en terwijl ik aan het werk was, heb ik kleine aanpassingen gemaakt om te doen.

Om de rechter- en linkerkant te bevestigen, heb ik dikke houten stokken gebruikt en deze gelijmd met superlijm in plaats van lange schroeven om het gewicht te verminderen.

Stap 4:Grijper (knijpmechanisme)

Ik buig een twee metalen staaf met een tang, dan boor ik een hal in een stuk hout van 3 mm dik met behulp van een roterende gereedschapsboor en lijm het met superlijm.

Stap 5:Basis maken

Basis is gemaakt van 4 mm dik MDF-hout, ik heb vierkant ongeveer 17 cm * 10 cm gesneden met een tafelzaag en boor vervolgens een hal om de basisservomotor 9g te plaatsen. om de wrijving tussen de basis en de cilinder te verminderen, heb ik een deel van een sterk kartonnen blik van 2,5 cm hoog en een diameter van 10 cm gesneden, en vervolgens boor ik het ook om de as van de servomotor te bevestigen.

Stap 6:Elektronica

Als je meer dan twee servo's met Arduino gebruikt, moet je er een externe voedingsbron voor gebruiken, en in dit project heb ik drie gebruikt micro servo's 9g en één grote servomotor.

Natuurlijk was de eerste demonstratietest virtueel op tinkercad.com om de servo's te simuleren en het elektrische circuit te testen.

Dus in dit geval gebruikte ik 4 batterijen AA 1.5 v wat gelijk is aan 6 v, daarna maakte ik een breadboard testopstelling en daarna maakte ik een heel eenvoudig uitbreidingsdock voor Arduino nano.

Stap 7:Arduino-code

1. Download en installeer de nieuwste versie van Arduino IDE. U kunt de nieuwste versie voor Windows, Linux of MAC OSX vinden op de Arduino-website:https://www.arduino.cc/en/main/software

2. Sluit uw Arduino-bord aan op de USB-poort.

3. Ga naar tools> board> kies dan je board.

4. Kopieer en plak de code in de IDE-editor.

5. Verifieer uw code door op de pictogramknop (✔) te klikken.

6. Upload de code naar uw bord door op de pictogramknop (➤) te klikken.

Stap 8:Automatiseringstoepassing

Dit is eigenlijk mijn favoriete onderdeel van het automatiseren van een Arduino-project met behulp van pc. Naar mijn mening was het een goed begin om te leren hoe je de mogelijkheden van het besturen van het bord en elk ander project in de toekomst kunt verbeteren.

Het bereiken van een vaste hoekpositie was niet gemakkelijk om te doen, dus in het begin loste ik dit probleem op door een applicatie van een derde partij genaamd "Processing 3" te gebruiken.

In de beginfase heb ik een ondersteunde interface gemaakt die de servo's van de robotarm (basis, schouder, elleboog en grijper) met het toetsenbord simuleert en afzonderlijk "hoek voor hoek" beweegt totdat deze een vooraf voorbereide vaste positie bereikt.

Toen het die voorbereide positie bereikte, nam ik deze vier hoeken op in een reeks code (A, B, C, D). Daarna gebruikte ik deze multi-arrays later in mijn Windows-toepassing, het hielp me veel om de grenzen van elke servomotor draait elk op zijn plaats.

Deze verzamelde limieten heb ik als richtlijn in de zijbalken van de gebruikersinterface gezet om de ARM onder controle te houden en ook om de afspeelfunctie te ondersteunen.

Dus door deze applicatie te gebruiken, kunt u de robotarm als volgt besturen, opnemen en bewaken:

1. Bewegingsbediening:

Er zijn twee sferen om deze robotarm te besturen, de eerste is handmatig door de spoorstaven te slepen die een spastische servo besturen, zoals

  • Grijper:klik op de knop openen en sluiten om de robotgrijper te openen en te sluiten.
  • Basis:sleep de volgbalk naar rechts en links of gebruik zelfs de toetsenbordpijlen (rechts/links) om de basis naar rechts en links te verplaatsen.
  • Schouder:sleep de volgbalk naar rechts en links of gebruik zelfs de toetsenbordpijlen (omhoog/omlaag) om de schouder omhoog en omlaag te bewegen.
  • Elleboog:sleep de volgbalk naar rechts en links of gebruik zelfs de toetsenbordtoetsen (w/s) om de elleboogmotor omhoog en omlaag te bewegen.

2. Bewegingsopname:

Zodra u de beweging van de robotarm wilt automatiseren, moet u de positie in elke stap vastleggen door op de knop "Rec. Position" te klikken of op (R) op het toetsenbord te drukken. Dan regelt de applicatie het.

Bij elke stap registreert u dat de toepassing de verplaatste motorpositie detecteert en deze afzonderlijk in een lijst opslaat.

Door op de knop "Start Auto mood" te klikken, stuurt de applicatie die opgeslagen posities in de vorm van volgordeorders.

3. Controle:

Ik heb een grafische interface gemaakt die elke stap in een grafiek tekent, zodat de gebruiker eventuele ongebruikelijke veranderingen kan opmerken. tegelijkertijd is er een tabel met gegevens aan de rechterkant die de specifieke hoek en de nauwkeurige tijd voor zijn verplaatsing geeft.

Dus door deze functies te gebruiken, kunt u uw eigen bewegingen samenstellen en deze als taak naar de robotarm sturen, zoals ze precies doen in de productieautomatisering.

Stap 9:Updates

Augustus 2018:

Onlangs heb ik hetzelfde ontwerp gemaakt na enkele aanpassingen op een lasersnijmachine met 3 mm MDF. Eigenlijk was dit extra idee cool, vooral toen ik er een aangepaste joystick aan toevoegde.

Code

  • Task.ino
  • RobotArm.ino
Task.inoArduino
int delayT =350;void Home() //Bel deze functie wanneer u de arm in de thuispositie wilt zetten { MyServo0.write(valGripper); // Grijpervertraging (15); MijnServo.write(valBase); // basisvertraging (30); MyServo2.write(valShoulder); // schoudervertraging (30); MyServo3.write(valElbow); // elleboogvertraging (delayT); }void Pick() // Dit is een vaste pickplaats. { MijnServo.write(4); // basisvertraging (delayT); MijnServo3.write(125); // elleboog MyServo2.write (95); // schoudervertraging (delayT); MijnServo0.write(50); // Grijper wijd open vertraging (delayT); MijnServo0.write(2); // Grijper sluitvertraging (delayT); MijnServo2.write(60); // schouder kleine MyServo3.write(80); // elleboog omhoog kleine vertraging (delayT); Serial.println ("Object gekozen"); }void Drop() // Dit is een vaste Drop-plaats. { MijnServo.write(145); // basisvertraging (delayT); MijnServo2.write(80); // schoudervertraging (15); MijnServo3.write(115); // elleboogvertraging (delayT); MijnServo0.write(40); // Grijper wijd open vertraging (delayT); MijnServo3.write(90); // elleboog omhoog kleine vertraging (delayT); Serial.println(F("Object Dropped")); }void Playback() { // https://arduino.stackexchange.com/questions/1013/how-do-i-split-an-incoming-string // input MOET een array zijn (servoId:Position &servoId:Position &servoId :Positie ) // Tekenreekszin; // zin =String (zin + ByteOntvangen); // converteer de char-invoer naar stirng kan worden gesplitst // Lees elk commandopaar char * command =strtok (ByteReceived, "&"); while (opdracht!=0) {// Splits de opdracht in twee waarden char* separator =strchr(opdracht, ':'); if (separator !=0) { // Splits de string eigenlijk in 2:vervang ':' door 0 *separator =0; int servoId =atoi(opdracht); ++scheidingsteken; int hoek =atoi(scheidingsteken); // Doe iets met servoId en angle if (servoId =1) { MyServo.write (angle); vertraging (vertragingT); } else if (servoId =2) { MyServo2.write (hoek); vertraging (vertragingT); } else if (servoId =3) { MyServo3.write(hoek); vertraging (vertragingT); } } // Zoek de volgende opdracht in invoertekenreeks command =strtok(0, "&"); } } 
RobotArm.inoArduino
// geschreven door AhmedAzouz#include Servo MyServo,MyServo2,MyServo3,MyServo0;char ByteReceived;int MyPosition,MyPosition2,MyPosition3,MyPositionG;int runCounter =0;int ledPin =A5;// stel de standaard start servoposities int valGripper =30;int valBase =70;int valShoulder =25;int valElbow =150;void setup(){ Serial.begin(9600); pinMode (ledPin, UITGANG); digitalWrite(13,LAAG); MijnServo0.attach (12); // Grijper bevestig MyServo.attach (11); // base attach MyServo2.attach(13); //schouder hechten MyServo3.attach (10); // Elleboogbevestiging// Stel opstartposities in MyServo0.write (valGripper); // Grijpervertraging (15); MijnServo.write(valBase); // basisvertraging (30); MyServo2.write(valShoulder); // schoudervertraging (30); MyServo3.write(valElbow); // elleboogvertraging (300);} void loop () {Serial.print ("Base:"); Serial.print(valBase); Serieel.print("\t"); Serial.print("Shou:"); Serial.print(valShoulder); Serieel.print("\t"); Serial.print("Elleboog:"); Serial.print(valElbow); Serieel.print("\t"); Serial.print("Grip:"); Serial.println(valGripper); //if(Serial.available()) //Byte=Serial.read(); //lees het //{ while (Serial.available ()> 0 ) { ByteReceived =Serial.read (); schakelaar (ByteReceived) {// ************* LED-behuizing 'n':digitalWrite (ledPin, HIGH); // schakel LED aan Serial.println ("LED is aan"); pauze; geval 'f':digitalWrite(ledPin,LOW); // schakel LED uit Serial.println ("LED is uit"); pauze; // *********** Basisgeval 'l':MyPosition =MyServo.read() + 2; // L voor verplaatsing naar links MyServo.write (MyPosition); Serial.print("Basis"); Serieel.print("\t"); Serial.println(MyServo.read()); vertraging (15); pauze; geval 'r':MyPosition =MyServo.read() - 2; // R voor move base right MyServo.write (MyPosition); Serial.print("Basis"); Serieel.print("\t"); Serial.println( MyServo.read()); vertraging (15); pauze; // *********** Elleboog case 'u':MyPosition2 =MyServo2.read() + 2; // U voor beweeg Elleboog omhoog MyServo2.write (MyPosition2); Serial.print("elleboog"); Serieel.print("\t"); Serial.println(MyServo2.read()); vertraging (15); pauze; geval 'd':MyPosition2 =MyServo2.read() - 2; // D voor verplaatsen Elleboog naar beneden MyServo2.write (MyPosition2); Serial.print("elleboog"); Serieel.print("\t"); Serial.println(MyServo2.read()); vertraging (15); pauze; // *********** Schoudertas 'w':MyPosition3 =MyServo3.read() + 2; // W voor beweeg Schouder omlaag MyServo3.write (MyPosition3); Serial.print("Schouder"); Serieel.print("\t"); Serial.println(MyServo3.read()); vertraging (15); pauze; geval 's':MyPosition3 =MyServo3.read() - 2; // S voor beweeg Schouder omhoog MyServo3.write (MyPosition3); Serial.print("Schouder"); Serieel.print("\t"); Serial.println(MyServo3.read()); vertraging (15); pauze; // *********** Grijper geval 'o':MyServo0.write (30); // O om Gripper Serial.print te openen ("Gripper Open"); Serieel.print("\t"); Serial.println(MyServo0.read()); vertraging (15); pauze; case 'c':// C om Gripper MyServo0.write(1) te openen; Serial.print("Grijper Sluiten"); Serieel.print("\t"); Serial.println(MyServo0.read()); vertraging (15); pauze; // *********** Standaard Dropped positie (quick drop positie) case 'q':digitalWrite(ledPin,HIGH); Serial.println("Standaard verwijderd geactiveerd!"); Kies(); Laten vallen(); Huis(); digitalWrite (ledPin, LAAG); pauze; // *********** Forceer Stop en ga naar huis positie case 'h':Home(); digitalWrite (ledPin, LAAG); pauze; // *********** Automatische stemmingsruns Afspeelfunctie // seriele lezen Moet in dit formaat zijn:1:90&2:80&3:180 // ophaalplaats is vast, deze functie automatiseert de drop positie. standaard:digitalWrite (ledPin, HOOG); Serial.println("Automatische stemming geactiveerd!"); Kies(); Afspelen(); Huis(); digitalWrite (ledPin, LAAG); pauze; }}}

Aangepaste onderdelen en behuizingen

f98t2axin238k2n_khGWAEIqdl.skp

Schema's


Productieproces

  1. Makerarm:een mega-coole robotarm voor makers
  2. Robotische arm:hoe wordt het gemaakt?
  3. Roboticawapens in productie en hun voordelen
  4. Industriële robotarmen:een sleutel tot productiviteit
  5. Hydraulische robotarm in de maakindustrie:een definitieve gids
  6. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  7. Arduino 3D-geprinte robotarm
  8. Nunchuk-gestuurde robotarm (met Arduino)
  9. Robotarm bestuurd via Ethernet
  10. Robotische armmarkt groeit tot US$ 14,78 miljard in 2026
  11. De industriële robotarm - een productieboom