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

Arduino Ant Hexapod-Roboter

In diesem Tutorial zeige ich Ihnen, wie ich einen Arduino Hexapod gebaut habe. Wie der Name schon sagt, hat der Hexapod 6 Beine, aber zusätzlich einen Schwanz oder Bauch, einen Kopf, Antennen, Mandibeln und sogar funktionsfähige Augen. All dies lässt den Hexapod wie eine Ameise aussehen, daher können wir ihn auch als Arduino Ant Robot bezeichnen.

Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen.

Übersicht

Zur Steuerung des Roboters habe ich eine speziell entwickelte Android-Anwendung erstellt. Die App verfügt über 4 Schaltflächen, mit denen wir dem Roboter befehlen können, sich vorwärts oder rückwärts zu bewegen sowie nach links oder rechts zu drehen. Neben diesen Hauptfunktionen kann der Roboter auch Kopf und Schwanz bewegen, beißen, Dinge greifen und fallen lassen und sogar angreifen.

Wie ich bereits erwähnt habe, hat der Roboter funktionale Augen, oder ich habe den Kopf speziell für einen Ultraschallsensor entworfen. Wenn wir also versuchen, den Roboterkopf zu berühren oder unsere Hand in die Nähe des Sensors zu bringen, bereitet sich der Roboter zunächst auf einen Angriff vor.

Wenn wir uns zurückbewegen, wird der Roboter den Angriff abweisen, aber falls wir ihm mit unserer Hand näher kommen, wird er uns angreifen und beißen. Wie cool ist das denn? Bleiben Sie dran und Sie werden genau herausfinden, wie ich es baue und wie alles funktioniert.

Arduino Hexapod – Ameisenroboter 3D-Modell

Wie üblich begann ich damit, den Hexapod mit einer 3D-Modellierungssoftware zu entwerfen. Der Hexapod hat 6 Beine und jedes davon besteht aus 3 Gelenken oder 3 Servos. Das heißt, wir brauchen insgesamt 18 Servos und in meinem Fall habe ich die MG996R-Servos verwendet.

Auf der Rückseite haben wir das Heck, das von einem anderen MG996R-Servo angetrieben wird. Der Kopf dieses Ameisenroboters hat zwei Freiheitsgrade, oder er kann rollen und kippen, und wieder wird er von zwei weiteren Servos angetrieben. Wir benötigen also insgesamt 21 Servos für dieses Projekt, Typ MG996R und zusätzlich ein kleineres SG90 Mikroservo für die Mandibeln.

Hier haben wir auch die Augen der Ameise, die für einen HC-SR04-Ultraschallsensor ausgelegt sind. Alle Teile sind zwischen zwei Platten montiert und zusätzlich habe ich eine interessante gebogene Abdeckung für die obere Platte gemacht, um die gesamte Verkabelung, den Arduino und die Batterie zwischen den beiden Platten zu verstecken.

Sie können dieses 3D-Modell finden und herunterladen sowie es in Ihrem Browser auf Thangs erkunden.

STL-Dateien:

3D-Druck der Teile

Ich denke, Sie wissen bereits, was als nächstes kommt, und das ist der 3D-Druck der Roboterteile. Ich habe den Creality CR-10 3D-Drucker für alle Drucke verwendet und er hat großartige Arbeit geleistet. Der am schwierigsten zu druckende Teil war der Kopf, weil ich einen Einzeldruck haben wollte.

Zu diesem Zweck musste ich einen Support Overhang Angle von 60 Grad sowie einige Support Blocker verwenden. Wie auch immer, der Creality CR-10 hat einen tollen Job gemacht und der Kopf ist perfekt geworden.

Montage des Arduino-Hexapods

Sobald wir alle Teile gedruckt haben, können wir mit dem Zusammenbau des Hexapods fortfahren. Ich begann mit der Montage der Beine. Zur Befestigung der Servos an den gedruckten Teilen habe ich M3-Schrauben und Muttern sowie Federscheiben verwendet. Die Länge der Bolzen muss mindestens 12 mm betragen und in meinem Fall habe ich 16 mm lange Bolzen verwendet.

