Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Lokaler und remote programmierbarer Roboterarm

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
SainSmart DIY 3-Achsen-Steuerung Palettierroboterarm-Modell für Arduino UNO MEGA2560
× 1
MeArm DIY-Roboterarm-Kit
× 1
Adafruit RGB-Hintergrundbeleuchtung LCD - 16x2
× 1
Android-Gerät
× 1
Drehpotentiometer (allgemein)
10Kohm
× 4
SparkFun Drucktastenschalter 12 mm
× 3
LED (generisch)
ROT, BLAU, GRÜN, GELB
× 4

Apps und Onlinedienste

Arduino-IDE
MIT App Inventor 2

Über dieses Projekt

Der Zweck dieses Tutorials besteht darin, Schritt für Schritt ein Projekt zur Steuerung und Programmierung eines Roboterarms zu entwickeln, das die Grundfunktionen eines Industrieroboters simuliert.

Schritt 1:Spezifikationen

Der Roboter hat zwei Grundfunktionen:

  • Programm :Armpositionen in drei Dimensionen aufzeichnen (jede Aufzeichnung ist ein "Schritt")
  • Laufen :Führen Sie nacheinander die im "Programm" aufgezeichneten Positionen aus. Der Roboter führt das Programm aus, bis der Befehl "ABORT" verwendet wird.

Hauptmerkmale:

  • Das Projekt kann verwendet werden, um Roboter mit 3 oder 4 DOF ("Degrees of Freedom") zu steuern.
  • Der Roboter kann in den Modi "LOCAL" und "REMOTE" (der letzte über ein Android-Gerät) gesteuert werden
  • Während der Programmphase kann der Benutzer den Steuerungsmodus von "LOCAL" auf "REMOTE" und umgekehrt ändern.
  • Informationen für den Benutzer werden durch farbige LEDs, ein 2-zeiliges LED-Display und einen Ton (einen Summer) bereitgestellt.
  • Der akustische Alarm kann auch aus der Ferne ausgelöst werden.

Schritt 2:​Das Projekt

Das Blockdiagramm im vorherigen Schritt zeigt die "Stückliste", die in diesem Projekt verwendet wird.

Ich habe mich für Arduino MEGA entschieden, um mir keine Gedanken über die Anzahl der verfügbaren Arduino-Ports (I/Os) zu machen. Die UNO zum Beispiel würde ohne Probleme funktionieren, aber eine Porterweiterungsmethode sollte verwendet werden. Es gibt mehrere Möglichkeiten, die leicht im Internet zu finden sind, wie zum Beispiel ein 74138-Decoder.

Hier wird der erste Prototyp im "lokalen Modus" programmiert.

Für das Bluetooth-Netzwerk wird der HC-06 verwendet.

Die Android-App, die für den "Remote-Modus . verwendet wird ", wurde mit dem Tool MIT Appinventor2 entwickelt, das eine leistungsstarke Einzelplattform für diese Art von App auf Basis von Android-Geräten darstellt. Die App kann kostenlos im Google Store heruntergeladen werden:MJRoBot Arduino Robot Arm Control.

Das folgende Video kann Ihnen eine Vorstellung davon geben, was das endgültige Projekt mit Fernprogrammierung sein sollte:

Schritt 3:Projektentwicklung

Roboterarme können nach der Anzahl ihrer "Gelenke" oder "Freiheitsgrade" (DOF) klassifiziert werden.

  • Die "Basis ", oder "Taille ", kann den Arm normalerweise um 180o oder 360o drehen, abhängig vom verwendeten Servotyp (hier in diesem Projekt wurde ein 180o Servo verwendet).
  • Die "Schulter ", ist für das vertikale "Heben oder Senken" des Arms verantwortlich.
  • Der "Ellbogen " lässt den Arm "vor- oder zurückgehen".
  • Die "Klaue " oder "Greifer " funktioniert durch Öffnen oder Schließen, um "Dinge zu greifen".

Schritt 4:​Die Schaltung

Servomotoren werden verwendet, um die Gelenke anzutreiben, die direkt mit dem Arduino verbunden sind. Beachten Sie, dass dies nicht ungewöhnlich ist, siehe "Schrittmotoren", die an der Basis verwendet werden, um ein höheres Drehmoment und eine höhere Präzision zu erzielen. Die richtige Auswahl der Servos ist sehr wichtig (es gibt billige chinesische Servos, die sehr schlecht konstruiert sind wie MG995, die leider mit meinem SanSmart 3DOF AARM geliefert wurden). Aber für den Vorschlag dieses Projekts hat gut funktioniert.

Die Gleichstromversorgung für die Servos sollte vom Arduino und anderen Komponenten getrennt werden. Eine externe Stromversorgung von 5 oder 6V sollte ohne Probleme funktionieren (überprüfen Sie das Datenblatt Ihres Servors, um den richtigen Spannungsbereich zu überprüfen). Eine gängige Praxis ist auch die Verwendung von 470uF-Kondensatoren zwischen VCC und GND, um das von den Gleichstrommotoren in den Servorn erzeugte Rauschen zu minimieren. Stellen Sie sicher, dass Sie alle "Masse" (externe Stromquelle mit dem Arduino GND-Pin) verbinden.

Wenn die Servos Probleme haben und stark vibrieren, nehmen Sie Anpassungen an den "Verzögerungen" Ihres Codes vor. Es ist wichtig, dass die Servos Zeit haben, einen bestimmten Punkt zu erreichen, bevor sie einen neuen Befehl erhalten. Es lohnt sich auch zu prüfen, ob die Servos digital oder analog sind, als ob sie mechanisch ähnlich wären, der digitale arbeitet mit einer Frequenz von 300 Hz, während der analoge mit 50 Hz arbeitet. Die Standard-Arduino-Bibliothek "Servo.h " wurde für analoge Servos entwickelt und kann bei Bedarf für eine bessere Funktion mit digitalen Servos modifiziert werden.

Die obige Zeichnung zeigt die komplette Schaltung.

Schritt 5:​Der Code

Das Projekt ist nicht kompliziert, hat aber viele Variablen. Es ist am besten, sie klar zu definieren und die Anmerkungen in einer eindeutigen Datei zu hinterlassen:

ArmDefine.h

Diese Datei sollte auch die minimalen, maximalen und anfänglichen Servowinkel einstellen. Der in diesem Tutorial enthaltene Code enthält zwei Parametersätze für die Roboterarme, die ich in meinem Projekt getestet habe (natürlich sollte nur eine Gruppe von Konstanten verwendet werden):

// MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 #define midGrip 30#define midBase 87#define midShou 138#define midElbw 100/* SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 #define maxElbw 0 #define midGrip 100#define midBase 90#define midShou 90#define midElbw 0 */ 

Jeder Armtyp hat einen anderen Satz von Parametern und es ist wichtig, dass Sie den richtigen für Ihren finden. Was ich vorschlage ist, dass zunächst die Potentiometer (Potis) in der Mitte bleiben und das Mapping der PWM-Ausgänge auf die Standardwerte gesetzt wird:Max =255 , Min =0 und Mitte =126 ( "#defines " oben). Beginnen Sie dann mit der Variation der Potis (nacheinander) und verfolgen Sie im seriellen Monitor (oder LCD) die minimalen und maximalen Werte, bei denen der Arm ordnungsgemäß funktioniert. Dies sind die endgültigen Werte, die für die verwendet werden Einstellungen (ändern Sie meine ursprünglichen Werte unter ArmDefine.h) .

Um die Koordinatensätze (oder Schritte) aufzuzeichnen, die der Roboter spielen soll, verwende ich Daten-Arrays:

int gripPosition[100];int basePosition[100];int shouPosition[100];int elbwPosition[100];int positionIndex =0; // Index, der am Positionsarray verwendet wird, das für aufgezeichnete Aufgaben verwendet wird 

Beachten Sie, dass ich die "gespeicherte" Position nicht behalte und am Ende des "Roboter"-Programms der Index wieder auf Null steht und der Roboter auf die Aufnahme einer neuen Sequenz wartet (das Programm geht verloren). Alternativ können Sie diese Daten-Arrays beispielsweise im Arduino EEPROM aufbewahren. Dadurch würde das Programm erneut ausgeführt oder Sie könnten sogar mehr als ein gespeichertes Programm haben.

Schritt 6:​Die Programmlogik

Der Hauptblock ("Loop") ist eigentlich ganz einfach:

Prüfen Sie, ob ein Befehl zum Ausführen des "Programms" (Schrittfolge) verwendet wurde.

  • Wenn ja, führen Sie es aus.
  • Sonst ist das "Programm" nicht vollständig und muss noch neue Schritte schreiben.
  • Wenn eine „neue Position“ definiert ist, fügen Sie diese dem Programm hinzu.
  • Überprüft zunächst, ob Nachrichten vom Android-Gerät im seriellen Puffer eintreffen.
  • Überprüft als nächstes, ob der Steuerungsmodus "Lokal" oder "Remote" ist (die Standardeinstellung ist Lokal).
  • Zurück zum Anfang und wiederholen Sie Schritt 1.
void loop (){ checkBTcmd (); defineLocalRemote(); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| HIGH-Befehl =="runon") { RunProgram (); } sonst recArmPosition (); Befehl ="";} 

Die Funktion checkBTcmd() stellt eine Zeichenfolge unter Verwendung der einzelnen Zeichen zusammen, die vom BT-Modul ankommen. Dieser String wird an die Variable "command . übergeben ".

Die Funktion defineLocalRemote() berücksichtigt die Variable "Befehl " überprüft, ob ein Befehl zum Wechseln des Modus auf Remote empfangen wird oder umgekehrt. Der Alarmbefehl wird hier ebenfalls analysiert. Für die Programmlogik muss der Arm, wenn der "Alarm" im Android-Gerät ausgelöst wird, unbedingt auf die Fernbedienung gehen Modus.

Die Funktion RunProgram() führt die Vorbereitungen durch, schaltet LEDs ein / aus usw. und ruft insbesondere die Funktion auf:ExecuteTask() . Letztere ist die Funktion, die die Ausführungslogik der Schrittfolge enthält. Die Funktion erhöht den "positionIndex " Senden der Positionsdaten nacheinander mit dem Tool:armPosition(Griff, Basis, Schulter, Ellbogen) .

Schließlich ist die Funktion, die die Servos wirklich befehligt und die "Schritte" schreibt, die recArmPosition() . Abhängig vom Empfang des Android-Befehls bestimmt diese Funktion die Positionierung der Servos, die durch die Potis oder durch die "Schieberegler" der Android-App erfolgen kann. Bei jeder Positionsänderung sendet diese Funktion die Koordinaten an die Servos mit der armPosition Funktion (Griff, Basis, Schulter, Ellenbogen). Das Auslesen der tatsächlichen Position der Potis bzw. Slider und die entsprechende Aktivierung der Servos erfolgt, wenn der Befehl „SAVE“ oder „PROGRAM“ ausgelöst wird. In diesem Moment wird der Positionsindex des Arrays inkrementiert und der Schritt gespeichert.

Um das Verständnis zu vereinfachen, basierte der gesamte Code auf seinen spezifischen Funktionen. Das "Setup ", "Schleife " und die oben beschriebenen Funktionen sind praktisch alle in der Datei:MJRoBot_Arm_Robot_Task_Prgm.ino

Die allgemeineren Funktionen wie BT-Befehl lesen:void checkBTcmd() ; Soundgenerator:void beep (int pin, int freq, long ms) und Entprellen:Boolesche Entprellung (int pin) ; sind in der Datei:General_Functions.ino

Eine wichtige Tatsache:Da das Arduino Befehle basierend auf einem Takt von 16Mhz ausführt, wird erwartet, dass die Steuertasten Hunderte oder sogar Tausende Mal pro Sekunde gelesen werden, daher ist es wichtig, eine "Entprellungstaste" zu verwenden, die den Aufnahmeschritt festlegt .

Die vierte und letzte Datei ist:Arm_Ctrl_and_Display.ino

In dieser Datei sind die Lesefunktionen des Potentiometers:bool readPotenciometers() ; Lesen von Android-Slidern:bool readSliders() ; Platzierung der Servos:void armPosition (int gripp, int basee, int Shoulder, Ellenbogen int) . Die anderen in der Datei enthaltenen Funktionen dienen der Datenanzeige auf dem LCD, dem seriellen Monitor, Alarmen usw.

Das Video zeigt, wie der Roboterarm 4DOF "meArm" über die Android-App aus der Ferne programmiert wird .

Den vollständigen Quellcode für das Projekt finden Sie unter GITHUB:

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

oder hier:

F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino

Schritt 7:Fazit

Wie immer hoffe ich, dass dieses Projekt anderen helfen kann, sich in der aufregenden Welt der Elektronik, Robotik und des IoT zurechtzufinden! Für weitere Projekte besuchen Sie bitte meinen Blog:MJRoBot.org

Saludos aus dem Süden der Welt! Wir sehen uns bei meinem nächsten Tutorial!

Danke

Marcelo

Code

  • Code-Snippet Nr. 1
  • Code-Snippet 2
  • Code-Snippet #3
Code-Snippet Nr. 1Arduino
// MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 #define midGrip 30#define midBase 87# define midShou 138#define midElbw 100/* SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 #define maxElbw 0 #define midGrip 100# define midBase 90#define midShou 90#define midElbw 0 */
Code-Snippet #2Arduino
int gripPosition[100];int basePosition[100];int shouPosition[100];int elbwPosition[100];int positionIndex =0; // Index, der am Positionsarray verwendet werden soll, das für aufgezeichnete Aufgaben verwendet wird
Code-Snippet #3Arduino
void loop () {checkBTcmd (); defineLocalRemote(); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| HIGH-Befehl =="runon") { RunProgram (); } sonst recArmPosition (); Befehl ="";}
Github
https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

Schaltpläne

Roboterarm
https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

Herstellungsprozess

  1. Universelle Fernbedienung mit Arduino, 1Sheeld und Android
  2. Roboterwaffen in der Fertigung und ihre Vorteile
  3. Unterschiede zwischen Robotermanipulator und Roboterarm
  4. LCD-Animation und -Spiele
  5. DIY-Voltmeter mit Arduino und Smartphone
  6. Einsatz des IoT zur Fernsteuerung eines Roboterarms
  7. Arduino 3D-gedruckter Roboterarm
  8. Nunchuk-gesteuerter Roboterarm (mit Arduino)
  9. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  10. Einfacher und intelligenter Roboterarm mit Arduino