Table des matières:

Plateforme robotique Arduino simple ! : 5 étapes
Plateforme robotique Arduino simple ! : 5 étapes

Vidéo: Plateforme robotique Arduino simple ! : 5 étapes

Vidéo: Plateforme robotique Arduino simple ! : 5 étapes
Vidéo: Comment fabriquer un robot - part 1 | Arduino #9 2024, Novembre
Anonim
Plateforme robotique Arduino simple !
Plateforme robotique Arduino simple !
Plateforme robotique Arduino simple !
Plateforme robotique Arduino simple !

Je viens de recevoir un Arduino après avoir joué avec des microcontrôleurs AVR lors des réunions d'équipe de robotique. J'ai aimé l'idée d'une puce programmable vraiment bon marché qui pourrait fonctionner à peu près n'importe quoi à partir d'une simple interface informatique, alors j'ai eu un Arduino car il a déjà une belle carte et une interface USB. Pour mon premier projet Arduino, j'ai déniché un kit Vex Robotics que j'avais traîné lors de compétitions que j'ai faites au lycée. J'avais toujours voulu créer une plate-forme robotique pilotée par ordinateur, mais le microcontrôleur Vex nécessite un câble de programmation que je n'avais pas. J'ai décidé d'utiliser mon nouvel Arduino (et peut-être plus tard une puce AVR nue si je le fais fonctionner) pour piloter la plate-forme. Finalement, je veux obtenir un netbook et ensuite je peux conduire le robot en utilisant le WiFi et voir sa webcam à distance.

J'ai réussi à obtenir un protocole série décent et un exemple simple qui pilote le robot à l'aide d'une manette Xbox 360 connectée à un PC Linux.

Étape 1: ce qu'il peut faire…

Ce qu'il peut faire…
Ce qu'il peut faire…
Ce qu'il peut faire…
Ce qu'il peut faire…

L'Arduino est une plate-forme très polyvalente. Mon objectif de base était simplement d'amener l'Arduino à interfacer deux moteurs Vex avec le PC, mais j'avais beaucoup de broches d'entrée/sortie restantes et j'ai décidé d'ajouter des éléments supplémentaires. En ce moment, j'ai une LED RVB pour l'état du port série (vert si les paquets sont bons, rouge s'ils sont mauvais) et un ventilateur PC piloté par un transistor. Je peux également ajouter des commutateurs et des capteurs, mais je n'en ai encore mis aucun. La meilleure chose à ce sujet est que vous pouvez ajouter ce que vous voulez à un robot Arduino. Il suffit d'un peu de code d'interface pour contrôler des éléments supplémentaires et obtenir des entrées sur l'ordinateur.

Étape 2: Pièces

les pièces
les pièces
les pièces
les pièces
les pièces
les pièces

