MBot est livré avec 3 programmes qui peuvent être exécutés: le programme manuel, le programme d’évitement d’objet et le programme de suivi de ligne. Vous êtes-vous déjà demandé à quoi ressemblait réellement le code derrière ces programmes? Dans ce guide, nous développons du code pour sortir de mBot pour faire les deux lignes après l’évitement d’objet AND.

Structure générale

Donc j’aime obtenir un pseudocode avant de commencer à écrire mes programmes, et au niveau le plus simple, ce programme devrait ressembler à ceci:

S’il y a un obstacle devant mBot

ne fais rien

autres choses

pistes de ligne.

Et ce programme fonctionnera pour toujours, donc je suppose que ma structure principale est comme ceci:

1

Évitement d’objet

Maintenant, je veux activer l’instruction if.

En pseudocode – Le capteur à ultrasons détecte-t-il un obstacle à proximité (disons 10 cm)?

Dans le code mBlock –2

J’insérerai également le code que j’exécuterai si la condition est remplie.

En pseudo-code – arrêtez les moteurs.

Dans le code mBlock –3

Si la condition n’est pas remplie, je suivrai une ligne. Mais j’y reviendrai plus tard. Il est bon de tester ce que vous avez souvent écrit. Donc, juste pour vérifier que cette partie du code fonctionne, je dois configurer l’autre partie pour – faire fonctionner les moteurs. Une fois que j’ai testé ce code et que je suis heureux que l’évitement d’objet fonctionne correctement, je vais changer cela.

3

Je l’ai testé et j’ai constaté que mon robot fonctionnait en arrière plutôt qu’en avant. C’était parce que j’avais connecté les robots dans les mauvais emplacements. J’ai éteint les fils et exécuté à nouveau mon code et le robot a avancé.

REMARQUE: à partir de mBlock v3.3.5, le capteur à ultrasons renvoie une valeur de 400 s’il est hors de portée. Par conséquent, cette étape supplémentaire n’est pas nécessaire.

/ ************************************************* * ****************************

Mais il y avait encore un problème. Le robot s’arrêtait parfois lorsqu’il n’y avait aucun obstacle à proximité. Pouvez-vous penser à pourquoi cela pourrait être? La portée du capteur à ultrasons est de 3 cm à 400 cm. Si le capteur à ultrasons détecte une distance en dehors de cette plage, il renvoie la valeur 0. Un zéro remplit la condition de mon instruction if, puis le robot s’arrête. J’ai résolu ce problème en utilisant AND:

4

************************************************* **************************** /

REMARQUE: à partir de mBlock v3.3.5, le capteur à ultrasons renvoie une valeur de 400 s’il est hors de portée. Par conséquent, cette étape supplémentaire n’est pas nécessaire.

Suivi de ligne

Il est maintenant temps de suivre la ligne. Le capteur de suivi de ligne fournit 4 mesures différentes:

0 – Les deux capteurs détectent une surface sombre

1 – Le capteur gauche détecte l’obscurité, le capteur droit détecte la lumière.

2 – Le capteur gauche détecte la lumière, le capteur droit détecte l’obscurité.

3 – Les deux capteurs détectent une surface lumineuse.

Encore une fois, je veux réfléchir clairement à ce que j’essaie de réaliser en écrivant un pseudo-code:

Si capteur de ligne = 0

Marcher vers l’avant

Sinon si capteur de ligne = 1

tournez à gauche

Sinon si capteur de ligne = 2

tournez à droite

Autres choses

Arrêtez

Mettre ce pseudocode dans mBlock a abouti à ceci:

5

Mais lors des tests, le robot était très nerveux et s’arrêtait souvent au point de croisement sur le parcours suiveur de ligne en 8 fourni avec le robot mBot. Comment puis-je résoudre ces problèmes?

Tout d’abord, le mouvement nerveux. J’ai regardé de plus près les commandes de virage à gauche et de virage à droite. Ces commandes invitent mBot à effectuer une oscillation ponctuelle. Autrement dit, un moteur avance à une certaine vitesse et le moteur opposé se déplace vers l’arrière à la même vitesse. Les virages ponctuels sont bons, mais pour nos besoins ici, un virage serait préférable – où une roue se déplace plus vite que l’autre. Pour programmer cela, nous devons attribuer des valeurs spécifiques aux niveaux de puissance du moteur, où:

M1 = moteur gauche

M2 = moteur droit

Pour réparer le robot qui s’est arrêté au point de croisement, j’ai simplement supprimé le code qui arrêtait les moteurs.

En fin de compte, mon code ressemblait à ceci:

6

Défi: pouvez-vous attribuer des valeurs aux variables normalSpeed, slowSpeed ​​et fastSpeed ​​pour que le robot fonctionne aussi bien que possible?

Le met ensemble

Avez-vous remarqué quelque chose à propos de la dernière image de code? C’est vrai, la partie évitement de l’objet du code a disparu. C’est parce que lorsque j’ai testé, je voulais juste me concentrer sur la partie pertinente du code. J’avais déjà écrit et testé la partie évasion d’objet, je l’ai donc supprimée jusqu’à présent. Maintenant que la partie suivi de ligne fonctionne, il est temps de tout mettre en place.

Défi: Assemblez le programme pour que le robot trace une ligne et évite les objets.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *