[Programmation] servo commandé par IR avec arduino uno
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

servo commandé par IR avec arduino uno



  1. #1
    ditonton

    servo commandé par IR avec arduino uno


    ------

    Bonjour.
    je commande mon servo de 0 à 170° grâce a la détection par IR.
    le problème est que toutes les 2 à 3 minutes (hors détection) j'ai 15 impulsions parasites qui font vibrer le servo!
    comment supprimer les parasites?
    Je suppose que le langage est mal écrit.
    Pouvez-vous m'aider s'il vous plait et merci
    nota , j'ai gardé le même nom de la variable pour bricoler le script mais il n'n'y a pas de boutton poussoir. La détection se fait bien par IR sur la broche 8.
    Code:
    / sketch capteur IR cmd servo
    
    # include <Servo.h> //permet de faire appel à la bibliothèque servo
    Servo monservo;
    int ObstaclePin = 8; // broche de sortie du capteur ir
    int Obstacle = LOW;  // variable de test
    int buttonPin = 9; // bouton poussoir en broche 9
    int buttonState; // variable qui permet d'enregister l' état du bouton 
    
    void setup() {
    Serial.begin(9600);  
    pinMode (ObstaclePin, INPUT); //broche 8 déclarée comme entrée
    monservo.attach(9); // commande du Servo venant de la bibliotheque
    pinMode (buttonPin, OUTPUT); //broche 9 du bouton poussoir déclarée en tant que sortie
    
    }
    void loop() {
    Obstacle = digitalRead(ObstaclePin); //lecture de l'état du capteur
    
     if (buttonState == HIGH)// si obstacle == LOW==> (non detecté)led verte allumée si obstacle détecté led rouge alumée
     digitalWrite ( buttonPin, HIGH); // laisser la broche à l' état bas
     monservo.write(170);
     delay (500);
      
     if ( Obstacle == LOW) // si l'état du bouton est high
      monservo.write(0);
     delay (500);
     digitalWrite ( buttonPin, LOW); // mettre la broche 9 à l'état haut
    
    
      {
        delay(100);
      }
    }

    -----
    Dernière modification par Antoane ; 09/02/2020 à 13h08. Motif: ajout balises code

  2. #2
    Seb.26

    Re : servo commandé par IR avec arduino uno

    Utilise la balide CODE pour le code ...

    Code:
    # include <Servo.h> //permet de faire appel à la bibliothèque servo
    Servo monservo;
    int ObstaclePin = 8; // broche de sortie du capteur ir
    int Obstacle = LOW; // variable de test
    int buttonPin = 9; // bouton poussoir en broche 9
    int buttonState; // variable qui permet d'enregister l' état du bouton
    
    void setup() {
    Serial.begin(9600);
    pinMode (ObstaclePin, INPUT); //broche 8 déclarée comme entrée
    monservo.attach(9); // commande du Servo venant de la bibliotheque
    pinMode (buttonPin, OUTPUT); //broche 9 du bouton poussoir déclarée en tant que sortie
    
    }
    void loop() {
    Obstacle = digitalRead(ObstaclePin); //lecture de l'état du capteur
    
    if (buttonState == HIGH)// si obstacle == LOW==> (non detecté)led verte allumée si obstacle détecté led rouge alumée
    digitalWrite ( buttonPin, HIGH); // laisser la broche à l' état bas
    monservo.write(170);
    delay (500);
    
    if ( Obstacle == LOW) // si l'état du bouton est high
    monservo.write(0);
    delay (500);
    digitalWrite ( buttonPin, LOW); // mettre la broche 9 à l'état haut
    
    
    {
    delay(100);
    }
    }
    Tu peux faire un peu de ménage ... on comprend pas grand chose ...
    -> HIGH pour état bas et inversement
    -> pin bouton en sortie
    -> buttonState est utilisé mais jamais modifié ?!
    -> pas d'accolades dans les if(), c'est normal ?

    un programme qui marche, ça commence par un programme lisible ...
    Dernière modification par Seb.26 ; 05/02/2020 à 12h18.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    umfred

    Re : servo commandé par IR avec arduino uno

    j'ai l'impression qu'il y a un problème d'accolade (à cause du copier/coller ?) au niveau des tests if
    le code tel qu'écrit, exécute les commandes monservo.write(xx) quelque soit les états de obstacle et de buttonState à chaque fois qu'on rentre dans loop()

  4. #4
    ditonton

    Re : servo commandé par IR avec arduino uno

    essai d'un premier scipte désolé
    Merci je vais essayer de profiter de vos remarques

  5. A voir en vidéo sur Futura
  6. #5
    ditonton

    Re : servo commandé par IR avec arduino uno

    bonjour à tous.
    j'ai tenu compte de vos remarques et ça marche.
    il est un peu difficile de se jeter à l'eau...
    voici ce que j'ai fait et mon problème de parasites est résolu.
    il est surement possible de faire mieux mais bon le résultat est là.
    Merci à vous.

    Code:
    // squetch capteur IR cmd servo
    
    # include <Servo.h> //permet de faire appel à la bibliotheque servo
    Servo monservo;
    int ObstaclePin = 8; // broche d' entrée (détection par le capteur ir).
    int Obstacle; //  variable de test
    int commandeservoPin = 9; //  broche 9 commande du servo
    int positionservoState; // variable qui permet d'enregister la position du servo 
    
    void setup() {
    Serial.begin(9600);  
    pinMode (ObstaclePin, INPUT); //broche 8 déclarée comme entrée
    monservo.attach(9); // commande du Servo venant de la bibliotheque
    pinMode (commandeservoPin, OUTPUT); //broche 9 déclarée en tant que sortie pour commander le servo.
    
    }
    void loop() {
    Obstacle = digitalRead(ObstaclePin); //lecture de l'état du capteur
    
    if (positionservoState == 1)
     digitalWrite ( commandeservoPin, 1); // mettre le servo à 170°
     monservo.write(170);
     delay (500);
      
    if ( Obstacle == 0 ) // si l'état du bouton est à 0
      monservo.write(0);
      delay (500);
      {
     delay(1000);
      }
    }
    Dernière modification par Antoane ; 09/02/2020 à 13h07. Motif: Ajout balises code

  7. #6
    Seb.26

    Re : servo commandé par IR avec arduino uno

    Code:
    void loop() {
    Obstacle = digitalRead(ObstaclePin); //lecture de l'état du capteur
    
    if (positionservoState == 1)
     digitalWrite ( commandeservoPin, 1); // mettre le servo à 170°
     monservo.write(170);
     delay (500);
      
    if ( Obstacle == 0 ) // si l'état du bouton est à 0
      monservo.write(0);
      delay (500);
      {
     delay(1000);
      }
    }
    Je ne vois pas comment ça peut marcher, mais tant mieux si tout va bien...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    Seb.26

    Re : servo commandé par IR avec arduino uno

    A minima, je ferai :
    Code:
    void loop()
    {
      Obstacle = digitalRead(ObstaclePin); //lecture de l'état du capteur
    
      if (positionservoState == 1)   //!\\ Qui modifie 'positionservoState' ??!!!!
      {
        digitalWrite ( commandeservoPin, 1); // mettre le servo à 170°
        monservo.write(170);
        delay (500);
      }
      
      if ( Obstacle == 0 ) // si l'état du bouton est à 0
      {
        monservo.write(0);
        delay (500);
      }
    
      delay (1000);
    }
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. #8
    Seb.26

    Re : servo commandé par IR avec arduino uno

    Et comme je suis sympa ...

    Code:
    // squetch capteur IR cmd servo
    # include <Servo.h> //permet de faire appel à la bibliotheque servo
    
    #define ObstaclePin 8
    #define CommandeServoPin 9
    
    Servo monservo;
    
    void setup()
    {
      pinMode (ObstaclePin, INPUT); // broche déclarée comme entrée, pas de pullup ... ??!
    
      monservo.attach(CommandeServoPin ); // commande du Servo venant de la bibliotheque
    }
    
    void loop()
    {
      if( digitalRead(ObstaclePin) )
      {
        monservo.write(170);
        delay(500);
      }
      else
      {
        monservo.write(0);
        delay(500);
      }
    
      delay(1000); // à adapter
    }
    Dernière modification par Seb.26 ; 06/02/2020 à 12h19.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Discussions similaires

  1. [Programmation] Commande Servo Arduino
    Par Coconut92 dans le forum Électronique
    Réponses: 5
    Dernier message: 06/04/2016, 09h20
  2. Exemple/Tuto - Potar + Servo avec ma bibliothèque (sans Arduino)
    Par sylvainmahe dans le forum Électronique
    Réponses: 7
    Dernier message: 06/09/2015, 17h46
  3. commande accélarateur avec arduino
    Par jack79 dans le forum Électronique
    Réponses: 11
    Dernier message: 16/07/2015, 14h50
  4. commande de 2 servo avec la même impulsion
    Par alainav1 dans le forum Électronique
    Réponses: 5
    Dernier message: 17/01/2015, 15h45
  5. Commande simple d'un servo avec un pic
    Par thor35 dans le forum Électronique
    Réponses: 2
    Dernier message: 18/03/2008, 17h58
Découvrez nos comparatifs produits sur l'informatique et les technologies.