Für die gesamte Montage benötigen wir etwa 200 Schrauben. Zur Verbindung der Lenker untereinander verwenden wir die im Servopaket als Zubehör mitgelieferten Rundhörner. Wir müssen jedoch 3-mm-Löcher in jeden von ihnen bohren, damit die Bolzen hindurchpassen, oder wir können runde Metallhörner verwenden, die M3-Gewinde haben und separat erhältlich sind.

Bei der Befestigung der Lenker an den Servos müssen wir darauf achten, dass wir sie immer an der gleichen Position anbringen und sie den vollen Bewegungsbereich haben.

Dabei ist zu beachten, dass die Servos auf der Oberseite eine kleine dreieckige Stütze haben, die entfernt werden muss. Ich habe dazu ein einfaches Gebrauchsmesser verwendet, damit die Servos auf diese Weise mit den gedruckten Teilen blitzen können. Bevor wir das dritte Servo einsetzen, müssen wir zuerst eine M4-Schraube einsetzen, die zum Verbinden des Beins mit der Grundplatte verwendet wird.

So sollte die Beinanordnung aussehen. Es ist eigentlich sehr einfach, es zusammenzubauen, aber jetzt brauchen wir fünf weitere davon.

Sobald wir alle Beine fertig haben, können wir mit der Installation am Körper des Roboters oder den beiden Platten fortfahren. Zuerst müssen wir die runden Hörner auf der oberen Plattform mit der gleichen Methode wie zuvor mit M3-Schrauben und Muttern befestigen. Dann können wir sie einfach mit den Schrauben mit den Servowellen verbinden, aber bevor wir das tun, müssen wir die Position der Servos genau in der Mitte justieren.

Dies ist erforderlich, damit wir den vollen Bewegungsbereich der Servos erhalten und auch den Anpassungs- oder Kalibrierungsprozess beim Programmieren des Arduino reduzieren.

Nach dem Sichern der Beine nahm dieses Projekt bereits Gestalt an und sah aus wie ein Hexapod.

Es gibt noch ein rundes Horn auf der Rückseite und das ist für das Heckservo, das auch an dieser Stelle befestigt werden muss.

Als nächstes müssen wir den Hexapod auf den Kopf stellen, damit wir die Bodenplatte durch die M4-Bolzen der Beine stecken können. Dann befestigte ich die Beine daran mit einigen Unterlegscheiben und selbstsichernden Muttern. Wir sollten vorsichtig sein, wie fest wir diese Schrauben anziehen, da dies eigentlich die Drehgelenke sind und die Beine sich auch drehen können sollten, während sie sicher genug sind.

Als nächstes müssen wir das erste Servo für den Kopf installieren und das ist für die Rollbewegung. Dieses Servo sollte senkrecht zu den Grundplatten platziert werden, also habe ich zu diesem Zweck zwei kleine Platten gemacht, die zuerst am Servo befestigt werden. Dann können wir das Servo zwischen die beiden Platten einsetzen und es einfach mit den M3-Schrauben und Muttern befestigen.

Dann haben wir eine U-förmige Halterung und hier müssen wir zwei runde Hörner anbringen, um die beiden Servos für den Kopf zu verbinden. Bevor wir die Halterung am Rollservo befestigen, müssen wir wieder sicherstellen, dass die Position des Servos in der Mitte ist, damit es sich um 90 Grad in beide Richtungen drehen kann.

Als nächstes ist die Neigungsservohalterung. Hier müssen wir also zuerst eine M4-Schraube einsetzen und an der U-förmigen Halterung befestigen. Vor der Montage des Neigungsmotors müssen auch vier M3-Schrauben eingesetzt werden, die später zur Befestigung des Kopfes verwendet werden. Dann können wir das Neigungsservo in die Halterung einsetzen und die Welle vorsichtig auf das runde Horn montieren. Hier ist es etwas eng, aber die U-förmige Halterung kann sich hilfreicherweise ein wenig biegen.

