Hier erfahren Sie, wie Sie Ihre eigene Roboterspinne mit Arduino-Antrieb herstellen können.

Bauen Sie Ihr eigenes Arduino-angetriebenes Roboterspinnenspiel!

Wenn der Videoplayer nicht funktioniert, können Sie darauf klicken. alternativer Videolink .

Möchten Sie Ihre eigene Arduino-angetriebene 4-beinige "Spinne" bauen? Dann sind Sie bei uns genau richtig.

Wie die meisten Projekte von dieser Art benötigen Sie ein paar grundlegende Werkzeuge unten aufgeführt und einige andere Kleinigkeiten, um die Arbeit zu erledigen.

Wir haben Links zu einigen Produkten hinzugefügt, falls Sie diese kaufen müssen :

Hauptkomponenten :

Andere Ausrüstung benötigt :

Mit allem in der Hand ist es Zeit, mit dem Build fortzufahren.

Der erste Schritt besteht darin, alle erforderlichen 3D-gedruckten Teile zu drucken. Sie finden die Teilemodelle. hier . Der Ersteller hat ein Anet ET4 3D-Drucker aber Sie können jeden verwenden 3D-Drucker kann gedruckt werden.

Werbung

Die Hauptbeine insgesamt 4 sind für SG90-Servos ausgelegt. Bringen Sie sie wie im Tutorial-Video beschrieben an. Sie müssen sie mit Schrauben geeigneter Größe festschrauben.

MG90-Servos an 3D-gedruckten Beinsegmenten befestigt Quelle : Interessante Technik | wissenschaft-x.com

Als Nächstes müssen Sie dieselben Servos auch an den Beingelenken befestigen. Weitere Informationen zu diesem Schritt finden Sie im Video.

MG90-Servos an 3D-gedruckten Beingelenksegmenten befestigt Quelle : Interessante Technik | wissenschaft-x.com

Befestigen Sie als Nächstes die Beinsegmente an den 3D-Teilen des Beinscharniers und befestigen Sie die gesamte Baugruppe an den zuvor konstruierten Gelenkbaugruppen.

Beine an Gelenken befestigen, Quelle : Interessante Technik | wissenschaft-x.com

Komplett für alle vier Beine.

Quelle : Interessante Technik | wissenschaft-x.com

Befestigen Sie nun die vier fertigen Bein- und Gelenkbaugruppen am Hauptkörper. In der zentralen Lücke werden später die fertige Leiterplatte und die Komponenten untergebracht.

Befestigen Sie die Beine am Hauptkörper. Quelle : Interessante Technik | wissenschaft-x.com

Der nächste Schritt besteht darin, eine benutzerdefinierte Leiterplatte zu entwerfen und herzustellen. Sie können alle relevanten Diagramme und Dateien in der vollständigen Bedienungsanleitung sehen. hier .

Werbung

Bitte beachten Sie, dass dieses Video die aktuelle Iteration dieses Roboters ist, sodass sich einige Details, wie das Design der Leiterplatte, möglicherweise geändert haben.

Benutzerdefiniertes PCB-Diagramm / Schaltplan beachten Sie, dass dies möglicherweise nicht mit dem im Video übereinstimmt z. B. ist die Netzbuchse nicht erforderlich. Quelle : Interessante Technik | wissenschaft-x.com

Sie können bekommen dies gedruckt für so wenig wie $ 2 Der Versand erfolgt jedoch aus China, sodass die Lieferzeiten erheblich sein können. Platzieren Sie daher alle erforderlichen Komponenten in den entsprechenden Steckplätzen und löten Sie sie, wie in den obigen Schaltplänen gezeigt.

Benutzerdefinierte Leiterplatte, Quelle : Interessante Technik | wissenschaft-x.com

Befestigen Sie als Nächstes den Arduino Nano und die Servos an den entsprechenden Steckplätzen auf der Platine.

Leiterplatten- und Servokabel anbringen Quelle : Interessante Technik | wissenschaft-x.com

Verdrahten Sie nun das Buck-Modul und befestigen Sie es am Mainboard blauer Stromanschluss.

Quelle : Interessante Technik | wissenschaft-x.com

Fügen Sie nun die fertige Leiterplatte zum Hohlraum in der zuvor fertiggestellten Hauptkörperbaugruppe hinzu. Befestigen Sie sie mit der 3D-gedruckten Halteklammer und verbinden Sie den Arduino Nano mit einem USB-Kabel.

