Étape 9: Accélérateur de la voiture et direction
manette des gaz et la direction sur la voiture sont "analogique", ce qui signifie qu’à l’aide de la manette XBox, la voiture peut se déplacer à une gamme de vitesses et tourner à une gamme d’angles. droite déclencheur est utilisé pour les attaquants, la gâchette gauche est utilisée pour le retour et le stick analogique gauche est utilisé pour la direction (ce sont les contrôles standards pour XBox, jeux de course). Afin de transmettre ces entrées "analogiques" de la manette XBox pour la voiture, les données se déplace à travers les programmes comme suit :
Throttle données - c# :
1. l’état du contrôleur de XBox est lu. Valeurs de déclenchement gauche/droite sont enregistrées sous les flotteurs
2. une comparaison est faite entre les valeurs de deux déclenchement. La plus grande valeur est utilisée et la plus petite valeur est ignoré (par exemple, si les deux avant et en arrière sont pressées, la plus grande valeur « gagne »)
3. la valeur est multipliée par 100 et manipulée afin que la vitesse de 0 est la valeur 500. Cela signifie que la vitesse maximale inverse est équivalente à la valeur « 400 », et pleine vitesse vers l’avant est la valeur « 600 ». Cela a été fait pour éviter de devoir utiliser des nombres négatifs, et le choix de 500 comme le point central était tout à fait arbitraire.
4. la nouvelle valeur de la manette des gaz est convertie en une chaîne (comme les 3 chiffres).
5. la chaîne de commande des gaz est ajoutée à la chaîne de sortie c# et envoyée à l’Arduino lorsque requis.
Throttle données - Arduino :
1. l’Arduino reçoit la chaîne complète et enregistre les caractères de la manette des gaz en un tableau de caractères.
2. le tableau de caractères de commande des gaz est converti en int
3. en utilisant la fonction « carte », la valeur d’accélérateur est convertie en une valeur compatible pour l’ESC. L’ESC accepte les signaux de commande même comme servo-moteurs, donc le type de Servo est utilisé pour écrire une valeur de « degré » dans l’axe de l’ESC. L’ESC a été calibré tel que 0 degrés est pleine vitesse inversée et 180 degrés est pleine vitesse vers l’avant. 90 degrés est vitesse 0.
4. la valeur est écrite à l’ESC.
Dans le code c#, vous verrez également quelques fonctions supplémentaires qui manipulent la manette des gaz. Ceux-ci ont été inclus pour modifier les caractéristiques de conduite, mais je n’ai pas trouvé leur ça utile. Une de ces fonctions implique un mode de l’accélérateur linéaire/quadratique/coupé en cubes. Mode linéaire fournit une relation 1:1 entre la position de la gâchette et la vitesse. Ainsi, en appuyant sur les résultats à mi-chemin de détente vers l’avant dans la voiture se déplaçant à la moitié de sa vitesse max. Mode carré implique la quadrature de la valeur brute, donc en appuyant sur le déclencheur à mi-course entraîne la voiture se déplaçant à un quart de sa vitesse max. Cela offre plus de contrôle à basse vitesse, et moins à des vitesses supérieures. Ces modes de gaz peuvent être sélectionnés à l’aide la goutte déroulante sur le programme c# GUI (à l’aide d’une souris).
L’autre fonction implique la possibilité d’activer/désactiver le « mode lent », en appuyant sur le bouton B sur la manette XBox. Mode "escargot" limite la vitesse de pointe de la voiture à la moitié de sa vitesse max. Ainsi, vous pouvez utiliser la gamme complète des déclencheurs pour contrôler les basses vitesses. Ce mode en fait est très pratique parfois - c’est génial pour un contrôle précis à des vitesses lentes.
Direction est assez similaire à la manette des gaz. La façon dont les données se déplace est :
Direction données - c# :
1. l’état du contrôleur de XBox est lu. La valeur d’axe x stick analogique gauche est enregistrée sous un flotteur
2. la valeur est multipliée par 100, et 500 est ajouté. Cela signifie que la gauche complet équivaut à la valeur « 400 », et est de plein droit la valeur « 600 ». Comme la manette des gaz, cela a été fait pour éviter de devoir utiliser des nombres négatifs, et le choix de 500 comme le point central était tout à fait arbitraire.
3. la nouvelle valeur de direction est convertie en une chaîne (comme les 3 chiffres).
4. la chaîne de direction est ajoutée à la chaîne de sortie c# et envoyée à l’Arduino lorsque requis.
Direction données - Arduino :
1. l’Arduino reçoit la chaîne complète et enregistre les personnages de direction dans un tableau de caractères.
2. la direction tableau de caractères est converti en int
3. en utilisant la fonction « carte », la valeur de direction est convertie en une valeur compatible pour le servo de direction. Notez que le servo de direction n’a pas toute la gamme de 0 à 180. Sur ma voiture, complet gauche est 133 degrés et de plein droit est de 60 degrés, avec une valeur de centre de 96 degrés
4. la valeur est écrite dans le servo de direction.
Comme la manette des gaz, la direction peut être configurée en mode linéaire/quadratique/coupé en cubes dans le programme c#. J’ai trouvé que pour ma voiture, c’était un peu inutile, compte tenu de la gamme relativement faible dans l’angle de braquage. Puisque les roues ne tournent bien, il est facile de les amener à l’angle de droite en mode linéaire.
Note à propos des bibliothèques de Arduino Servo :
Quand je développais l’esquisse de l’Arduino, j’ai utilisé la bibliothèque Arduino Servo standard pour l’ESC et le servo de direction. Une fois que j’ai présenté le bâton de NeoPixel, la bibliothèque de Servo ne pouvait pas être utilisée plus (voir https://learn.adafruit.com/neopixels-and-servos). La bibliothèque de TiCoServo fonctionne aussi bien dans ma voiture RC, mais il y a des limites - seulement deux servos peuvent être utilisés simultanément, seul un petit ensemble de broches peut être utilisé (même sur un Arduino Mega), et seulement les paires de ces broches peuvent travailler ensemble. Le dernier d'entre eux fut compris par essais et erreurs...