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

DIY Arduino Roboterarm mit Smartphone-Steuerung

In diesem Tutorial lernen wir, wie man einen Arduino-Roboterarm herstellt, der mit einer benutzerdefinierten Android-Anwendung drahtlos gesteuert und programmiert werden kann. Ich zeige Ihnen den gesamten Bauprozess, beginnend mit dem Entwerfen und 3D-Drucken der Roboterteile, dem Verbinden der elektronischen Komponenten und der Programmierung des Arduino bis hin zur Entwicklung unserer eigenen Android-Anwendung zur Steuerung des Roboterarms.

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

Übersicht

Mit den Schiebereglern in der App können wir die Bewegung jedes Servos oder jeder Achse des Roboterarms manuell steuern. Auch mit der Schaltfläche „Speichern“ können wir jede Position oder jeden Schritt aufzeichnen und der Roboterarm kann diese Schritte automatisch ausführen und wiederholen. Mit derselben Taste können wir den automatischen Betrieb pausieren sowie alle Schritte zurücksetzen oder löschen, um neue aufzuzeichnen.

3D-Modell des Arduino-Roboterarms

Zunächst entwarf ich den Roboterarm mit der Solidworks 3D-Modellierungssoftware. Der Arm hat 5 Freiheitsgrade.

Für die ersten 3 Achsen, die Taille, die Schulter und den Ellbogen, habe ich die MG996R-Servos verwendet, und für die anderen 2 Achsen, die Handgelenksrolle und die Handgelenksneigung, sowie den Greifer habe ich die kleineren SG90-Mikroservos verwendet. P>

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

Laden Sie das 3D-Modell der Baugruppe von Thangs herunter.

Danke Thangs für die Unterstützung dieses Tutorials.

STL-Dateien für den 3D-Druck:

Arduino-Roboterarm-STL-Dateien

1 Datei(en) 0,00 KB Herunterladen

3D-Druck des Roboterarms

Mit meinem neuen 3D-Drucker, Creality CR-10, habe ich alle Teile für den Arduino-Roboterarm in 3D gedruckt.

Hier möchte ich Banggood.com dafür danken, dass sie mir diesen großartigen 3D-Drucker zur Verfügung gestellt haben. Die Druckqualität des Creality CR-10 ist für seinen Preis erstaunlich und das Tolle daran ist, dass er zu fast 90 % vormontiert geliefert wird.

Um die Montage abzuschließen, müssen wir nur die oberen und unteren Teilrahmen mit einigen Schrauben und Klammern verbinden und dann die elektronischen Komponenten mit den mitgelieferten Kabeln mit der Steuerbox verbinden.

Prüfen Sie vor dem Ausprobieren, ob die Rollenräder fest genug sitzen, und falls nicht, können Sie sie einfach mit den Exzentermuttern festziehen. Nachdem Sie Ihr 3D-Druckbett nivelliert haben, sind Sie bereit, Ihre 3D-Kreationen in die Realität umzusetzen.

Ich hatte alle Teile für den Arduino-Roboterarm in nur wenigen Stunden fertig.

Lesen Sie mehr:Die 15 wichtigsten Zubehörteile und Werkzeuge für 3D-Drucker

Montage des Roboterarms

Ok, an diesem Punkt sind wir bereit, den Roboterarm zusammenzubauen. Ich begann mit der Basis, auf der ich den ersten Servomotor mit den mitgelieferten Schrauben befestigte. Dann befestigte ich an der Ausgangswelle des Servos ein rundes Horn mit einer Schraube.

Darauf habe ich das Oberteil gesetzt und mit zwei Schrauben befestigt.

Auch hier kommt zuerst das Servo, dann das Rundhorn auf das nächste Teil, und dann werden sie mit der Schraube auf der Abtriebswelle miteinander verbunden.

Wir können hier feststellen, dass es an der Schulterachse eine gute Idee ist, eine Art Feder einzubauen, oder in meinem Fall habe ich ein Gummiband verwendet, um dem Servo etwas Hilfe zu geben, da dieses Servo auch das gesamte Gewicht des restlichen Arms trägt als Nutzlast.

In ähnlicher Weise baute ich den Rest des Roboterarms weiter zusammen. Was den Greifermechanismus betrifft, so habe ich etwa 4-Millimeter-Schrauben und -Muttern verwendet, um ihn zusammenzubauen.