Zuletzt müssen wir das Servo mit den M3-Schrauben befestigen und damit ist der Kopfmechanismus fertig. Jetzt kann es sowohl rollen als auch kippen.

Bevor wir den Kopf an den Mechanismus anbringen, müssen wir ihn vormontieren oder die Mandibeln mit dem kleinen SG90-Servo und dem Ultraschallsensor befestigen. Auch hier ist es etwas eng, aber ich habe es trotzdem geschafft, den ersten Unterkiefer einzusetzen und mit einer M4-Schraube am Kopf zu befestigen.

Sie können feststellen, dass sich im Bereich der Augen ein kleines Loch befindet, das speziell dafür ausgelegt ist, dass wir einen Schraubendreher zum Anziehen der Schraube hindurchführen können.

Als nächstes geht das Mikroservo an Ort und Stelle und es wird mit zwei Schrauben befestigt. Am zweiten Unterkiefer müssen wir zuerst ein kleines Armhorn für das SG90-Servo anbringen.

Dann können wir den Unterkiefer einsetzen, die beiden Zahnräder koppeln und mit einem Schraubendreher an der Motorwelle befestigen.

Als nächstes können wir den Ultraschallsensor einsetzen. Die Augenlöcher sind genau passend für den Ultraschallsensor gemacht, also habe ich einfach ein paar Tropfen AC-Kleber verwendet, um den Sensor am Kopf zu befestigen.

Dem Kopf muss noch ein Detail hinzugefügt werden, und das sind die Antennen. Zu diesem Zweck habe ich 3 mm dicken Draht verwendet, den ich auf etwa 13 cm Länge geschnitten und leicht gebogen habe, um die gewünschte Form zu erhalten. Wieder benutzte ich einige Tropfen AC-Kleber, um sie am Kopf zu befestigen. Schließlich können wir den Kopf mit den vier zuvor eingesetzten Schrauben am Roll- und Neigemechanismus befestigen.

Der Kopf ist jetzt voll funktionsfähig, er kann rollen, er kann kippen und er kann sogar beißen. Es müssen noch zwei weitere 3D-gedruckte Teile installiert werden. Das ist das Heck, das einfach in die Heckhalterung geschoben werden kann, und die gebogene Abdeckung, die wir am Ende tatsächlich verwenden werden, um die Elektronik abzudecken. Das ist also das endgültige Aussehen unseres Ameisenroboters und ich mag es wirklich, wie er in dieser blau-weißen Farbkombination herausgekommen ist.

Arduino-Ameisen-Roboter-Schaltplan

Ok, jetzt können wir mit der Elektronik weitermachen. Hier ist der Schaltplan dieses Projekts, das eigentlich einfach ist, obwohl es wegen der vielen Servoanschlüsse etwas komplex aussieht.

Neben den 22 Servos benötigen wir ein HC-05 Bluetooth-Modul für die Smartphone-Kommunikation und einige Kondensatoren und Widerstände. Natürlich ist das Gehirn des Roboters ein Arduino-Board, und in diesem Fall ist das das Arduino Mega, weil es das einzige Board ist, das mehr als 12 Servos mit der Servo-Bibliothek steuern kann.

Zugehöriges Tutorial:Funktionsweise von Servomotoren und Steuerung von Servos mit Arduino

Für die Stromversorgung des Roboters verwende ich einen 3S LiPo-Akku, der eine Spannung von etwa 12 V hat. LiPo-Batterien können eine höhere Stromaufnahme bewältigen, daher sind sie für dieses Projekt geeignet, da sie bei gleichzeitiger Volllast aller Servos etwa 10 Ampere Strom ziehen können. Die Betriebsspannung des Servos ist jedoch von 4,8 auf 7,2 V begrenzt, was bedeutet, dass ich einen DC-DC-Abwärtswandler verwenden muss, um die 12 V auf 5 V umzuwandeln. Selbst wenn wir einen 2S-LiPo-Akku verwenden, der bei voller Ladung eine Spannung von etwa 7,4 V oder 8,4 V hat, müssen wir immer noch einen Abwärtswandler verwenden. Der Abwärtswandler, den ich für dieses Projekt verwenden werde, kann bis zu 8 Ampere Strom verarbeiten, aber ich würde empfehlen, einen von 10 bis 15 A zu verwenden, nur um sicherzustellen, dass Sie genug Strom haben und nicht überhitzen. In meinem Fall lag die maximale Stromaufnahme, die ich beim Bewegen des Roboters festgestellt habe, bei etwa 6 Ampere.

