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 :

Programmer un servomoteur avec millis();


Sujet :

Arduino

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Programmer un servomoteur avec millis();
    Bonjour, j'ai un projet à faire en classe et je n'arrive pas à faire fonctionner mon programme correctement, j'ai fait un schéma pour expliquer ce que je dois faire. Nom : Annotation 2019-04-06 182816.jpg
Affichages : 676
Taille : 77,9 Ko

    Je mets mon code en dessous.

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #include <Servo.h> //inclusion de la bibliothèque Servo
    #include <SoftwareSerial.h> //inclusion de la bibliothèque SoftwareSerial
     
    Servo monServomoteur; //crée un objet servo pour contrôler le servomoteur
    SoftwareSerial xbee(2, 3); //émission and réception
     
    const int IN1 = 4; //variable qui envoie et reçoit les informations entre le pont H et l'Arduino
    const int IN2 = 5; //variable qui envoie et reçoit les informations entre le pont H et l'Arduino
     
    const int microrupteur1 = 9; //le microrupteur est connecté à la broche 9 de la carte Arduino
    const int microrupteur2 = 10; //le microrupteur est connecté à la broche 10 de la carte Arduino
     
    String statut_livraison = "+304"; //met la valeur "+304" dans statut_livraison
    String statut_devant_quai = "&404"; //met la valeur "&404" dans statut_devant_quai
     
    long temps;
     
    void setup()
    {
      Serial.begin(9600); //régle le débit de données du Arduino
      Serial.println("arduino commence à envoyer des données via XBee");
     
      Serial.begin(9600); //régle le débit de données des capteurs IR
      Serial.println("capteur IR");
      pinMode (11,INPUT); //définit le pin 11 comme entrée du capteur IR 1
      pinMode (12,INPUT); //définit le pin 12 comme entrée du capteur IR 2
      pinMode (13,INPUT); //définit le pin 13 comme entrée du capteur IR 3
     
      pinMode(microrupteur1, INPUT); //définit le pin 9 comme entrée pour le microrupteur
      pinMode(microrupteur2, INPUT); //définit le pin 10 comme entrée pour le microrupteur
     
      pinMode(IN1,OUTPUT); //définit IN1 comme sortie de commande du moteur
      pinMode(IN2,OUTPUT); //définit IN2 comme sortie de commande du moteur
     
      monServomoteur.attach(6); //rattache le servomoteur au pin 6
     
      temps = millis();
    }
     
    void loop()
    {
      int ir1 = digitalRead(11); //la variable ir1 lit ce que le capteur IR 1 reçoit
      delay(50); //tous les 50 millisecondes
      int ir2 = digitalRead(12); //la variable ir2 lit ce que le capteur IR 2 reçoit
      delay(50); //tous les 50 millisecondes
      int ir3 = digitalRead(13); //la variable ir3 lit ce que le capteur IR 3 reçoit
      delay(50); //tous les 50 millisecondes
     
      int etatMicrorupteur1 = digitalRead(microrupteur1); 
      int etatMicrorupteur2 = digitalRead(microrupteur2);
     
     
      //*présence du drone*\\
     
      if(ir1==0) //le drone est devant le quai
        {
         statut_devant_quai = "&400"; //met la valeur "&400" dans statut_devant_quai
         Serial.println(statut_devant_quai);
         xbee.print(statut_devant_quai); //envoie la valeur via xBee
        }
     
      if(ir1==1) //le drone est introuvable
        {
         Serial.println(statut_devant_quai);
         xbee.print(statut_devant_quai); //envoie la valeur via xBee
        }
     
     
      //*aller*\\
     
      if(ir2==0) //si le capteur IR 2 détecte le drone
        {
          //mettre code pour arrêter la caméra pixy
          if((millis() - temps) > 15)
             {
              monServomoteur.write(90); //écrit (dire) la position du servomoteur
             }
     
          while(etatMicrorupteur2==LOW) //tant que le bouton n'est pas actionné
               {
                digitalWrite(IN1,HIGH); //moteur tourne dans le sens horaire
               }
        }
     
     
      //*présence du colis*\\
     
      if(ir3==0) //passage du colis
        {
         statut_livraison = "+300"; //met la valeur "+300" dans statut_livraison
         Serial.println(statut_livraison);
         xbee.print(statut_livraison); //envoie la valeur via xBee
        }
     
      if(ir3==1) //vide
        {
         Serial.println(statut_livraison);
         xbee.print(statut_livraison); //envoie la valeur via xBee
        }
     
     
      //*retour*\\
     
      if(ir3==0) //si le capteur IR 3 est actionné
        {
         digitalWrite(IN2,HIGH); //moteur tourne dans le sens antihoraire
         if(etatMicrorupteur1==HIGH) //si le microrupteur1 est actionné
           {
            digitalWrite(IN2,LOW); //coupe le moteur
           }
         if((millis() - temps) > 15)
             {
              monServomoteur.write(90); //écrit (dire) la position du servomoteur
             }
        }
    }

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Qu'est-ce que fait bien ton prgramme et qu'est-ce qu'il ne fait pas ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Quand je mets mon programme en marche, le capteur IR détecte et le servo se lève puis le moteur tourne mais après rien ne fonctionne. Le microrupteur ne fonctionne pas quand on l'active du coup le reste du programme ne peut pas s'exécuter. Aussi le servo bloque l'envoi des informations au site web via xbee.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    As-tu testé par ailleurs le fonctionnement des micro-rupteurs, dans une autre programme ou en plaçant différemment tes tests ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    oui j'ai fait un petit programme où quand j'actionne le microrupteur, le moteur fonctionne et ça fonctionne. C'est quand je l'intègre dans mon gros programme, ça fonctionne pas.

  6. #6
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour
    Dans ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(etatMicrorupteur2==LOW) //tant que le bouton n'est pas actionné
               {
                digitalWrite(IN1,HIGH); //moteur tourne dans le sens horaire
               }
    Tu ne vas jamais relire l'état du microrupteur2 !
    Ajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int etatMicrorupteur2 = digitalRead(microrupteur2);
    Dabs la boucle While.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, je crois que le problème des microrupteurs est résolu mais j'ai toujours un problème avec mon servomoteur. Enfaite je voudrais qu'il tourne à 90° puis qu'il reste dans cette position mais quand je le mets en marche, il tourne bien mais ensuite il repart dans sa position initiale. Auriez-vous une idée ?

Discussions similaires

  1. Peut-on programmer un morpion avec Prolog ?
    Par c_khadi dans le forum Prolog
    Réponses: 1
    Dernier message: 16/12/2006, 21h37
  2. Réponses: 20
    Dernier message: 29/03/2006, 11h37
  3. Réponses: 3
    Dernier message: 29/06/2005, 13h56
  4. Executer un programme, et interargir avec
    Par TheDarkLewis dans le forum Windows
    Réponses: 3
    Dernier message: 19/09/2004, 00h26
  5. Créer de programme pour WIndows avec Turbo Pascal
    Par kaygee dans le forum Turbo Pascal
    Réponses: 16
    Dernier message: 20/08/2003, 23h22

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