Table des matières:

Rover à commande gestuelle à l'aide d'un accéléromètre et d'une paire émetteur-récepteur RF : 4 étapes
Rover à commande gestuelle à l'aide d'un accéléromètre et d'une paire émetteur-récepteur RF : 4 étapes

Vidéo: Rover à commande gestuelle à l'aide d'un accéléromètre et d'une paire émetteur-récepteur RF : 4 étapes

Vidéo: Rover à commande gestuelle à l'aide d'un accéléromètre et d'une paire émetteur-récepteur RF : 4 étapes
Vidéo: Raspberry Pi Robot: Smart phone Accelerometer control (EarthRover #5) 2024, Juillet
Anonim
Rover à commande gestuelle utilisant un accéléromètre et une paire émetteur-récepteur RF
Rover à commande gestuelle utilisant un accéléromètre et une paire émetteur-récepteur RF

Salut, Vous avez toujours souhaité construire un rover que vous pourriez diriger par de simples gestes de la main, mais ne pourriez jamais trouver le courage de vous aventurer dans les subtilités du traitement d'images et de l'interfaçage d'une webcam avec votre microcontrôleur, sans parler de la bataille acharnée pour surmonter la faible portée et la ligne de conduite. problèmes de vue ? Eh bien, n'ayez crainte… car il existe une solution de facilité ! Voici, alors que je vous présente le puissant ACCÉLÉROMÈTRE ! *ba dum tsss*

Un accéléromètre est un appareil vraiment cool qui mesure l'accélération gravitationnelle le long d'un axe linéaire. Il représente cela comme un niveau de tension fluctuant entre la terre et la tension d'alimentation, que notre microcontrôleur lit comme une valeur analogique. Si nous appliquons un peu notre cerveau (juste un peu de maths et un peu de physique newtonienne), non seulement nous pouvons l'utiliser pour mesurer le mouvement linéaire le long d'un axe, mais nous pouvons également l'utiliser pour déterminer l'angle d'inclinaison et détecter les vibrations. Ne vous inquiétez pas ! Nous n'aurons pas besoin des mathématiques ou de la physique; nous allons juste avoir affaire à des valeurs brutes que l'accéléromètre crache. En fait, vous n'avez pas vraiment besoin de vous préoccuper des détails techniques d'un accéléromètre pour ce projet. Je vais juste aborder quelques détails et n'élaborer que ce dont vous avez besoin pour comprendre la situation dans son ensemble. Cependant, si vous êtes intéressé à étudier sa mécanique interne, jetez un œil ici.

Il suffit de garder cela à l'esprit pour l'instant: un accéléromètre est le gadget (souvent couplé à un gyroscope) qui ouvre les portes de tous ces jeux de capteurs de mouvement auxquels nous jouons sur nos smartphones; un jeu de course automobile par exemple, où nous dirigeons le véhicule simplement en inclinant nos appareils dans les deux sens. Et, nous pouvons imiter cet effet même en collant un accéléromètre (avec quelques auxiliaires, bien sûr) sur un gant. Nous enfilons simplement nos gants magiques et inclinons nos mains vers la gauche ou la droite, en avant ou en arrière et voyons nos rovers danser sur nos airs. Tout ce que nous devons faire ici est de traduire les lectures de l'accéléromètre en signaux numériques que les moteurs du rover peuvent interpréter et concevoir un mécanisme pour transmettre ces signaux au rover. Pour ce faire, nous faisons appel au bon vieil Arduino et à ses collaborateurs pour l'expérience d'aujourd'hui, une paire émetteur-récepteur RF fonctionnant à 434 MHz, offrant ainsi une portée d'environ 100 à 150 m dans un espace ouvert, ce qui nous évite également des lignes de problèmes de vue.

Un hack assez astucieux, hein? Plongeons dans…

Étape 1: Rassemblez vos fournitures

Rassemblez vos fournitures
Rassemblez vos fournitures
Rassemblez vos fournitures
Rassemblez vos fournitures
Rassemblez vos fournitures
Rassemblez vos fournitures
Rassemblez vos fournitures
Rassemblez vos fournitures
• Arduino Nano x1
• Accéléromètre (ADXL335) x1
• Moteur 5 V CC + Roues x2 chacun
• Roue bovine* x1
• Pilote de moteur L293D + prise IC 16 broches x1 chacun
• Émetteur RF 434 MHz x1
• Récepteur RF 434 MHz x1
• CI d'encodeur HT-12E + prise CI 18 broches x1 chacun
• IC décodeur HT-12D + prise IC 18 broches x1 chacun
• Régulateur de tension LM7805 x1
• Interrupteur à bouton-poussoir x2
• LED rouge + résistance 330O x2 chacun
• LED jaune + résistance 330O x1 chacun
• LED verte + résistance 330O (en option) x4 chacun
• Résistances 51kO et 1MO x1 chacun
• Condensateurs radiaux 10µF x2
Batteries, connecteurs de batterie, câble USB, fils de raccordement, embases femelles, bornes à vis à 2 broches, PCB, châssis et vos accessoires de soudage habituels

Si vous vous demandez pourquoi nous utilisons une roue bovine, le fait est que les modules émetteur et récepteur RF n'ont que 4 broches de données, ce qui signifie que nous ne pouvons piloter que 2 moteurs et donc l'utilisation d'une roue bovine pour soutenir la structure. Cependant, si vous pensez que votre rover aurait l'air un peu plus cool avec quatre roues, ne vous inquiétez pas, il y a une solution ! Dans ce cas, rayez simplement la roue bovine de la liste et ajoutez une autre paire de moteurs 5 V CC, accompagnés d'une roue chacun, et recherchez le simple hack discuté vers la fin de l'étape 3.

Enfin, pour les courageux, il y a place pour une autre légère modification de conception, qui implique en quelque sorte la conception de votre propre Arduino. Rendez-vous dans la section bonus à l'étape suivante et voyez par vous-même. Vous aurez également besoin de quelques fournitures supplémentaires: un ATmega328P, une prise IC 28 broches, un oscillateur à cristal 16Mhz, deux capuchons en céramique 22pF, un autre régulateur de tension 7805, deux autres capuchons radiaux 10μF et des résistances 10kΩ, 680Ω, 330Ω, et oui, moins l'Arduino !

Étape 2: câbler l'émetteur

Câbler l'émetteur
Câbler l'émetteur
Câbler l'émetteur
Câbler l'émetteur
Câbler l'émetteur
Câbler l'émetteur
Câbler l'émetteur
Câbler l'émetteur

Nous allons décomposer le projet en deux éléments: les circuits émetteur et récepteur. L'émetteur se compose d'un accéléromètre, d'un Arduino et d'un module émetteur RF couplé à un circuit intégré d'encodeur HT-12E, le tout câblé selon le schéma ci-joint.

L'accéléromètre, comme présenté précédemment, sert à reconnaître nos gestes de la main. Nous allons utiliser un accéléromètre à trois axes (essentiellement trois accéléromètres à un axe en un) pour répondre à nos besoins. Il peut être utilisé pour mesurer l'accélération dans les trois dimensions, et comme vous l'avez peut-être deviné, il donne non pas une, mais un ensemble de trois valeurs analogiques relatives à ses trois axes (x, y et z). En fait, nous n'avons besoin que de l'accélération le long des axes x et y puisque nous ne pouvons conduire le rover que dans quatre directions: vers l'avant ou vers l'arrière (c'est-à-dire le long de l'axe y) et à gauche ou à droite (c'est-à-dire le long de l'axe x). Nous aurions eu besoin de l'axe z si nous avions construit un drone, afin que nous puissions également contrôler sa montée ou sa descente au moyen de gestes. Dans tous les cas, ces valeurs analogiques que fournit l'accéléromètre doivent être converties en signaux numériques afin de pouvoir piloter les moteurs. Ceci est pris en charge par l'Arduino qui transmet également ces signaux, lors de la conversion, au rover via le module émetteur RF.

L'émetteur RF n'a qu'une tâche: transmettre les données « série » disponibles à la broche 3 vers l'antenne à la broche 1. Cela préconise l'utilisation du HT-12E, un encodeur de données parallèle-série 12 bits, qui collecte jusqu'à 4 bits de données parallèles de l'Arduino sur les lignes AD8 à AD11, nous permettant ainsi de faire de la place pour jusqu'à 24 = 16 combinaisons d'E/S différentes par opposition à la seule broche de données sur l'émetteur RF. Les 8 bits restants, tirés des lignes A0 à A7 sur le codeur, constituent l'octet d'adresse, ce qui facilite l'appariement de l'émetteur RF avec un récepteur RF correspondant. Les 12 bits sont ensuite rassemblés et sérialisés, et transmis à la broche de données de l'émetteur RF, qui à son tour, ASK module les données sur une onde porteuse de 434 MHz et les envoie via l'antenne à la broche 1.

Conceptuellement, tout récepteur RF écoutant à 434Mhz devrait pouvoir intercepter, démoduler et décoder ces données. Cependant, les lignes d'adresse sur le HT-12E, et celles sur l'homologue HT-12D (un décodeur de données série-parallèle 12 bits), nous permettent de rendre une paire émetteur-récepteur RF unique en acheminant les données uniquement vers le récepteur prévu limitant ainsi la communication avec tous les autres. Tout ce qui nous est demandé est de configurer les lignes d'adresse de manière identique sur les deux fronts. Par exemple, puisque nous avons mis à la terre toutes les lignes d'adresse de notre HT-12E, nous devons faire de même pour le HT-12D à la réception, sinon le rover ne pourra pas recevoir les signaux. De cette façon, nous pouvons également contrôler plusieurs rovers avec un seul circuit émetteur en configurant de manière identique les lignes d'adresse sur les HT-12D sur chacun des récepteurs. Ou, nous pourrions mettre deux gants, chacun fixé avec un circuit émetteur contenant une configuration de ligne d'adresse distincte (disons, l'un avec toutes les lignes d'adresse mises à la terre et l'autre avec toutes maintenues hautes, ou un avec une ligne mise à la terre tandis que les sept autres étant maintenus haut et l'autre avec deux lignes mises à la terre tandis que les six autres étant maintenues hautes, ou toute autre combinaison de celles-ci) et chacun dirige plusieurs rovers configurés de manière identique. Jouez le maestro dans une symphonie Android !

Une chose importante à noter lors de l'assemblage du circuit est la valeur de Rosc. Le HT-12E possède un circuit oscillateur interne entre les broches 15 et 16, qui est activé en connectant une résistance, appelée Rosc, entre ces broches. La valeur sélectionnée pour Rosc détermine en fait la fréquence de l'oscillateur, qui peut varier en fonction de la tension d'alimentation. La sélection d'une valeur appropriée pour Rosc est cruciale pour le fonctionnement du HT-12E ! Idéalement, la fréquence de l'oscillateur du HT-12E devrait être 1/50 fois celle de son homologue HT-12D. Par conséquent, puisque nous fonctionnons sur 5V, nous avons choisi des résistances de 1MΩ et 51kΩ comme Rosc pour les circuits HT-12E et HT-12D respectivement. Si vous prévoyez de faire fonctionner les circuits sur une tension d'alimentation différente, reportez-vous au graphique « Fréquence de l'oscillateur par rapport à la tension d'alimentation » à la page 11 de la fiche technique HT-12E ci-jointe pour déterminer la fréquence exacte de l'oscillateur et la résistance à utiliser.

De plus, en remarque, nous utiliserons ici des en-têtes femelles (servant un objectif similaire à celui des prises IC) pour brancher l'accéléromètre, l'émetteur RF et l'Arduino dans le circuit au lieu de les souder directement sur le PCB. L'intention étant l'hébergement d'un peu de réutilisabilité des composants. Dites, cela fait un moment que vous avez conçu votre rover à commande gestuelle et il est juste assis là, à moitié couvert de poussière, au sommet de votre étagère à trophées et vous tombez sur un autre excellent instructable qui tire parti de l'efficacité d'un accéléromètre. Donc que fais-tu? Vous le retirez simplement de votre rover et le poussez dans votre nouveau circuit. Pas besoin d'invoquer les « Amazones » pour vous en procurer une nouvelle:-p

Bonus: supprimez l'Arduino, et pourtant ne le faites pas

Juste au cas où vous vous sentiriez un peu plus aventureux, et surtout si vous pensez que dépenser cette merveille magnifiquement conçue (l'Arduino, bien sûr) pour une tâche aussi triviale que la nôtre est un peu exagéré, supportez-moi un peu plus longtemps; et sinon, n'hésitez pas à passer à l'étape suivante.

Notre objectif ici est de faire de l'Arduino (le cerveau de l'Arduino, en fait; oui, je parle de l'ATmega IC !) un membre permanent de l'équipe. L'ATmega serait programmé pour exécuter un seul croquis encore et encore afin qu'il puisse servir de partie perpétuelle du circuit, tout comme le HT-12E-un simple circuit intégré, juste assis là, faisant ce qu'il est censé faire. N'est-ce pas ainsi qu'un vrai système embarqué est censé être ?

Quoi qu'il en soit, afin de procéder à cette mise à niveau, il suffit de modifier le circuit selon le deuxième schéma ci-joint. Ici, nous remplaçons simplement les en-têtes femelles de l'Arduino par une prise IC pour l'ATmega, ajoutons une résistance pull-up 10K à la broche de réinitialisation (broche 1) de l'IC et la pompons avec une horloge externe entre les broches 9 et 10 Malheureusement, si nous supprimons l'Arduino, nous abandonnons également ses régulateurs de tension intégrés; ergo, nous devons également reproduire le circuit LM7805 que nous avions utilisé pour le récepteur ici. De plus, nous utilisons également un diviseur de tension pour tirer les 3,3 V requis pour alimenter l'accéléromètre.

Maintenant, le seul autre problème ici est de programmer l'ATmega pour qu'il fasse son travail. Vous devrez cependant attendre jusqu'à l'étape 4. Alors restez à l'écoute…

Étape 3: Et, le récepteur

Et, le receveur
Et, le receveur
Et, le receveur
Et, le receveur
Et, le receveur
Et, le receveur
Et, le receveur
Et, le receveur

Le récepteur se compose d'un module récepteur RF couplé à un circuit intégré décodeur HT-12D et à une paire de moteurs à courant continu fonctionnant à l'aide d'un pilote de moteur L293D, le tout câblé selon le schéma ci-joint.

Le seul travail du récepteur RF est de démoduler l'onde porteuse (reçue via son antenne à la broche 1) et de rendre les données "séries" récupérées à la broche 7 d'où elles sont captées par le HT-12D pour la désérialisation. Maintenant, en supposant que les lignes d'adresse (A0 à A7) sur le HT-12D sont configurées de manière identique à son homologue HT-12E, les 4 bits de données parallèles sont extraits et transmis, via les lignes de données (D8 à D11) sur le HT-12D, au pilote du moteur, qui à son tour interprète ces signaux pour piloter les moteurs.

Encore une fois, faites attention à la valeur de Rosc. Le HT-12D possède également un circuit oscillateur interne entre les broches 15 et 16, qui est activé en connectant une résistance, appelée Rosc, entre ces broches. La valeur sélectionnée pour Rosc détermine en fait la fréquence de l'oscillateur, qui peut varier en fonction de la tension d'alimentation. La sélection d'une valeur appropriée pour Rosc est cruciale pour le fonctionnement du HT-12D ! Idéalement, la fréquence de l'oscillateur du HT-12D devrait être 50 fois supérieure à celle de son homologue HT-12E. Par conséquent, puisque nous fonctionnons sur 5V, nous avons choisi des résistances de 1MΩ et 51kΩ comme Rosc pour les circuits HT-12E et HT-12D respectivement. Si vous prévoyez de faire fonctionner les circuits sur une tension d'alimentation différente, reportez-vous au graphique « Fréquence de l'oscillateur par rapport à la tension d'alimentation » à la page 5 de la fiche technique HT-12D ci-jointe pour déterminer la fréquence exacte de l'oscillateur et la résistance à utiliser.

N'oubliez pas non plus les embases femelles pour le récepteur RF.

En option, une LED peut être connectée via une résistance de limitation de courant de 330Ω à chacune des 4 broches de données du HT-12D afin d'aider à déterminer le bit reçu sur cette broche. La LED s'allumera si le bit reçu est HIGH (1) et s'éteindra si le bit reçu est LOW (0). Alternativement, une seule LED pourrait être liée à la broche VT du HT-12D (encore une fois, via une résistance de limitation de courant de 330Ω), qui s'allumerait en cas de transmission valide.

Maintenant, si vous cherchez le hack avec les moteurs dont je parlais à la première étape, c'est sacrément facile ! Il suffit de câbler les deux moteurs de chaque ensemble en parallèle, comme indiqué dans le deuxième schéma. Cela fonctionne comme prévu, car les moteurs de chaque ensemble (les moteurs avant et arrière à gauche et les moteurs avant et arrière à droite) ne sont jamais entraînés dans des directions opposées. C'est-à-dire que pour faire tourner le rover à droite, les moteurs avant et arrière de gauche doivent tous les deux être entraînés vers l'avant et les moteurs avant et arrière de droite doivent tous les deux être entraînés vers l'arrière. De même, pour que le rover tourne à gauche, les moteurs avant et arrière de gauche doivent tous les deux être entraînés vers l'arrière et les moteurs avant et arrière de droite doivent tous les deux être entraînés vers l'avant. Par conséquent, il est sûr de fournir la même paire de tensions aux deux moteurs d'un ensemble. Et, la façon de s'y prendre est de simplement brancher les moteurs en parallèle.

Étape 4: sur le code

Vers le Code
Vers le Code

Il ne reste qu'une chose à faire pour que le rover soit opérationnel. Oui, vous l'avez deviné ! (J'espère que vous l'avez fait) Nous devons encore traduire les lectures de l'accéléromètre sous une forme que le conducteur du moteur peut interpréter pour pouvoir piloter les moteurs. Si vous pensez que puisque les lectures de l'accéléromètre sont analogiques et que le conducteur du moteur attend des signaux numériques, nous devrons implémenter une sorte de CAN, eh bien, pas techniquement, mais c'est ce que nous devons faire. Et c'est assez simple.

On sait qu'un accéléromètre mesure l'accélération gravitationnelle le long d'un axe linéaire et que cette accélération est représentée comme un niveau de tension fluctuant entre la masse et la tension d'alimentation, que notre microcontrôleur lit comme une valeur analogique variant entre 0 et 1023. Mais, puisque nous Si vous utilisez l'accéléromètre à 3,3 V, il est conseillé de régler la référence analogique pour l'ADC 10 bits (intégré dans l'ATmeaga à bord d'un Arduino) à 3,3 V. Cela rendra simplement les choses plus simples à comprendre; Cependant, cela n'aura pas beaucoup d'importance pour notre petite expérience même si nous ne l'avons pas fait (nous devrons juste modifier un peu le code). Pour ce faire, cependant, nous filons simplement la broche AREF sur l'Arduino (broche 21 sur l'ATmega) à 3,3V et notons ce changement de code en appelant analogReference(EXTERNAL).

Maintenant, lorsque nous posons l'accéléromètre à plat et que nous lisons l'accélération le long des axes x et y (rappelez-vous? nous n'avons besoin que de ces deux axes), nous obtenons une valeur d'environ 511 (c'est-à-dire à mi-chemin entre 0 et 1023), ce qui n'est qu'un façon de dire qu'il y a 0 accélération le long de ces axes. Plutôt que de creuser dans les détails du fait, imaginez simplement cela comme les axes x et y sur un graphique, avec la valeur 511 désignant l'origine et 0 et 1023 les extrémités comme illustré dans la figure; orientez l'accéléromètre de manière à ce que ses broches pointent vers le bas et soient tenues plus près de vous, sinon vous pourriez inverser/intervertir les axes. Cela signifie que, si nous inclinons l'accéléromètre vers la droite, nous devrions lire une valeur supérieure à 511 le long de l'axe des x, et si nous inclinons l'accéléromètre vers la gauche, nous devrions obtenir une valeur inférieure à 511 le long de l'axe des x. De même, si nous inclinons l'accéléromètre vers l'avant, nous devrions lire une valeur supérieure à 511 le long de l'axe y, et si nous inclinons l'accéléromètre vers l'arrière, nous devrions lire une valeur inférieure à 511 le long de l'axe y. Et c'est ainsi que nous en déduisons, dans le code, la direction dans laquelle le rover doit être conduit. Mais cela signifie également que nous devons garder l'accéléromètre vraiment stable et aligné parallèlement à une surface plane pour pouvoir lire un 511 le long des deux axes afin d'avoir le rover garé encore. Pour faciliter un peu cette tâche, nous définissons certains seuils formant une frontière, comme le montre la figure, de sorte que le rover reste stationnaire tant que les lectures x et y se situent dans les limites et nous savons avec certitude que le rover doit être placé dans mouvement une fois le seuil dépassé.

Par exemple, si l'axe des y indique 543, nous savons que l'accéléromètre est incliné vers l'avant, nous devons donc diriger le rover vers l'avant. Pour ce faire, nous réglons les broches D2 et D4 HIGH et les broches D3 et D5 LOW. Maintenant, puisque ces broches sont câblées directement au HT-12E, les signaux sont sérialisés et envoyés par l'émetteur RF uniquement pour être captés par le récepteur RF assis sur le rover, qui avec l'aide du HT-12D désérialise les signaux et les transmet au L293D, qui à son tour interprète ces signaux et fait avancer les moteurs

Vous voudrez peut-être modifier ces seuils, cependant, afin de calibrer la sensibilité. Un moyen simple de le faire consiste simplement à connecter votre accéléromètre à votre Arduino et à exécuter un croquis qui crache les lectures x et y sur le moniteur série. Maintenant, déplacez un peu l'accéléromètre, parcourez les lectures et décidez des seuils.

Et c'est tout! Téléchargez le code sur votre Arduino et profitez-en !! Ou, peut-être pas si tôt:-(Si vous n'avez pas sauté la section bonus, télécharger le code sur votre ATmega signifierait un peu plus de travail. Vous avez deux options:

Option A: utilisez un périphérique USB vers série tel que la carte de dérivation de base FTDI FT232. Acheminez simplement les fils de l'en-tête TTL aux broches correspondantes de l'ATmega selon le mappage ci-dessous:

Broches sur le tableau de distribution Broches sur le microcontrôleur
DTR/GRN RST/Reset (broche 1) via un capuchon de 0,1 µF
Rx Tx (broche 3)
Tx Rx (broche 2)
Vcc +5v Sortie
CTS (inutilisé)
Terre Sol

Maintenant, branchez une extrémité d'un câble USB dans la carte de dérivation et l'autre dans votre PC et téléchargez le code comme vous le feriez normalement: lancez l'IDE Arduino, sélectionnez un port série approprié, définissez le type de carte, compilez le croquis et appuyez sur télécharger.

Option B: utilisez un UNO si vous en avez un qui traîne quelque part. Il suffit de brancher votre ATmega dans l'UNO, de télécharger le code comme vous le feriez normalement, de retirer le circuit intégré et de le remettre dans le circuit de l'émetteur. Aussi facile que la tarte!

L'une ou l'autre de ces options devrait fonctionner, en supposant que vous soyez assez intelligent pour graver le chargeur de démarrage au préalable sur votre ATmega, ou, si vous étiez encore plus intelligent pour acheter un ATmega avec le chargeur de démarrage déjà installé en premier lieu. Sinon, allez-y et suivez les étapes décrites ici.

Et ddd, nous avons officiellement terminé ! J'espère que vous avez apprécié cette instructable bizarrement longue. Maintenant, continuez, finissez de construire votre rover si vous n'avez pas déjà terminé, jouez avec lui pendant un moment et revenez pour inonder la section des commentaires ci-dessous avec des requêtes et/ou des critiques constructives.

Merci

P. S. La raison pour laquelle je n'ai téléchargé aucune photo du projet terminé est, eh bien, parce que je ne l'ai pas terminé moi-même. À mi-chemin de sa construction, j'ai pensé à quelques améliorations, telles que le contrôle de la vitesse, l'évitement d'obstacles et peut-être un écran LCD sur le rover, ce qui n'est en fait pas si difficile si nous utilisons un microcontrôleur à la fois à l'émission et à la réception. Mais pourquoi ne pas le faire à la dure ?! Donc, je travaille actuellement dans cette direction et je publierai une mise à jour dès que cela portera ses fruits. Cependant, j'ai testé le code et la conception à l'aide d'un prototype rapide que j'ai construit en utilisant des modules d'un de mes projets précédents; vous pouvez regarder la vidéo ici.

Conseillé: