Produire un signal périodique et calculer sa fréquence sur Arduino
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Produire un signal périodique et calculer sa fréquence sur Arduino



  1. #1
    geekatchoum63

    Smile Produire un signal périodique et calculer sa fréquence sur Arduino


    ------

    Bonjour,

    Je suis actuellement en école d'ingénieur électronique. Nous avions un projet qui consistait à concevoir un robot détecteur de pluie. La pluie était détecté grâce à un capteur dont la capacité change en fonction de l'humidité. Son insertion dans un montage astable NE555 faisait que la fréquence de sortie variait en fonction de l'humidité. Le montage fonctionnait et il ne nous restait plus qu'à le connecter sur un kit Arduino et d'utiliser la fonction pulseIn(broche,HIGH) native d'Arduino pour rendre le tout portable. Je pourrai vous donner plus d'informations sur notre montage initial si ça vous intéresse mais ce n'est pas l'objet premier de ce topic.

    Malheureusement il y a eu le confinement et nous cherchons donc un moyen de tester notre fonction pulseIn. J'ai vu qu'on pouvait générer un signal périodique de deux manières : avec la méthode utilisant des broches PWM
    • en faisant une boucle qui fait basculer une broche entre l'état haut et l'état bas, intercalé de delay(temps)
    Voici deux captures d'écrans de mes programmes respectifs :

    Code Arduino PWM :
    code arduino PWM.PNG

    Code Arduino utilisant la fonction delay :
    code Arduino delay.PNG

    Malheureusement les deux me donnent le même résultat sur le moniteur Arduino :
    résultat moniteur.PNG

    Photo montrant le montage (ma LED de test clignote bien )
    test pulseIncrop.jpg

    Voilà si quelqu'un a déjà réussi à générer un signal et mesurer sa fréquence sur la même carte Arduino, son aide est la bienvenue.

    Cordialement,

    geekatchoum63

    -----

  2. #2
    umfred

    Re : Produire un signal périodique et calculer sa fréquence sur Arduino

    Pour les codes, c'est plus pratique si tu les mets entre les balises [ code] [ /code] (sans les espaces).
    Tu n'as pas relié la pin 6 à la pin 10, comment veux-tu détecter un signal sur la pin 6 du coup ?

  3. #3
    umfred

    Re : Produire un signal périodique et calculer sa fréquence sur Arduino

    D'ailleurs, le 0 veut aussi dire qu'il n'a pas reçu de pulse au bout du timeout (par défaut 1s) https://www.arduino.cc/reference/en/...ed-io/pulsein/

  4. #4
    JPL
    Responsable des forums

    Re : Produire un signal périodique et calculer sa fréquence sur Arduino

    Citation Envoyé par umfred Voir le message
    Pour les codes, c'est plus pratique si tu les mets entre les balises [ code] [ /code] (sans les espaces).
    Tu n'as pas relié la pin 6 à la pin 10, comment veux-tu détecter un signal sur la pin 6 du coup ?
    Il faut mettre le code en mode texte dans les balises [Code]...[/Code].
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

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

    Re : Produire un signal périodique et calculer sa fréquence sur Arduino

    Voici pour les codes :

    Code:
    int pin_E = 10;
    int pin_R = 6;
    unsigned long duree ;
    
    
    void setup() {
      Serial.begin(9600);
      pinMode(pin_E,OUTPUT);
      pinMode(pin_R,INPUT);
      
    
    }
    
    void loop() {
      
      digitalWrite(pin_E,HIGH);
      delay(100);
      digitalWrite(pin_E,LOW);
      duree = pulseIn(pin_R,HIGH);
      Serial.print("La période mesurée est de : ");
      Serial.println(duree); 
    }
    Code:
    int broche_PWM = 13; // Déclaration de la Pin 10 Arduino
    int Valeur_PWM = 400; // Variable PWM image de la consigne de 0 à 255
    void setup()
    {
      Serial.begin(9600);
      pinMode(broche_PWM, OUTPUT); // Pin 10 Arduino en sortie PWM
    }
    
    void loop() 
    {
      Valeur_PWM = Valeur_PWM + 50 ; 
      delay(1000);
      if(Valeur_PWM > 255){
        Valeur_PWM = 0 ;
        Serial.println("Réinitialisation de Valeur_PWM");
        
      }
      analogWrite(broche_PWM,Valeur_PWM);// Envoi du signal PWM sur la sortie numérique 10
    }
    En ce qui concerne l'image je me suis trompé de montage voici le bon montage, donc mon erreur n'est pas là en fait.
    Nom : test pulseIn crop véritable.PNG
