Étape 3: Arduino et programmation PC
Sur l’Arduino, il nous faudra une interface série qui permet à l’ordinateur commander les moteurs. Nous aurons également besoin d’un système d’entraînement servo PWM à envoyer les signaux corrects pour les moteurs de Vex et assurez-vous qu’ils vont dans le sens correct lorsqu’il est administré les bonnes valeurs. J’ai aussi ajouté quelques simple LED clignotant, principalement pour l’indication de l’État mais aussi parce qu’il a l’air cool.
Sur le PC, nous devrons ouvrir le port série et envoyer des trames de données qui comprendra le programme Arduino. Le PC doit également venir avec des valeurs de moteurs. Un moyen facile de le faire est d’utiliser un joystick ou une manette de jeu USB, j’utilise un contrôleur Xbox 360. Une autre option consiste à utiliser un ordinateur en réseau (un netbook ou un mini petit conseil ITX) sur le robot lui-même pour conduire sans fil. Avec un netbook, vous pouvez même utiliser la webcam embarquée streamer retour un flux vidéo et de conduire votre robot à distance. J’ai utilisé le système de douilles de Linux pour faire le réseau programmation pour ma configuration. Un programme (le « serveur du joystick") s’exécute sur un ordinateur distinct qui a un contrôleur branché et un autre programme (le « client ») est exécuté sur le netbook connecté à l’Arduino. Il relie deux ordinateurs et envoie des informations de la manette de jeu pour le netbook, qui puis envoie des paquets de série à l’Arduino qui anime le robot.
Pour vous connecter à l’Arduino à l’aide d’un PC sous Linux (en C++), vous devez d’abord ouvrir le port série à la vitesse de transmission correcte et ensuite envoyer les valeurs à l’aide d’un protocole que vous avez également utilisé sur le code de l’Arduino. Le format de mes série est simple et efficace. J’utilise 4 octets par « image » pour envoyer les deux vitesses du moteur (chacun est un seul octet). Les premiers et derniers octets sont codées en dur les valeurs qui sont utilisées pour éviter l’Arduino envoie l’octet erroné au code PWM et causant les moteurs à devenir fou. C’est le but principal de la LED RGB, il clignote en rouge lorsque la série était incomplète. Les 4 octets sont comme suit :
255 (octets codés en dur « Démarrer »),,, 200 (octets codés en dur « fin »)
Pour garantir une réception fiable des données, assurez-vous que vous avez mis suffisamment retard entre les boucles du programme. Si vous exécutez votre code PC trop vite, il inondera le port et l’Arduino peut-être commencer à faire tomber ou même mal lire des octets. Même si elle ne chute pas informations il peut également déborder tampon port série de l’Arduino.
Pour les moteurs de Vex, j’ai utilisé la bibliothèque Arduino Servo. Étant donné que Vex moteurs sont des moteurs à rotation continue juste, ils utilisent la même exacte de signalisation qui utilisent des servos. Cependant, au lieu de 90 degrés étant le point central, c’est le point de stop où le moteur ne tourne pas. Abaisser le « angle » fait le moteur commence à tourner dans un sens, tout en soulevant l’angle permet de tourner dans l’autre sens. Le plus loin loin du point central, que vous êtes, plus vite le moteur tournera. Bien qu’il ne va pas casser quoi que ce soit, si vous envoyez des valeurs supérieures à 180 degrés pour les moteurs, je conseillerais limitant les valeurs de 0 à 180 degrés (qui dans ce cas sont des augmentations de vitesse). Parce que je voulais plus de contrôle et moins de contrôle robot volant, j’ai ajouté un logiciel « vitesse limite » à mon programme qui ne permet pas la vitesse pour augmenter au-dessus de 30 "degrés" dans les deux sens (se situe entre 90 +/-30). J’ai l’intention sur l’ajout d’une commande de port série qui change la limite de vitesse, afin que l’ordinateur peut supprimer la limite à la volée si vous voulez aller rapide (j’ai testé dans de petites pièces donc je ne veux pas à accélérer et à planter dans le mur, surtout avec un netbook sur elle).
Pour plus d’informations, téléchargez le code joint à la fin de ce Instructable.