Robot Suiveur de Ligne - Arduino Mega / uno - Très Rapide avec la Manipulation de Port: 9 Étapes (avec Images)

Robot Suiveur de Ligne - Arduino Mega / uno - Très Rapide avec la Manipulation de Port: 9 Étapes (avec Images)

Table des matières:

Anonim

Le robot suiveur de ligne est un robot utile utilisé dans les entrepôts, les industries, les magasins, etc., où il suit un chemin dédié. Le robot présenté capture la position de la ligne avec des capteurs IR. Si le robot quitte la ligne, il fera demi-tour et reviendra à la ligne. En outre, il s’arrêterait pendant l’apparition de l’emplacement désigné. J'ai utilisé la méthode de manipulation de port directe (définition directe des broches de sortie) au lieu d'utiliser les fonctions Arduino par défaut digitalWrite (). L’utilisation de la méthode de manipulation de port dans la programmation donne plus d’espace dans le fichier HEX et plus de vitesse l'exécutionle code.

Par exemple:

Regardons l'exemple de clignotement, cette information provient de l'IDE Arduino

Sketch utilise 928 octets (2%) d'espace de stockage du programme. Le maximum est 32,256 octets.

Maintenant, en utilisant l'exemple similaire suivant (manipulation du port)

#comprendre

#include void setup () {DDRB = B11111111; } boucle vide () 0x20; // écrit PORTB5 low _delay_ms (500); PORTB = PORTB & 0xDF; // écrit PORTB5 high _delay_ms (500);

L'esquisse ci-dessus utilise 488 octets (1%) d'espace de stockage du programme. Le maximum est 32,256 octets.

Voir la figure ci-dessus (comparez les deux schémas similaires).

voir une excellente introduction sur http: //www.arduino.cc/en/Reference/PortManipulat …

à propos de la manipulation de port directe, en utilisant les ports numériques partie 3 du tutoriel

En savoir plus sur les maths et les opérateurs logiques du Bitwise partie 4 du tutoriel.

Provisions:

Étape 1: Composants requis

Liste des composants:

  1. 1pcs conducteur de moteur L298N.
  2. 1pcs contrôleur ARDUINO MEGA2560. Ou ARDUINO UNO
  3. Module de suivi de ligne 5pcs.
  4. Moteur 4pcs.
  5. Roues 4pcs.
  6. Source de courant.
  7. 1pcs châssis de robot.
  8. Fils de connexion.
  9. Bouclier Capteur. (optionnel). ou planche à pain.

Ou vous venez d'un kit de trou.

Étape 2: achat et montage du robot de voiture

Pour rendre ce projet réalisable pour tous les âges et le rendre le plus simple possible, je suggère d'acheter un kit de trous chez n'importe quel fournisseur de votre choix.

Par exemple, vous pouvez acheter ce kit chez Amazon Elegoo EL-KIT-012

vous devriez acheter un module de capteurs infrarouges supplémentaire chez Amazon Infrared Black White Line Detection

vous pouvez voir les instructions de montage

sur ASSEMBLE KIT DE ROBOT DE VOITURE ELEGOO SMART V1.0

ou sur ASSEMBLE ELEGOO ARDUINO ROBOT VERSION 2.0

Rappelles toi: Pour acheter un module de capteurs infrarouges supplémentaire Si le kit est livré avec moins de 5 modules de capteurs infrarouges.

vous devez placer le capteur infrarouge supplémentaire à côté des autres et essayer de les fixer au même niveau afin qu’ils ressemblent à la figure ci-dessus).

Vous pouvez utiliser un pistolet à colle comme outil pour fixer les capteurs supplémentaires.

Remarque: Les cinq capteurs doivent être identiques car certains émettent un signal de sortie différent tout en détectant la même couleur de lignes. Si vous avez déjà un type différent entre vos mains, ne vous inquiétez pas, il vous suffit de prendre l’onduleur du signal de sortie.

disons A = 1 | alors Y = ~ A = 0. nous traitons clairement Valeurs booléennes. Une autre solution consiste à modifier manuellement tous les signaux de sortie des capteurs de haut en bas et inversement.

Étape 3: Mise en route: Étudiez les cas de test

Les procédures détaillées comme suit:

  • Donner chaque capteur un nom dépend de sa composition sur le châssis de la voiture: (voir figure ci-dessus)
    • Numéro de capteur (1) = LF1
    • Numéro de capteur (2) = LF
    • Numéro de capteur (3) = MID
    • Numéro de capteur (4) = RT
    • Numéro de capteur (5) = RT1
  • Connectez les cinq capteurs au méga ou au arduino comme suit: toutes les entrées de terre à la terre et de tension Arduino Au arduino + 5V.
  • Signaux de sortie LF1 vers la broche A0.
  • Signaux de sortie BF à la broche A1.
  • Signal de sortie MID vers la broche A2.
  • Signaux de sortie RT à la broche A3.
  • RT1Signaux de sortie Pour épingler A4.

  • Utilisez un ruban noir électrique pour effectuer des lignes droites sur le sol + un virage à 90 degrés.
  • Téléchargez le programme de test ci-joint. (Testing.ino)
  • Connectez la carte Arduino à votre ordinateur et téléchargez le croquis.
  • Ouvrez le moniteur de série et commencez à placer la voiture sur la ligne et branchez toutes les conditions possibles.

Étape 4: Résultats du test

Le moniteur série affiche les résultats lors du déplacement du capteur de suivi de ligne sur fond blanc vers une ligne noire. Le module de capteur a une sortie HIGH lorsqu'il est soumis à la ligne noire et un signal de sortie LOW lorsqu'il est soumis à une autre couleur blanche ou claire. Voir les figures ci-dessus

je Déterminez toutes les situations dont j'ai besoin pour mon sentier dessiné .qui est quand:

  • S1 + S2 + S3 prend la ligne que la voiture tourne complètement laissé 90 degrés. S'affiche sur le moniteur de série (11100).
  • S3 + S4 + S5 prendre la ligne la voiture tourne complètement 90 degrés à droite. Affiche sur le moniteur de série (00111).
  • Olny S3 attraper la ligne la voiture aller tout droit. Affiche sur le moniteur de série (00100).
  • Tous les capteurs Catch the line line the car Arrêtez. Affiche sur le moniteur de série (11111).
  • Tous les capteurs hors ligne de la voiture U Retournez à la ligne. Affiche sur le moniteur de série (00000).

Ce sont les cas de base ci-dessus.

  • S1 attraper la ligne la voiture tournerlégèrement à gauche. Affiche sur le moniteur de série (10000).
  • S2 attraper la ligne la voiture tournelégèrement à gauche. S'affiche sur le moniteur de série (01000).
  • S4 attraper la ligne la voiture aller légèrement à droite. Affiche sur le moniteur de série (00010).
  • S5 attraper la ligne la voiture allerlégèrement à droite.Affiche sur le moniteur de série (0001).

Plus de cas possibles sont trouvés:

  • S1 + S2 rattrape la file la voiture tourne légèrement à gauche.. Affiche sur le moniteur de série (11000).
  • S2 + S3 rattrape la ligne. la voiture tourne légèrement à gauche. S'affiche sur le moniteur série (01100).
  • S3 + S4 rattrape la ligne. le tour de soin légèrement à droite. Affiche sur le moniteur série (00110).
  • S4 + S5 rattraper la ligne la voiture tournelégèrement à droite.. Affiche sur le moniteur de série ((00011).

Deux autres cas non nécessaires: (J'inclurais juste au cas où cela arriverait)

  • S1 + S2 + S3 + S4 prend la ligne. La voiture tourne Entièrement à gauche 90 degrés.(11110).
  • S2 + S3 + S4 + S5 rattrape la ligne. La voiture tourne Entièrement à droite 90 degrés.(01111).

Évidemment nous avons 15 cas que nous devons apprendre au robot à manipuler.

Remarque: Les cartes de microcontrôleur peuvent être programmées directement par le port. Créer un port de trou comme port d’entrée ou comme port de sortie.

Chaque port a 8 bits peuvent être utilisés séparément un à un ou simplement tout le port en entrée ou en sortie et c'est ce que je vais faire ensuite pour la programmation.

Se plus d'informations

Voir aussi (Comment contrôler les pins arduino à partir de registres sans digitalWrite et digitalRead)

Étape 5: Connexion et câblage !!! (Registre portuaire direct)

Pour Arduino Mega / uno, voir le diagramme des broches du port ci-dessus: pour une autre carte, vous pouvez voir le brochage des ports et effectuer des modifications dans la connexion; seul le schéma fonctionnera à coup sûr, vous aurez simplement besoin de deux ports différents.

Notez que les deux moteurs de gauche doivent être connectés parallèlement l'un à l'autre, puis à l'entraînement par moteur. Même chose pour les bons moteurs.

  • La connexion pour Arduino Mega Left Motors First:
    • La direction avant se connecte à la broche 52 - PB2
    • La direction arrière se connecte à la broche 53 - PB0 // Premier pari au port B
  • Les moteurs de droite
    • Le sens avant se connecte à la broche 50 - PB3
    • la direction arrière se connecte à la broche 51 - PB1
  • La connexion des capteurs:

    • S1 à la broche 22 - PA0 // Premier pari au port A
    • S2 à la broche 23 - PA1
    • S3 à la broche 24 - PA2
    • S4 à la broche 25 - PA3
    • S5 à la broche 26 - PA4 // Le cinquième pari au port A
  • La connexion pour Arduino Uno Left Motors First:

    • Le sens avant se connecte à la broche 10 - PB2
    • La direction arrière se connecte à la broche 8 - PB0 // Premier pari au port B
  • Les moteurs de droite

    • Le sens avant se connecte à la broche 11 - PB3
    • la direction arrière se connecte à la broche 9- PB1
  • La connexion des capteurs.
  • S1 à la broche A0 - PC0 // Premier pari au port C

    • S5 sur A4- PC4 // Le cinquième pari au port C
    • S4 à la broche A3 - PC3
    • S3 à la broche A2 - PC2
    • S2 à la broche A1- PC1

Étape 6: Encore une étape avant de coder

Conversion de tous les résultats de test binaires en décimal:

AS affiché sur le moniteur série uniquement 5 bits, en réalité 8 bits, mais dans mon schéma de test, je n’identifie que pour 5 entrées (5 capteurs). De toute façon, je veux dire quand des séries 10000-- c'est en fait 00010000 sous forme de nombre binaire et de 16 sous forme décimale ((il suffit d'ajouter trois zéros à gauche)). Si vous souhaitez inclure plus de cas ou si vous souhaitez ajouter plus de capteurs, vous pouvez utiliser n'importe quelle calculatrice de conversion de nombres pouvant être trouvée en ligne: Exemple

