Control de servo MG 996R mediante joystick

Im heutigen Blog Beitrag steuern wir einen AZ-Delivery Servo MG996Rsobre un módulo joystick.

 

Para ello necesitamos:

1xAZ-Delivery Servo MG996R

1xmódulo joystick

1x Microcontrolador de entrega AZ, compatible con ArduinoONE R3

1x3er Set 40 pcs Jumper Wire m2m/f2m/f2f

El servo se mueve hasta 2.5A en funcionamiento - demasiado para nuestro microcontrolador, compatible con Arduino Uno R3. Por lo tanto, debemos proporcionarle una fuente de alimentación externa.

 

Estamos construyendo un circuito abajo. Cabe señalar que conectamos GND desde el Arduino con el GND de la fuente de alimentación externa.

Hay 3 líneas en el servo. El más oscuro (en nuestro caso marrón) es GND. Red es VCC (4.8 - 7.2 V de captación de corriente: hasta 2.5A) como casi siempre, y Orange está controlado por el microcontrolador, compatible con Arduino Uno R3 y conectado a Pin 9.

El joystick tiene 5 pines de conexión que están conectados al microcontrolador, compatibles con Arduino Uno R3 de la siguiente manera:

 

Joystick

Microcontrolador compatible con Arduino Uno R3

GND

GND

+5V

5V

VRx

A0

Vry

A1

SW

7

 

 

 

circuito

 

Para la programación, tomamos la biblioteca con el nombre simple "Servo".

También utilizamos sólo el eje X para girar el servo en la dirección deseada.

 

#incluir <Servo.h>;

Servo Servo1; // dar un nombre al servo
#define joyX A0 // Pin A0 - Joystick X
#define fröhlich A1 // Pin A1 - Joystick Y
#define joyBTN D7  // Pin D7 - Joystick Button

int pos = 0, dir = 0, xValue, yValue; // Variables para posición (pos), dirección (dir) y el valor X e Y de joystick 

read Configuración() {   Serien.beginnen(9600);   Servo1.befestígeno (9); // La línea de control desde el servo está conectada a la pínula 9
}

read Schleife() {   xValue = analoglesen(joyX); // Posición de consulta X de joystick   yValue = analoglesen(fröhlich); // consulta Y posición de joystick   //Expende en monitor en serie - solo para búsqueda de errores   Serien.drucken(pos);    Serien.drucken("\t\n");   Serien.drucken(xValue);   Serien.drucken("\t\n");   wenn (xValue < 490){ // Wenn Joy nach Links<-      pos = --pos; // pos se inserta   }       wenn (xValue > 500){ // Wenn Joy nach Rechts     pos = ++pos;  // pos aumentamos   }   wenn (pos < 0){ // Damit pos nicht negativ wird     pos = 0;   }   wenn (pos > 180){ // Damit pos nicht über 180 geht     pos = 180;   }   Verzögerung(20);   Servo1.schreiben(pos); // Servo mover posición "pos"
}    

Después de subir el código, ahora podemos girar el servo en la dirección deseada usando el joystick.

 

 

Esperamos que haya inspirado nuestro post de blog hoy y esperamos sus comentarios. Hasta la siguiente contribución de AZ-Delivery, su experto en microelectrónica!

Para arduinoProyectos para principiantes

2 comentarios

Andreas Wolter

Andreas Wolter

@Robert Miosga:

damit das Servo stehen bleibt, würde ich ein Maximum einbauen. eine Variable, die immer dann überspeichert wird, wenn der neue Wert größer ist, als der alte. Diesen Wert dann auf das Servo geben, falls er sich geändert hat.

Die Geschwindigkeit, mit der sich die Servoachse dreht, wird in diesem Fall wahrscheinlich mit der Zeile delay(20) festgelegt.
Was Sie brauchen ist die Beschleunigung. Je größer die Beschleunigung, desto kleiner der Wert in der delay() Funktion. Die Beschleunigung ist die erste Ableitung der Geschwindigkeit. Die Geschwindigkeit zu messen, geht über die Zeit. Das ist der mathematische Ansatz dahinter. Dafür gibt es viele Beispiele im Netz. Sie müssen es dann “nur” noch in Code umsetzen.
Ohne Mathe würde ich immer den gleichen Zeitraum messen und dann gucken, um wieviel sich der Wert erhöht hat. Den Abstand der beiden Werte innerhalb der Zeitmessung könnte man dann ins Verhältnis zum Wert in der delay() Funktion setzen. Also bräuchte man dafür eine minimale und maximale Drehgeschwindigkeit der Servoachse.

Ich hoffe, ich konnte ein wenig weiterhelfen.

Andreas Wolter

Robert Miosga

Robert Miosga

Hallo, ich habe eine Frage, ich versuche schon seit Langen Servos mit einem Joystick zu steuern, aber mein Ziel ist es das der Servo sich in die jeweilige Richtung bewegt und dann auch dort stehen bleibt .. und sich nicht wieder zurückbewegt nachdem der Joystick sich zentriert .. zusätzlich soll der Servo sich proportional schneller bewegen je nach dem wie sehr man den Joystick in die jeweilige Richtung drückt .. können Sie mir eventuell weiterhelfen oder mir Ansätze geben wie man das angeht ?

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas