Outils pour utilisateurs

Outils du site


Vous n'êtes pas autorisé à effectuer cette action.
arduino:mesurer_la_periode_d_un_pendule

Mesurer la période d'un pendule

Objectif

Mesurer la période T d'un pendule à l'aide d'un capteur à ultrasons et d'un Arduino relié au tableur Regressi par la liaison série.

Le montage

Conseils :

  • laisser au moins 5 à 6 cm entre le capteur et le pendule.
  • prendre un angle d'au moins 20°.



Le code

Le code est identique au code utilisé pour mesurer une distance à l'aide d'un capteur à ultrasons.

Cliquez pour afficher le code

Cliquez pour masquer le code

// mesurer la période T d'un pendule avec des ultrasons
 
int vitesse = 340 ;  // vitesse du son 340 m/s
int Trig = 3;  // Déclencheur sur la broche 3
int Echo = 2;  // Réception sur la broche 2
 
/* Pour faire des mesures à intervalle régulier */
 
unsigned long tempsPrecedent = 0;
float intervalle = 20;   // durée entre deux mesures en ms (à modifier si nécessaire)
 
void setup() {
  pinMode(Trig, OUTPUT);    // initialisation de la broche "Trig" comme étant une sortie
  pinMode(Echo, INPUT);     // initialisation de la broche "Echo" comme étant une entrée
 
  digitalWrite(Trig, LOW);  // Mettre "Trig" niveau bas
 
  Serial.begin(115200);
}
 
void loop()
{
  unsigned long tempsCourant = millis();  // cette variable contient le nombre de millisecondes depuis que le programme courant a démarré.
 
  if (tempsCourant - tempsPrecedent >= intervalle) {
    tempsPrecedent = tempsCourant;
 
    digitalWrite(Trig, HIGH);   // Un état haut de 10 microsecondes est mis sur la broche "Trig"
    delayMicroseconds(10);      // on attend 10 µs
    digitalWrite(Trig, LOW);    // On remet à l’état bas la broche Trig
    unsigned long duree = pulseIn(Echo, HIGH);   // Lecture de la durée d’état haut sur la broche "Echo"
 
    // calcul de la distance
    duree = duree / 2; // On divise cette durée par deux pour n'avoir qu'un trajet
    float temps = duree / 1000000.0; //on met en secondes
    float distance = vitesse * temps; //on multiplie par la vitesse, d = v x t
 
    // On affiche la distance sur la liaison série
 
    Serial.println(distance);
  }
}



Acquisition des mesures avec Regressi

Il est possible d'acquérir les mesures directement dans Regressi avec une version récente (4.5.7).

  • Dans le menu Fichier → Nouveau → Arduino / micro:bit :




  • Avec le bouton Options, régler les paramètres de la liaison série pour que Regressi communique avec la carte Arduino.



  • Cliquer sur le bouton Acquisition pour obtenir les mesures. Le graphique s'affiche automatiquement.
  • Cliquer sur Stop pour arrêter l'acquisition.
  • Cliquer sur traitements pour envoyer les données dans Regressi.




Les mesures

  • Pour une longueur de fil du pendule de 50,0 cm (mesurée avec un mètre à ruban), la valeur théorique de la période est de T = 1,42 s.



  • Avec un pendule différent de longueur 45,5 cm. La valeur théorique de la période est de T = 1,35 s.



  • Avec un pendule “fait maison”, de longueur 54 cm, constitué d'une boule de noël accrochée à une lampe halogène 8-O. La valeur théorique de la période est de T = 1,48 s. J'ai modifié le code Arduino pour supprimer les ondes perdues (d > 10 cm) afin d'obtenir un graphique un peu plus propre. Le résultat me semble très bon.



Cliquez pour afficher le code

Cliquez pour masquer le code

// mesurer la période T d'un pendule avec des ultrasons
 
int vitesse = 340 ;  // vitesse du son 340 m/s
int Trig = 3;  // Déclencheur sur la broche 3
int Echo = 2;  // Réception sur la broche 2
 
/* Pour faire des mesures à intervalle régulier */
 
unsigned long tempsPrecedent = 0;
float intervalle = 20;   // durée entre deux mesures en ms (à modifier si nécessaire)
 
void setup() {
  pinMode(Trig, OUTPUT);    // initialisation de la broche "Trig" comme étant une sortie
  pinMode(Echo, INPUT);     // initialisation de la broche "Echo" comme étant une entrée
 
  digitalWrite(Trig, LOW);  // Mettre "Trig" niveau bas
 
  Serial.begin(115200);
}
 
void loop()
{
  unsigned long tempsCourant = millis();  // cette variable contient le nombre de millisecondes depuis que le programme courant a démarré.
 
  if (tempsCourant - tempsPrecedent >= intervalle) {
    tempsPrecedent = tempsCourant;
 
    digitalWrite(Trig, HIGH);   // Un état haut de 10 microsecondes est mis sur la broche "Trig"
    delayMicroseconds(10);      // on attend 10 µs
    digitalWrite(Trig, LOW);    // On remet à l’état bas la broche Trig
    unsigned long duree = pulseIn(Echo, HIGH);   // Lecture de la durée d’état haut sur la broche "Echo"
 
    // calcul de la distance
    duree = duree / 2; // On divise cette durée par deux pour n'avoir qu'un trajet
    float temps = duree / 1000000.0; //on met en secondes
    float distance = vitesse * temps; //on multiplie par la vitesse, d = v x t
 
    // On affiche la distance sur la liaison série
    if (distance > 0.10) {
      distance = 0.1;
    }
    Serial.println(distance);
  }
}
arduino/mesurer_la_periode_d_un_pendule.txt · Dernière modification: 13/12/2019 18:18 par Stéphane LAURENT