How to Develop a Basic Obstacle Avoidance Robot Using C++
Table of Contents
Présentation
Les robots autonomes ne sont plus confinés aux laboratoires de recherche ou aux planchers industriels. Avec des microcontrôleurs et des capteurs abordables, tout le monde peut construire un simple robot qui évite les obstacles à la maison. Ce projet vous enseigne les fondamentaux de la programmation C++ intégrée, de l'intégration des capteurs et de la commande motrice.
Pourquoi construire un robot d'évitement des obstacles?
L'évitement des obstacles est une capacité essentielle en robotique. Il combine la détection du monde réel et la logique décisionnelle, le tout fonctionnant sur un petit microcontrôleur. Ce projet vous oblige à réfléchir au timing, au bruit des capteurs et aux commandes de actionneurs fiables. Il vous donne également un résultat tangible : une machine qui réagit à son environnement. Une fois que vous maîtrisez le modèle de base – lire le capteur, décider, déplacer – vous pouvez l'étendre pour suivre les lignes, cartographier une pièce, ou même chasser une lumière.
Prérequis et composants requis
Microcontrôleur
Le cerveau de votre robot peut être un Arduino Uno, un Nanoou une NodeMCU. Les cartes Arduino sont bien soutenues, ont de nombreux exemples de communauté et travaillent directement avec l'IDE Arduino pour la programmation C++. Si vous choisissez un ESP32 ou STM32, vous pouvez utiliser la même logique, mais peut-être devrez-vous adapter la cartographie des broches et la résolution PWM.
Capteur de distance ultrasonore
Les HC‐SR04 Il mesure la distance de 2 cm à 400 cm en envoyant une impulsion ultrasonore de 40 kHz et en chronométrant l'écho. Ses quatre broches (VCC, Trig, Echo, GND) se connectent facilement au microcontrôleur. Pour une meilleure précision, vous pouvez utiliser un Capteur de distance IR ou une LIDAR, mais le capteur ultrasonore offre un bon équilibre de coût et de fiabilité pour l'utilisation intérieure.
Conducteur de moteur
Une L298N Le double conducteur de H-bridge est idéal pour deux moteurs à courant continu. Il peut contrôler la direction et la vitesse (via PWM) et les poignées jusqu'à 2 A par canal. Assurez-vous que vous avez une puissance séparée pour les moteurs (un pack de batterie) et pour la logique (habituellement 5 V de l'Arduino). L293D Le pilote travaille pour les moteurs de faible puissance, mais le L298N est plus robuste pour un robot débutant.
Moteurs, roues et châssis
Deux moteurs à courant continu avec roues (par exemple, 4,5 V à 6 V) et un châssis simple acrylique ou imprimé en 3D forment la base. Une troisième roue de roulette ou une roulette à billes assure la stabilité.
Alimentation électrique
A Porte-batterie AA 6 cellules (9 V au total) ou un pack Li‐Po de 7,4 V dédié alimente les moteurs à travers le conducteur. L'Arduino peut être alimenté par USB ou sa propre entrée de batterie (7-12 V).
Câblage du circuit
Connexions de capteurs à ultrasons
Connectez le HC‐SR04 comme suit:
- VCC à 5 V sur l'Arduino
- Trig à la broche numérique 9 (ou à toute broche capable de produire)
- Écho à la broche numérique 10 (doivent être compatibles avec l'interruption ou l'impulsion)
- GND sur un terrain d ' entente
Une résistance de 1 k-. entre la broche Echo et l'Arduino peut protéger le microcontrôleur, car le capteur produit une logique 5 V même sur des cartes de 3.3 V. Pour une logique Arduino Uno (5 V), cette étape est facultative mais recommandée.
Connexions de conducteurs de moteurs
Le pilote L298N a deux canaux. Faites passer un moteur à OUT1/OUT2 et l'autre à OUT3/OUT4. Connectez les broches d'entrée du pilote aux broches numériques Arduino (par exemple IN1→pin 3, IN2→pin 4, IN3→pin 5, IN4→pin 6). Pour le contrôle de la vitesse, connectez les broches ENA et ENB aux broches Arduino Capables PWM (par exemple, les broches 9 et 10 – mais les broches 9 et 10 sont utilisées pour le capteur? Utilisez les broches 11 et 3 pour PWM).
Câbles électriques:
- Puissance du moteur (12 V sur L298N) de la batterie
- Puissance logique (5 V) de la sortie 5 V d'Arduino (ou d'un régulateur de bord sur le conducteur – vérifier les réglages du sauteur)
- Terrain commun entre batterie, Arduino et pilote
Schéma de circuit complet
Pour plus de clarté, voici une table de connexions (Arduino Uno pins):
Vérifiez toutes les connexions avant de démarrer. Un conducteur de moteur mal filé peut endommager l'Arduino ou égoutter rapidement la batterie.
Programmation du robot avec C++
Configuration de l'IDE Arduino
Télécharger et installer le IDE Arduino (ou utilisez l'éditeur web). Sélectionnez votre carte et votre port dans le menu Outils. Le code est écrit en C++ avec des fonctions spécifiques à Arduino comme et . Comprendre ces fonctions est la clé pour lire les données du capteur et contrôler les moteurs.
Logique de base : Sens‐penser‐Loi
Chaque robot d'évitement d'obstacles suit une simple boucle :
- Sensation: Déclenchez le capteur à ultrasons et mesurez le temps d'écho. Convertissez le temps en distance (en cm).
- Réfléchissez : Comparez la distance à un seuil (habituellement de 20 à 30 cm). Si un obstacle est plus près du seuil, choisissez une nouvelle direction (tourner à gauche ou à droite). Sinon, continuez vers l'avant.
- Loi: Définissez les broches de direction du moteur et les valeurs PWM pour exécuter le mouvement choisi.
Ce cycle se répète tous les 100 à 200 ms. Un délai plus court rend le robot plus réactif mais peut provoquer des mouvements amers.
Code type avec explication
Fonctions clés et réglage
La fonction utilise pour mesurer la largeur de l'impulsion d'écho. La formule convertit les microsecondes en centimètres. Pour les pouces, multipliez par 0,0135. La variable fixe la distance de sécurité minimale. Ajustez-la en fonction de la vitesse de votre robot et de la taille des obstacles.
Un seuil élevé (40 cm) rend le robot prudent; une faible (15 cm) nécessite des réactions plus rapides.
Les fonctions de commande moteur utilisent une configuration simple avant/inverse. et peuvent être améliorées en utilisant PWM pour contrôler la vitesse de virage – un virage plus lent est souvent plus efficace. Expérimentez avec différentes valeurs PWM (par exemple, 120 pour l'avant, 200 pour le virage) pour obtenir un mouvement en douceur.
Ajout d'une direction de virage aléatoire
Pour éviter de se coincer dans une boucle (par exemple, toujours tourner à gauche), utilisez la fonction Arduinos . Après avoir détecté un obstacle, générer un nombre aléatoire et choisir à gauche ou à droite en conséquence.
Essais et débogage
Utilisation du moniteur série
Ouvrez le moniteur série (Outils → Serial Monitor) réglé à 9600 baud. Vous verrez les lectures de distance en temps réel. Placez un livre à 10 cm du capteur; la lecture doit être proche de 10 cm. Si la lecture est erratique (p. ex., 0 cm ou 500 cm), vérifiez le câblage, en particulier l'épingle Echo. Assurez-vous que le capteur ne fait pas face à une surface d'absorption du son (p. ex., rideaux).
Questions et règlements communs
- Robot ne bouge pas : Vérifiez la puissance du conducteur et le sol. Vérifiez que les sauteurs ENA/ENB sont installés (ou que les broches PWM sont configurées).
- Le robot recule : Inverser la polarité motrice dans les connexions du conducteur ou échanger les broches directionnelles en code.
- Le capteur lit toujours 0: Assurez-vous que Trig est défini comme OUTPUT et Echo comme INPUT. La fonction attend l'écho; une valeur de timeout (par défaut 1 seconde) peut être définie comme un second argument.
- Robot tourne incontrôlablement : Le capteur peut être mal aligné ou trop bas. Tester avec un délai plus long après le virage.
Étalonnage
Mesurez la vitesse réelle du son dans votre environnement : il varie avec la température (331 m/s à 0°C, plus 0,6 m/s par degré Celsius). Pour la plupart des conditions intérieures, la constante 0,0343 est assez précise. Si vous avez besoin de précision, utilisez un capteur de température et calculez .
Aller plus loin: Caractéristiques avancées
Une fois que votre robot de base fonctionne de façon fiable, considérez ces améliorations :
Montage de capteurs à panneaux et à tuiles
Monter le capteur ultrasonore sur un servomoteur qui balaye à gauche et à droite (0°–180°). Avant de bouger, le robot scanne l'environnement pour trouver le chemin le plus clair. Cela réduit les collisions avec les objets latéraux et rend la navigation beaucoup plus lisse. Le servo ajoute seulement quelques lignes de code et un petit tirage de puissance.
Contrôle proportionnel de la vitesse
Au lieu d'un stop‐tour‐go binaire, varier la vitesse en fonction de la distance. Par exemple, si l'obstacle est à 30 cm, réduire la vitesse avant; si elle est à 15 cm, commencer à tourner en se déplaçant encore lentement. Cela imite comment vous approcheriez un mur – ralentissant avant un virage aigu. Implémentez-le en masquant la distance à une valeur PWM en utilisant ou une simple chaîne if‐else.
Capteurs multiples
Ajoutez deux ou trois capteurs ultrasoniques couvrant l'avant, la gauche et la droite. Cela donne au robot un meilleur champ de vision et lui permet de planifier un chemin. Vous pouvez également intégrer un capteur de suivi de ligne (par exemple, réflecteur IR) pour passer entre l'évitement des obstacles et les modes de suivi de ligne.
Contrôle PID pour le mouvement droit
Même avec des moteurs identiques, le robot tend à dériver en raison de différences de friction et de tension. Implémenter une simple boucle de dérivé proportionnel (PID) qui compare la vitesse souhaitée de chaque roue et ajuste les valeurs PWM. L'erreur peut être dérivée de données de gyroscope (IMU) ou d'encodeurs de roues si vous en avez.
Intégration avec le ROS ou les protocoles personnalisés
Pour les projets plus importants, vous pouvez remplacer la logique simple par un nœud ROS (Robot Operating System) fonctionnant sur un Raspberry Pi qui communique avec l'Arduino sur série. L'Arduino gère le contrôle moteur de bas niveau tandis que le Pi effectue la fusion des capteurs et la planification du chemin.
Conclusion
Construire un robot d'évitement des obstacles avec C++ est une étape enrichissante dans le monde des systèmes autonomes. Vous avez appris à interagir avec un capteur à ultrasons, à piloter des moteurs DC et à écrire une logique décisionnelle. Le modèle de base que vous avez codé – lire, décider, agir – est le fondement de chaque véhicule autonome, depuis l'aspirateur robot jusqu'à une voiture autoconduite.
Pour plus de détails, consulter le site Web suivant: Référence de la langue Arduino, les HC‐SR04 tutoriel de SparkFunet les Didacticiel pilote L298N sur Comment faire Mécatronics- Bon bâtiment !