Zum Inhalt springen

#17 Zweiachsiges Roboterarmprojekt mit PicoBricks

11 Nov 2023
#17 Two Axis Robot Arm Project With PicoBricks

Roboterarme haben die menschliche Kraft im industriellen Bereich ersetzt. In Fabriken übernehmen Roboterarme die Aufgabe, Lasten mit einem Gewicht und einer Größe zu tragen und zu drehen, die ein Mensch nicht tragen kann. Mit einer Genauigkeit von einem Tausendstel Millimeter positionieren zu können, liegt über der Empfindlichkeit einer menschlichen Hand. Wenn Sie sich die Produktionsvideos von Automobilfabriken ansehen, werden Sie erkennen, wie wichtig die Roboterarme sind. Der Grund, warum sie Roboter genannt werden, liegt darin, dass sie so programmiert werden können, dass sie die gleiche Arbeit in endlosen Wiederholungen ausführen. Der Grund, warum es Arm genannt wird, liegt darin, dass es eine gegliederte Struktur wie unsere Arme hat. Wie viele verschiedene Richtungen ein Roboterarm drehen und bewegen kann, wird in Achsen ausgedrückt. Roboterarme werden auch zum Schnitzen und Formen von Aluminium und verschiedenen Metallen verwendet. Diese als 7-Achsen-CNC-Fräser bezeichneten Geräte können Metalle so formen, wie ein Bildhauer Schlamm formt.

Abhängig vom Einsatzzweck des Roboterarms, Schrittmotoren Und Servomotor kann verwendet werden. Mit PicoBricks können Sie Projekte mit Servomotoren erstellen. 

Details und Algorithmus

Wenn ein Objekt wird auf dem erkannt LDR Sensor, RGB-LED wird ROT und der Roboterarm führt die folgenden Manöver aus:

  • Öffnen Sie den Greifer
  • nach unten bewegen
  • Schließen Sie den Greifer
  • nach oben bewegen

Nach Abschluss der Armbewegung wird die RGB-LED grün.

Basierend auf diesen Bewegungen sollten die Anfangspositionen der beiden Servos wie folgt sein:

  • Servo1 steuert den Greifer sollte sich in der GESCHLOSSENEN Position befinden
  • Servo 2 steuert auf/ab Die Bewegung sollte sich in der AUF-Position befinden

Es werden vier verschiedene Bewegungssteuerungslogiken benötigt:

  • UP: Führen Sie eine 90-Grad-Bewegung in 2-Grad-Schritten aus
  • AB: Führen Sie eine 90-Grad-Bewegung in Schritten von -2 Grad aus
  • OFFEN: Greifer auf 90 Grad positionieren
  • SCHLIESSEN: Greifer auf -60 Grad positionieren

Alle Bewegungen werden von einem akustischen Feedback begleitet und auf dem angezeigt GEHT zur Fehlerbehebung. Später können Sie die Sprachblöcke bei Bedarf entfernen.

Die Bewegungen des Servomotors sind sehr schnell. Um die Bewegung zu verlangsamen, bewegen wir die Servomotoren in 30-Millisekunden-Intervallen jeweils um 2 Grad, um eine 90-Grad-Bewegung abzuschließen. Wir werden dies nicht tun, damit sich der Greifer schließt.

3D-Drucken und montieren Sie die notwendigen Teile dafür Greifer aus dem Link Hier.

Komponenten

1X PicoBricks
2X Servomotor
4X einfache Verbindungskabel
Überbrückungskabel

Schaltplan

Sie können die Module von Picobricks ohne Verkabelung programmieren und betreiben. Wenn Sie die Module getrennt von der Platine verwenden möchten, sollten Sie die Modulverbindungen mit Grove-Kabeln herstellen.

Bauphasen des Projekts

Bereiten Sie die Teile des Pan-Tilt-Kits vor, um das Projekt vorzubereiten. Tragen Sie Ihre 3D-gedruckten Teile, Abfallkartonstücke, heißen Silikonkleber und eine Schere bei sich.

1) Zunächst bereiten wir den festen Arm des Roboterarms vor. In die Rundung von Teil D einen 8 cm hohen Pappzylinder formen. Auf Teil D aufsetzen und mit Silikon befestigen bzw. festkleben.

