Mesurer une fréquence avec un Arduino

Un G.B.F. (Générateur de basses fréquences) permet de délivrer un signal avec la fréquence désirée sous forme de sinusoïdes, de créneaux (signal carré), ou de triangles.

Nous allons ainsi envoyer un signal à l’Arduino. Celui-ci pourra ensuite mesurer la fréquence du signal d’entrée.

Il est conseillé de directement relier votre GBF à un oscilloscope afin d’obtenir une image en direct du signal que vous générez.

Nous utiliserons plus tard une fonction qui permet de détecter le temps d’état haut et/ou le temps d’état bas d’un signal. Nous devons donc générer un signal carré.

Sur le GBF, il suffit de presser le bouton ci-dessous :

Les entrées analogiques de l’Arduino ne peuvent recevoir que des tensions comprises entre 0V et +5V. Envoyer une valeur plus grande risque de détruire l’interface, voir la carte.
Il faut donc bien veiller à créer un signal électrique avec une amplitude inférieur ou égale à 5V.

De base, le GBF va créer un signal oscillant entre -5V et +5V. Il faut donc déplacer ce signal afin d’obtenir un signal oscillant entre 0V et +5V.
Le bouton Offset permet d’ajouter une composante continue à notre signal. Nous pouvons donc faire monter notre signal dans l’intervalle qui nous intéresse.

Le réglage de l’offset et de l’amplitude s’effectue de cette façon :
(il faut tirer le bouton de l’offset afin de modifier la composante continue).

Attention ! Avant de brancher votre Arduino au GBF, vérifiez que le signal ressemble à celui-ci sur l’oscilloscope :

 

Câblage :

 

PusleIn :

La commande PulseIn permet de mesurer la durée d’une pulsation. Il est ainsi possible de déterminer le temps sur une période de notre signal à un niveau logique 1 ou 0.
PulseIn nous retourne ensuite la durée de l’impulsion en microsecondes.

La syntaxe est la suivante :


pulseIn(pin, value)
pulseIn(pin, value, timeout)

Le premier paramètre permet de définir l’interface où vous souhaitez lire la durée de l’impulsion
Le second paramètre permet de définir si l’on souhaite mesurer la durée d’un état haut (HIGH) ou un état bas (LOW)
Le troisième paramètre permet de déterminer un temps d’attente en microsecondes avant la mesure d’une impulsion.

Code :

const int Signal_GBF = A1; // Signal Analogique

void setup() {
// Configure le port série pour l'exemple
Serial.begin(9600);

// Met la broche de signal venant du GBF en entrée
pinMode(Signal_GBF, INPUT);
}

void loop() {
// Mesure la durée de l'impulsion haute
unsigned long etat_haut = pulseIn(Signal_GBF, HIGH);

// Mesure la durée de l'impulsion basse
unsigned long etat_bas = pulseIn(Signal_GBF, LOW);

// Calcul de la periode = etat haut + etat bas
long periode = etat_bas + etat_haut;

// Calcul de la frequence = 1 / periode
long frequence = 1000000 / periode;

// Affichage des résultats
Serial.println("Duree etat haut : " + String(etat_haut));
Serial.println("Duree etat bas : " + String(etat_bas));
Serial.println("Periode : " + String(periode));
Serial.println("Frequence : " + String(frequence) + " Hz");
Serial.println();

delay(1000);
}
Détecter fréquence depuis un GBF

 

11 commentaires

    1. oui possibilité de fournir tout type de signaux
      en carré la fréquence peut aller à 10 khz environ
      dans les autres formes, cela dépend de votre « nombre de points par seconde », on considèrera 1 khz environ..

  1. Bonjour, n’étant pas un grand spécialiste et avant de me lancer, je voudrais savoir s’il est possible de récupérer les numéros composés sur une ligne téléphonique (DTMF) chaque chiffre étant composé de deux fréquences consécutives.
    C’est possible ? ou mon idée est débile !
    Merci.

    1. bonjour,
      oui c’est possible à partir d’un décodeur dtmf(pas cher) qui fournira des 1 ou 0 sur ses différentes sorties en fonction des touches appuyées

      voir le décodeur chez radiospares

  2. Bonjour
    quelle est la fréquence maximale que l’on peut mesurer avec un arduino? ou bien quelle est la fréquence de scrutation des entrées, est elle dépendante de la taille du programme?
    merci

  3. bonjour

    Je travaille sur le traitement du signal, je veux applique FFT au le signal donne par le generateur de fréquence pouvez-vous m’aide ?

  4. bonjour j’ai un projet portant sur des électrovannes je dois contrôler les électrovannes et un débitmètre à partir d’une carte arduino merci pour votre aide

  5. Bonjour je suis intéressé par votre fréquencemètre arduino ,
    pourrait-il mesurer des fréquences de plusieurs centaines
    de mhz.
    Merci de votre attention ,

Rejoignez la conversation

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.