Affichages : 911
Taille : 515,9 Ko

    Merci de vos réponses,

  7. #6
    umfred

    Re : Produire un signal périodique et calculer sa fréquence sur Arduino

    Le puslein est une fonction bloquante, elle attend pendant un certain temps un événement avant de rendre la main.

    Dans le 1er cas (avec les digitalwrite), tu auras toujours 0, au bout du timeout puisque rien ne se passe autre que de lire l'entrée pendant le temps de la fonction pulsein (tu fais varier ta sortie de 1 à 0 juste avant, pendant il ne se passe rien)

    Dans le cas avec le PWM, il faudrait le lancer dans le setup, et dans loop() tu devrais avoir un résultat pour le pulsein (qui n'est pas dans le code que tu nous a mis).

  8. #7
    geekatchoum63

    Thumbs up Re : Produire un signal périodique et calculer sa fréquence sur Arduino

    Bonjour,

    Merci beaucoup pour ta réponse umfred, je l'avais lu mais je n'avais pas eu le temps d'y répondre car j'étais très occupé.
    J'ai donc essayé ce que tu m'as dit, voici le code :
    Code:
    int broche_PWM = 10; 
    int broche_Recep = 6;
    int Valeur_PWM = 200; // Variable PWM image de la consigne de 0 à 255
    int duree ;
    void setup()
    {
      Serial.begin(9600);
      pinMode(broche_PWM, OUTPUT); // Pin 10 Arduino en sortie PWM
      analogWrite(broche_PWM,Valeur_PWM);// Envoi du signal PWM sur la sortie numérique 10
    }
    
    void loop() 
    {
    
      duree = pulseIn(broche_PWM,HIGH);
      Serial.print("La période mesurée est de : ");
      Serial.println(duree);
      delay(1000);
      
    }
    Et voici le résultat : Nom : résultat moniteur 2 .PNG
Affichages : 855
Taille : 18,2 Ko.
    Par contre c'est curieux je n'arrive pas à recevoir le signal sur ma "broche réceptrice", j'ai toujours ce fameux "0". Pourtant ni la résistance ni la led ne devraient modifier la fréquence n'est-ce pas? Ce ne sont pas des dipôles réactifs je crois.

  9. #8
    geekatchoum63

    Thumbs up Re : Produire un signal périodique et calculer sa fréquence sur Arduino [Résolu]

    Alors j'ai modifié un peu mon code pour que ça fonctione au final :
    Code:
    int broche_PWM = 10; 
    int broche_Recep = 12;
    int Valeur_PWM = 200; // Variable PWM image de la consigne de 0 à 255
    int duree ;
    int duree2 ;
    void setup()
    {
      Serial.begin(9600);
      pinMode(broche_PWM, OUTPUT); // Pin 10 Arduino en sortie PWM
      analogWrite(broche_PWM,Valeur_PWM);// Envoi du signal PWM sur la sortie numérique 10
      pinMode(broche_Recep, INPUT);
    }
    
    void loop() 
    {
    
      duree = pulseIn(broche_PWM,HIGH);
      Serial.print("La période mesurée sur le broche émettrice est de : ");
      Serial.println(duree);
      duree2 = pulseIn(broche_Recep,HIGH);
      Serial.print("La période mesurée sur le broche réceptrice est de : ");
      Serial.println(duree2);
      delay(1000);
    Mais j'ai aussi modifié la valeur de la résistance ,la tension sur la broche réceptrice devait être trop basse après la résistance donc tout devait passer en "RIEN" au lieu d'alterner "TOUT", "RIEN" etc...
    Merci de votre aide

  10. #9
    umfred

    Re : Produire un signal périodique et calculer sa fréquence sur Arduino [Résolu]

    le plus simple aurait été de relier directement les 2 pins de l'arduino (comme je l'avais évoqué dans mon post #2)

Discussions similaires

  1. Calcul de fréquence de signal périodique
    Par chris1410 dans le forum Physique
    Réponses: 5
    Dernier message: 17/01/2020, 16h37
  2. Réponses: 22
    Dernier message: 28/10/2017, 10h15
  3. Réponses: 7
    Dernier message: 15/06/2016, 07h40
  4. Réponses: 4
    Dernier message: 18/02/2015, 12h25
  5. Produire un signal
    Par invitece7cc396 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/09/2010, 09h42
Découvrez nos comparatifs produits sur l'informatique et les technologies.