Die für dieses Projekt benötigten Komponenten erhalten Sie über die folgenden Links:

  • MG996R Servomotor……………………….….
  • SG90 Mikro-Servomotor ……..…….….…….
  • HC-05 Bluetooth-Modul ………………….… 
  • Arduino-Mega-Board ……………………….….
  • 3S LiPo Akku ………………………..……….. 
  • DC-DC-Abwärtswandler ……………………….

Design einer Leiterplatte für den Arduino Hexapod

Wenn wir jetzt versuchen, alles miteinander zu verbinden, wird es wegen der vielen Servoanschlüsse ein ziemliches Durcheinander. Daher habe ich mit der kostenlosen Online-Schaltungsdesign-Software EasyEDA eine benutzerdefinierte Leiterplatte entworfen. Diese Platine fungiert tatsächlich als Arduno Mega Shield für den Hexapod, da wir sie direkt auf dem Arduino Mega Board anschließen können. Ich habe die Servoanschlüsse nahe beieinander angeordnet und zwei große Kondensatoren daneben eingebaut, um die Spannung stabiler zu halten. Außerdem habe ich einen Anschluss für ein NRF24L01-Transceiver-Modul eingebaut, falls wir den Roboter mit einer Funksteuerung steuern wollen. Es gibt mehrere digitale und analoge Pin-Anschlüsse, 5V- und Masseanschlüsse, zwei LED-Anschlüsse, sowie einen Anschluss zur Überwachung der Batteriespannung. Die 12-V-Batteriespannung wird durch einen Spannungsteiler geleitet, der aus zwei Widerständen R1 und R2 besteht, die die Spannung unter 5 V reduzieren, damit der analoge Pin sie sicher lesen kann. Auf diese Weise wissen wir, wann der Akku aufgeladen werden muss.

Hier ist ein Link zu den Projektdateien dieses PCB-Designs. Als ich also mit dem Design fertig war, generierte ich die Gerber-Datei, die für die Herstellung der Leiterplatte benötigt wird.

Gerber-Datei:

Dann bestellte ich die Platine bei JLCPCB, die eigentlich der Sponsor dieses Videos sind.

Hier können wir die Gerber-Datei einfach per Drag-and-Drop ziehen und nach dem Hochladen können wir unser PCB im Gerber-Viewer überprüfen. Wenn alles in Ordnung ist, können wir fortfahren und die gewünschten Eigenschaften für unsere Leiterplatte auswählen. In diesem Fall habe ich die PCB-Farbe blau gewählt, um mit der Farbe der Arduino-Platine übereinzustimmen. Und das war's, jetzt können wir einfach unsere Leiterplatte zu einem günstigen Preis bestellen. Beachten Sie, dass Sie bei Ihrer ersten Bestellung bei JLCPCB bis zu 10 PCBs für nur 2 $ erhalten können.

Nach einigen Tagen sind die Leiterplatten eingetroffen. Die Qualität der Leiterplatten ist super und alles ist genau so wie im Design.

Montage der Leiterplatte

Ok, jetzt können wir weitermachen und die Platine montieren. Ich begann damit, männliche Stiftleisten auf die Platine zu löten, die verwendet wurden, um sie mit der Arduino-Platine zu verbinden. Sobald wir die Stiftleisten auf der Unterseite platziert haben, können wir eine Art Platte verwenden, um die Stifte zu halten und die Platine umzudrehen. Jetzt müssen wir alle auf die Platine löten. Danach können wir mit den Servoanschlüssen fortfahren, für die wir auch Stiftleisten benötigen.