Werbung
Setzen Sie die Leiterplatte ein, befestigen Sie die Gehäusekappe und schließen Sie das Arduino an, um den Code zu empfangen. Quelle : Interessante Technik | wissenschaft-x.com

Laden Sie die erforderlicher Code und laden Sie es auf den Nano hoch. Der Code ist ziemlich umfangreich, daher haben wir ihn am Ende dieser Anleitung hinzugefügt.

Nehmen Sie nun den Akku und befestigen Sie ihn wie im Video gezeigt an der Arduino-Spinne. Befestigen Sie ihn an der Oberseite des Roboters, schließen Sie ihn an die Hauptplatine an und schalten Sie ihn mit dem Schalter ein, um zu sehen, wie Ihre kleine Kreation entstehtLeben vor deinen Augen!

Das vollendete Tier! Quelle : Interessante Technik | wissenschaft-x.com

Herzlichen Glückwunsch und i Wenn Sie möchten, dass die Roboterspinne einige andere interessante oder speziellere Dinge tut, die Sie tatsächlich bauen können Fernbedienung dafür oder fügen Sie ein IR-Detektor zum Build.

Viel Spaß beim Bauen und Modden!

Und schließlich, wie versprochen, hier der dringend benötigte Code für diesen gruseligen kleinen Roboter. Sie müssen ihn auch herunterladen und installieren. FlexiTimer2 zuerst vor dem Kompilieren des Codes.

Werbung

Wenn Sie den Roboter nicht selbst bauen möchten, erhalten Sie ein fertiges Äquivalent. hier .

Code zum Testen der Hauptservos speichern und als servo_test.ino hochladen oder herunterladen von hier

 #include Servo myservo; // Servoobjekt zur Steuerung eines Servos erstellen // Auf den meisten Karten können zwölf Servoobjekte erstellt werden. Int pos = 0; // Variable zum Speichern der Servoposition void setup  {myservo.attach 2; // bringt das Servo an Pin 2 am Servoobjekt an} void loop  {for pos = 0; pos <= 180; pos + = 1 {// geht schrittweise von 0 Grad auf 180 Grad //von 1 Grad myservo.write pos; // Servo anweisen, in variabler 'pos'-Verzögerung 15 zur Position zu gehen; // 15 ms warten, bis das Servo die Position erreicht} für pos = 180; pos> = 0; pos - = 1 {// geht von 180 Grad auf 0 Grad myservo.write pos; // Servo anweisen, in der variablen 'pos'-Verzögerung 15 in Position zu gehen; // wartet 15 ms, bis das Servo erreicht istdie Position } }

Code zum Auffinden der Anfangsposition der Roboterbeine speichern und als bein_init.ino hochladen oder von herunterladen hier

 #include Servo servo [4] [3]; // Servos 'Ports definieren const int servo_pin [4] [3] = {{2, 3, 4}, {5, 6, 7}, {8, 9, 10}, {11, 12, 13}}; void setup  {// initialisiere alle Servos für int i = 0; i <4; i ++ {für int j = 0; j <3; j ++{servo [i] [j] .attach servo_pin [i] [j]; delay 20;}}} void loop void {for int i = 0; i <4; i ++ {for int j = 0; j <3; j ++ {servo [i] [j] .write 90; delay 20;}}}

Code, mit dem der Roboter einige interessante Tricks ausführen kann speichern und als spider_openV4.ino hochladen

 #include // zum Definieren und Steuern von Servos #include // zum Einstellen eines Timers zum Verwalten aller Servos / * Servos ---------------------------------------------------------------- * / // definiere 12Servos für 4 Beine Servo-Servo [4] [3]; // Servos-Ports definieren const int servo_pin [4] [3] = {{2, 3, 4}, {5, 6, 7}, {8, 9, 10}, {11, 12, 13}}; / * Größe des Roboters --------------------------------------------------------- * / const float length_a = 55; const float length_b = 77,5; const float length_c = 27,5; const float length_side =71; const float z_absolute = -28; / * Konstanten für die Bewegung ---------------------------------------------------- * / const float z_default = -50, z_up = -30, z_boot = z_absolute; const float x_default = 62, x_offset = 0; const float y_start = 0,y_step = 40; const float y_default = x_default; / * Variablen für die Bewegung ---------------------------------------------------- * / volatile float site_now [4] [3]; // Echtzeitkoordinaten des Endes jedes Beines volatile float site_expect [4] [3]; // erwartete Koordinaten des Endes jedes Beines float temp_speed [4] [3];// Die Geschwindigkeit jeder Achse muss vor jeder Bewegung neu berechnet werden. float move_speed;// Bewegungsgeschwindigkeit float speed_multiple = 1;// Bewegungsgeschwindigkeit multiple const float spot_turn_speed = 4;const float leg_move_speed = 8;const float body_move_speed = 3;const float stand_seat_speed = 1;volatile int rest_counter;//+1/0.02s, für automatische Ruhefunktionen // Parameter const float KEEP = 255;// definiere PI für die Berechnung const float pi = 3.1415926;/ * Konstanten für den Turn ---------------------------------------------------- * / // temporäre Länge const float temp_a = sqrt pow 2 * x_default + length_side, 2 + pow y_step, 2;const float temp_b = 2 * y_start + y_step + length_side;const float temp_c = sqrt pow 2 * x_default + length_side, 2 + pow 2 * y_start + y_step + length_side, 2;const float temp_alpha = acos pow temp_a, 2 + pow temp_b, 2 - pow temp_c, 2 / 2 / temp_a / temp_b;// Seite für turn const float turn_x1 = temp_a - length_side / 2;const float turn_y1 = y_start + y_step / 2;const float turn_x0 = turn_x1 - temp_b * cos temp_alpha;const float turn_y0 = temp_b * sin temp_alpha - turn_y1 - length_side;/ * ----------------------------------------------------------------------- * / / * - Setup-Funktion --------------------------------------------------------------------------- * / void setup  {// Seriell für Debug starten Serial.begin 115200;Serial.println "Roboter startet Initialisierung";// Standardparameter set_site initialisieren 0, x_default - x_offset, y_start + y_step, z_boot;set_site 1, x_default - x_offset, y_start + y_step, z_boot;set_site 2, x_default + x_offset, y_start, z_boot;set_site 3, x_default + x_offset, y_start, z_boot;für int i = 0; i <4; i ++ {für int j = 0; j <3; j ++ {site_now [i] [j] = site_expect [i] [j];}} // Servo-Service starten FlexiTimer2 :: set 20, servo_service;FlexiTimer2 :: start ;Serial.println "Servodienst gestartet";// Servos initialisieren servo_attach ;Serial.println "Servos initialisiert";Serial.println "Roboterinitialisierung abgeschlossen";} void servo_attach void {für int i = 0; i <4; i ++ {für int j = 0; j <3; j ++ {servo [i] [j] .attach servo_pin [i] [j];Verzögerung 100;}}} void servo_detach void {für int i = 0; i <4; i ++ {für int j = 0; j <3; j ++ {servo [i] [j] .detach ;Verzögerung 100;}}} / * - Schleifenfunktion ----------------------------------------------------------------------- * / void loop  {Serial.println "Stand";Stand;Verzögerung 2000;Serial.println "Schritt vorwärts";step_forward 5;Verzögerung 2000;Serial.println "Schritt zurück";step_back 5;Verzögerung 2000;Serial.println "Biegen Sie links ab";turn_left 5;Verzögerung 2000;Serial.println "Rechts abbiegen";turn_right 5;Verzögerung 2000;Serial.println "Handwelle";hand_wave 3;Verzögerung 2000;Serial.println "Handwelle";hand_shake 3;Verzögerung 2000;Serial.println "Körpertanz";body_dance 10;Verzögerung 2000;Serial.println "Sit";sitzen;Verzögerung 5000;} / * - Sit-Blocking-Funktion ----------------------------------------------------------------------- * / void sit void {move_speed = stand_seat_speed;für int leg = 0; leg <4; leg ++ {set_site leg, KEEP, KEEP, z_boot;} wait_all_reach ;} / * - Stand-Blocking-Funktion ----------------------------------------------------------------------- * / void stand void {move_speed = stand_seat_speed;für int leg = 0; leg <4; leg ++ {set_site leg, KEEP, KEEP, z_default;} wait_all_reach ;} / * - Punkt nach links drehen - Sperrfunktion - Parameter Schritt Schritte wollten drehen ----------------------------------------------------------------------- * / void turn_left unsigned intSchritt {move_speed = spot_turn_speed;while step--> 0 {if site_now [3] [1] == y_start {// leg 3 & 1 move set_site 3, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 0, turn_x1 - x_offset, turn_y1, z_default;set_site 1, turn_x0 - x_offset, turn_y0, z_default;set_site 2, turn_x1 + x_offset, turn_y1, z_default;set_site 3, turn_x0 + x_offset, turn_y0, z_up;wait_all_reach ;set_site 3, turn_x0 + x_offset, turn_y0, z_default;wait_all_reach ;set_site 0, turn_x1 + x_offset, turn_y1, z_default;set_site 1, turn_x0 + x_offset, turn_y0, z_default;set_site 2, turn_x1 - x_offset, turn_y1, z_default;set_site 3, turn_x0 - x_offset, turn_y0, z_default;wait_all_reach ;set_site 1, turn_x0 + x_offset, turn_y0, z_up;wait_all_reach ;set_site 0, x_default + x_offset, y_start, z_default;set_site 1, x_default + x_offset, y_start, z_up;set_site 2, x_default - x_offset, y_start + y_step, z_default;set_site 3, x_default - x_offset, y_start + y_step, z_default;wait_all_reach ;set_site 1, x_default + x_offset, y_start, z_default;wait_all_reach ;} else {// leg 0 & 2 move set_site 0, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 0, turn_x0 + x_offset, turn_y0, z_up;set_site 1, turn_x1 + x_offset, turn_y1, z_default;set_site 2, turn_x0 - x_offset, turn_y0, z_default;set_site 3, turn_x1 - x_offset, turn_y1, z_default;wait_all_reach ;set_site 0, turn_x0 + x_offset, turn_y0, z_default;wait_all_reach ;set_site 0, turn_x0 - x_offset, turn_y0, z_default;set_site 1, turn_x1 - x_offset, turn_y1, z_default;set_site 2, turn_x0 + x_offset, turn_y0, z_default;set_site 3, turn_x1 + x_offset, turn_y1, z_default;wait_all_reach ;set_site 2, turn_x0 + x_offset, turn_y0, z_up;wait_all_reach ;set_site 0, x_default - x_offset, y_start + y_step, z_default;set_site 1, x_default - x_offset, y_start + y_step, z_default;set_site 2, x_default + x_offset, y_start, z_up;set_site 3, x_default + x_offset, y_start, z_default;wait_all_reach ;set_site 2, x_default + x_offset, y_start, z_default;wait_all_reach ;}}} / * - Punkt nach rechts drehen - Sperrfunktion - Parameter Schritt Schritte wollten drehen ----------------------------------------------------------------------- * / void turn_right unsigned int step {move_speed = spot_turn_speed;while step--> 0 {if site_now [2] [1] == y_start {// leg 2 & 0 move set_site 2, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 0, turn_x0 - x_offset, turn_y0, z_default;set_site 1, turn_x1 - x_offset, turn_y1, z_default;set_site 2, turn_x0 + x_offset, turn_y0, z_up;set_site 3, turn_x1 + x_offset, turn_y1, z_default;wait_all_reach ;set_site 2, turn_x0 + x_offset, turn_y0, z_default;wait_all_reach ;set_site 0, turn_x0 + x_offset, turn_y0, z_default;set_site 1, turn_x1 + x_offset, turn_y1, z_default;set_site 2, turn_x0 - x_offset, turn_y0, z_default;set_site 3, turn_x1 - x_offset, turn_y1, z_default;wait_all_reach ;set_site 0, turn_x0 + x_offset, turn_y0, z_up;wait_all_reach ;set_site 0, x_default + x_offset, y_start, z_up;set_site 1, x_default + x_offset, y_start, z_default;set_site 2, x_default - x_offset, y_start + y_step, z_default;set_site 3, x_default - x_offset, y_start + y_step, z_default;wait_all_reach ;set_site 0, x_default + x_offset, y_start, z_default;wait_all_reach ;} else {// leg 1 & 3 move set_site 1, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 0, turn_x1 + x_offset, turn_y1, z_default;set_site 1, turn_x0 + x_offset, turn_y0, z_up;set_site 2, turn_x1 - x_offset, turn_y1, z_default;set_site 3, turn_x0 - x_offset, turn_y0, z_default;wait_all_reach ;set_site 1, turn_x0 + x_offset, turn_y0, z_default;wait_all_reach ;set_site 0, turn_x1 - x_offset, turn_y1, z_default;set_site 1, turn_x0 - x_offset, turn_y0, z_default;set_site 2, turn_x1 + x_offset, turn_y1, z_default;set_site 3, turn_x0 + x_offset, turn_y0, z_default;wait_all_reach ;set_site 3, turn_x0 + x_offset, turn_y0, z_up;wait_all_reach ;set_site 0, x_default - x_offset, y_start + y_step, z_default;set_site 1, x_default - x_offset, y_start + y_step, z_default;set_site 2, x_default + x_offset, y_start, z_default;set_site 3, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 3, x_default + x_offset, y_start, z_default;wait_all_reach ;}}} / * - vorwärts gehen - Blockierungsfunktion - Parameterschritt Schritte wollten gehen ----------------------------------------------------------------------- * / void step_forward unsigned intSchritt {move_speed = leg_move_speed;while step--> 0 {if site_now [2] [1] == y_start {// leg 2 & 1 move set_site 2, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 2, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 2, x_default + x_offset, y_start + 2 * y_step, z_default;wait_all_reach ;move_speed = body_move_speed;set_site 0, x_default + x_offset, y_start, z_default;set_site 1, x_default + x_offset, y_start + 2 * y_step, z_default;set_site 2, x_default - x_offset, y_start + y_step, z_default;set_site 3, x_default - x_offset, y_start + y_step, z_default;wait_all_reach ;move_speed = leg_move_speed;set_site 1, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 1, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 1, x_default + x_offset, y_start, z_default;wait_all_reach ;} else {// leg 0 & 3 move set_site 0, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 0, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 0, x_default + x_offset, y_start + 2 * y_step, z_default;wait_all_reach ;move_speed = body_move_speed;set_site 0, x_default - x_offset, y_start + y_step, z_default;set_site 1, x_default - x_offset, y_start + y_step, z_default;set_site 2, x_default + x_offset, y_start, z_default;set_site 3, x_default + x_offset, y_start + 2 * y_step, z_default;wait_all_reach ;move_speed = leg_move_speed;set_site 3, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 3, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 3, x_default + x_offset, y_start, z_default;wait_all_reach ;}}} / * - Zurück - Blockierungsfunktion - Parameterschritt Schritte wollten gehen ----------------------------------------------------------------------- * / void step_back unsigned intSchritt {move_speed = leg_move_speed;while step--> 0 {if site_now [3] [1] == y_start {// leg 3 & 0 move set_site 3, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 3, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 3, x_default + x_offset, y_start + 2 * y_step, z_default;wait_all_reach ;move_speed = body_move_speed;set_site 0, x_default + x_offset, y_start + 2 * y_step, z_default;set_site 1, x_default + x_offset, y_start, z_default;set_site 2, x_default - x_offset, y_start + y_step, z_default;set_site 3, x_default - x_offset, y_start + y_step, z_default;wait_all_reach ;move_speed = leg_move_speed;set_site 0, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 0, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 0, x_default + x_offset, y_start, z_default;wait_all_reach ;} else {// leg 1 & 2 move set_site 1, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 1, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 1, x_default + x_offset, y_start + 2 * y_step, z_default;wait_all_reach ;move_speed = body_move_speed;set_site 0, x_default - x_offset, y_start + y_step, z_default;set_site 1, x_default - x_offset, y_start + y_step, z_default;set_site 2, x_default + x_offset, y_start + 2 * y_step, z_default;set_site 3, x_default + x_offset, y_start, z_default;wait_all_reach ;move_speed = leg_move_speed;set_site 2, x_default + x_offset, y_start + 2 * y_step, z_up;wait_all_reach ;set_site 2, x_default + x_offset, y_start, z_up;wait_all_reach ;set_site 2, x_default + x_offset, y_start, z_default;wait_all_reach ;}}} // von RegisHsu hinzufügen void body_left int i {set_site 0, site_now [0] [0] + i, KEEP, KEEP;set_site 1, site_now [1] [0] + i, KEEP, KEEP;set_site 2, site_now [2] [0] - i, KEEP, KEEP;set_site 3, site_now [3] [0] - i, KEEP, KEEP;wait_all_reach ;} void body_right int i {set_site 0, site_now [0] [0] - i, KEEP, KEEP;set_site 1, site_now [1] [0] - i, KEEP, KEEP;set_site 2, site_now [2] [0] + i, KEEP, KEEP;set_site 3, site_now [3] [0] + i, KEEP, KEEP;wait_all_reach ;} void hand_wave int i {float x_tmp;float y_tmp;float z_tmp;move_speed = 1;if site_now [3] [1] == y_start {body_right 15;x_tmp = site_now [2] [0];y_tmp = site_now [2] [1];z_tmp = site_now [2] [2];move_speed = body_move_speed;für int j = 0; j  i / 4 move_speed = body_dance_speed * 2;if j> i / 2 move_speed = body_dance_speed * 3;set_site 0, KEEP, y_default - 20, KEEP;set_site 1, KEEP, y_default + 20, KEEP;set_site 2, KEEP, y_default - 20, KEEP;set_site 3, KEEP, y_default + 20, KEEP;wait_all_reach ;set_site 0, KEEP, y_default + 20, KEEP;set_site 1, KEEP, y_default - 20, KEEP;set_site 2, KEEP, y_default + 20, KEEP;set_site 3, KEEP, y_default - 20, KEEP;wait_all_reach ;} move_speed = body_dance_speed;head_down 30;} / * - Microservos-Dienst / Timer-Interrupt-Funktion / 50Hz - Wenn der Standort erwartet wird, verschiebt diese Funktion den Endpunkt in einer geraden Linie dorthin - temp_speed [4] [3] sollte vor dem Festlegen des erwarteten Standorts eingestellt werdenEndpunkt bewegen sich in einer geraden Linie und bestimmen die Bewegungsgeschwindigkeit.--------------------------------------------------------------------------- * / #define E_DELTA 0.01 void servo_service void {sei ;statischer Schwimmer Alpha, Beta, Gamma;für int i = 0; i <4; i ++ {für int j = 0; j <3; j ++ {if abs site_now [i] [j] - site_expect [i] [j]  = 0 & le; 1: -1 * sqrt pow x, 2 + pow y, 2;v = w - Länge_c;alpha = atan2 z, v + acos pow Länge_a, 2 - pow Länge_b, 2 + pow v, 2 + pow z, 2 / 2 / Länge_a / sqrt pow v, 2 + pow z, 2;beta = acos pow Länge_a, 2 + pow Länge_b, 2 - pow v, 2 - pow z, 2 / 2 / Länge_a / Länge_b;// xyz Grad berechnen gamma = w> = 0?atan2 y, x: atan2 -y, -x;// trans grad pi-> 180 alpha = alpha / pi * 180;Beta = Beta / Pi * 180;gamma = gamma / pi * 180;} / * - Trans-Site von Polar zu Microservos - Mathematische Modellkarte zu Fakt - Die in eeprom gespeicherten Fehler werden hinzugefügt ---------------------------------------------------------------------------* / void polar_to_servo int leg, float alpha, float beta, float gamma {if leg == 0 {alpha = 90 - alpha;Beta = Beta;Gamma + = 90;} else if leg == 1 {alpha + = 90;Beta = 180 - Beta;Gamma = 90 - Gamma;} else if leg == 2 {alpha + = 90;Beta = 180 - Beta;Gamma = 90 - Gamma;} else if leg == 3 {alpha = 90 - alpha;Beta = Beta;Gamma + = 90;} servo [leg] [0] .write alpha;Servo [Bein] [1] .write Beta;Servo [Bein] [2] .write Gamma;}

Interessante Technik | wissenschaft-x.com ist Teilnehmer des Amazon Services LLC-Partnerprogramms und verschiedener anderer Partnerprogramme. Daher gibt es möglicherweise Partnerlinks zu den Produkten in diesem Artikel. Klicken Sie auf die Links und kaufen Sie auf Partnerseiten einSie erhalten nicht nur die Materialien, die Sie benötigen, sondern unterstützen auch unsere Website.

Folgen Sie uns auf

Bleiben Sie über die neuesten technischen Neuigkeiten auf dem Laufenden

Geben Sie einfach Ihre E-Mail-Adresse ein und wir kümmern uns um den Rest :

Mit Ihrer Anmeldung stimmen Sie unserer zu Nutzungsbedingungen und Datenschutzerklärung . Sie können sich jederzeit abmelden.