Schließlich befestigte ich den Greifmechanismus am letzten Servo und der Arduino-Roboterarm war fertig.

Schaltplan des Arduino-Roboterarms

Der nächste Schritt ist das Anschließen der Elektronik. Der Schaltplan dieses Projekts ist eigentlich ganz einfach. Wir brauchen nur ein Arduino-Board und ein HC-05 Bluetooth-Modul für die Kommunikation mit dem Smartphone. Die Steuerpins der sechs Servomotoren sind mit sechs digitalen Pins des Arduino-Boards verbunden.

Für die Stromversorgung der Servos benötigen wir 5 V, aber diese müssen von einer externen Stromquelle kommen, da der Arduino nicht in der Lage ist, die Strommenge zu verarbeiten, die alle ziehen können. Die Stromquelle muss mindestens 2 A Strom verarbeiten können. Sobald wir also alles miteinander verbunden haben, können wir mit der Programmierung des Arduino fortfahren und die Android-App erstellen.

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

  • MG996R Servomotor……………………….….
  • SG90 Mikro-Servomotor ……..…….….…….
  • HC-05 Bluetooth-Modul ………………….… 
  • Arduino-Board …………………………………….
  • 5V 2A DC Netzteil ………………….….. 

Arduino-Roboterarmcode

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.

Also müssen wir zuerst die SoftwareSerial-Bibliothek für die serielle Kommunikation des Bluetooth-Moduls sowie die Servo-Bibliothek einbinden. Beide Bibliotheken sind in der Arduino IDE enthalten, sodass Sie sie nicht extern installieren müssen. Dann müssen wir die sechs Servos, das HC-05 Bluetooth-Modul und einige Variablen zum Speichern der aktuellen und vorherigen Position der Servos sowie Arrays zum Speichern der Positionen oder der Schritte für den Automatikmodus definieren.

#include <SoftwareSerial.h> #include <Servo.h> Servo servo01; Servo servo02; Servo servo03; Servo servo04; Servo servo05; Servo servo06; SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX) int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps int speedDelay = 20; int index = 0; String dataIn = ""; Codesprache:Arduino (arduino)

Im Setup-Bereich müssen wir die Servos und das Bluetooth-Modul initialisieren und den Roboterarm in seine Ausgangsposition bewegen. Wir tun dies mit der Funktion write(), die den Servo einfach in eine beliebige Position von 0 bis 180 Grad bewegt.

void setup() {
  servo01.attach(5);
  servo02.attach(6);
  servo03.attach(7);
  servo04.attach(8);
  servo05.attach(9);
  servo06.attach(10);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  // Robot arm initial position
  servo1PPos = 90;
  servo01.write(servo1PPos);
  servo2PPos = 150;
  servo02.write(servo2PPos);
  servo3PPos = 35;
  servo03.write(servo3PPos);
  servo4PPos = 140;
  servo04.write(servo4PPos);
  servo5PPos = 85;
  servo05.write(servo5PPos);
  servo6PPos = 80;
  servo06.write(servo6PPos);
} Codesprache:Arduino (arduino) 

Als nächstes prüfen wir im Schleifenabschnitt mit der Funktion Bluetooth.available() ständig, ob Daten vom Smartphone eingehen. Wenn wahr, lesen wir mit der Funktion readString() die Daten als String und speichern sie in der Variable dataIn. Abhängig von den angekommenen Daten werden wir dem Roboterarm sagen, was zu tun ist.

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

Android-App steuern

Werfen wir jetzt einen Blick auf die Android-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. Oben haben wir zwei Tasten zum Verbinden des Smartphones mit dem HC-05 Bluetooth-Modul. Dann haben wir auf der linken Seite ein Bild des Roboterarms und auf der rechten Seite haben wir die sechs Schieberegler zur Steuerung der Servos und einen Schieberegler für die Geschwindigkeitssteuerung.

Jeder Schieberegler hat einen anderen Anfangs-, Minimal- und Maximalwert, der zu den Roboterarmgelenken passt. Unten in der App haben wir drei Schaltflächen, SAVE, RUN und RESET, über die wir den Roboterarm so programmieren können, dass er automatisch läuft. Es gibt auch ein Etikett darunter, das die Anzahl der Schritte anzeigt, die wir gespeichert haben. Weitere Einzelheiten zum Erstellen solcher Apps mit dem MIT App Inventor finden Sie jedoch in meinem anderen ausführlichen Tutorial.

Ok, jetzt schauen wir uns das Programm oder die Blöcke hinter der Anwendung an. Zuerst haben wir auf der linken Seite die Blöcke zum Verbinden des Smartphones mit dem Bluetooth-Modul.

Dann haben wir die Slider-Blöcke für die Servo-Positionssteuerung und die Buttons-Blöcke für die Programmierung des Roboterarms. Wenn wir also die Position des Schiebereglers ändern, senden wir mit der Bluetooth-Funktion .SendText einen Text an den Arduino. Dieser Text besteht aus einem Präfix, das anzeigt, welcher Schieberegler geändert wurde, sowie dem aktuellen Wert des Schiebereglers.

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:

Arduino Robot Arm Control MIT App Inventor Project File

1 Datei(en) 24,85 KB Herunterladen

Android-App zur Arduino-Roboterarmsteuerung

1 Datei(en) 2,57 MB Herunterladen

Daher überprüfen wir beim Arduino mit der Funktion startsWith() das Präfix aller eingehenden Daten und wissen so, was als nächstes zu tun ist. Wenn das Präfix zum Beispiel „s1“ ist, wissen wir, dass wir das Servo Nummer eins bewegen müssen. Mit der Funktion substring() erhalten wir den restlichen Text, oder das ist der Positionswert, wir wandeln ihn in eine Ganzzahl um und verwenden den Wert, um das Servo an diese Position zu bewegen.

// If "Waist" slider has changed value - Move Servo 1 to position
    if (dataIn.startsWith("s1")) {
      String dataInS = dataIn.substring(2, dataIn.length()); // Extract only the number. E.g. from "s1120" to "120"
      servo1Pos = dataInS.toInt();  // Convert the string into integer Codesprache:Arduino (arduino) 

Hier können wir einfach die Funktion write() aufrufen und das Servo geht in diese Position, aber auf diese Weise würde das Servo mit seiner maximalen Geschwindigkeit laufen, was für den Roboterarm zu viel ist. Stattdessen müssen wir die Geschwindigkeit der Servos steuern, also habe ich einige FOR-Schleifen verwendet, um das Servo allmählich von der vorherigen zur aktuellen Position zu bewegen, indem ich eine Verzögerungszeit zwischen jeder Iteration einfüge. Durch Ändern der Verzögerungszeit können Sie die Geschwindigkeit des Servos ändern.

// We use for loops so we can control the speed of the servo
      // If previous position is bigger then current position
      if (servo1PPos > servo1Pos) {
        for ( int j = servo1PPos; j >= servo1Pos; j--) {   // Run servo down
          servo01.write(j);
          delay(20);    // defines the speed at which the servo rotates
        }
      }
      // If previous position is smaller then current position
      if (servo1PPos < servo1Pos) {
        for ( int j = servo1PPos; j <= servo1Pos; j++) {   // Run servo up
          servo01.write(j);
          delay(20);
        }
      }
      servo1PPos = servo1Pos;   // set current position as previous position
    } Codesprache:Arduino (arduino) 

Die gleiche Methode wird zum Antreiben jeder Achse des Roboterarms verwendet.

Darunter befindet sich der SAVE-Button. Wenn wir die SAVE-Taste drücken, wird die Position jedes Servomotors in einem Array gespeichert. Mit jedem Drücken erhöht sich der Index, sodass das Array Schritt für Schritt gefüllt wird.

// If button "SAVE" is pressed
    if (dataIn.startsWith("SAVE")) {
      servo01SP[index] = servo1PPos;  // save position into the array
      servo02SP[index] = servo2PPos;
      servo03SP[index] = servo3PPos;
      servo04SP[index] = servo4PPos;
      servo05SP[index] = servo5PPos;
      servo06SP[index] = servo6PPos;
      index++;                        // Increase the array index
    } Codesprache:Arduino (arduino) 

Wenn wir dann die RUN-Taste drücken, rufen wir die benutzerdefinierte Funktion runservo() auf, die gespeicherte Schritte ausführt. Werfen wir einen Blick auf diese Funktion. Hier führen wir also die gespeicherten Schritte immer wieder aus, bis wir die RESET-Taste drücken. Mit der FOR-Schleife durchlaufen wir alle in den Arrays gespeicherten Positionen und prüfen gleichzeitig, ob wir irgendwelche eingehenden Daten vom Smartphone haben. Diese Daten können die RUN/PAUSE-Schaltfläche sein, die den Roboter anhält und bei erneutem Klicken mit den automatischen Bewegungen fortfährt. Auch wenn wir die Position des Geschwindigkeitsreglers ändern, verwenden wir diesen Wert, um die Verzögerungszeit zwischen den einzelnen Iterationen in den FOR-Schleifen unten zu ändern, die die Geschwindigkeit der Servomotoren steuern.