An diesem Punkt können wir tatsächlich die Stiftleisten für alle Verbindungen einsetzen und die gleiche Methode verwenden, um die Platine umzudrehen und alle Stifte daran zu löten. Am Ende müssen wir die Widerstände, die Kondensatoren und die Klemmenblöcke löten. Und fertig ist das Arduino Mega Shield für unseren Ant Robot. Jetzt können wir es einfach auf das Arduino-Board stecken.

Als nächstes müssen wir die Ausgangsspannung des Abwärtswandlers auf 5 V einstellen. Wir können das tun, indem wir das Potentiometer des Tiefsetzstellers einstellen. Sie können hier feststellen, dass ich dem Eingang einen Netzschalter hinzugefügt und die 12-V-Batterie an den 12-V-Pin auf der Platine angeschlossen habe, der nur zur Überwachung der Batteriespannung verwendet wird.

Denken Sie daran, dass der Haupteingang zur Platine 5 V betragen muss.

Jetzt können wir die Elektronikkomponenten zwischen die beiden Platten einfügen. Wieder ist es ein bisschen eng, aber wir können immer noch alles hineinpassen. Zuerst kommt die Batterie, die ich mit einem Klebeband befestigt habe, und darauf kommt der Arduino zusammen mit der von uns hergestellten Leiterplatte. Als nächstes können wir den NRF24L01-Transceiver oder nur das Bluetooth-Modul anschließen, je nachdem, welche Art von Kommunikation wir verwenden werden. Ich habe auch eine LED eingefügt, die anzeigt, wann die Batterie aufgeladen werden muss oder falls die Spannung unter 11 V Volt fällt. Zuletzt müssen wir alle Servos mit den Servostiften verbinden. Achten Sie dabei darauf, dass Sie notieren, an welche Pin-Nummer Sie jedes Servo angeschlossen haben. Nachdem wir alle Servos angeschlossen haben, können wir einfach die gebogene Abdeckung auf die obere Platte legen und wir sind eigentlich mit diesem Projekt fertig.

Arduino-Hexapod-Code

Was Sie in diesem Video noch tun müssen, ist, einen Blick darauf zu werfen, wie das Arduino-Programm funktioniert. Da der Code etwas länger ist, werde ich zum besseren Verständnis den Quellcode des Programms in Abschnitten mit Beschreibung für jeden Abschnitt veröffentlichen. Und am Ende dieses Artikels werde ich den kompletten Quellcode posten.

Für die Steuerung der Servos verwenden wir also die Basis-Servo-Bibliothek und für die Bluetooth-Kommunikation müssen wir auch die SoftwareSerial-Bibliothek einbinden. Zuerst müssen wir alle Servoobjekte sowie einige Variablen definieren, die für das folgende Programm benötigt werden.

#include <Servo.h> #include <SoftwareSerial.h> #define trigPin 7 #define echoPin 6 #define ledB 10 SoftwareSerial Bluetooth(12, 9); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX) // Create servo object Servo s24; Servo s23; Servo s22; Codesprache:Arduino (arduino)

Im Setup-Bereich müssen wir die Bluetooth-Kommunikation initialisieren, die Pin-Modi für den Ultraschallsensor, die LED und auch die Pins definieren, an denen die Servos angeschlossen sind.

