Servo de commande MG 996R via joystick

Dans le blog d’aujourd’hui, nous contrôlons un AZ-Livraison Servo MG996Rvia un Module Joystick.

 

Pour ce faire, nous avons besoin de :

1x AZ-Livraison Servo MG996R

1x Module Joystick

1x Microcontrôleur AZ-Delivery, compatible avec Arduino UNO R3

1x Ensemble de 3 40 pcs. Jumper Wire m2m/f2m/f2f

Le servo tire jusqu’à 2.5A en fonctionnement - beaucoup trop pour notre microcontrôleur, compatible avec Arduino Uno R3. Par conséquent, nous devons lui fournir une alimentation électrique externe.

 

Nous construisons le circuit ci-dessous. Il convient de noter que nous connectons GND de l’Arduino au GND de l’alimentation électrique externe.

Il y a 3 câbles sur le servo. Le plus sombre (dans notre cas brun) est GND. Le rouge est comme presque toujours VCC (4.8 - 7.2 V consommation actuelle: jusqu’à 2.5A), et orange est contrôlé par le microcontrôleur, compatible avec Arduino Uno R3 et connecté à la broche 9.

Le joystick a 5 broches de connexion qui sont connectés au microcontrôleur, compatible avec Arduino Uno R3, comme suit:

 

Joystick

Microcontrôleur, compatible avec Arduino Uno R3

Gnd

Gnd

5V

5v

VRx VRx

A0 (en)

Vry

A1

Sw

7

 

 

 

Circuit

 

Pour la programmation, nous prenons la bibliothèque avec le nom simple "Servo".

Nous n’utilisons également que l’axe X pour faire pivoter le servo dans la direction souhaitée.

 

#include <Servo.H (en)>;

Servo servo1; Donnez un nom au servo
#define joyX (joyX) A0 (en) Pin A0 - Joystick X
#define joyY A1 Pin A1 - Joystick Y
#define joyBTN (joyBTN) D7 D7  Pin D7 - Bouton Joystick

Int Article = 0, Vous = 0, xValue (en), yValue (en); Variables pour la position (pos), direction (dir), et la valeur X et Y du joystick 

Vide Configuration() {   Série.Commencer(9600);   servo1.joindre (9); La ligne de contrôle du servo est connectée à la broche 9
}

Vide Boucle() {   xValue (en) = analogRead (en)(joyX (joyX)); Requête de la position X du joystick   yValue (en) = analogRead (en)(joyY); Interroger la position Y du joystick   Sortie à Serial Monitor - uniquement pour le dépannage   Série.Imprimer(Article);    Série.Imprimer("Atin");   Série.Imprimer(xValue (en));   Série.Imprimer("Atin");   Si (xValue (en) < 490){ Si Joy après les liens 'lt;-      Article = --Article; pos devient énergisé   }       Si (xValue (en) > 500){ Si Joy a raison     Article = ++Article;  pos nous avons augmenté   }   Si (Article < 0){ Donc, ce pos ne devient pas négatif     Article = 0;   }   Si (Article > 180){ Donc pos ne va pas plus de 180     Article = 180;   }   Retard(20);   servo1.Écrire(Article); Déplacer le servo pour positionner "pos"
}    

Après avoir téléchargé le code, nous pouvons maintenant faire pivoter le servo dans la direction souhaitée à l’aide du joystick.

 

 

Nous espérons que notre blog d’aujourd’hui vous a inspiré et nous nous réjouissons de vos commentaires. Jusqu’au prochain post de AZ-Delivery, votre expert en microélectronique!

Pour arduinoProjets pour les débutants

2 commentaires

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 ?

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi