Étape 18 : Code : planification
Définition de mouvement dans des Positions de Servo
Il est facile de décrire comment les bras ont besoin d’aller faire le zombot bouger vers l’avant, mais comment convertir que dans les mouvements du servo ?
Tout d’abord, permet de décrire comment nous déplacer vers l’avant si nous gisaient sur le sol et ne puisse utilise nos bras.
- Levez les bras au-dessus du sol
- Étendre les bras le plus en avant que nous le pouvons
- Bras inférieur et de saisir le sol
- Nous tirez vers l’avant (bras de traction arrière)
Nous pourrions faire cela avec les deux bras synchronisés (comme la nage papillon) ou avec l’autres bras (comme la natation crawl).
Je vais travailler l’exemple avec l’option d’analyse, vous pouvez facilement utiliser la même procédure pour les modèles de generateother du mouvement.
Bras gauche | Bras droit |
Surélevé, tiré de retour | Abaissé, prolongée vers l’avant |
Soulevées, prolongée vers l’avant | Abaissé, tiré vers l’arrière |
Abaissé, prolongée vers l’avant | Surélevé, tiré de retour |
Peut être tiré vers le bas vers l’arrière | Soulevées, prolongée vers l’avant |
La façon la plus logique je pouvais penser à mettre en œuvre ce code consistait à définir une série de « frames » qui contient la position de tous les servos à un moment donné. Une boucle à travers les images à une fréquence donnée va nous donner une animation de mouvement.
Ici, j’envisage élever/extension comme « maximum » et abaissement/rétraction comme « minimum ».
Cadre | Épaule gauche | Coude à gauche | Épaule droite | Coude droit |
1 | Max | Min | Min | Max |
2 | Max | Max | Min | Min |
3 | Min | Max | Max | Min |
4 | Min | Min | Max | Max |
Déterminer les limites du Servo
Avant que nous pouvons écrire du code pour utiliser notre fantaisie nouvelle animation image par image, nous devons déterminer le minimum et maximum pour chaque servo. Il existe deux facteurs importants à considérer
- Il pourrait y avoir une obstruction physique. Si votre assemblage mécanique ne permet pas votre servo de tourner autant que vos demandes de logiciels, cela pourrait endommager le servo.
- Nous avons besoin de traduire « min » et « max » en millisecondes, et ceux-ci sont opposées de chaque côté du corps. Par exemple : le servo d’épaule (en regardant de face) sur le côté droit doit tourner vers la droite pour lever le bras, mais sur la main gauche dans le sens horaire côté abaissera le bras.
J’ai écrit le suivant tout petit morceau de code pour déterminer l’amplitude de mouvement d’un servo. Simplement, transférez-le sur votre arduino et branchez un servo à la broche spécifiée (broche 3 dans l’exemple).
- Utiliser un terminal série (je préfère le mastic) pour vous connecter à l’Arduino (9600 bauds).
- Appuyez sur q pour envoyer le servo à min (1000 microsecondes)
- Appuyez sur « w » pour centrer le servo
- Appuyez sur « e » pour envoyer le servo à max (2000 microsecondes)
- Utilisation ' o ' et « p » incrememnt ou décrémenter la position actuelle de 5 microsecondes
- Prenez note du nombre de microsecondes correspondent aux rétracté/abaissé
- Notez combien microsecondes correspondent aux étendues/soulevées
Une fois que vous avez déterminé combien microsecondes correspondent à rétracté/abaissé et élargi/soulevées, faites de même pour tous les autres servos.