- Matériel requis pour construire un robot de nettoyage de sol basé sur Arduino
- Aspirateur portable
- Module de capteur à ultrasons HC-SR04
- Capteur de sol (capteur IR) pour la détection d'escalier
- Schéma de circuit du robot nettoyeur de sol basé sur Arduino
- Construire le circuit pour un robot de nettoyage de sol basé sur Arduino
- Arduino
Dans un scénario actuel, nous sommes tous tellement occupés par notre travail que nous n'avons pas le temps de nettoyer correctement notre maison. La solution au problème est très simple, il vous suffit d'acheter un robot aspirateur domestique tel que irobot roomba qui nettoiera votre maison en appuyant sur un bouton. Mais ces produits commerciaux constituent un problème commun, qui est le coût. Aujourd'hui, nous avons donc décidé de créer un robot nettoyeur de sols simple , qui n'est pas seulement simple à fabriquer mais coûte très moins cher que les produits commerciaux disponibles sur le marché. Les lecteurs fréquents se souviendront peut-être de notre robot aspirateur Arduino, que nous avons construit il y a longtemps, mais celui-ci était très encombrant et nécessitait une grosse batterie au plomb-acide pour se déplacer. Le nouvel aspirateur Arduino nous allons construire ici sera compact et plus pratique. En plus de cela, ce robot aura des capteurs à ultrasons et un capteur de proximité IR. Le capteur à ultrasons permettra au robot d'éviter les obstacles afin qu'il puisse se déplacer librement jusqu'à ce que la pièce soit correctement nettoyée, et le capteur de proximité l'aidera à éviter de tomber des escaliers. Toutes ces fonctionnalités semblent intéressantes, non? Alors, commençons.
Dans l'un de nos articles précédents, nous avons créé de nombreux robots tels que le robot d'auto-équilibrage, le robot de désinfection de surface automatisé et le robot d'évitement d'obstacles. Vérifiez-les si cela vous semble intéressant.
Matériel requis pour construire un robot de nettoyage de sol basé sur Arduino
Comme nous avons utilisé des composants très génériques pour construire la section matérielle du robot aspirateur, vous devriez pouvoir les trouver tous dans votre magasin de bricolage local. Voici la liste complète du matériel requis avec l'image de tous les composants.
- Arduino Pro Mini - 1
- Module ultrasonique HC-SR04 - 3
- Pilote de moteur L293D - 1
- Moteurs 5Volt N20 et supports de montage - 2
- Roues de moteur N20 - 2
- Commutateur - 1
- Régulateur de tension LM7805 - 1
- Batterie lithium-ion 7,4 V - 1
- Module IR - 1
- Perfboard - 1
- Roulette pivotante - 1
- MDF
- Aspirateur portable générique
Aspirateur portable
Dans la section des exigences des composants, nous avons parlé d'un aspirateur portable, les images ci-dessous le montrent exactement. C'est un aspirateur portable d'Amazon. Cela vient avec un mécanisme très simple. Il comporte trois parties en bas (une petite chambre pour stocker la poussière, la partie centrale comprend le moteur, le ventilateur et la prise de batterie en haut (il y a un couvercle ou un capuchon pour la batterie). Il a un moteur à courant continu et un ventilateur. Ce moteur est directement connecté à 3V (2 piles AA de 1,5 volts) via un simple interrupteur. Comme nous alimentons notre robot avec une batterie de 7,4 V, nous couperons la connexion de la batterie interne et l'alimenterons à partir du 5 V Nous avons donc enlevé toutes les pièces inutiles et seul le moteur avec des haubans à deux fils, vous pouvez le voir sur l'image ci-dessous.
Module de capteur à ultrasons HC-SR04
Pour détecter les obstacles, nous utilisons le populaire capteur de distance à ultrasons HC-SR04 ou nous pouvons l'appeler les capteurs d'évitement d'obstacles. Le fonctionnement est très simple, tout d'abord, le module émetteur envoie une onde ultrasonore qui se déplace dans l'air, heurte un obstacle et rebondit et le récepteur reçoit cette onde. En calculant le temps avec Arduino, nous pouvons déterminer la distance. Dans un article précédent sur le projet de capteur de distance à ultrasons basé sur Arduino, nous avons discuté de manière très approfondie du principe de fonctionnement de ce capteur. Vous pouvez vérifier cela si vous souhaitez en savoir plus sur le module de capteur de distance à ultrasons HC-SR04.
Capteur de sol (capteur IR) pour la détection d'escalier
Dans la section des fonctionnalités, nous avons parlé d'une fonctionnalité où le robot peut détecter les escaliers et peut s'empêcher de tomber. Pour ce faire, nous utilisons un capteur IR. Nous allons faire une interface entre le capteur IR et Arduino. Le fonctionnement du capteur de proximité IR est très simple, il dispose d'une LED IR et d'une photodiode, la LED IR émet de la lumière IR et si un obstacle se présente devant cette lumière émise, il sera réfléchi et la lumière réfléchie sera détectée par la photodiode. Mais la tension générée par la réflexion sera très faible. Pour augmenter cela, nous pouvons utiliser un comparateur d'amplis opérationnels, nous pouvons amplifier et obtenir une sortie. Un module IRa trois broches - Vcc, masse et sortie. Habituellement, la sortie devient faible lorsqu'un obstacle se trouve devant le capteur. Ainsi, nous pouvons l'utiliser pour détecter le sol. Si pendant une fraction de seconde, nous détectons une haute du capteur, nous pouvons arrêter le robot, le retourner ou faire tout ce que nous voulons pour l'empêcher de tomber de l'escalier. Dans un article précédent, nous avons créé une version Breadboard du module de capteur de proximité IR et expliqué le principe de fonctionnement en détail, vous pouvez le vérifier si vous souhaitez en savoir plus sur ce capteur.
Schéma de circuit du robot nettoyeur de sol basé sur Arduino
Nous avons trois capteurs à ultrasons qui détectent les obstacles. Nous devons donc connecter toutes les terres des capteurs à ultrasons et les connecter à la terre commune. En outre, nous connectons les trois Vcc du capteur et le connectons à la broche VCC commune. Ensuite, nous connectons les broches de déclenchement et d'écho aux broches PWM de l'Arduino. Nous connectons également le VCC du module IR à 5V et à la masse à la broche de masse d'Arduino, la broche de sortie du module de capteur IR va à la broche numérique D2 de l'Arduino. Pour le pilote de moteur, nous connectons les deux broches d'activation à 5v et également la broche de tension du pilote à 5V car nous utilisons des moteurs de 5 volts. Dans un article précédent, nous avons créé un bouclier de pilote de moteur Arduino, vous pouvez le vérifier pour en savoir plus sur le circuit intégré de pilote de moteur L293D.et ses opérations. L'Arduino, les modules ultrasoniques, le pilote de moteur et les moteurs fonctionnent sur 5 volts, la tension plus élevée le tuera et nous utilisons la batterie de 7,4 volts, pour convertir cela en 5 volts, le régulateur de tension LM7805 est utilisé. Connectez l'aspirateur directement au circuit principal.
Construire le circuit pour un robot de nettoyage de sol basé sur Arduino
Afin d'avoir des idées sur mon robot, j'ai recherché des robots aspirateurs en ligne et j'ai obtenu des images de robots de forme ronde. J'ai donc décidé de construire un robot de forme ronde. Pour construire le châssis et le corps du robot, j'ai beaucoup d'options comme la feuille de mousse, le MDF, le carton, etc. Mais je choisis le MDF car il est dur et possède des propriétés de résistance à l'eau. Si vous faites cela, vous pouvez décider quel matériau vous choisirez pour votre bot.
Pour construire le robot, j'ai pris la feuille de MDF, puis dessiné deux cercles avec un rayon de 8 CM, et à l'intérieur de ce cercle, j'ai également dessiné un autre cercle ayant un rayon de 4 CMpour le montage de l'aspirateur. Ensuite, j'ai découpé les cercles. De plus, j'ai coupé et enlevé des pièces appropriées pour le chemin de la roue (reportez-vous aux images pour une meilleure compréhension). Enfin, j'ai fait trois petits trous pour la roulette. L'étape suivante consiste à installer les moteurs sur la base à l'aide de ses supports, ainsi qu'à placer et à fixer la roue pivotante à sa position. Après cela, placez les capteurs à ultrasons à gauche, à droite et au milieu du robot. Connectez également le module IR à la partie inférieure du robot. N'oubliez pas d'ajouter l'interrupteur à l'extérieur. Il s'agit de construire le robot, si vous êtes confus à ce stade, vous pouvez vous référer aux images suivantes.
Pour la partie supérieure, j'ai également dessiné un cercle de 11 cm de rayon sur la feuille de mousse et je l'ai découpé. Pour l'espacement entre la partie supérieure et la partie inférieure, j'avais découpé trois morceaux de 4 cm de long d'un tube en plastique. Après cela, j'ai collé les entretoises en plastique sur la partie inférieure puis j'ai collé la partie supérieure. Vous pouvez couvrir les parties latérales du bot avec du plastique ou des matériaux similaires si vous le souhaitez.
Arduino
Le code complet de ce projet est donné à la fin du document. Ce code Arduino est similaire au code du capteur de distance à ultrasons basé sur Arduino, le seul changement concerne la détection de sol. Dans les lignes suivantes, j'explique comment le code fonctionne. Dans ce cas, nous n'utilisons aucune bibliothèque supplémentaire. Ci-dessous, nous avons décrit le code étape par étape. Nous n'utilisons aucune bibliothèque supplémentaire pour décoder les données de distance du capteur HC-SR04, car c'est très simple. Dans les lignes suivantes, nous avons décrit comment. Tout d'abord, nous devons définir la broche de déclenchement et la broche d'écho pour les trois capteurs de distance à ultrasons connectés à la carte Arduino. Dans ce projet, nous avons trois broches d'écho et trois broches de déclenchement. Notez que 1 est le capteur gauche, 2 est le capteur avant et 3 est le capteur droit.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Ensuite, nous avons défini des variables pour la distance qui sont toutes des variables de type (int) et pour la durée, nous avons choisi d'utiliser (long). Encore une fois, nous en avons trois de chacun. Aussi, j'ai défini un entier pour stocker l'état du mouvement, nous en reparlerons plus tard dans cette section.
longue durée1; longue durée2; longue durée3; int distanceleft; int distancefront; int distanceright; int a = 0;
Ensuite, dans la section de configuration, nous devons créer toutes les broches de perspective en entrée ou en sortie à l'aide de la fonction pinModes () . Pour envoyer des ondes ultrasonores depuis le module, nous devons activer la broche de déclenchement à l'état haut, c'est-à-dire que toutes les broches de déclenchement doivent être définies comme SORTIE. Et pour recevoir l'écho, nous devons lire l'état des broches d'écho afin que toutes les broches d'écho doivent se définir comme INPUT. En outre, nous activons le moniteur série pour le dépannage. Pour lire l'état des modules IR, j'ai défini l' irpin comme entrée.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Et ces broches numériques sont définies comme SORTIE pour l'entrée du pilote de moteur.
pinMode (4, SORTIE); pinMode (7, SORTIE); pinMode (8, SORTIE); pinMode (12, SORTIE);
Dans la boucle principale, nous avons trois sections pour trois capteurs. Toutes les sections fonctionnent de la même manière mais chacune pour des capteurs différents. Dans cette section, nous lisons la distance d'obstacle de chaque capteur et la stockons dans chaque entier défini. Pour lire la distance, nous devons d'abord nous assurer que les broches de déclenchement sont dégagées, pour cela, nous devons régler la broche de déclenchement sur LOW pendant 2 µs. Maintenant, pour générer l'onde ultrasonore, nous devons tourner la goupille de déclenchement HIGH pendant 10 µs. Cela enverra le son ultrasonore et à l'aide de la fonction pulseIn () , nous pouvons lire le temps de trajet et stocker cette valeur dans la variable « durée ». Cette fonction a 2 paramètres, le premier est le nom de la broche d'écho et pour le second, vous pouvez écrire soitHAUT ou BAS. HIGH signifie que la fonction pulseIn () attendra que la broche devienne HIGH causée par l'onde sonore rebondie et qu'elle commencera à compter, puis elle attendra que la broche devienne BAS lorsque l'onde sonore se terminera, ce qui arrêtera le comptage. Cette fonction donne la longueur de l'impulsion en microsecondes. Pour calculer la distance, nous allons multiplier la durée par 0,034 (la vitesse du son dans l'air est de 340 m / s) et la diviser par 2 (cela est dû au va-et-vient de l'onde sonore). Enfin, nous stockons la distance de chaque capteur en nombres entiers correspondants.
digitalWrite (trigPin1, LOW); delayMicrosecondes (2); digitalWrite (trigPin1, HIGH); delayMicrosecondes (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = durée1 * 0,034 / 2;
Après avoir obtenu la distance de chaque capteur, nous pouvons contrôler les moteurs à l'aide d'une instruction if ainsi nous contrôlons le mouvement du robot. C'est très simple, tout d'abord, nous avons donné une valeur de distance d'obstacle, dans ce cas, elle est de 15cm (changez cette valeur à votre guise). Ensuite, nous avons donné des conditions en fonction de cette valeur. Par exemple, lorsqu'un obstacle vient devant le capteur gauche (cela signifie que la distance du capteur gauche doit être inférieure ou égale à 15 cm) et que les deux autres distances sont élevées (cela signifie qu'aucun obstacle ne se trouve devant ces capteurs), Ensuite, à l'aide de la fonction d'écriture numérique, nous pouvons entraîner les moteurs vers la droite. Plus tard, j'ai vérifié l'état du capteur infrarouge. Si le robot est sur le sol, la valeur de la broche IR sera FAIBLE, et sinon, la valeur seraHAUT. Ensuite, j'ai stocké cette valeur dans la variable int s . Nous allons contrôler le robot selon ce statut.
Cette section du code est utilisée pour déplacer le robot vers l' avant et vers l'arrière :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, FAIBLE); digitalWrite (12, HIGH); retard (1000); a = 1; }
Mais il y a un problème avec cette méthode lorsque le moteur se déplace vers l'arrière, le sol revient et le bot avancera, et il répétera en bloquant le bot. Pour surmonter cela, nous stockons une valeur (1) dans int après avoir compris que le plancher n'est pas présent. Nous vérifions également cette condition pour d'autres mouvements.
Après avoir détecté l'absence du sol, le robot ne se déplacera pas vers l'avant. Au lieu de cela, il se déplacera vers la gauche, de cette façon, nous pouvons éviter le problème.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
Dans la condition ci-dessus. Tout d'abord, le robot vérifiera l'état de l'étage et la valeur entière. Le bot n'avancera que si toutes les conditions sont remplies.
Maintenant, nous pouvons écrire les commandes pour le pilote du moteur. Cela entraînera le moteur droit vers l'arrière et le moteur gauche vers l'avant, tournant ainsi le robot vers la droite.
Cette section du code est utilisée pour déplacer le robot à droite:
digitalWrite (4, HIGH); digitalWrite (7, FAIBLE); digitalWrite (8, HIGH); digitalWrite (12, FAIBLE);
Si le bot détecte que l'étage est absent, la valeur passe à 1 et le bot se déplace vers la gauche. Après avoir tourné à gauche, la valeur de «a» passe de 1 à 0.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, FAIBLE); digitalWrite (8, FAIBLE); digitalWrite (12, HIGH); retard (100); a = 0; }
Cette section du code est utilisée pour déplacer le robot vers la gauche:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, FAIBLE); }
C'est tout pour construire un robot aspirateur intelligent basé sur Arduino. Le fonctionnement complet du projet peut être trouvé dans la vidéo liée au bas de cette page. Si vous avez des questions, commentez ci-dessous.