2) Platzieren Sie den Kopf, der aus dem Servomotorpaket kam, auf dem C-Teil, indem Sie ihn etwas kürzen. Befestigen Sie es mit den kleinsten Schrauben aus dem Pan Tilt-Kit.

 

two axis robot arm with rasperry pi


3) Befestigen Sie die Teile A und C mit 2 Spitzschrauben.

4) Befestigen Sie den Servomotor innen an Teil C. Platzieren Sie dann den Servomotor an Teil B und schrauben Sie ihn fest.

5) Für den Halter schneiden Sie einen der Servomotorköpfe in der Mitte des Getriebeteils, das Sie auf dem 3D-Drucker gedruckt haben, aus und setzen Sie ihn in das Getriebe ein. Anschließend mit dem Servomotor verschrauben.

6) Kleben Sie das 3D-gedruckte Lineargetriebe und den Griff mit starkem Kleber zusammen.

7) Platzieren Sie das Servo in der 3D-Druckhalterung und befestigen Sie es. Das geht mit heißem Silikon oder durch Schrauben. Achten Sie beim Aufsetzen des Servogetriebes auf das Lineargetriebe darauf, dass es vollständig geöffnet ist.

8) Befestigen Sie das Halteservosystem mit Silikon an Teil B.

9) Führen Sie das in Schritt 3 vorbereitete Stück über den Zylinder, den wir im ersten Schritt aus Pappe vorbereitet haben, und fixieren Sie es mit Silikon.

10) Stecken Sie die Motorantriebsbrücken auf die Servostifte. Verbinden Sie das Kabel des Halteservos mit dem GPIO21 und das Kabel des Kippservos mit dem GPIO22.

11) Platzieren Sie die Kraftfahrer, Summer, LDR- und RGB-LED-Modul auf einer Plattform und platzieren Sie den Roboterarm entsprechend auf der Plattform. Mit dem 3D-Stiftdrucker können Sie Ihr Projekt nach Ihren Wünschen anpassen.

Registerkarte „Mikroblöcke ausführen“.

 

MicroPython-Codes der PicoBricks

Roboterarmcode:

 

vom Maschinenimport Pin, PWM, ADC
aus utime import schlaf
von Picobricks Import WS2812

# Bibliotheken definieren
ws = WS2812(6, Helligkeit=0,3)
ldr = ADC(27)
Summer = PWM(Pin(20, Pin.OUT))
servo1 = PWM(Pin(21))
servo2 = PWM(Pin(22))
# Definieren Sie LDR-, Summer- und Servomotor-Pins

servo1.freq(50)
servo2.freq(50)
Buzzer.freq(440)
# Definieren Sie die Frequenzen der Servomotoren und des Summers

# RGB-Farbeinstellungen
ROT = (255, 0, 0)
GRÜN = (0, 255, 0)
SCHWARZ = (0, 0, 0)

angleupdown = 4770
angleupdown2 = 8200

def up():
    globaler Winkelaufwärtsabwärts
    für i im Bereich(45):
        Winkelaufwärtsabwärts += 76
        servo2.duty_u16(angleupdown)
        Schlaf(0,03)
    Buzzer.duty_u16(2000)
    Schlaf(0.1)
    Buzzer.duty_u16(0)
    # Servo2 steigt in festgelegten Intervallen an

def down():
    globaler Winkelaufwärtsabwärts
    für i im Bereich(45):
        angleupdown -= 76
        servo2.duty_u16(angleupdown)
        Schlaf(0,03)
    Buzzer.duty_u16(2000)
    Schlaf(0.1)
    Buzzer.duty_u16(0)
    # Servo2 fällt in festgelegten Intervallen ab

def open():
    globaler Winkelupdown2
    für i im Bereich(45):
        angleupdown2 += 500
        servo1.duty_u16(angleupdown2)
        Schlaf(0,03)
    Buzzer.duty_u16(2000)
    Schlaf(0.1)
    Buzzer.duty_u16(0)
    # Servo1 dient zum Öffnen der Klammern