on a:

  • 00000 - case (0) // Notez que le nombre binaire converti est indiqué entre parenthèses en décimal.
  • 00001 - caisse (1)
  • 00010 - caisse (2)
  • 00100 - caisse (4)
  • 01000 - caisse (8)
  • 10000 - caisse (16)
  • 00011 - caisse (3)
  • 00110 - boîtier (6)
  • 01100 - boîtier (12)
  • 11000 - caisse (24)
  • 00111 - boîtier (7)
  • 11100 - caisse (28)
  • 01111 - boîtier (15)
  • 11110 - boîtier (30)
  • 11111 - affaire (31)

Étape 7: Codage pour Arduino Mega2560

Je trouve un bon fichier pdf et explique la fonction de commutation que j’utilise en programmation (voir fichier joint).

/ * Robot Suiveur de Ligne - 5 capteurs inclus / manipulation de port directe Pour Arduino Mega2560 créé par: Ali Shwaiheen Mars 2018 * /

#include // fichier d'en-tête pour inclure le port d'entrée / sortie int main (void) // fonction principale {unsigned char z; DDRA = 0x00; // définit PORTA comme port d'entrée (DDRA = 0x00 DDRA = 0b00000000) même commande DDRB = 0xFF; // définit PORTB comme outputport

while (1) // crée une boucle infinie (répétez forver)

{z = PINA; // port de lecture A switch (z) // prise de décision {case (28): // entièrement à gauche 90 degrés {PORTB = 0x09; // wirte High to PB0 & PB3 break; } case (30): // entièrement à gauche à 90 degrés {PORTB = 0x09; Pause; } case (7): // entièrement à droite à 90 degrés {PORTB = 0X06; // wirte High to PB1 & PB2 break; } case (15): // entièrement à droite à 90 degrés {PORTB = 0x06; Pause; } case (8): // légèrement à gauche. {PORTB = 0x02; // wirte High to PB1 break; } case (12): // légèrement à gauche. {PORTB = 0x02; Pause; } case (16): // légèrement à gauche. {PORTB = 0x02; Pause; } case (24): // légèrement à gauche. {PORTB = 0x02; Pause; } case (1): // légèrement à droite. {PORTB = 0x08; // wirte High to PB3 break; } case (2): // légèrement à droite. {PORTB = 0x08; Pause; } case (3): // légèrement correct. {PORTB = 0x08; Pause; } case (6): // légèrement à droite. {PORTB = 0x08; Pause; } case (4): // Straight {PORTB = 0x0A; // wirte High to PB1 & PB3 break; } case (0): // U retourne à la ligne {PORTB = 0x09; // 09 est en nombre hexadécimal break; } case (31): // STOP {PORTB = 0x00; // Write Low to PB0 to PB7 break; }}} retourne 0; }

Étape 8: Code Vedio * pour Arduino Uno

Merci à tous. Tous sont invités à me corriger si quelque chose ne va pas. Sentez-vous libre de poser des questions.

Tout le temps que vous passez à lire mes INSTRUCABLES est apprécié.

S'amuser:)