Carte Arduino et capteur à ultrasons
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

Carte Arduino et capteur à ultrasons



  1. #1
    Nano6

    Carte Arduino et capteur à ultrasons


    ------

    Bonjour,

    J'ai réalisé un avertisseur sonore couplé à un capteur à ultrasons de type HC-SR04 à l'aide d'une carte Arduino et d'un buzzer piézoélectrique. Je pense que j'ai un problème dans le programme que j'ai entré dans la carte car le buzzer émet des sons sans prendre en compte le capteur à ultrasons. Je l'ai vérifié de nombreuses fois mais je ne vois pas ce qui cloche. Voici le programme :

    Code:
    int BUZZERPIN = 11;  
    int ECHOPIN = 8;    
    int TRIGPIN = 7;
    int distanceMin = 20; // en cm
    
    void setup()
    {  
      Serial.begin(9600);
      pinMode(BUZZERPIN, OUTPUT);
      pinMode(ECHOPIN,INPUT);
      pinMode(TRIGPIN,INPUT);
    }
    
    //Boucle principale :
    void loop()
    {
      int distanceObstacle = Distance();
      Serial.println(distanceObstacle);
      if (distanceObstacle < distanceMin) {
        playNote('c', 10);
      } 
    }
    
    //Calcul de la distance de l’objet au capteur :
    float Distance () {
      
      digitalWrite(TRIGPIN, LOW); 
      delayMicroseconds(2); 
      digitalWrite(TRIGPIN, HIGH); 
      delayMicroseconds(10); 
      digitalWrite(TRIGPIN, LOW);
      
      
      float distance = pulseIn(ECHOPIN, HIGH); 
      distance= distance/58; 
      return(distance);
    }
    
    	//Déclenchement et choix de fréquence du signal sonore du buzzer
    void playTone(int tone, int duration)
    {
      for (long i = 0; i < duration * 1000L; i += tone * 2) {
        digitalWrite(BUZZERPIN, HIGH);
        delayMicroseconds(tone);
        digitalWrite(BUZZERPIN, LOW);
        delayMicroseconds(tone);
      }
    }
    
    void playNote(char note, int duration)
    {
      char names[ ] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; // Do Ré Mi Fa Sol La Si Do
      int tones[ ] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // Demi-périodes en ms
      for (int i = 0; i < 8; i++) {
        if (names[i] == note) {
          playTone(tones[i], duration);
        }
      }
    }
    Est-ce que vous pourriez me dire ce qui peut être à l'origine du dysfonctionnement ? Merci d'avance.

    -----
    Dernière modification par JPL ; 30/06/2014 à 17h35. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    PA5CAL

    Re : Carte Arduino et capteur à ultrasons

    Bonsoir

    Je ne suis pas sûr qu'au niveau du test de distance, le mélange de nombres à virgule flottante et entier soit particulièrement apprécié.

  3. #3
    Nano6

    Re : Carte Arduino et capteur à ultrasons

    Je viens de réessayer avec les modifications mais ça ne marche toujours pas.

  4. #4
    paulfjujo

    Re : Carte Arduino et capteur à ultrasons

    bonjour,



    que donne le terminal sur l'impression du resultat avec
    Code:
    Serial.println(distanceObstacle);
    suivant les recommandations de PA5CAL, essaie avec un cast devant le flottant ,
    Code:
    if ((int)distanceObstacle < distanceMin)
     {
        playNote('c', 10);
      }

    nota:
    il n'est pas tres heureux d'utiliser un nom de fonction semblable à une variable
    Code:
    float Distance ();
    float distance=...
    en espereant que le compilo fasse la difference ..
    Dernière modification par paulfjujo ; 30/06/2014 à 18h12.

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

    Re : Carte Arduino et capteur à ultrasons

    J'ai toujours le même problème malgré les nouvelles indications

  7. #6
    paulfjujo

    Re : Carte Arduino et capteur à ultrasons

    que donne le terminal sur l'impression du resultat ?
    les mesures sont elles coherentes ?

  8. #7
    PA5CAL

    Re : Carte Arduino et capteur à ultrasons

    D'après la doc de référence de l'Arduino, la fonction pulseIn() ne retourne pas un float, mais un unsigned long.

    Il serait préférable d'utiliser le bon type de variable pour stocker le résultat, faire le calcul et réaliser le test. On ne devrait plus trouver un seul float dans le code.
    Dernière modification par PA5CAL ; 30/06/2014 à 18h58.

  9. #8
    Nano6

    Re : Carte Arduino et capteur à ultrasons

    Bonjour,

    J'ai essayé avec le terminal pour l'impression du résultat mais je n'obtiens que des zéros quand il n'y a aucun obstacle et une seule fois ça a changé pendant quelques secondes quand j'ai approché ma main du capteur mais les valeurs étaient incohérentes (trop grandes par rapport aux vraies distances). Le fait qu'on obtienne des zéros expliquerait pourquoi le buzzer émet toujours des sons. Le problème viendrait donc du capteur ?

  10. #9
    PA5CAL

    Re : Carte Arduino et capteur à ultrasons

    Pas nécessairement. Il y a de nombreuses sources d'erreur possibles entre le capteur et la valeur affichée dans le moniteur.

    As-tu fait la correction que j'ai indiquée juste au-dessus (remplacement de tous les float par des unsigned long) ?

    Un conseil : affiche directement la valeur du capteur, et non pas la valeur après calcul.
    Dernière modification par PA5CAL ; 01/07/2014 à 09h00.

  11. #10
    Nano6

    Re : Carte Arduino et capteur à ultrasons

    Oui, j'ai fait les changements pour 'unsigned long' et j'ai affiché la valeur du capteur avant calcul mais toujours rien de nouveau

  12. #11
    minioim

    Re : Carte Arduino et capteur à ultrasons

    edit (erreur de ma part)
    Dernière modification par minioim ; 01/07/2014 à 09h43.

  13. #12
    minioim

    Re : Carte Arduino et capteur à ultrasons

    la doc indique, pour pulseIn, que la valeur 0 est retournée quand tu n'as pas de signal détecté dans la seconde après l'appel du pulse.

    ça ressemble pas mal à ce que t'as. est ce que ça apparait toutes les secondes ton "0"? (je ne sais pas comment fonctionne l'arduino, si ça affiche en temps réel ou non)
    si oui c'est que ton pulseIn ne reçoit rien dans le temps imparti.

    sinon niveau Hardware, comment est placé ton capteur? j'ai utilisé les HC-SR04. ils sont pas cher, ils marchent mais ils nécessitent quelques aménagements... ^^

  14. #13
    Nano6

    Re : Carte Arduino et capteur à ultrasons

    C'est bon, le programme marche ! Effectivement, il ne prenait pas en compte le cas où le capteur ne recevait rien. Merci pour vos conseils !

  15. #14
    minioim

    Re : Carte Arduino et capteur à ultrasons

    Parfait

    Par contre il reste une question. Si on relit la doc du HC-SR04, le capteur renvoie un signal de 38ms quand il ne rencontre pas d'obstacle.

    Donc pulseIn devrait quand même recevoir quelque chose normalement.

    La nouvelle question que tu dois donc te poser est : pourquoi ton arduino ne reçoit rien parfois?

    Have Fun

  16. #15
    minioim

    Re : Carte Arduino et capteur à ultrasons

    Si tu as accès a un oscillo ou a qqc dans ce goût là, ça vaut le coup de vérifier les signaux de sortie de ton capteur.
    Si ils sont presents, c'est coté programme qu'il faudra vérifier le timing.

    Une solution pourrait être de placer un test dans un while sur la valeur d'ECHOPIN qui allume une led des qu'un signal est reçu et la laisse allumée ensuite (histoire d'avoir le temps de voir qqc) a la place du pulseIn.

    Genre while(ECHOPIN==0){
    }
    LED==1;


    Si la led ne s'allume pas quasi immédiatement après le démarrage du programme c'est que ECHOPIN n'est pas passé a 1 et que le programme est rentré dans une boucle infinie. (Vu qu'il n'y aura pas d'autres pulses ça ne risquera plus de s'allumer)

    Mais ça permettra de vérifier si il y a bien le signal de 38ms qui est sensé revenir en l'absence d'obstacle.

    Bon ya sûrement plus élégant mais là comme ça.... ^^

    Have Fun

  17. #16
    Nano6

    Re : Carte Arduino et capteur à ultrasons

    Oui, c'est vrai mais là, je n'ai pas accès à ce matériel et le labo ne prête plus de composants électroniques. Je vais devoir laisser cette question en suspens... Désolée

  18. #17
    minioim

    Re : Carte Arduino et capteur à ultrasons

    tu aurais juste besoin d'une led pour le test dont je te parles

    voire même pas, tu mets juste un message que tu affiches par ton terminal.

    du genre

    while (ECHOPIN == 0){
    //affiche message "pas de réponse"
    }
    //affiche message "réponse reçue"

    ça te permettra de vérifier ton timing et ton capteur. parce que j'ai l'impression que là tu passes à coté d'infos. soit à cause du capteur, soit à cause du soft qui ne gère pas bien le timing.

    il faut voir combien de temps s'écoule entre l'extinction de la led et le début de l'écoute par l'arduino sur la pin ECHOPIN.

    il ne serait pas impossible, même si surprenant, que ton pulseIn se déclenche trop tard et loupe le pulse retour du coup...

    simple hypothèse comme ça.

    parce que selon la DS du capteur tu as TOUJOURS un retour. donc si pulseIn ne reçoit rien: il y a un soucis.
    Dernière modification par minioim ; 01/07/2014 à 11h09.

  19. #18
    paulfjujo

    Re : Carte Arduino et capteur à ultrasons

    il faut respecter un delai entre l'armement du trigger, qui declenche la salve d'envoi 8 cycles at 40Khz
    AVANT de tester le retour ...
    Code:
    //Calcul de la distance de l’objet au capteur :
    float Distance () {
      
      digitalWrite(TRIGPIN, LOW); 
      delayMicroseconds(2); 
      digitalWrite(TRIGPIN, HIGH); 
      delayMicroseconds(10); 
      digitalWrite(TRIGPIN, LOW);
      // il faut attendre l'envoi de la salve de 200µS avant de tester le retour
       delayMicroseconds(202); 
      
      float distance = pulseIn(ECHOPIN, HIGH); 
      distance= distance/58; 
      return(distance);
    }
    Nom : HC-SR04_Timming.jpg
Affichages : 127
Taille : 29,2 Ko

  20. #19
    minioim

    Re : Carte Arduino et capteur à ultrasons

    ça je pense que c'est fait sans le vouloir par pulseIn. pulseIn reste à l'écoute pendant 1 seconde avant de lacher l'affaire et renvoyer 0 (ce temps d'une seconde peut être modifié)

    ce qui fait que les 200µs sont largement attendues. et pulseIn reste à l'écoute pendant encore 999.8ms

    ou alors j'ai loupé un morceau ^^

  21. #20
    paulfjujo

    Re : Carte Arduino et capteur à ultrasons

    je ne connais pas l'arduino, ni la fonction PulseIn, mais j'ai travaillé
    sur ce capteur HC-SR04 , sous C18 MPLAB.. et chez moi ça fonctione nikel.

    si PulseIn attend un zero, il l'a de suite ! donc retourne ZERO
    pas besoin d'attendre 1 seconde ..
    il faut donc masquer le temps de l'envoi de la salve ..
    je me demande d'ailleur si ce serait pas plutot
    Code:
     float distance = pulseIn(ECHOPIN, LOW);
    que tu devrait utiliser..
    c'est le front descendant qui donne la duree de vol
    Dernière modification par paulfjujo ; 01/07/2014 à 15h29.

  22. #21
    minioim

    Re : Carte Arduino et capteur à ultrasons

    j'connaissais pas arduino non plus, mais j'ai trouvé la doc

    http://arduino.cc/en/Reference/pulseIn

    ça dit que la fonction attends un pulse haut ou bas. si c'est un pulse haut, ça va donc compter le temps entre un front montant et un front descendant et le renvoyer.

    et ça attends ce pulse pendant une seconde par défaut.

    elle ne renvoie 0 que si le pulse tant attendu n'est pas arrivé dans la seconde.

    donc le temps d'attente de 202µs est respecté.

  23. #22
    paulfjujo

    Re : Carte Arduino et capteur à ultrasons

    Citation Envoyé par minioim Voir le message
    j'connaissais pas arduino non plus, mais j'ai trouvé la doc

    http://arduino.cc/en/Reference/pulseIn

    ça dit que la fonction attends un pulse haut ou bas. si c'est un pulse haut, ça va donc compter le temps entre un front montant et un front descendant et le renvoyer.

    et ça attends ce pulse pendant une seconde par défaut.

    elle ne renvoie 0 que si le pulse tant attendu n'est pas arrivé dans la seconde.

    donc le temps d'attente de 202µs est respecté.
    effectivement, au vu de la doc, cela devrait le faire...

Discussions similaires

  1. Utiliser un capteur à effet Hall avec une carte Arduino mega
    Par Stefen89 dans le forum Électronique
    Réponses: 15
    Dernier message: 20/05/2014, 15h35
  2. capteur et arduino
    Par maria9 dans le forum Technologies
    Réponses: 3
    Dernier message: 04/03/2014, 10h22
  3. Capteur infrarouge ou capteur à ultrasons ?
    Par invite08e91122 dans le forum Technologies
    Réponses: 6
    Dernier message: 24/01/2013, 17h56
  4. Capteur à ultrasons + Arduino ADC
    Par vlad59134 dans le forum Électronique
    Réponses: 8
    Dernier message: 17/02/2011, 18h53
  5. différence ultrasons/lasers niveau capteur ?
    Par inviteb9716521 dans le forum Électronique
    Réponses: 6
    Dernier message: 24/03/2009, 18h23
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...