- Module de capteur de vitesse LM393 (H206)
- Disposition de montage du capteur H206
- Diagramme de circuit de robot de capteur de vitesse de bricolage Arduino LM393
- Logique derrière la mesure de la vitesse avec le module de capteur de vitesse LM393
- Logique derrière la mesure de la distance parcourue par la roue
- Logique derrière la mesure de l'angle du bot
- Code du robot Arduino
- Test du robot Arduino pour mesurer la distance, la vitesse et l'angle
Les robots ont lentement commencé à pénétrer dans notre société pour nous simplifier la vie. Nous pouvons déjà trouver les robots de livraison de nourriture à six roues de Starship sur les routes du Royaume-Uni, naviguant intelligemment parmi les civils pour atteindre sa destination. Chaque robot mobile qui navigue dans l'environnement doit toujours être conscient de sa position et de son orientation par rapport au monde réel. Il existe de nombreuses façons d'y parvenir en utilisant différentes technologies comme le GPS, la triangulation RF, les accéléromètres, les gyroscopes, etc. Chaque technique a son propre avantage et est unique en soi. Dans ce tutoriel sur le capteur de vitesse Arduino LM393, nous utiliserons le module de capteur de vitesse LM393 simple et facilement disponible .pour mesurer certains paramètres vitaux tels que la vitesse, la distance parcourue et l'angle du robot en utilisant Arduino. Avec ces paramètres, le robot pourra connaître son statut dans le monde réel et peut l'utiliser pour naviguer en toute sécurité.
Arduino est le choix le plus populaire parmi les amateurs pour la construction de robots, d'un simple suiveur de ligne à un robot auto-équilibrant ou de nettoyage de sol plus complexe. Vous pouvez vérifier tous les types de robots dans la section Robotique.
Nous allons construire un petit robot alimenté par une batterie au lithium et le conduire à l'aide d'un joystick. Pendant l'exécution, nous pouvons mesurer la vitesse, la distance et l'angle du robot et l'afficher en temps réel sur l'écran LCD connecté à Arduino. Ce projet vous aide simplement à mesurer ces paramètres, une fois que vous avez terminé, vous pouvez utiliser ces paramètres pour faire fonctionner votre bot de manière autonome selon vos besoins. Cela semble intéressant, non? Alors, commençons.
Module de capteur de vitesse LM393 (H206)
Avant d'entrer dans le schéma de circuit et le code du projet, comprenons le module de capteur de vitesse LM393 car il joue un rôle essentiel dans le projet. Le module de capteur de vitesse H206 se compose d'un capteur de lumière infrarouge intégré à un IC comparateur de tension LM393 d'où le nom de capteur de vitesse LM393. Le module se compose également d'une plaque de grille qui doit être montée sur l'arbre rotatif du moteur. Tous les composants sont étiquetés dans l'image ci-dessous.
Le capteur de lumière infrarouge se compose d'une LED IR et d'un photo-transistor séparés par un petit gabarit. L'ensemble de l'agencement de capteur est placé dans un boîtier noir comme illustré ci-dessus. La plaque de grille se compose de fentes, la plaque est disposée entre l'espace du capteur de lumière infrarouge de telle manière que le capteur puisse détecter les espaces dans la plaque de grille. Chaque espace dans la plaque de grille déclenche le capteur IR lors du passage à travers l'espace; ces déclencheurs sont ensuite convertis en signaux de tension à l'aide du comparateur. Le comparateur n'est rien d'autre qu'un CI LM393 de ON semi-conducteurs. Le module possède trois broches, dont deux sont utilisées pour alimenter le module et une broche de sortie est utilisée pour compter le nombre de déclencheurs.
Disposition de montage du capteur H206
Le montage de ces types de capteurs est un peu délicat. Il ne peut être monté que sur des moteurs dont l'arbre fait saillie des deux côtés. Un côté de l'arbre est connecté à la roue tandis que l'autre côté est utilisé pour monter la plaque de grille comme indiqué ci-dessus.
Puisque la roue et la plaque sont reliées au même arbre, elles tournent toutes les deux à la même vitesse et donc en mesurant la vitesse de la plaque, nous pouvons mesurer la vitesse de la roue. Assurez-vous que les espaces dans la plaque de grille passent à travers le capteur infrarouge, ce n'est qu'alors que le capteur pourra compter le nombre d'espaces qui ont traversé. Vous pouvez également proposer votre propre agencement mécanique pour monter le capteur tant qu'il satisfait à la condition spécifiée. Le capteur IR est généralement utilisé dans de nombreux projets de robotique pour guider le robot sur les obstacles.
La plaque de grille montrée ci-dessus a 20 fentes (grilles). Cela signifie que le capteur trouvera 20 espaces pour une rotation complète de la roue. En comptant le nombre d'espaces détectés par le capteur, nous pouvons calculer la distance parcourue par la roue, de même en mesurant la vitesse à laquelle le capteur trouve les espaces, nous pouvons détecter la vitesse de la roue. Dans notre robot, nous aurons ce capteur monté sur les deux roues et nous pourrons donc également trouver l'angle du robot. Cependant, l'angle de rotation peut être calculé plus judicieusement à l'aide de l'accéléromètre ou du gyroscope, apprenez ici à interfacer l'accéléromètre et le gyroscope avec Arduino et essayez de mesurer l'angle de rotation en les utilisant.
Diagramme de circuit de robot de capteur de vitesse de bricolage Arduino LM393
Le schéma de circuit complet de ce robot de détection de vitesse et de distance est illustré ci-dessous. Le Bot se compose d' Arduino Nano comme cerveau, les deux moteurs DC pour les roues sont entraînés par le module de pilote de moteur L298N H-Bridge. Le joystick est utilisé pour contrôler la vitesse et la direction du bot et les deux capteurs de vitesse H206 sont utilisés pour mesurer la vitesse, la distance et l'ange du bot. Les valeurs mesurées sont ensuite affichées dans le module LCD 16x2. Le potentiomètre connecté à l'écran LCD peut être utilisé pour régler le contraste de l'écran LCD et la résistance est utilisée pour limiter le courant circulant vers le rétroéclairage de l'écran LCD.
Le circuit complet est alimenté par une pile au lithium 7.4V. Ce 7.4V est fourni à la broche 12V du module de pilotage du moteur. Le régulateur de tension sur le module de commande du moteur convertit alors le 7.4V en + 5V régulé qui est utilisé pour alimenter l'Arduino, l'écran LCD, les capteurs et le joystick.
Le moteur est contrôlé par les broches numériques 8, 9, 10 et 11 de l'Arduino. Puisque la vitesse du moteur doit également être contrôlée, nous devons fournir des signaux PWM à la borne positive du moteur. Par conséquent, nous avons les broches 9 et 10 qui sont toutes deux des broches compatibles PWM. Les valeurs X et Y du joystick sont lues à l'aide des broches analogiques A2 et A3 respectivement.
Comme nous le savons, le capteur H206 génère un déclencheur lorsque l'espace dans la plaque de grille est détecté. Étant donné que ces déclencheurs ne doivent pas toujours être lus avec précision pour calculer la vitesse et la distance correctes, les broches de déclenchement (sortie) sont connectées aux broches d'interruption externe 2 et 3 de la carte Arduino. Assemblez tout le circuit sur un châssis et montez le capteur de vitesse comme expliqué, mon bot ressemblait à quelque chose comme ci-dessous une fois les connexions terminées. Vous pouvez également regarder la vidéo à la fin de cette page pour savoir comment le capteur a été monté.
Maintenant que la partie matérielle est terminée, entrons dans la logique de la façon dont nous allons mesurer la vitesse, la distance et l'unique du bot, puis passez à la section de programmation.
Logique derrière la mesure de la vitesse avec le module de capteur de vitesse LM393
À partir de la configuration de montage du capteur, vous devez savoir que le module de capteur de vitesse LM393 (H206) ne mesure que les espaces présents dans la plaque de grille. Lors du montage, il faut s'assurer que la roue (dont la vitesse doit être mesurée) et la plaque de grille tournent à la même vitesse. Comme ici, puisque nous avons monté à la fois la roue et la plaque sur le même arbre, elles tourneront toutes les deux à la même vitesse évidemment.
Dans notre configuration, nous avons monté deux capteurs pour chaque roue pour mesurer l'angle du bot. Mais si votre objectif est de mesurer uniquement la vitesse et la distance, nous pouvons monter le capteur sur n'importe quelle roue. La sortie du capteur (signaux de déclenchement) sera le plus souvent connectée à une broche d'interruption externe d'un microcontrôleur. Chaque fois que l'espace dans la plaque de grille est détecté, une interruption sera déclenchée et le code dans l'ISR (Routine de service d'interruption) sera exécuté. Si nous sommes capables de calculer l'intervalle de temps entre deux de ces déclencheurs, nous pouvons calculer la vitesse de la roue.
Dans Arduino, nous pouvons facilement calculer cet intervalle de temps en utilisant la fonction millis () . Cette fonction en millis continuera d'augmenter de 1 pour chaque milli seconde à partir du moment de la mise sous tension de l'appareil. Ainsi, le lorsque la première interruption se produit, nous pouvons sauver la valeur de Millis () dans une variable factice (comme pevtime dans ce code), puis lorsque la deuxième interruption se produit, on peut calculer le temps en soustrayant la pevtime valeur forment les Millis ().
Temps pris = heure actuelle - heure précédente timeaken = millis () - pevtime ; // prise du temps en millisecondes
Une fois que nous avons calculé le temps nécessaire, nous pouvons simplement calculer la valeur de rpm en utilisant les formules ci-dessous, où (1000 / prise de temps) donne le RPS (tours par seconde) et il est multiplié par 60 pour convertir RPS en RPM (tours par minute).
rpm = (1000 / prise de temps) * 60;
Après avoir calculé le régime, nous pouvons calculer la vitesse du véhicule en utilisant les formules ci-dessous à condition de connaître le rayon de la roue.
Vitesse = 2π × RPS × rayon de la roue. v = rayon_de_roue * tr / min * 0,104
Notez que la formule ci-dessus sert à calculer la vitesse en m / s, si vous voulez calculer en km / h, remplacez 0,0104 par 0,376. Si vous êtes curieux de savoir comment la valeur 0,104 a été obtenue, essayez de simplifier la formule V = 2π × RPS × rayon de la roue.
La même technique est utilisée même si un capteur à effet Hall est utilisé pour mesurer la vitesse d'un objet en rotation. Mais pour le capteur H206, il y a une prise, la plaque de grille a 20 fentes et donc pour mesurer le temps entre deux fentes de fente surchargera le microcontrôleur. Par conséquent, nous ne mesurons la vitesse qu'à une rotation complète d'une roue. Puisque deux interruptions seront générées pour chaque intervalle (une au début et une autre à la fin de l'intervalle), nous obtiendrons un total de 40 interruptions pour que la roue effectue une rotation complète. Nous attendons donc 40 interruptions avant de calculer réellement la vitesse de la roue. Le code pour le même est indiqué ci-dessous
if (rotation> = 40) { timeaken = millis () - pevtime; // prise de temps en millisecondes rpm = (1000 / prise de temps) * 60; // formules pour calculer rpm pevtime = millis (); rotation = 0; }
Un autre inconvénient de cette méthode est que la valeur de la vitesse ne tombera pas à zéro puisque l'interruption attendra toujours que la roue effectue une rotation pour calculer la valeur de régime. Cet inconvénient peut être facilement surmonté en ajoutant un code simple qui surveille l'intervalle de temps entre deux interruptions et s'il dépasse la normale, nous pouvons forcer la valeur de rpm et de vitesse à être nul. Lien dans le code ci-dessous, nous avons utilisé la variable dtime pour vérifier la différence de temps et si elle dépasse 500 millisecondes, la valeur de la vitesse et du régime est forcée à zéro.
/ * Pour tomber à zéro si le véhicule s'est arrêté * / if (millis () - dtime> 500) // aucun inetrrupt trouvé pendant 500ms { rpm = v = 0; // rend le régime et la vitesse à zéro dtime = millis (); }
Logique derrière la mesure de la distance parcourue par la roue
Nous savons déjà que l'Arduino détectera 40 interruptions lorsque la roue effectuera une rotation complète. Ainsi, pour chaque rotation effectuée par la roue, il est évident que la distance parcourue par la roue est égale à la circonférence de la roue. Puisque nous connaissons déjà le rayon de la roue, nous pouvons facilement calculer la distance parcourue en utilisant la formule ci-dessous
Distance = 2πr * nombre de rotations distance = (2 * 3.141 * radius_of_wheel) * (left_intr / 40)
Où la circonférence de la roue est calculée en utilisant la formule 2πr, puis elle est multipliée par le nombre de tours effectués par la roue.
Logique derrière la mesure de l'angle du bot
Il existe de nombreuses façons de déterminer l'ange du robot. Les accéléromètres et les gyroscopes sont normalement utilisés pour déterminer ces valeurs. Mais une autre approche bon marché consiste à utiliser le capteur H206 sur les deux roues. De cette façon, nous saurions combien de tours chaque roue a fait. La figure ci-dessous illustre la façon dont l'angle est calculé.
Lorsque le robot est initialisé, l'angle auquel il fait face est considéré comme 0 °. De là, il tourne vers la gauche, l'angle est incrémenté en négatif et s'il tourne à droite, l'ange est incrémenté en positif. Pour comprendre, considérons la plage de -90 à +90 comme indiqué sur la figure. Dans un tel agencement, puisque les deux roues sont du même diamètre, si l'une quelconque des roues effectue une rotation complète, le bot on tourne à un angle de 90 °.
Par exemple, si la roue gauche effectue une rotation complète (80 interruptions), le bot tournera de 90 ° vers la gauche et de même si la roue droite effectue une rotation complète (80 interruptions), le bot tournera de -90 ° vers la droite. Maintenant, nous savons que si l'Arduino détecte 80 interruptions sur une roue, le bot a tourné de 90 ° et en fonction de quelle roue nous pouvons dire si le bot a tourné en positif (à droite) ou en négatif (à gauche). Ainsi, l'angle gauche et droit peut être calculé en utilisant les formules ci-dessous
int angle_left = (gauche_intr% 360) * (90/80); int angle_right = (droite_intr% 360) * (90/80);
Où 90 est l'angle couvert lors d'une interruption de 80. La valeur résultante est multipliée par le nombre d'interruptions. Nous avons également utilisé un module de 360 pour que la valeur résultante ne dépasse jamais 36. Une fois que nous avons calculé à la fois l'angle gauche et l'angle droit, l'angle effectif auquel le bot fait face peut être simplement obtenu en soustrayant l'angle gauche de l'angle droit.
angle = angle_right - angle_left;
Code du robot Arduino
Le code Arduino complet pour ce robot de mesure de vitesse et d'angle se trouve à la fin de cette page. Le but du programme est de calculer la vitesse, la distance et l'angle du bot en utilisant les logiques ci-dessus et de l'afficher sur l'écran LCD. En dehors de cela, il devrait fournir une option pour contrôler le bot à l'aide du joystick.
Nous démarrons le programme en définissant les broches d'E / S numériques pour les deux moteurs. Notez que nous devons également contrôler la vitesse du moteur et que nous devons donc utiliser les broches PWM sur Arduino pour contrôler les moteurs. Ici, nous avons utilisé les broches 8, 9, 10 et 11.
#define LM_pos 9 // moteur gauche #define LM_neg 8 // moteur gauche #define RM_pos 10 // moteur droit #define RM_neg 11 // moteur droit #define joyX A2 #define joyY A3
Pour mesurer la vitesse et la distance parcourue, nous devons connaître le rayon de la roue, mesurer la valeur et la saisir en mètres comme indiqué ci-dessous. Pour mon bot, le rayon était de 0,033 mètre mais cela pourrait différer pour vous en fonction de votre bot.
float radius_of_wheel = 0,033; // Mesurez le rayon de votre roue et entrez-le ici en cm
Dans la fonction de configuration , nous initialisons toutes les valeurs à zéro, puis nous affichons un texte d'introduction sur l'écran LCD. Nous avons également initialisé le moniteur série à des fins de débogage. Ensuite, nous avons mentionné que les capteurs de vitesse H206 sont connectés aux broches 2 et 3 en tant qu'interruptions externes. C'est là où l'interruption est détectée que les fonctions ISR Left_ISR et Right_ISR seront exécutées en conséquence.
void setup () { rotation = rpm = pevtime = 0; // Initialise toutes les variables à zéro Serial.begin (9600); lcd.begin (16, 2); // Initialise 16 * 2 LCD lcd.print ("Bot Monitor"); // Ligne de message d'introduction 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Délai de la ligne 2 du message d'introduction (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, OUTPUT); pinMode (LM_neg, OUTPUT); pinMode (RM_pos, OUTPUT); pinMode (RM_neg, OUTPUT); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Left_ISR est appelé lorsque le capteur de roue gauche est déclenché attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR est appelé lorsque le capteur de roue droite est déclenché }
Dans la routine Left_ISR, nous incrémentons simplement une variable appelée left_intr qui sera utilisée plus tard pour mesurer l'angle du bot. À l'intérieur du Right_ISR, nous faisons la même chose, mais nous calculons également la vitesse ici. La rotation variable est incrémentée pour chaque interruption, puis la logique ci-dessus est utilisée pour calculer la vitesse.
void Left_ISR () { left_intr ++; delay (10); } void Right_ISR () { right_intr ++; retard (10); rotation ++; dtime = millis (); if (rotation> = 40) { timeaken = millis () - pevtime; // prise de temps en millisecondes rpm = (1000 / prise de temps) * 60; // formules pour calculer rpm pevtime = millis (); rotation = 0; } }
À l'intérieur de la fonction principale de boucle infinie, nous surveillons les valeurs de X et Y à partir du joystick. En fonction de la valeur si le joystick est déplacé, nous contrôlons le bot en conséquence. La vitesse du bot dépend de la distance à laquelle le joystick est poussé.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); accélération int = carte (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, accélération); analogWrite (RM_pos, accélération); } else { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } if (yValue> 550) analogWrite (RM_pos, 80); if (yValue <500) analogWrite (LM_pos, 100);
Cela aidera l'utilisateur à déplacer le bot et à vérifier si les valeurs obtenues sont celles attendues. Enfin, nous pouvons calculer la vitesse, la distance et l'angle du bot en utilisant les logiques ci-dessus et l'afficher sur l'écran LCD en utilisant le code ci-dessous.
v = rayon_de_roue * rpm * 0,104; //0.033 est le rayon de la roue en mètre de distance = (2 * 3.141 * radius_of_wheel) * (left_intr / 40); int angle_left = (gauche_intr% 360) * (90/80); int angle_right = (droite_intr% 360) * (90/80); angle = angle_right - angle_left; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (droite_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (distance); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (angle);
Test du robot Arduino pour mesurer la distance, la vitesse et l'angle
Une fois que votre matériel est prêt, téléchargez le code dans votre Arduino et utilisez le joystick pour déplacer votre bot. la vitesse du bot, la distance parcourue et l'angle seront affichés sur l'écran LCD comme indiqué ci-dessous.
Sur l'écran LCD, les termes Lt et Rt représentent respectivement le nombre d'interruptions gauche et le nombre d'interruptions droite. Vous pouvez trouver ces valeurs incrémentées pour chaque écart détecté par le capteur. Le tem S indique la vitesse du bot en m / sec et le terme D indique la distance parcourue en mètres. L'angle du bot est affiché à la fin où 0 ° est pour droit et il devient négatif pour la rotation anti-horaire et positif pour la rotation horaire.
Vous pouvez également regarder la vidéo à la fin de cette page pour comprendre le fonctionnement du bot. J'espère que vous avez compris le projet et que vous avez apprécié sa construction. Si vous avez des inquiétudes, laissez-les dans la section des commentaires et je ferai de mon mieux pour répondre. Vous pouvez également utiliser les forums pour une aide technique rapide.