// Automatic mode custom function - run the saved steps
void runservo() {
  while (dataIn != "RESET") {   // Run the steps over and over again until "RESET" button is pressed
    for (int i = 0; i <= index - 2; i++) {  // Run through all steps(index)
      if (Bluetooth.available() > 0) {      // Check for incomding data
        dataIn = Bluetooth.readString();
        if ( dataIn == "PAUSE") {           // If button "PAUSE" is pressed
          while (dataIn != "RUN") {         // Wait until "RUN" is pressed again
            if (Bluetooth.available() > 0) {
              dataIn = Bluetooth.readString();
              if ( dataIn == "RESET") {     
                break;
              }
            }
          }
        }
        // If SPEED slider is changed
        if (dataIn.startsWith("ss")) {
          String dataInS = dataIn.substring(2, dataIn.length());
          speedDelay = dataInS.toInt(); // Change servo speed (delay time)
        }
      }
      // Servo 1
      if (servo01SP[i] == servo01SP[i + 1]) {
      }
      if (servo01SP[i] > servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      if (servo01SP[i] < servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {
          servo01.write(j);
          delay(speedDelay);
        }
      } Codesprache:Arduino (arduino) 

In ähnlicher Weise wie zuvor mit diesen IF-Anweisungen und FOR-Schleifen erläutert, bewegen wir die Servos auf ihre nächste Position. Wenn wir schließlich die RESET-Taste drücken, löschen wir alle Daten aus den Arrays auf Null und setzen auch den Index auf Null zurück, damit wir den Roboterarm mit neuen Bewegungen neu programmieren können.

// If button "RESET" is pressed
    if ( dataIn == "RESET") {
      memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0
      memset(servo02SP, 0, sizeof(servo02SP));
      memset(servo03SP, 0, sizeof(servo03SP));
      memset(servo04SP, 0, sizeof(servo04SP));
      memset(servo05SP, 0, sizeof(servo05SP));
      memset(servo06SP, 0, sizeof(servo06SP));
      index = 0;  // Index to 0
    } Codesprache:Arduino (arduino) 

Und das war's, jetzt können wir uns am Roboterarm erfreuen und Spaß haben.

Hier ist der vollständige Code des Arduino-Roboterarms:

/*        
       DIY Arduino Robot Arm Smartphone Control  
        by Dejan, www.HowToMechatronics.com  
*/

#include <SoftwareSerial.h>
#include <Servo.h>

Servo servo01;
Servo servo02;
Servo servo03;
Servo servo04;
Servo servo05;
Servo servo06;

SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX)

int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position
int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position
int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps
int speedDelay = 20;
int index = 0;
String dataIn = "";

void setup() {
  servo01.attach(5);
  servo02.attach(6);
  servo03.attach(7);
  servo04.attach(8);
  servo05.attach(9);
  servo06.attach(10);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  Bluetooth.setTimeout(1);
  delay(20);
  // Robot arm initial position
  servo1PPos = 90;
  servo01.write(servo1PPos);
  servo2PPos = 150;
  servo02.write(servo2PPos);
  servo3PPos = 35;
  servo03.write(servo3PPos);
  servo4PPos = 140;
  servo04.write(servo4PPos);
  servo5PPos = 85;
  servo05.write(servo5PPos);
  servo6PPos = 80;
  servo06.write(servo6PPos);
}

void loop() {
  // Check for incoming data
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();  // Read the data as string
    
    // If "Waist" slider has changed value - Move Servo 1 to position
    if (dataIn.startsWith("s1")) {
      String dataInS = dataIn.substring(2, dataIn.length()); // Extract only the number. E.g. from "s1120" to "120"
      servo1Pos = dataInS.toInt();  // Convert the string into integer
      // We use for loops so we can control the speed of the servo
      // If previous position is bigger then current position
      if (servo1PPos > servo1Pos) {
        for ( int j = servo1PPos; j >= servo1Pos; j--) {   // Run servo down
          servo01.write(j);
          delay(20);    // defines the speed at which the servo rotates
        }
      }
      // If previous position is smaller then current position
      if (servo1PPos < servo1Pos) {
        for ( int j = servo1PPos; j <= servo1Pos; j++) {   // Run servo up
          servo01.write(j);
          delay(20);
        }
      }
      servo1PPos = servo1Pos;   // set current position as previous position
    }
    
    // Move Servo 2
    if (dataIn.startsWith("s2")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo2Pos = dataInS.toInt();

      if (servo2PPos > servo2Pos) {
        for ( int j = servo2PPos; j >= servo2Pos; j--) {
          servo02.write(j);
          delay(50);
        }
      }
      if (servo2PPos < servo2Pos) {
        for ( int j = servo2PPos; j <= servo2Pos; j++) {
          servo02.write(j);
          delay(50);
        }
      }
      servo2PPos = servo2Pos;
    }
    // Move Servo 3
    if (dataIn.startsWith("s3")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo3Pos = dataInS.toInt();
      if (servo3PPos > servo3Pos) {
        for ( int j = servo3PPos; j >= servo3Pos; j--) {
          servo03.write(j);
          delay(30);
        }
      }
      if (servo3PPos < servo3Pos) {
        for ( int j = servo3PPos; j <= servo3Pos; j++) {
          servo03.write(j);
          delay(30);
        }
      }
      servo3PPos = servo3Pos;
    }
    // Move Servo 4
    if (dataIn.startsWith("s4")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo4Pos = dataInS.toInt();
      if (servo4PPos > servo4Pos) {
        for ( int j = servo4PPos; j >= servo4Pos; j--) {
          servo04.write(j);
          delay(30);
        }
      }
      if (servo4PPos < servo4Pos) {
        for ( int j = servo4PPos; j <= servo4Pos; j++) {
          servo04.write(j);
          delay(30);
        }
      }
      servo4PPos = servo4Pos;
    }
    // Move Servo 5
    if (dataIn.startsWith("s5")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo5Pos = dataInS.toInt();
      if (servo5PPos > servo5Pos) {
        for ( int j = servo5PPos; j >= servo5Pos; j--) {
          servo05.write(j);
          delay(30);
        }
      }
      if (servo5PPos < servo5Pos) {
        for ( int j = servo5PPos; j <= servo5Pos; j++) {
          servo05.write(j);
          delay(30);
        }
      }
      servo5PPos = servo5Pos;
    }
    // Move Servo 6
    if (dataIn.startsWith("s6")) {
      String dataInS = dataIn.substring(2, dataIn.length());
      servo6Pos = dataInS.toInt();
      if (servo6PPos > servo6Pos) {
        for ( int j = servo6PPos; j >= servo6Pos; j--) {
          servo06.write(j);
          delay(30);
        }
      }
      if (servo6PPos < servo6Pos) {
        for ( int j = servo6PPos; j <= servo6Pos; j++) {
          servo06.write(j);
          delay(30);
        }
      }
      servo6PPos = servo6Pos; 
    }
    // If button "SAVE" is pressed
    if (dataIn.startsWith("SAVE")) {
      servo01SP[index] = servo1PPos;  // save position into the array
      servo02SP[index] = servo2PPos;
      servo03SP[index] = servo3PPos;
      servo04SP[index] = servo4PPos;
      servo05SP[index] = servo5PPos;
      servo06SP[index] = servo6PPos;
      index++;                        // Increase the array index
    }
    // If button "RUN" is pressed
    if (dataIn.startsWith("RUN")) {
      runservo();  // Automatic mode - run the saved steps 
    }
    // If button "RESET" is pressed
    if ( dataIn == "RESET") {
      memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0
      memset(servo02SP, 0, sizeof(servo02SP));
      memset(servo03SP, 0, sizeof(servo03SP));
      memset(servo04SP, 0, sizeof(servo04SP));
      memset(servo05SP, 0, sizeof(servo05SP));
      memset(servo06SP, 0, sizeof(servo06SP));
      index = 0;  // Index to 0
    }
  }
}

// Automatic mode custom function - run the saved steps
void runservo() {
  while (dataIn != "RESET") {   // Run the steps over and over again until "RESET" button is pressed
    for (int i = 0; i <= index - 2; i++) {  // Run through all steps(index)
      if (Bluetooth.available() > 0) {      // Check for incomding data
        dataIn = Bluetooth.readString();
        if ( dataIn == "PAUSE") {           // If button "PAUSE" is pressed
          while (dataIn != "RUN") {         // Wait until "RUN" is pressed again
            if (Bluetooth.available() > 0) {
              dataIn = Bluetooth.readString();
              if ( dataIn == "RESET") {     
                break;
              }
            }
          }
        }
        // If speed slider is changed
        if (dataIn.startsWith("ss")) {
          String dataInS = dataIn.substring(2, dataIn.length());
          speedDelay = dataInS.toInt(); // Change servo speed (delay time)
        }
      }
      // Servo 1
      if (servo01SP[i] == servo01SP[i + 1]) {
      }
      if (servo01SP[i] > servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {
          servo01.write(j);
          delay(speedDelay);
        }
      }
      if (servo01SP[i] < servo01SP[i + 1]) {
        for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {
          servo01.write(j);
          delay(speedDelay);
        }
      }

      // Servo 2
      if (servo02SP[i] == servo02SP[i + 1]) {
      }
      if (servo02SP[i] > servo02SP[i + 1]) {
        for ( int j = servo02SP[i]; j >= servo02SP[i + 1]; j--) {
          servo02.write(j);
          delay(speedDelay);
        }
      }
      if (servo02SP[i] < servo02SP[i + 1]) {
        for ( int j = servo02SP[i]; j <= servo02SP[i + 1]; j++) {
          servo02.write(j);
          delay(speedDelay);
        }
      }

      // Servo 3
      if (servo03SP[i] == servo03SP[i + 1]) {
      }
      if (servo03SP[i] > servo03SP[i + 1]) {
        for ( int j = servo03SP[i]; j >= servo03SP[i + 1]; j--) {
          servo03.write(j);
          delay(speedDelay);
        }
      }
      if (servo03SP[i] < servo03SP[i + 1]) {
        for ( int j = servo03SP[i]; j <= servo03SP[i + 1]; j++) {
          servo03.write(j);
          delay(speedDelay);
        }
      }

      // Servo 4
      if (servo04SP[i] == servo04SP[i + 1]) {
      }
      if (servo04SP[i] > servo04SP[i + 1]) {
        for ( int j = servo04SP[i]; j >= servo04SP[i + 1]; j--) {
          servo04.write(j);
          delay(speedDelay);
        }
      }
      if (servo04SP[i] < servo04SP[i + 1]) {
        for ( int j = servo04SP[i]; j <= servo04SP[i + 1]; j++) {
          servo04.write(j);
          delay(speedDelay);
        }
      }

      // Servo 5
      if (servo05SP[i] == servo05SP[i + 1]) {
      }
      if (servo05SP[i] > servo05SP[i + 1]) {
        for ( int j = servo05SP[i]; j >= servo05SP[i + 1]; j--) {
          servo05.write(j);
          delay(speedDelay);
        }
      }
      if (servo05SP[i] < servo05SP[i + 1]) {
        for ( int j = servo05SP[i]; j <= servo05SP[i + 1]; j++) {
          servo05.write(j);
          delay(speedDelay);
        }
      }

      // Servo 6
      if (servo06SP[i] == servo06SP[i + 1]) {
      }
      if (servo06SP[i] > servo06SP[i + 1]) {
        for ( int j = servo06SP[i]; j >= servo06SP[i + 1]; j--) {
          servo06.write(j);
          delay(speedDelay);
        }
      }
      if (servo06SP[i] < servo06SP[i + 1]) {
        for ( int j = servo06SP[i]; j <= servo06SP[i + 1]; j++) {
          servo06.write(j);
          delay(speedDelay);
        }
      }
    }
  }
} Codesprache:Arduino (arduino) 

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. Münzprüfer mit Arduino steuern
  2. DIY-Voltmeter mit Arduino und Smartphone
  3. Einsatz des IoT zur Fernsteuerung eines Roboterarms
  4. Hindernisse vermeiden Roboter mit Servomotor
  5. Arduino mit Bluetooth zur Steuerung einer LED!
  6. Nunchuk-gesteuerter Roboterarm (mit Arduino)
  7. Arduino Nano:Steuerung von 2 Schrittmotoren mit Joystick
  8. MobBob:DIY-Arduino-Roboter, der von einem Android-Smartphone gesteuert wird
  9. Littlearm 2C:Erstellen Sie einen 3D-gedruckten Arduino-Roboterarm
  10. Drehzentrum mit Roboterarm ausgestattet