def close():
    globaler Winkelupdown2
    für i im Bereich(45):
        angleupdown2 -= 500
        servo1.duty_u16(angleupdown2)
        Schlaf(0,03)
    Buzzer.duty_u16(2000)
    Schlaf(0.1)
    Buzzer.duty_u16(0)
    # Servo1 dient zum Schließen der Klammern

offen()
servo2.duty_u16(angleupdown)
ws.pixels_fill(SCHWARZ)
ws.pixels_show()

während True:
    wenn ldr.read_u16() > 20000:
        ws.pixels_fill(ROT)
        ws.pixels_show()
        schlafen(1)
        Buzzer.duty_u16(2000)
        schlafen(1)
        Buzzer.duty_u16(0)
        offen()
        Schlaf(0,5)
        runter()
        Schlaf(0,5)
        schließen()
        Schlaf(0,5)
        hoch()
        ws.pixels_fill(GRÜN)
        ws.pixels_show()
        Schlaf(0,5)
        # Gemäß den vom LDR empfangenen Daten leuchten die RGB-LEDs rot und grün und die Servomotoren bewegen sich

Roboterarm-Servocode:

 

vom Maschinenimport Pin, PWM

servo1 = PWM(Pin(21))
servo2 = PWM(Pin(22))

servo1.freq(50)
servo2.freq(50)

servo1.duty_u16(8200) # 180 Grad
servo2.duty_u16(4770) # 90 Grad

Arduino C-Codes der PicoBricks

#include 
#ifdef __AVR__
  #include 
#endif
#PIN 6 festlegen
#define NUMPIXEL 1
Adafruit_NeoPixel Pixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Zeit (in Millisekunden) für die Pause zwischen den Pixeln

#include 
Servo myservo1;
Servo myservo2;

int angleupdown;

void setup() {
  pinMode(20, OUTPUT);
  pinMode(27, INPUT); // Eingabe- und Ausgabepins definieren

  pixels.begin(); // Initialisiere die NeoPixel-Bibliothek.
  pixels.clear(); // Alle Pixel auf „Aus“ initialisieren

  myservo1.attach(21);
  myservo2.attach(22); // Servos anbringen.

  Offen();
  Winkelobenunten = 180;
  myservo2.write(angleupdown);
}

void loop() {
  if (analogRead(27) > 150) {
    pixels.setPixelColor(0, pixels.Color(255, 0, 0)); // Rote Farbe.
    pixels.show();
    Verzögerung (1000);
    Ton(20, 700); // Den Summer ertönen lassen
    Verzögerung (1000);
    noTone(20); // Stoppen Sie den Summer
    Offen();
    Verzögerung (500);
    Runter();
    Verzögerung (500);
    Schließen();
    Verzögerung (500);
    Hoch();

    pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // Grüne Farbe.
    pixels.show();
    Verzögerung (500);

    // Lösche die Farbe nach einer Verzögerung.
    pixels.setPixelColor(0, pixels.Color(0, 0, 0)); // Aus
    pixels.show();
    Verzögerung (500);
    Offen();
    Winkelobenunten = 180;
    myservo2.write(angleupdown); // Servoposition zurücksetzen
  }
}

void Open() {
  myservo1.write(180); // Servo öffnet
}

void Close() {
  myservo1.write(30); // Servo schließt
}

void Up() {
  for (int i = 0; i < 45; i++) {
    angleupdown += 2;
    myservo2.write(angleupdown); // Servo nach oben bewegen
    Verzögerung(30);
  }
}

void Down() {
  for (int i = 0; i < 45; i++) {
    angleupdown -= 2;
    myservo2.write(angleupdown); // Servo nach unten bewegen
    Verzögerung(30);
  }
}

GitHub-Projektseite
Vorheriger Beitrag
Nächster Beitrag

Danke fürs Abonnieren!

Diese E-Mail wurde registriert!

Shoppen Sie den Look
Wählen Sie Optionen

Bearbeitungsoption

Benachrichtigung wieder auf Lager

Vergleichen

Produkt ArtikelnummerBewertungBeschreibung Sammlung Verfügbarkeit Produktart Andere Details
this is just a warning
Anmeldung
Einkaufswagen
0 Artikel
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment