Bedieningsservo MG 996R via joystick

In de huidige Blog post zijn we controle AZ-Levering Servo MG996Reen Joystick module.

 

om dit Te doen, moeten we:

1xAZ-Levering Servo MG996R

1xJoystick module

1x AZ-Levering micro-controller, compatible met ArduinoUNO R3

1xSet van 3, 40 Stuks. Jumper Draad m2m/f2m/f2f

van De Servo te trekken in werking tot 2,5 A dat is te veel voor onze micro-controller, die compatibel is met Arduino Uno R3. Daarom moeten we te bieden via een externe voeding.

 

We bouwen het schema hieronder. Het is belangrijk op te merken dat we aansluiten op de GND van de Arduino naar de GND van de externe voeding.

De 3 Servo kabels. Het donkerste (in ons geval, bruin) is GND. Rood is bijna altijd de VCC (4,8 - 7,2 V stroomverbruik: maximaal 2,5 A), en Oranje wordt aangestuurd door de microcontroller, compatible met Arduino Uno R3 met Pin 9 is aangesloten.

De Joystick heeft 5 terminal pinnen die is als volgt, met de micro-controller, die compatibel is met Arduino Uno R3 zal worden aangesloten:

 

Joystick

micro-controller, die compatibel is met Arduino Uno R3

GND

GND

+5V

5V

VRx

A0

Vry

A1

SW

7

 

 

 

circuit

 

Voor de programmering, nemen we de bibliotheek met de simpele naam "Servo".

Ook gebruiken We alleen de X-as van de Servo in de gewenste richting te draaien.

 

#zijn <Servo.h>;

Servo naam servo1; // De Servo-voer een naam in voor
#define joyX A0 // Pin A0 - Joystick X
#define joyY A1 // Pin A1 - Joystick Y
#define joyBTN D7  // Pin-D7 - Knop van de Joystick

int pos = 0, je = 0, xValue, yValue; // variabelen voor de Positie (pos), richting (dir), als de X-en Y-waarde van de joystick 

void setup() {   Seriële.beginnen met de(9600);   naam servo1.hechten (9); // control lijn van de Servo op Pin 9 van de aangesloten
}

void loop() {   xValue = analogRead(joyX); // X-Positie van de joystick om de query   yValue = analogRead(joyY); // Y-Positie van de joystick om de query   //Op Serial Monitor uitgang is alleen voor debugging   Serieel.afdrukken(pos);    Seriële.print("\t\n");   Serieel.afdrukken(xValue);   Seriële.print("\t\n");   als (xValue < 490){ // Als Vreugde is naar links <-      pos = --pos; // pos zal worden verminderd   }       als (xValue > 500){ // Vreugde-naar-Rechts -     pos = ++pos;  // pos moet worden verhoogd   }   als (pos < 0){ // So pos niet negatief     pos = 0;   }   als (pos > 180){ // Dus pos niet over 180 s     pos = 180;   }   vertraging(20);   naam servo1.schrijven(pos); // Servo-op Positie "pos" te verplaatsen
}    

Naar de Upload van de code, kunnen we nu gaan naar de Servo door middel van de Joystick in de gewenste richting draaien.

 

 

We hopen dat het geïnspireerd heeft vandaag blog post, en wij kijken uit naar uw reacties. Tot de volgende post AZ-Levering, zijn de experts voor micro-elektronica!

Für arduinoProjekte für anfänger

2 Kommentare

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 ?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi