Bonjour.
Dans cet article, je vais décrire le processus d'assemblage de mon premier robot Arduino. Le matériel sera utile à d'autres débutants comme moi, qui souhaitent fabriquer un « chariot autonome ». L'article présente les étapes de mon travail avec mes ajouts sur divers aspects. Un lien vers le code final (probablement pas le plus idéal) est donné à la fin de l'article.

Autant que possible, j'ai impliqué mon fils (8 ans) dans le projet. Ce qu'il a réussi et ce qui n'a pas fonctionné est abordé dans une partie de l'article, cela pourra peut-être aider quelqu'un.
Description générale du robot
Tout d'abord, quelques mots sur le robot lui-même (idée). Au début, je ne voulais pas construire quelque chose de typique. En même temps, le kit de composants était assez standard : châssis, moteurs, capteur à ultrasons, capteur de ligne, LED, buzzer. Initialement, j'ai imaginé un robot qui protège son territoire. Il avance vers un intrus qui a franchi la ligne de cercle, puis revient au centre. Cependant, dans cette version, une ligne tracée était nécessaire, en plus d'un peu de mathématiques pour rester constamment dans le cercle.
Après quelques réflexions, j'ai donc modifié l'idée et décidé de créer un robot « chasseur ». Au départ, il pivote sur lui-même pour choisir une cible (une personne) à proximité. Si la « victime » est détectée, le « chasseur » active ses lumières clignotantes et sa sirène, et commence à s'approcher. Lorsque la personne s'éloigne, le robot choisit une nouvelle cible et la suit, et ainsi de suite. Ce type de robot n'a pas besoin d'un cercle limité et peut fonctionner en plein air.
Comme vous le voyez, cela ressemble beaucoup à un jeu de « chat ». Bien que le robot ne se soit pas révélé très rapide, il interagit de manière honnête avec les personnes qui l'entourent. Cela plaît particulièrement aux enfants (il semble parfois qu'ils vont l'écraser, ce qui fait palpiter le cœur…). Je pense que c'est une bonne solution pour populariser la construction technique.
Structure du robot
Alors, nous avons défini l'idée, passons à la composition. La liste des éléments se forme à partir de ce que le robot doit savoir faire. Tout cela est assez évident, alors regardons directement la numérotation :

Le « cerveau » du robot est une carte Arduino Uno (1) qui faisait partie d'un kit commandé en Chine. Pour nos besoins, cela suffit amplement (nous nous basons sur le nombre de broches utilisées). Dans ce même kit, nous avons pris un châssis prêt à l'emploi (2), sur lequel sont fixées deux roues motrices (3) et une roue arrière (pivotante) (4). Le kit comprenait également un compartiment pour les batteries (5). À l'avant du robot, il y a un capteur ultrasonique (HC-SR04) (6), à l'arrière se trouve un driver de moteurs (L298N) (7), au centre, il y a une LED clignotante (8), et un peu à côté, il y a un buzzer (9).
Au stade de l'agencement, nous vérifions :
— que tout rentre
— que cela soit équilibré
— que tout soit disposé de manière rationnelle
Une partie de cela a déjà été réalisée par nos collègues chinois. Ainsi, le lourd compartiment pour les batteries est placé au centre, avec les roues motrices juste en dessous. Toutes les autres cartes sont légères, elles peuvent être placées sur la périphérie.
Les nuances :
- Le châssis du kit dispose de nombreux trous d'usine, mais je n'ai jamais vraiment compris leur logique. Les moteurs et le bloc d'accumulateurs se sont fixés sans problème, mais ensuite, il a fallu « adapter » en perçant de nouveaux trous pour fixer telle ou telle carte.
- Les supports en laiton et autres fixations trouvés dans les réserves ont été d'une grande aide (il a parfois fallu improviser).
- J'ai passé les fils de chaque carte à travers des serre-fils (que j'ai également trouvés dans les réserves). C'est très pratique, tous les câbles sont bien rangés et ne traînent pas.
Blocs individuels
Maintenant, je vais passer en revue les blocs et raconter spécifiquement sur chacun.
Compartiment pour batteries
Il est évident que le robot doit disposer d'une bonne source d'énergie. Les options peuvent varier, j'ai choisi de m'orienter vers 4 piles AA. Ensemble, elles fournissent environ 5 V, et cette tension peut être directement appliquée à la broche 5V de la carte Arduino (en contournant le régulateur).
J'avais bien sûr quelques réserves, mais cette solution fonctionne tout à fait.
Puisque l'alimentation est nécessaire partout, j'ai placé deux connecteurs au centre du robot pour plus de commodité : un qui « distribue » la terre (à droite) et l'autre — 5 V (à gauche).

Moteurs et driver
Tout d'abord, concernant le montage des moteurs. Le montage est d'origine, mais réalisé avec de grandes tolérances. En d'autres termes, les moteurs peuvent « osciller » de quelques millimètres à gauche et à droite. Pour notre tâche, ce n'est pas critique, mais dans certains cas, cela pourrait avoir un impact (le robot commencerait à dériver). Par précaution, j'ai aligné les moteurs strictement en parallèle et les ai fixés avec de la colle.

Pour contrôler les moteurs, comme je l'ai mentionné précédemment, on utilise le pilote L298N. Selon la documentation, il a trois broches pour chaque moteur : une pour modifier la vitesse et une paire de broches pour la direction de rotation. Il y a un point important ici. En fait, si la tension d'alimentation est de 5 V, le contrôle de la vitesse ne fonctionne tout simplement pas ! C'est-à-dire qu'il ne tourne pas du tout ou tourne à plein régime. C'est une particularité qui m'a fait « perdre » quelques soirées. Finalement, j'ai trouvé une mention quelque part sur un des forums.
En général, une faible vitesse de rotation m'était nécessaire lors du retournement du robot — pour lui donner le temps de scanner l'espace. Mais, comme rien ne s'est passé avec cette idée, j'ai dû faire autrement : un léger tournant — arrêt — tournant — arrêt, etc. Encore une fois, ce n'est pas aussi élégant, mais cela fonctionne.
Je rajouterai ici que, après chaque poursuite, le robot choisit une direction aléatoire pour la nouvelle rotation (dans le sens des aiguilles d'une montre ou dans le sens inverse).
Capteur ultrason

Encore un élément où j'ai dû chercher une solution de compromis. Le capteur ultrason donne des chiffres instables face à de véritables obstacles. En fait, c'était prévisible. Il fonctionne parfaitement lors des compétitions, où il y a des surfaces lisses, uniformes et perpendiculaires, mais si des jambes humaines « passent » devant lui — il faut introduire un traitement supplémentaire.
En guise de traitement supplémentaire, j'ai installé sur trois échantillons. D'après les tests réalisés sur de vrais enfants (aucun enfant n'a été blessé pendant les tests !), cela s'est avéré suffisant pour normaliser les données. La physique ici est simple : nous avons des signaux réfléchis par les objets appropriés (donnant la distance requise) et réfléchis par des objets plus éloignés, par exemple, les murs. Ces derniers représentent des valeurs aberrantes au niveau des mesures comme 45, 46, 230, 46, 46, 45, 45, 310, 46... C'est précisément ce que le filtre médian élimine.
Après tout le traitement, nous obtenons la distance jusqu'à l'objet le plus proche. Si elle est inférieure à un certain seuil, nous activons l'alarme et nous nous dirigeons directement vers le «contrevenant».
Clignotant et sirène
Ce sont sans doute les éléments les plus simples de tout ce qui a été mentionné. Ils sont visibles sur les photos ci-dessus. En ce qui concerne le matériel, il n'y a rien à ajouter, donc passons maintenant au code.
Programme de gestion
Je ne vois pas l'intérêt de détailler le code, ceux qui en ont besoin trouveront le lien à la fin de l'article, tout y est assez lisible. Mais il serait bon d'expliquer la structure générale.
La première chose à comprendre : un robot est un appareil en temps réel. En fait, il faut s'en rappeler, car j'ai toujours travaillé dans l'électronique. Donc, oublions tout de suite l'appel à delay(), qui est très apprécié dans les exemples de sketchs, et qui «gèle» simplement le programme pendant une durée spécifiée. Au lieu de cela, comme le conseillent les personnes expérimentées, nous utilisons des minuteurs pour chaque bloc. Le temps requis écoulé, nous exécutons l'action (augmenter la luminosité de la LED, activer le moteur, etc.).
Les minuteurs peuvent être interconnectés. Par exemple, le buzzer fonctionne en synchronisation avec le clignotant. Cela simplifie légèrement le programme.
Naturellement, nous divisons tout en fonctions distinctes (clignotant, son, rotation, mouvement en avant, etc.). Si nous ne le faisons pas, il sera difficile de s'y retrouver par la suite.
Nuances de la pédagogie
Tout ce qui a été décrits ci-dessus, je l'ai fait pendant mon temps libre le soir. J'ai passé environ trois semaines sur le robot à un rythme détendu. À ce stade, on pourrait s'arrêter ici, mais j'ai également promis de vous parler du travail avec l'enfant. Qu'est-ce qui est réalisable à cet âge ?
Travail selon les instructions
Nous avons d'abord vérifié chaque élément séparément : LEDs, buzzer, moteurs, capteurs, etc. Il existe un grand nombre d'exemples prêts à l'emploi, certains directement dans l'environnement de développement, d'autres que l'on peut trouver sur Internet. Cela fait plaisir. Nous prenons le code, connectons l'élément, nous assurons que cela fonctionne, puis nous commençons à l'adapter à notre tâche. L'enfant réalise les connexions selon le schéma et sous mon contrôle partiel. C'est bien. Il faut aussi savoir travailler précisément selon les instructions.
Ordre de travail («de l'individuel au général»)
C'est un point complexe. Il faut s'habituer à ce qu'un grand projet (« construire un robot ») se compose de petites tâches (« connecter un capteur », « connecter les moteurs »…), qui, à leur tour, se décomposent en étapes encore plus petites (« trouver un programme », « connecter la carte », « télécharger le firmware »…). En accomplissant des tâches de niveau inférieur relativement claires, nous « clôturons » les tâches de niveau intermédiaire, et c'est à partir de celles-ci que se forme le résultat global. J'ai expliqué, mais je pense que la prise de conscience ne viendra pas de sitôt. Peut-être vers l'adolescence.
Montage
Perçage, filetages, vis, écrous, soudure et senteur de colophane — comment s'en passer. L'enfant a acquis la compétence de base « Travailler avec un fer à souder » — il a réussi à souder plusieurs connexions (je n'ai pas caché que j'ai un peu aidé). N'oubliez pas d'expliquer les consignes de sécurité.
Travail sur l'ordinateur
J'ai écrit le programme pour le robot, mais j'ai tout de même réussi à obtenir certains résultats accessoires.
Premièrement : l'anglais. Il vient juste de commencer à l'école, donc nous avons « laborieusement » déchiffré ce que signifient pishalka, migalka, yarkost et d'autres translittérations. Au moins, nous avons compris cela. J'ai consciemment évité d'utiliser des mots anglais natifs, car nous n'avons pas encore atteint ce niveau.
Deuxièmement : un travail efficace. Nous avons appris les combinaisons de touches rapides pour effectuer rapidement des opérations standard. De temps à autre, lorsque nous écrivions le programme, nous échangeons les rôles avec mon fils, et je lui disais ce qu'il fallait faire (remplacer, rechercher, etc.). Je devais répéter encore et encore : « sélectionne par un double clic », « maintiens Shift », « maintiens Ctrl », et ainsi de suite. Le processus d'apprentissage n'est pas rapide ici, mais je pense que les compétences s'ancreront progressivement « dans l'inconscient ».
Texte cachéVous pourriez dire que ce qui précède est presque évident. Mais, honnêtement, cet automne, j'ai eu l'occasion d'enseigner l'informatique à des classes de 9e dans une école. C'est terrible. Les élèves ne connaissent pas des choses aussi élémentaires que Ctrl + Z, Ctrl + C et Ctrl + V, la sélection de texte avec Shift enfoncé ou en double-cliquant sur un mot, et d'autres choses. Et pourtant, ils en sont à leur troisième année d'apprentissage de l'informatique… À vous de tirer vos propres conclusions.
Troisièmement : la dactylographie aveugle. J'ai confié à l'enfant le soin d'écrire les commentaires dans le code (qu'il s'entraîne). Nous avons immédiatement placé correctement ses mains, afin que ses doigts mémorisent progressivement la disposition des touches.
Comme vous le voyez, nous venons à peine de commencer. Nous allons continuer à affiner nos compétences et nos connaissances, elles seront utiles dans la vie.
À propos de l'avenir…
Développement futur
Le robot est terminé, il se déplace, clignote et émet des sons. Que faire maintenant? En nous enthousiasmant pour ce que nous avons accompli, nous prévoyons de l'améliorer davantage. Nous envisageons de créer un contrôle à distance — comme celui d'un rover lunaire. Ce serait intéressant de contrôler le mouvement du robot depuis un certain endroit. Mais cela sera une autre histoire...
Et à la fin, les véritables héros de cet article (vidéo en cliquant dessus):
Merci de votre attention !
→
Source : habr.com
