IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Guidage par induction pour un robot avec Arduino UNO


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Guidage par induction pour un robot avec Arduino UNO
    Bonjour.

    Je suis nouveau ici. Je suis du Québec et depuis peu, j'ai découvert l'Arduino et j'ai bien du plaisir a l'utiliser et a apprendre la programmation de cet plaquette.

    J'ai longtemps fait de la programmation d'automate (Omron) mais j'ai cessé depuis un certain temps, mais je programmais avec du ladder, très différent
    du language de l'Arduino.

    Je suis présentement a fabriquer un robot qui sera guidé par un fil émetteur qui sera inséré dans un plancher de béton.

    J'ai déja fait le programme sur un Arduino UNO et jusqu'a présent, ce que j'ai fait fonctionne.

    J'aimerai ajouter maintenant a mon code, une horloge qui me permettrai de programmer le robot pour qu'il puisse démarrer son cycle,
    4 fois par jour automatiquement mais je ne trouve pas comment procéder et si c'est possible de le faire.

    J'aimerai aussi ajouter la fonction que lorsque le robot démarrera, que la vitesse augmente graduellement jusqu'a la valeur de vit_max.

    Si quelqu'un peut me diriger, j'en serai fort heureux

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    //Broche d'entrées analogique
    int ind_g = A0; // inductance gauche                                              
    int ind_d = A1; // inductance droite                                              
    int sig_g; // signal gauche out ampli
    int sig_d; // signal droite out ampli
     
    //Broches alim. moteur
    int EN_A = 11;      //Broche d'activation moteur gauche
    int IN1 = 9;       //Broche de contrôle moteur gauche
    int IN2 = 8;       //Broche de contrôle moteur gauche
    int IN3 = 7;        //Broche de contrôle moteur droit
    int IN4 = 6;        //Broche de contrôle moteur droit
    int EN_B = 10;      //Broche d'activation moteur droit
     
    //Initialisation de variables pour stocker des données
    int moteur_g;     //sortie analogique moteur gauche
    int moteur_d;     //sortie analogique moteur droit
    int vit_max;      //vitesse maximum de déplacement
    int vit_max2;     //vitesse maximum de déplacement - 1
     
     
    void setup ( ) {
      Serial.begin (9600); //Démarrage de la communication série à un débit de 9600 bauds
     
      //Initialisation des broches du moteur en sortie
      pinMode(EN_A, OUTPUT);
      pinMode(IN1, OUTPUT);  
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);  
      pinMode(IN4, OUTPUT);
      pinMode(EN_B, OUTPUT);
     
    //Initialisation des broches d'entrées analogique
      pinMode (ind_g, INPUT) ;                     
      pinMode (ind_d, INPUT) ;                      
    }
     
    void loop () {
        sig_g = analogRead (ind_g) ;      //Entrée capteur gauche
        sig_d = analogRead (ind_d) ;      //Entrée capteur droit
        vit_max = 150;      //valeur de la vitesse maximum de déplacement
        vit_max2 = (vit_max-1);     //valeur de la vitesse de déplacement maximale - 1
     
     
    // CONTRÔLE MOTEUR GAUCHE
    if  (sig_g > 400) {   // marche pleine puissance moteur gauche
        delay(10);
        moteur_g = (vit_max);
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        analogWrite(EN_A, moteur_g);   //activation moteur gauche 
      }
     
       if  (sig_g >= 50 and sig_g <= 380) {    
        moteur_g = map(sig_g, 50, 390, 0, vit_max2);   //Mapper les valeurs sur 0 a vitesse maximale pour le moteur gauche
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        analogWrite(EN_A, moteur_g);   //activation moteur gauche    
     
      }
     
      if  (sig_g < 50) {   // arrêt complet du moteur gauche
        delay(10);
        moteur_g = (0);
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        analogWrite(EN_A, moteur_g);   //activation moteur gauche
      }
     
     
    // CONTRÔLE MOTEUR DROIT
    if (sig_d > 400){     //marche pleine puissance moteur droit
        delay(10);
        moteur_d = (vit_max);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        analogWrite(EN_B, moteur_d);   //activation moteur droit
     
      }
     
      if  (sig_d >= 50 and sig_d <= 380) {    
        moteur_d = map(sig_d, 50, 390, 0, vit_max2);   //Mapper les valeurs sur 0 a vitesse maximale pour le moteur droit
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        analogWrite(EN_B, moteur_d);   //activation moteur droit
        Serial.println(vit_max2);
     
      }
     
      if (sig_d < 50){     //arrêt complet moteur droit
        delay(10);
        moteur_d = (0);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        analogWrite(EN_B, moteur_d);   //activation moteur droit
     
      } 
     
      }
    Merci

    Jacques3012

  2. #2
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    J'ai regardé rapidement ton code.

    Je pense que moteur_d et moteur_g ont toujours la même valeur.
    Donc il faut partir d'un minimum et les augmenter jusqu'au maximum dans la boucle.

    Pour les 4 fois par jour, il faudrait une heure, une horloge.
    Cela devrait être assez facile avec un accès WiFi ou RTC (je ne connais pas).
    https://openclassrooms.com/forum/suj...-heure-precise
    https://forum.projetsdiy.fr/t/recupe...e-ntpclient/78

    Je pense qu'il y a plein de sites Web sur ce sujet.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Bonjour.

    Les deux moteurs n'ont pas toujours la même valeur, tout dépend des deux capteurs a inductance qui détectent le fil qui émet l'onde. Si un des deux capteurs s'éloigne, le moteur de la roue opposé réduira sa vitesse pour que les deux capteurs détectent l'onde également. Moi ce que j'aimerai, c'est que lors du démarrage du robot, que les deux moteurs augmentent progressivement jusqu'a la valeur maximum demandé. Et a cela, s'ajoute une horloge qui me permet de faire démarrer le robot 4 fois par jour a des heures programmable.

    Merci pour votre message.

    Jacques3012

Discussions similaires

  1. Stabilisation d'un bateau avec Arduino Uno
    Par seb201 dans le forum Arduino
    Réponses: 113
    Dernier message: 21/02/2020, 22h52
  2. Projet feux carrefour ( avec arduino UNO R3)
    Par Jsay12 dans le forum Arduino
    Réponses: 4
    Dernier message: 15/05/2019, 20h37
  3. [Lazarus] TLazSerial communique (mal) avec Arduino UNO
    Par Eric Beaumard dans le forum Lazarus
    Réponses: 6
    Dernier message: 08/09/2018, 16h34
  4. Recyclage de clavier d'ordi portable avec Arduino Uno
    Par jeremygosset dans le forum Arduino
    Réponses: 3
    Dernier message: 24/06/2016, 23h58
  5. problème avec média player par défaut pour les vidéos ?
    Par tomguiss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/10/2005, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo