Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Robot incendie: programme

  1. #1
    Manonsti2d

    Question Robot incendie: programme

    Bonjour,

    En bref, je dois faire une robot incendie pour le Bac. Ce robot possède un capteur ultrasons HC-SR04. (plus de détails sur le robot http://forums.futura-sciences.com/te...-capteurs.html)

    Image1.pngImage2.pngImage3.png

    Je me questionne sur la validité de mon programme. Est-il bon ? Des erreurs de définition de variables, contradictions ... ? Je ne connais pas trop la programmation, alors merci d'avance de votre aide

    -----


  2. Publicité
  3. #2
    JPL

    Re : Robot incendie: programme

    Les programmes doivent être postés en mode texte encadré par les balises [Code]...[/Code] (outil# dans l’éditeur en mode avancé) et en aucun cas sous forme d’image. Merci.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #3
    Manonsti2d

    Re : Robot incendie: programme

    Navrée, je ne savais pas comment faire. Merci

    Code:
    #define PROCHE 20
    #define DANGER 10
    #define AFOND 200
    #define PRUDENT 50
    #define NBMESURE 5
    #define VSON 59
    //initialisation
    int pinSRF=2; //pin numérique utilisé pour le capteur ultrasons.
    
    void setup() {
      Serial.begin(9600);
    }
    
    void loop() {
      switch (mesure()){ //utilisation de la condition switch
        case 0: //l'obstacle est dans la zone DANGER
          Serial.println("*DANGER*");
          arret(); // on arrête le robot
          delay(200);
          recule(PRUDENT); // on le fait reculer un peu
          delay(200);
          recherche(); // on recherche la bonne voie
          break;
        case 1: //l'obstacle est dans la zone PROCHE
          Serial.println("Attention...");
          avance(PRUDENT); // on ralentit la vitesse
        default:
          avance(AFOND);
      }
    }
    //fonctions
    int mesure(){
      //fonction qui mesure une distance avec le capteur
      unsigned long mesure = 0; // variable de mesure
      unsigned long cumul = 0; //variable pour la moyenne
      for (int t = 0; t < NBMESURE; t++) { // boucle pour effectuer les mesures
        pinMode (pinSRF, OUTPUT); //on prépare le pin pour envoyer le signal
        digitalWrite(pinSRF, LOW); //on commence à l'état bas
        delayMicroseconds(2); //on attend que le signal soit clair
        digitalWrite(pinSRF, HIGH);//mise à l'état haut
        delayMicroseconds(10); //pendant 10 µs
        digitalWrite(pinSRF, LOW); //mise à l'état bas
        pinMode(pinSRF, INPUT); //on prépare le pin pour recevoir un état
        mesure = pulseIn(pinSRF, HIGH); // fonction pulseIn qui attend un état haut et renvoie le temps d'attente
        cumul+=mesure; //on cumule les mesures
        delay(50); //attente obligatoire entre deux mesures
      }
      mesure=cumul/NBMESURE; //on calcule la moyenne des mesures
      mesure=mesure/VSON;//on transforme en cm
      
      if (mesure<=DANGER){//on teste si l'obstacle est dans la zone DANGER
        return 0; //si oui, on retourne le code de danger
      }
      else if (mesure>DANGER && mesure<=PROCHE){//on teste s'il est dans la zone PROCHE
        return 1; //si oui, on retourne le code de proche
      }
      return 2; // on retourne le code de sans risque
    }
    void recherche(){
      //fonction pour rechercher un passage
      tourneGauche(AFOND); //on positionne le robot à gauche (facultatif)
      delay (300);
      int etat=0; //variable de test de possibilité d'avancer
      while (etat!=2){ // tant que la distance n'est pas suffisante
        etat=mesure(); // on effectue la mesure
        tourneDroite(PRUDENT); //on fait tourner le robot
      }
      Serial.println("La voie est libre !");
      //retour au programme principal
    }
    void arret(){
      Serial.println("Je stoppe");
      //fonction d'arrêt des moteurs
    }
    void avance(int v){
      Serial.print("J'avance");
      affiche(v);
      //fonctin de mise en route des deux moteurs dans le sens avant
      // on utilise la variable v pour le pilotage PWM
    }
    void recule(int v){
      Serial.print("Je recule");
      affiche(v);
      //fonctin de mise en route des deux moteurs dans le sens arrière
      // on utilise la variable v pour le pilotage PWM
    }
    void tourneDroite(int v){
      Serial.print("Je tourne a droite");
      affiche(v);
      //fonction de rotation à droite : un moteur dans un sens, l'autre dans le sens opposé
      // on utilise la variable v pour le pilotage PWM
    }
    void tourneGauche(int v){
      Serial.print("Je tourne a gauche");
      affiche(v);
      //fonction de rotation à gauche : un moteur dans un sens, l'autre dans le sens opposé
      // on utilise la variable v pour le pilotage PWM
    }
    void affiche(int v){
      //fonction complémentaire d'affichage
      if (v==AFOND){
        Serial.println(" a fond !");
      }
      else{
        Serial.println(" prudemment...");
      }
    }
    Merci beaucoup encore une fois. Au cas où je n'aurais pas été assez précise (et il est probable que ce soit le cas), le programme est juste au niveau de la syntaxe, mais je ne suis pas sûre qu'il corresponde bien à ce que je veux faire ... Si vous avez des pistes, je suis preneuse. Merci beaucoup d'avance

  5. #4
    albanxiii

    Re : Robot incendie: programme

    Bonjour,

    Une question bête : vous n'avez pas de quoi tester ce programme ?
    Not only is it not right, it's not even wrong!

  6. #5
    Jiav

    Re : Robot incendie: programme

    Le code parait très propre, je ne pense pas qu'il contienne de bugs. Par contre il est incomplet car il manque les fonctions aux lignes suivantes
    Code:
      //fonction d'arrêt des moteurs
      //fonctin de mise en route des deux moteurs dans le sens avant
      //fonctin de mise en route des deux moteurs dans le sens arrière
      //fonction de rotation à droite : un moteur dans un sens, l'autre dans le sens opposé
      //fonction de rotation à gauche : un moteur dans un sens, l'autre dans le sens opposé
    Cela ressemble à un exercice, avec un beau squelette de programme où il ne manque que les fonctions spécifiques d'activation des moteurs.

    PS: quand à savoir s'il correspond à ce que vous voulez faire, c'est difficile à dire si vous ne dites pas ce que vous voulez faire
    Dernière modification par Jiav ; 27/02/2018 à 12h45.
    The opposite of a deep truth may well be another deep truth. Information is physical.

  7. #6
    Manonsti2d

    Re : Robot incendie: programme

    Citation Envoyé par albanxiii Voir le message
    Une question bête : vous n'avez pas de quoi tester ce programme ?
    Eh bien non, je ne reçoit la carte qu'au dernier moment, et en dehors des heures de cours je n'ai pas moyen d'installer "l'application" Arduino ...

    Citation Envoyé par Jiav Voir le message
    PS: quand à savoir s'il correspond à ce que vous voulez faire, c'est difficile à dire si vous ne dites pas ce que vous voulez faire
    Effectivement, navrée. J'avais mis un lien vers un autre fil où il y a plus de détails, je remets quand même les spécifications ici.
    Dans le cadre d'un projet pour le bac, nous devons construire un robot capable d'éteindre des incendies. Il possède un capteur HC-SR04, une caméra embarquée (classique, et non thermique). Moteur 100W, roues 1/8, "lance" 15mm (il s'agit en fait d'un tuyau d'arrosage), et je crois que j'ai fait le tour. Il est inspiré du robot-pompier Colossus déjà existant, mais en bien réduit.
    Merci encore de vos réponses

  8. #7
    antek

    Re : Robot incendie: programme

    Citation Envoyé par Manonsti2d Voir le message
    Eh bien non, je ne reçoit la carte qu'au dernier moment, et en dehors des heures de cours je n'ai pas moyen d'installer "l'application" Arduino ...
    Y'a quelque chose qui ne tourne pas rond dans l'éducation nationale . . .
    Dépiauter le programme sur papier est particulièrement fastidieux, celà m'étonnerait que tu trouve un volontaire !

  9. #8
    Jack

    Re : Robot incendie: programme

    Citation Envoyé par antek Voir le message
    Y'a quelque chose qui ne tourne pas rond dans l'éducation nationale . . .
    On y apprend néanmoins qu'on ne doit pas généraliser à partir de cas particuliers

  10. #9
    antek

    Re : Robot incendie: programme

    Citation Envoyé par Jack Voir le message
    On y apprend néanmoins qu'on ne doit pas généraliser à partir de cas particuliers
    Cela va sans dire . . .
    Mais parfois j'ai l'impression que les choses qui ne vont pas sont toujours des cas particuliers.

  11. #10
    Jack

    Re : Robot incendie: programme

    je ne vais pas flooder la discussion, mais ayant travaillé pour le privé et pour l'EN, j'en ai surtout conclu qu'on trouve des incompétents partout.

    Ayant également l'habitude de mener des projets avec des étudiants, j'essaie également de ne pas prendre pour argent comptant tout ce qui peut être affirmé sur le travail demandé.

  12. #11
    antek

    Re : Robot incendie: programme

    Citation Envoyé par Jack Voir le message
    Ayant également l'habitude de mener des projets avec des étudiants, j'essaie également de ne pas prendre pour argent comptant tout ce qui peut être affirmé sur le travail demandé.
    Oui, je me suis sans doute emballé !

  13. #12
    Manonsti2d

    Re : Robot incendie: programme

    Merci pour vos réponses. Je l'ai un peu modifié et voilà le résultat
    Code:
    #define PROCHE 20
    #define DANGER 10
    #define AFOND 200
    #define PRUDENT 50
    #define NBMESURE 5
    #define VSON 59
    définit variables qd faut agir
    enum { CASDANGER
         CASPRUDENT
         CASDEFAULT }
    //initialisation
    int pinSRF=2; //pin numérique utilisé pour le capteur ultrasons.
    
    void setup() {
      Serial.begin(9600);
    }
    
    void loop() {
      switch (mesure()){ //utilisation de la condition switch
        case : CASDANGER //l'obstacle est dans la zone DANGER
          Serial.println("*DANGER*");
          arret(); // on arrête le robot
          delay(200);
          recule(PRUDENT); // on le fait reculer un peu
          delay(200);
          break;
        case :CASPRUDENT //l'obstacle est dans la zone PROCHE
          Serial.println("Attention...");
          avance(PRUDENT); // on ralentit la vitesse
        default:
          avance(AFOND);
      }
       }
    //fonctions
    int mesure(){
      //fonction qui mesure une distance avec le capteur
      unsigned long mesure = 0; // variable de mesure
      unsigned long cumul = 0; //variable pour la moyenne
      for (int t = 0; t < NBMESURE; t++) { // boucle pour effectuer les mesures
        pinMode (pinSRF, OUTPUT); //on prépare le pin pour envoyer le signal
        digitalWrite(pinSRF, LOW); //on commence à l'état bas
        delayMicroseconds(2); //on attend que le signal soit clair
        digitalWrite(pinSRF, HIGH);//mise à l'état haut
        delayMicroseconds(10); //pendant 10 µs
        digitalWrite(pinSRF, LOW); //mise à l'état bas
        pinMode(pinSRF, INPUT); //on prépare le pin pour recevoir un état
        mesure = pulseIn(pinSRF, HIGH); // fonction pulseIn qui attend un état haut et renvoie le temps d'attente
        cumul+=mesure; //on cumule les mesures
        delay(50); //attente obligatoire entre deux mesures
      }
      mesure=cumul/NBMESURE; //on calcule la moyenne des mesures
      mesure=mesure/VSON;//on transforme en cm
     
      if (mesure<=DANGER){//on teste si l'obstacle est dans la zone DANGER
        return CASDANGER; //si oui, on retourne le code de danger
      }
      else if (mesure>DANGER && mesure<=PROCHE){//on teste s'il est dans la zone PROCHE
        return CASPRUDENT; //si oui, on retourne le code de proche
      }
      return CASDEFAULT; // on retourne le code sans risque
    }
    void recherche(){
      //fonction pour rechercher un passage
      tourneGauche(AFOND); //on positionne le robot à gauche (facultatif)
      delay (300);
      int etat=0; //variable de test de possibilité d'avancer
      while (etat!=2){ // tant que la distance n'est pas suffisante
        etat=mesure(); // on effectue la mesure
        tourneDroite(PRUDENT); //on fait tourner le robot
      }
      Serial.println("La voie est libre !");
      //retour au programme principal
    }
    void arret(){
      Serial.println("Je stoppe");
      //fonction d'arrêt du moteur
    }
    void avance(int v){
      Serial.print("J'avance");
      affiche(v);
      //fonction de mise en route du moteur dans le sens avant
    }
    void recule(int v){
      Serial.print("Je recule");
      //fonction de mise en route du moteur dans le sens arrière
    }
    void tourneDroite(int v){
      Serial.print("Je tourne a droite");
      //fonction de rotation à droite
    }
    void tourneGauche(int v){
      Serial.print("Je tourne a gauche");
      //fonction de rotation à gauche
    }
    Donc voilà

Discussions similaires

  1. qu'est-ce qu'un incendie?
    Par zitounator dans le forum Physique
    Réponses: 9
    Dernier message: 27/06/2014, 19h29
  2. PROGRAMME C robot
    Par stephane-mecano dans le forum Électronique
    Réponses: 5
    Dernier message: 23/06/2013, 18h18
  3. Programme d'évitement d'obstacle pour robot
    Par DamDam00 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 04/05/2012, 21h32
  4. programme de robot suiveur de ligne (PIC asm)
    Par sniteiru dans le forum Électronique
    Réponses: 12
    Dernier message: 01/05/2012, 16h35
  5. recherche un programme , ou un programmateur ,pour un robot
    Par alain4 dans le forum Électronique
    Réponses: 8
    Dernier message: 30/01/2009, 15h17