void setup() {
  Serial.begin(38400);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  pinMode(ledB, OUTPUT);
  // Head
  s15.attach(36, 600, 2400);
  s14.attach(35, 600, 2400);
  s13.attach(34, 600, 2400); //grip
  // Tail
  s5.attach(26, 600, 2400); // Tail
  // Leg 4
  s10.attach(31, 600, 2400);
  s11.attach(32, 600, 2400);
  s12.attach(33, 600, 2400); //rot
  // Leg 5
  s7.attach(28, 600, 2400);
  s8.attach(29, 600, 2400);
  s9.attach(30, 600, 2400); //rot
  // Leg 6
  s1.attach(22, 600, 2400);
  s2.attach(23, 600, 2400);
  s3.attach(24, 600, 2400); //rot
  // Leg 1
  s18.attach(39, 600, 2400);
  s17.attach(38, 600, 2400);
  s16.attach(37, 600, 2400); //rot
  // Leg 2
  s21.attach(42, 600, 2400);
  s20.attach(41, 600, 2400);
  s19.attach(40, 600, 2400); //rot
  // Leg 3
  s24.attach(45, 600, 2400);
  s23.attach(44, 600, 2400);
  s22.attach(43, 600, 2400); //rot Codesprache:Arduino (arduino) 

Dann bewegen wir mit den Funktionen write () die Servos in ihre Ausgangsposition. Hier können wir eigentlich unsere Servos kalibrieren. Denken Sie daran, dass Sie beim Zusammenbau des Roboters nicht jedes Servo auf die genaue Position einstellen können, aber hier können wir Anpassungen vornehmen und unsere Anfangswerte herausfinden und von dort aus können wir die Roboterbewegung programmieren.

// == Move to initial position
  // Head
  s15.write(72);
  s14.write(50);
  s13.write(90); // Grip
  
  s5.write(65); // Tail
  
  // Leg 4
  s10.write(65);
  s11.write(35);
  s12.write(40);
  // Leg 5
  s7.write(80);
  s8.write(50);
  s9.write(25);
  // Leg 6
  s1.write(90);
  s2.write(45);
  s3.write(60);

  // Leg 1
  s18.write(60);
  s17.write(90);
  s16.write(100);
  // Leg 2
  s21.write(50);
  s20.write(85);
  s19.write(75);
  // Leg 3
  s24.write(50);
  s23.write(80);
  s22.write(80); Codesprache:Arduino (arduino) 

Bei der Programmierung einer Hexapod-Bewegung gibt es mehrere Möglichkeiten, wie z. B. die Verwendung einer Vorwärts- oder Rückwärtskinematik. Diese Methoden umfassen einige ernsthafte Mathematik, bei der die Position jedes Gelenks basierend auf den Eingaben für die gewünschte Endposition des Körpers berechnet wird. Ich habe mich jedoch entschieden, es etwas weniger kompliziert zu machen, da die von mir verwendeten Servos für eine solche Aufgabe ohnehin nicht gut genug sind. Das liegt daran, dass meine Servos die billige Version des MG996R-Servos sind. Sie haben nicht das richtige Drehmoment und positionieren nicht immer genau an der gewünschten Position.

Schauen wir uns also an, wie ich den Hexapod zum Laufen gebracht habe. Ich habe eine separate benutzerdefinierte Funktion zum Bewegen jedes Beins erstellt. Ein Beinzyklus umfasst zwei Phasen, Schwung und Stand genannt. In der Schwungphase bewegt sich das Bein von einer Anfangsposition in eine Endposition durch die Luft, während sich das Bein in der Standphase von der Endposition zurück in die Ausgangsposition bewegt, wobei der Beinendeffektor den Boden berührt. Auf diese Weise bewegt sich der Körper des Hexapods vorwärts.

Also programmiere ich die Positionen jedes Servos manuell, um diese Bewegungen mit der Hauptschleife und einigen Zählern zu erreichen.

void moveLeg1() {
  // Swign phase - move leg though air - from initial to final position
  // Rise the leg
  if (i1L1 <= 10) {
    s18.write(60 - i1L1 * 2);
    s17.write(90 - i1L1 * 3);
    i1L1++;
  }
  // Rotate the leg
  if (i2L1 <= 30) {
    s16.write(100 - i2L1);
    i2L1++;

  }
  // Move back to touch the ground
  if (i2L1 > 20 & i3L1 <= 10) {
    s18.write(40 + i3L1 * 2);
    s17.write(60 + i3L1 * 3);
    i3L1++;
  }
  // Stance phase - move leg while touching the ground
  // Rotate back to initial position
  if (i2L1 >= 30) {
    s16.write(70 + i4L1);
    i4L1++;
    l1status = HIGH;
  }
  // Reset the counters for repeating the process
  if (i4L1 >= 30) {
    i1L1 = 0;
    i2L1 = 0;
    i3L1 = 0;
    i4L1 = 0;
    i5L1 = 0;
  }
  // Each iteration or step is executed in the main loop section where there is also a delay time for controlling the speed of movement
} Codesprache:Arduino (arduino) 

Also heben zuerst die beiden äußeren Servos das Bein und das dritte Servo, das mit dem Körper verbunden ist, beginnt sich in eine bestimmte Richtung zu drehen. Wenn das dritte Servo 10 Schritte entfernt ist, bevor es sich nicht mehr dreht, beginnen wir, die beiden äußeren Servos an der gleichen Position nach hinten zu bewegen, um den Boden zu berühren. Damit ist die Schwungphase abgeschlossen bzw. das Bein von der Ausgangs- in die Endposition bewegt. Dann drehen wir das dritte Servo von der End- in die Ausgangsposition zurück, und damit ist die Standphase abgeschlossen. Nachdem das Bein einen Zyklus ausgeführt hat, werden die Zähler zurückgesetzt und das Bein wiederholt den Zyklus immer und immer wieder. Jede Iteration oder jeder Schritt wird im Hauptschleifenabschnitt ausgeführt, wo es auch eine Verzögerungszeit gibt, die die Geschwindigkeit der Servos steuert. Ich habe solche Funktionen für alle anderen Beine erstellt, sowie einige zusätzliche Funktionen zum Bewegen der Beine in die entgegengesetzte Richtung, um Rückwärts-, Links- und Rechtsbewegungen zu erreichen. In ähnlicher Weise habe ich mit Zählern zum Verfolgen der Schritte die restlichen Funktionen programmiert, wie das Bewegen des Kopfes, das Bewegen des Schwanzes, die Mandibeln und so weiter.

Wenn wir also zum Beispiel den Roboter vorwärts bewegen wollen, müssen wir die sechs benutzerdefinierten moveLeg()-Funktionen aufrufen, die sich ständig in der Hauptschleife wiederholen.

// Move forward
  if (m == 2) {
    moveLeg1();
    moveLeg3();
    moveLeg5();
    if (l1status == HIGH) {
      moveLeg2();
      moveLeg4();
      moveLeg6();
    }
  } Codesprache:Arduino (arduino) 

Sie können feststellen, dass die 3 Beine versetzt sind. Wenn sich also die Beine 1, 3 und 5 in der Schwungphase befinden, befinden sich die anderen drei Beine, 2, 4 und 6, in der Standphase. Falls wir uns nach links bewegen wollen, rufen wir die entsprechenden moveLeft()-Funktionen auf.

Diese Befehle kommen tatsächlich vom Bluetooth-Modul oder der speziell entwickelten Android-Anwendung unseres Smartphones.

// Check for incoming data
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.read();  // Read the data Codesprache:Arduino (arduino) 

Arduino Ant Robot Android App

Werfen wir jetzt einen Blick auf die App und sehen, welche Art von Daten sie tatsächlich an den Arduino sendet. Ich habe die App mit der Online-Anwendung MIT App Inventor erstellt und so funktioniert sie.

Die Grafiken der App sind also eigentlich Bilder, die ich erstellt und als Schaltflächen platziert habe. Unten haben wir einen Schieberegler zum Steuern der Geschwindigkeit des Roboters und oben haben wir die Schaltflächen zum Verbinden mit dem Bluetooth-Modul.

Werfen wir einen Blick auf das Programm bzw. die Bausteine ​​hinter der App.

Wenn wir also beispielsweise auf die Schaltfläche „Weiter“ klicken, werden die Blöcke in der „if“-Anweisung ausgeführt. Das bedeutet, dass wir die Nummer 2 an das Arduino senden und das wird den Move-Forward-Satz von Funktionen ausführen. Gleichzeitig können wir feststellen, dass wir das Bild der Schaltfläche in die andere hervorgehobene Version desselben Bildes ändern. Wenn wir dieselbe Taste erneut drücken, werden jetzt die Blöcke in der „else“-Anweisung ausgeführt und das sendet die Zahl 0 an den Arduino, der alle Zähler zurücksetzt und den Roboter in seine Ausgangspositionen bewegt. Außerdem setzen wir das ursprüngliche Bild dieser Schaltfläche zurück. Also habe ich das gleiche Prinzip für alle anderen Tasten verwendet.

Hier ist eine Download-Datei des oben genannten MIT App Inventor-Projekts sowie der Android-App, die bereit ist, auf Ihrem Smartphone installiert zu werden:

Werfen wir einen Blick auf zwei weitere Funktionen des Arduino-Programms und das ist die Batteriespannungsüberwachung und der Ultraschallsensor.

// Monitor the battery voltage
    int sensorValue = analogRead(A3);
    float voltage = sensorValue * (5.00 / 1023.00) * 2.9; // Convert the reading values from 5v to suitable 12V i
    Serial.println(voltage);
    // If voltage is below 11V turn on the LED
    if (voltage < 11) {
      digitalWrite(ledB, HIGH);
    }
    else {
      digitalWrite(ledB, LOW);
    } Codesprache:Arduino (arduino) 

Wenn also die Batteriespannung unter 11 Volt liegt, schalten wir die LED ein und wenn der Ultraschallsensor ein Objekt erkennt, das näher als 40 cm ist, bereitet sich der Roboter auf einen Angriff vor.

// Get the distance from the ultrasonic sensor
    if (getDistance() > 40) {
      att = 0;
    }
    if (getDistance() <= 40) {
      att = 1;
      dataIn = 99;
    } Codesprache:Arduino (arduino) 

Falls sich kein Objekt mehr vor ihm befindet, wird der Angriff abgewiesen und wenn das Objekt noch vorhanden und näher am Kopf ist, greift der Roboter an.

// If there is an object in front of the sensor prepare for attack
  if (att == 1) {
    prepareAttack();
    if (aStatus == HIGH) {
      while (a == 0) {
        delay(2000);
        a = 1;
      }
      if (getDistance() > 30) {
        att = 2;
        a = 0;
        aStatus = LOW;
        initialPosHead();
      }
      if (getDistance() < 30) {
        att = 3;
        a = 0;
        aStatus = LOW;
        initialPosHead();
      }
    }
  }
  // If there is no longer object in front, dismiss the attack
  if (att == 2) {
    dismissAttack();
    if (aStatus == HIGH) {
      dataIn = 0;
      att = 0;
    }
  }
  // If there is closer to the sensor attack
  if (att == 3) {
    attack();
    if (attStatus == HIGH) {
      while (aa == 0) {
        delay(2000);
        aa = 1;
      } attStatus = LOW;
    }
    if (aStatus == HIGH) {
      while (a == 0) {
        delay(2000);
        a = 1;
      }
      dataIn = 0;
      att = 0;
      initialPosHead();
    }
  } Codesprache:Arduino (arduino) 

Das ist also so ziemlich alles für dieses Video.

Hier können Sie den vollständigen Code für dieses Arduino-Hexapod-Projekt herunterladen:

Beachten Sie, dass Sie, wenn Sie sich entscheiden, dieses Projekt zu erstellen, auf einige Herausforderungen vorbereitet sein müssen. Das größte Problem für mich war die schlechte Leistung der verwendeten Servos. Ich hoffe, dir hat dieses Video gefallen und du hast etwas Neues gelernt. Fühlen Sie sich frei, Fragen im Kommentarbereich unten zu stellen und sehen Sie sich meine Arduino-Projektsammlung an.


Herstellungsprozess

  1. Raspberry Pi Roboter über Bluetooth gesteuert
  2. Hindernisse vermeiden Roboter mit Servomotor
  3. Linienfolger-Roboter
  4. Steuerung eines Roomba-Roboters mit Arduino und Android-Gerät
  5. Sprachgesteuerter Roboter
  6. Arduino-gesteuerter Klavierroboter:PiBot
  7. Littlearm 2C:Erstellen Sie einen 3D-gedruckten Arduino-Roboterarm
  8. Autonomer Heimassistent-Roboter
  9. Steuern Sie den Arduino-Roboterarm mit der Android-App
  10. Roboter für supercoole Indoor-Navigation