Produire un son avec un microcontrôleur

Objectif

On propose ici d'utiliser une carte Arduino couplée à un buzzer afin de produire des sons. Deux méthodes sont proposées :

  • Alternance d'états hauts et bas d'une sortie numérique en ajustant la durée de chaque état en fonction de la fréquence du son à produire.

  • Utilisation de la fonction tone permettant de générer un son d'une fréquence donnée.

    tone(pin, fréquence)

    tone(pin, fréquence, durée)

La première méthode est davantage à même de faire réfléchir les élèves à la manière de générer un signal périodique tandis que la seconde permet d'obtenir rapidement un son de fréquence souhaitée.

Le signal généré est nécessairement carré.

Buzzer piezoélectriqueInformations[1]

MéthodeMise en œuvre et programmation

Le buzzer piézoélectrique se câble très simplement entre la masse et une sortie numérique.

Câblage d'un buzzer piézoélectrique sur une carte ArduinoInformations[2]

On peut générer le signal carré ci-dessous avec une carte Arduino en alternant les états haut et bas de la sortie numérique.

Signal carré - Période et demi-périodeInformations[3]
1
int DemiT;//Durée de la demi-période en micro-secondes
2
float freq;//Fréquence du son souhaité
3
void setup() {
4
  // put your setup code here, to run once:
5
  pinMode(3, OUTPUT);//On définit la borne 3 en sortie
6
  freq = 440;//Réglage de la fréquence en hertz
7
  DemiT = 1 / freq / 2 * 1000000;//On calcule la demi-période en µs
8
}
9
10
void loop() {
11
  // put your main code here, to run repeatedly:
12
  //On passe à l'état haut pendant une demi-période
13
  digitalWrite(3, 1);
14
  delayMicroseconds(DemiT);
15
  //Fin de l'état haut
16
  //On passe à l'état bas pendant une demi-période
17
  digitalWrite(3, 0);
18
  delayMicroseconds(DemiT);
19
  //Fin de l'état bas
20
}

ExempleExemple de questionnement élève

Cette méthode permet d'amener les élèves à exploiter le lien entre période et fréquence.

On peut leur fournir un programme où manque la relation permettant de calculer la demi-période à partir de la fréquence f et obtenir sa valeur en µs.

À partir d'un document répertoriant les fréquences des notes de musique, proposer une modification du programme pour jouer la gamme.

On peut aussi proposer aux élèves de vérifier s'ils ont produit le son à la bonne fréquence à l'aide d'une application mobile permettant une analyse fréquentielle, par exemple Spectroid.

ComplémentAjuster la fréquence du son produit à l'aide d'un potentiomètre

On peut utiliser une entrée analogique connectée au curseur d'un potentiomètre afin de produire des sons de fréquences variables.

Produire un son de fréquence ajustableInformations[4]
1
int DemiT;//Durée de la demi-période en micro-secondes
2
float freq;//Fréquence du son souhaité
3
void setup() {
4
  // put your setup code here, to run once:
5
  pinMode(3, OUTPUT);//On définit la borne 3 en sortie
6
  }
7
8
void loop() {
9
  // put your main code here, to run repeatedly:
10
  //On passe à l'état haut pendant une demi-période
11
  freq = map(analogRead(A0), 0, 1023, 262, 523);//Ajustement de la fréquence en fonction du potentiomètre
12
  DemiT = 1 / freq / 2 * 1000000;//Calcul de la demi-période en µs
13
  digitalWrite(3, 1);
14
  delayMicroseconds(DemiT);
15
  //Fin de l'état haut
16
  //On passe à l'état bas pendant une demi-période
17
  digitalWrite(3, 0);
18
  delayMicroseconds(DemiT);
19
  //Fin de l'état bas
20
}

ComplémentLa fonction tone

Si on souhaite obtenir rapidement un son à l'aide d'une carte Arduino, on peut utiliser la fonction tone(pin, fréquence, durée) du langage de programmation :

1
tone(3,440,2000);

La fonction ci-dessus joue un la3 sur un buzzer connecté sur la sortie numérique n°3 pendant 2 secondes (2000 millisecondes).

RemarqueVisualisation du signal généré à l'oscilloscope

La tension électrique produite par la sortie numérique de la carte Arduino pourrait être visualisée à l'oscilloscope afin de permettre aux élèves de faire le lien entre l'allure du signal et le son produit. Cela peut être particulièrement parlant avec le montage générant un son dont la fréquence est ajustée avec potentiomètre.