Pour mon robot, j'ai utilisé quelques pièces différentes. La plupart des pièces provenaient de vieux trucs que j'avais dans mon sous-sol.1) Arduino Duemilanove avec ATMega328C'est le plus récent Arduino, et depuis que je l'ai reçu il y a quelques jours, j'ai le plus récent. Cependant, le code est suffisamment petit pour pouvoir s'adapter facilement à n'importe quel Arduino. Il pourrait probablement même tenir sur un ATTiny (si je construis un contrôleur de robot en dehors de l'Arduino, l'ATTiny 2313 semble être un bon choix, il est plus petit et moins cher mais a toujours beaucoup de sorties et une interface série UART)2) Vex Robotics PlatformI a obtenu un kit Vex il y a quelques années pour construire un robot radiocommandé pour ramasser des trucs pour une compétition de lycée. J'ai construit la base de base du "bot carré" qui a 4 roues entraînées par deux moteurs. Vous pouvez remplacer d'autres bases de robots si vous souhaitez piloter une autre plate-forme. La chose importante à noter est que les moteurs Vex sont essentiellement des servos à rotation continue, ils utilisent une modulation de largeur d'impulsion pour signaler à quelle vitesse et dans quelle direction tourner. Les moteurs Vex sont sympas car ils ont une plage de tensions de fonctionnement élevée, quelque part entre 5 et 15 volts. J'utilise du 12V car j'avais une batterie 12V. Pour la plupart des servomoteurs de loisir standard, vous aurez besoin d'une tension inférieure (souvent 6 volts).3) BatterieUn robot est inutile sans alimentation. Pour les tests, j'utilise un adaptateur mural standard 9V de RadioShack, mais pour un fonctionnement sans fil, j'ai trouvé une batterie NiMH 12V dans un ancien ordinateur portable. Bien qu'il ne tienne pas assez de charge pour faire fonctionner l'ordinateur portable, il pilote très bien mon robot Vex. Il peut également alimenter l'Arduino en utilisant la broche d'entrée Vin sur le connecteur d'alimentation, l'Arduino régulera le 12V jusqu'à 5 et le sortira même de la broche de sortie 5V sur le connecteur d'alimentation.4) Planche à pain de baseJ'utilise actuellement une planche à pain pour câblez tout. Finalement, j'obtiendrai une meilleure carte de prototypage et des soudures sur des connexions plus permanentes, mais pour l'instant, la maquette permet de changer facilement les choses. Ma planche à pain est la "planche à pain de base" de SparkFun, juste une planche à pain sur une plaque métallique avec 3 bornes.5) Convertisseur RS232-TTL basé sur MAX232Si vous voulez piloter votre robot en utilisant une connexion de port série RS-232 (par opposition à la en USB), vous pouvez utiliser un convertisseur RS232-TTL. J'utilise un MAX232 car j'en avais quelques-uns qui traînaient et je l'ai soudé sur un petit morceau de carte de prototypage avec les condensateurs nécessaires. J'ai besoin de RS-232 car mon ancien ordinateur portable n'a qu'un seul port USB et je l'utilise comme contrôleur de jeu pour piloter le robot.6) Pièces supplémentaires au choixPour un débogage facile du protocole série, j'y ai mis une LED RVB (j'en ai eu un avec ma commande Arduino car ils avaient l'air cool). Le voyant clignote en rouge, vert, bleu en séquence lorsque l'Arduino démarre pour indiquer que le robot a redémarré, puis s'allume en vert lorsqu'un paquet de moteur a été reçu, en bleu lorsqu'un paquet de ventilateur a été reçu et en rouge lorsqu'un mauvais ou inconnu paquet a été reçu. Pour piloter le ventilateur, j'ai utilisé un transistor NPN standard (les mêmes que ceux que j'ai démontrés dans mon dernier Instructable) et une résistance entre le transistor et l'Arduino (le transistor consommait trop de courant et chauffait l'Arduino, j'ai donc mis un limiteur résistance pour l'arrêter).

Étape 3: Programmation Arduino et PC

Programmation Arduino et PC
Programmation Arduino et PC

Pour programmer l'Arduino, vous aurez évidemment besoin du logiciel Arduino et d'un câble USB. Vous pouvez également programmer l'Arduino à l'aide d'un port série et d'un convertisseur de niveau TTL si votre PC dispose d'un port série. Notez que l'interface série USB ne communiquera pas avec le processeur ATMega de l'Arduino s'il y a un convertisseur de niveau connecté aux broches série de l'Arduino (broches 0 et 1), déconnectez-le donc avant d'utiliser l'USB. Sur l'Arduino, nous aurons besoin d'une interface série qui permet le PC pour contrôler les moteurs. Nous aurons également besoin d'un système d'asservissement PWM pour envoyer les bons signaux aux moteurs Vex et s'assurer qu'ils vont dans les bonnes directions lorsqu'on leur donne les bonnes valeurs. J'ai également ajouté un simple clignotement de LED, principalement pour l'indication d'état mais aussi parce que cela a l'air cool. Sur le PC, nous devrons ouvrir le port série et envoyer des trames de données que le programme Arduino comprendra. Le PC doit également fournir des valeurs de moteur. Un moyen simple de le faire est d'utiliser une manette de jeu USB ou un joystick, j'utilise une manette Xbox 360. Une autre option consiste à utiliser un ordinateur en réseau (soit un netbook, soit une petite carte mini ITX) sur le robot lui-même pour conduire sans fil. Avec un netbook, vous pouvez même utiliser la webcam embarquée pour diffuser un flux vidéo et piloter votre robot à distance. J'ai utilisé le système de sockets Linux pour faire de la programmation réseau pour ma configuration. Un programme (le "serveur joystick") est exécuté sur un PC séparé sur lequel est branché un contrôleur, et un autre programme (le "client") est exécuté sur le netbook connecté à l'Arduino. Cela relie les deux ordinateurs et envoie les informations du joystick au netbook, qui envoie ensuite des paquets série à l'Arduino qui pilote le robot. Pour vous connecter à l'Arduino à l'aide d'un PC Linux (en C++), vous devez d'abord ouvrir le port série au bon débit en bauds, puis envoyez les valeurs à l'aide d'un protocole que vous avez également utilisé sur le code de l'Arduino. Mon format série est simple et efficace. J'utilise 4 octets par "frame" pour envoyer les deux vitesses du moteur (chacun est un seul octet). Les premier et dernier octets sont des valeurs codées en dur qui sont utilisées pour empêcher l'Arduino d'envoyer le mauvais octet au code PWM et de rendre les moteurs fous. C'est le but principal de la LED RVB, elle clignote en rouge lorsque la trame série est incomplète. Les 4 octets sont les suivants: 255 (octet "début" codé en dur),,, 200 (octet "fin" codé en dur) Si vous exécutez votre code PC trop rapidement, il inondera le port et l'Arduino peut commencer à perdre ou même à mal lire des octets. Même s'il ne laisse pas tomber d'informations, il peut également déborder le tampon du port série de l'Arduino. Pour les moteurs Vex, j'ai utilisé la bibliothèque Arduino Servo. Étant donné que les moteurs Vex ne sont que des moteurs à rotation continue, ils utilisent exactement la même signalisation que les servos. Cependant, au lieu de 90 degrés étant le point central, c'est le point d'arrêt où le moteur ne tourne pas. L'abaissement de "l'angle" fait tourner le moteur dans un sens, tandis que l'augmentation de l'angle le fait tourner dans l'autre sens. Plus vous vous éloignez du point central, plus le moteur tournera vite. Bien que cela ne casse rien si vous envoyez des valeurs supérieures à 180 degrés aux moteurs, je conseillerais de limiter les valeurs de 0 à 180 degrés (qui dans ce cas sont des incréments de vitesse). Parce que je voulais plus de contrôle et moins de conduite de robot hors de contrôle, j'ai ajouté une "limite de vitesse" logicielle à mon programme qui ne permet pas à la vitesse d'augmenter au-dessus de 30 "degrés" dans les deux sens (la plage est de 90 +/- 30). Je prévois d'ajouter une commande de port série qui modifie la limite de vitesse, afin que l'ordinateur puisse supprimer la limite à la volée si vous voulez aller vite (j'ai testé dans de petites pièces donc je ne veux pas que ça accélère et s'écraser contre le mur, surtout avec un netbook dessus). Pour plus d'informations, téléchargez le code ci-joint à la fin de ce Instructable.

Étape 4: Ajoutez un netbook pour explorer des mondes inconnus à distance

Ajoutez un netbook pour explorer des mondes inconnus à distance
Ajoutez un netbook pour explorer des mondes inconnus à distance
Ajoutez un netbook pour explorer des mondes inconnus à distance
Ajoutez un netbook pour explorer des mondes inconnus à distance

Avec un PC complet à bord de votre robot Arduino, vous pouvez conduire votre robot aussi loin que votre WiFi peut atteindre sans aucun cordon pour limiter le robot à une zone. Un bon candidat pour ce travail est un netbook, car les netbooks sont minuscules, légers, ont une batterie intégrée, ont le WiFi et la plupart ont même des webcams intégrées qui peuvent être utilisées pour diffuser la vue du robot dans un endroit sûr où vous peut le contrôler. De plus, si votre netbook est équipé du service haut débit mobile, votre portée est pratiquement illimitée. Avec suffisamment de batteries, vous pouvez conduire votre robot jusqu'à la pizzeria locale et passer une commande via la webcam (non recommandé, les robots ne sont généralement pas autorisés dans les pizzerias, même s'il s'agit de personnes qui essaieront probablement de voler le robot et peut-être même la pizza). Cela peut également être un bon moyen d'explorer les profondeurs sombres de votre sous-sol dans le confort de votre chaise de bureau, bien que l'ajout de quelques phares puisse être très utile dans ce cas.

Il existe de nombreuses façons de faire fonctionner cela, beaucoup sont probablement beaucoup plus faciles que la mienne, bien que je ne sois pas familiarisé avec le traitement ou les langages basés sur des scripts, j'ai donc choisi d'utiliser Linux et C++ pour créer un lien de contrôle sans fil entre ma station de base (aka vieux ThinkPad) et mon nouveau netbook Lenovo IdeaPad connecté à la base du lecteur Arduino. Les deux PC fonctionnent sous Ubuntu. Mon ThinkPad est branché sur le réseau local de mon école et mon IdeaPad est connecté à mon point d'accès WiFi qui est également connecté au réseau local de l'école (je n'ai pas pu obtenir de flux vidéo fiable depuis le WiFi de l'école car tout le monde l'utilise, j'ai donc défini mon propre routeur pour fournir une bonne connexion). Une bonne connexion est particulièrement importante dans mon cas car je n'ai implémenté aucune vérification d'erreur ni aucun délai d'attente. Si la connexion réseau tombe soudainement, le robot continue jusqu'à ce qu'il s'écrase sur quelque chose ou que je le lance et l'arrête. C'est le principal facteur derrière ma décision de ralentir la transmission à la fois en réduisant les moteurs et en mettant en œuvre une limite de vitesse logicielle.

Étape 5: Obtenez un flux vidéo

Une fois que votre explorateur robotique peut conduire sans fil, vous voudrez probablement avoir un flux vidéo du netbook afin que vous puissiez savoir où se trouve votre robot. Si vous utilisez Ubuntu (ou même si vous ne l'êtes pas !), je vous recommande d'utiliser VLC Media Player pour diffuser. Si vous ne l'avez pas installé, vous manquez vraiment quelque chose, alors installez-le à l'aide de la commande "sudo apt-get install vlc", recherchez VLC dans le centre logiciel Ubuntu (9.10 uniquement) ou téléchargez le programme d'installation sur videolan. org si vous êtes sous Windows. Vous aurez besoin de VLC fonctionnant sur les deux PC. VLC est capable de diffuser ainsi que de lire des flux sur un réseau. Sur le netbook (robot PC), assurez-vous d'abord que votre webcam (intégrée ou connectée par USB) fonctionne en cliquant sur Ouvrir le périphérique de capture et en essayant Vidéo pour Linux 2 (certains appareils plus anciens peuvent avoir besoin de Vidéo pour Linux plutôt que de la nouvelle version 2). Vous devriez voir la vue de la caméra sur l'écran du netbook. Pour le diffuser, sélectionnez Streaming dans le menu Fichier, puis choisissez l'onglet Périphérique de capture en haut de la fenêtre qui apparaît. N'oubliez pas qu'Ubuntu (et de nombreuses autres distributions Linux) vous permet de maintenir la touche Alt enfoncée pour cliquer et faire glisser des fenêtres trop grandes pour votre écran (particulièrement utile sur les netbooks plus anciens, bien que même mon IdeaPad ait une résolution étrange de 1024x576 sans raison apparente). Pour réduire le délai, cliquez sur "Afficher plus d'options" et réduisez la valeur de mise en cache. Le montant que vous pouvez baisser dépend parfois de l'appareil, il devient instable si vous le baissez trop. À 300 ms, vous pouvez obtenir un léger retard mais ce n'est pas trop grave.

Ensuite, cliquez sur Stream pour passer au menu suivant. Cliquez sur Suivant, puis sélectionnez et ajoutez HTTP comme nouvelle destination. Configurez maintenant le transcodage pour réduire la taille du flux. J'ai créé un profil personnalisé qui utilise M-JPEG à 60kb/s et 8fps. En effet, l'utilisation d'un codec avancé comme MPEG ou Theora consomme énormément de temps CPU sur le processeur Atom d'un netbook, ce qui peut entraîner l'arrêt de votre flux vidéo sans raison apparente. MJPEG est un codec simple et facile à utiliser à faible débit. Après avoir démarré votre flux, ouvrez VLC sur votre autre PC, ouvrez un flux réseau, sélectionnez HTTP, puis tapez l'adresse IP de votre netbook (locale ou Internet selon la façon dont vous vous connectez) suivie de ":8080". Vous devez spécifier le port pour une raison étrange, sinon cela vous donnera des erreurs. Si vous avez une connexion correcte, vous devriez voir le flux de votre webcam sur votre autre PC, mais il y aura un léger retard (environ une seconde). Je ne sais pas exactement pourquoi ce retard se produit, mais je ne sais pas comment m'en débarrasser. Ouvrez maintenant l'application de contrôle et commencez à conduire votre robot netbook. Ayez une idée du fonctionnement du retard lorsque vous conduisez afin de ne rien percuter. Si cela fonctionne, votre robot netbook est terminé.

Conseillé: