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

Littlearm 2C:Erstellen Sie einen 3D-gedruckten Arduino-Roboterarm

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Servos (Tower Pro MG996R)
MG90S Servos
× 4
Meped Board
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)

Über dieses Projekt

Der LittleArm 2C wurde als Kit entwickelt, den Kinder einfach verwenden können, damit MINT-Kurse mehr Robotik-Lehrplan implementieren können. Es wurde robuster gemacht und lässt sich viel einfacher zusammenbauen, sodass es für Kinder einfach zu bedienen ist.

Alle Teile können problemlos in 3D gedruckt werden und sind so konzipiert, dass der Arm glatt und einfach bleibt. Das gesamte Design hat weniger als 15 Schrauben.

Um den Arm zu steuern, können Sie entweder unsere Windows-Anwendung (die hier ursprünglich in Python-Code geschrieben wurde) oder über Bluetooth mit der dafür entwickelten Android-App verwenden.

Eine vollständige Anleitung zum Zusammenbau des LittleArm 2C finden Sie hier.

3D-Druckdateien können hier heruntergeladen werden.

Code

  • LittleArm 2C Arduino-Skizze
LittleArm 2C Arduino-SkizzeC/C++
// LittleArm 2C Arduino-Code// Ermöglicht die serielle Steuerung des LittleArm 2C 3D-gedruckten Roboterarms // Erstellt von Slant Concepts#include  //arduino-Bibliothek#include  //Standard c Bibliothek#define PI 3.141Servo baseServo; Servo SchulterServo; Servo WinkelServo; ServogreiferServo; //++++++++++++++Globale Variablen++++++++++++++++++++++++++++ +++struct jointAngle{ //ein struct ist eine Möglichkeit zum Organisieren von Variablen in einer Gruppe int base; int Schulter; int Ellenbogen;};struct JointWinkel erwünschtWinkel; //gewünschte Winkel des Servosint erwünschtGrip; // gewünschte Position des Greifers gripperPos; //aktuelle Position des gripperint-Befehls; // der Satz von Gelenkwinkelnint wünschenswertDelay; // die Verzögerung, die die Servos zwischen den Schritten machen //int ready =0; // ein Marker, der verwendet wird, um zu signalisieren, dass ein Prozess abgeschlossen ist //++++++++++++++++ FUNKTIONSERKLÄRUNGEN +++++++++++++++++++ ++++++++int servoParallelControl (int thePos, Servo theServo ); //Dies ist eine Funktion zur Steuerung der Servos //++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++void setup () // Setup hat das Arduino-Board für den Betrieb vorbereitet { Serial.begin (9600); // Schalten Sie die USB-Kommunikation (serielle Schnittstelle) ein und lassen Sie sie mit 9600 Bits pro Sekunde kommunizieren baseServo.attach (5); // befestigt das Servo an Pin 5 an das Servo-Objekt ShoulderServo.attach (4); // befestigt das Servo an Pin 4 an das Servo-Objekt ElbowServo.attach (3); // befestigt das Servo an Pin 3 an das Servoobjekt gripperServo.attach (2); // verbindet das Servo an Pin 2 mit dem Servo-Objekt Serial.setTimeout (50); // Stoppt den Versuch, mit dem Computer zu sprechen, ist nach 50 Millisekunden keine Reaktion. Stellt sicher, dass das Arduino die Serie nicht zu lange liest Serial.println("started"); // Auf dem Computer ausgeben "Gestartet" baseServo.write(90); // Anfangspositionen der Servos ShoulderServo.write (100); EllenbogenServo.write (110); // ready =0;} // primäre Arduino-Schleife. Hier muss Ihr gesamtes Primärprogramm platziert werden.void loop () { if (Serial.available ()) { // Wenn Daten über den USB-Port zum Arduino kommen, dann ... // ready =1; // Ready wird auf 1 gesetzt, um anzuzeigen, dass ein Befehl ausgeführt wird // Befehle werden vom Computer in der Form "#,#,#,#,#,\n" gesendet // Der folgende Code "parsiert" diesen Befehl in Ganzzahlen, die dem // Basiswinkel, Schulterwinkel, Ellbogenwinkel, Griffwinkel und Verzögerung in den Servos entsprechen. gewünschteWinkel.base =Serial.parseInt(); gewünschteAngle.shoulder =Serial.parseInt(); wünschenswertAngle.elbow =Serial.parseInt(); erwünschtGrip =Serial.parseInt(); gewünschteVerzögerung =Serial.parseInt(); if(Serial.read() =='\n'){ // Wenn das letzte Byte '\n' ist, dann hör auf zu lesen und führe den Befehl aus '\n' steht für 'done' Serial.flush(); // alle anderen Befehle löschen, die im Puffer gestapelt sind Serial.print ('d'); //Vervollständigung des Befehls senden "d" steht für "done execute" } } // Diese Werte geben den Status an, ob das Gelenk seine Position noch nicht erreicht hat oder nicht // Variablen, die in einem Teil des Programms deklariert sind, wie diese , heißen "lokale Variablen" int status1 =0; // Basisstatus int status2 =0; //Schulterstatus int status3 =0; // Ellbogenstatus int status4 =0; // Greiferstatus int done =0; // Dieser Wert sagt aus, wann alle Gelenke ihre Positionen erreicht haben, während (done ==0) {// Schleife, bis alle Gelenke ihre Positionen erreicht haben &&ready ==1 // Bewegen Sie das Servo in die gewünschte Position // Dieser Block von Code verwendet "Funktionen", um komprimierter zu sein. status1 =servoParallelControl(desiredAngle.base, baseServo, erwünschtDelay); status2 =servoParallelControl (gewünschter Winkel.Schulter, SchulterServo, gewünschte Verzögerung); status3 =servoParallelControl(desiredAngle.elbow, ElbowServo, wishDelay); status4 =servoParallelControl(desiredGrip, gripperServo, selectedDelay); // Prüfen, ob alle Gelenke ihre Position erreicht haben if (status1 ==1 &status2 ==1 &status3 ==1 &status4 ==1){ done =1; //Wenn fertig =1 dann wird die Schleife gestoppt } } // Ende von while}//++++++++++++++++++++++++++++ +FUNKTIONSDEFINITIONEN++++++++++++++++++++++++++++++++++++++++++int servoParallelControl (int thePos , Servo theServo, int theSpeed ​​) {//Funktionsform:outputType FunctionName (inputType localInputName) // Diese Funktion bewegt ein Servo eine bestimmte Anzahl von Schritten in Richtung einer gewünschten Position und gibt zurück, ob es sich in der Nähe befindet oder diese Position erreicht hat // thePos - die gewünschte Position // thServo - der Adress-Pin des Servos, das wir bewegen möchten // theSpeed ​​- die Verzögerung zwischen den Schritten des Servos int startPos =theServo.read(); // Lesen Sie die aktuelle Position des Servos, mit dem wir arbeiten. int newPos =startPos; // newPos hält die Position des Servos, während es sich bewegt //definieren Sie, wo die Position in Bezug auf den Befehl ist // wenn die aktuelle Position kleiner als die gewünschte ist, bewegen Sie die Position nach oben if (startPos <(thePos-5)) { newPos =newPos + 1; theServo.write(newPos); Verzögerung (theSpeed); 0 zurückgeben; // Dem primären Programm mitteilen, dass das Servo seine Position nicht erreicht hat} // Sonst, wenn die aktuelle Position größer als die gewünschte ist, bewegen Sie das Servo nach unten else if (newPos> (thePos + 5)) { newPos =newPos - 1; theServo.write(newPos); Verzögerung (theSpeed); 0 zurückgeben; } // Wenn das Servo +-5 im gewünschten Bereich ist, teilen Sie dem Hauptprogramm mit, dass das Servo die gewünschte Position erreicht hat. sonst { 1 zurückgeben; } } // Servo-Parallelsteuerung beenden

Schaltpläne

Es gibt nur vier Anschlüsse, wenn Sie das Meped Board verwenden, für das der Littlearm entwickelt wurde.

Herstellungsprozess

  1. Raspberry Pi Roboter über Bluetooth gesteuert
  2. Bauen Sie Ihren internetgesteuerten Videostreaming-Roboter mit Arduino und Raspberry Pi
  3. Der Open-Source-3D-gedruckte Roboterarm von Haddington Dynamics
  4. Zweiarmiger SCARA-Roboter
  5. MeArm-Roboterarm – Ihr Roboter – V1.0
  6. Linienfolger-Roboter
  7. Arduino 3D-gedruckter Roboterarm
  8. Nunchuk-gesteuerter Roboterarm (mit Arduino)
  9. Sprachgesteuerter Roboter
  10. Über Ethernet gesteuerter Roboterarm