Produire un son avec un microcontrôleur
Texte légal : Points du programme concernés
Classe de 2nde
Micro-contrôleurs :
Utiliser un dispositif comportant un microcontrôleur pour produire un signal sonore.
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é.
Méthode : Mise en œuvre et programmation
Le buzzer piézoélectrique se câble très simplement entre la masse et une sortie numérique.
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.
int DemiT;//Durée de la demi-période en micro-secondes
float freq;//Fréquence du son souhaité
void setup() {
// put your setup code here, to run once:
pinMode(3, OUTPUT);//On définit la borne 3 en sortie
freq = 440;//Réglage de la fréquence en hertz
DemiT = 1 / freq / 2 * 1000000;//On calcule la demi-période en µs
}
void loop() {
// put your main code here, to run repeatedly:
//On passe à l'état haut pendant une demi-période
digitalWrite(3, 1);
delayMicroseconds(DemiT);
//Fin de l'état haut
//On passe à l'état bas pendant une demi-période
digitalWrite(3, 0);
delayMicroseconds(DemiT);
//Fin de l'état bas
}
Exemple : Exemple 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ément : Ajuster 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.
int DemiT;//Durée de la demi-période en micro-secondes
float freq;//Fréquence du son souhaité
void setup() {
// put your setup code here, to run once:
pinMode(3, OUTPUT);//On définit la borne 3 en sortie
}
void loop() {
// put your main code here, to run repeatedly:
//On passe à l'état haut pendant une demi-période
freq = map(analogRead(A0), 0, 1023, 262, 523);//Ajustement de la fréquence en fonction du potentiomètre
DemiT = 1 / freq / 2 * 1000000;//Calcul de la demi-période en µs
digitalWrite(3, 1);
delayMicroseconds(DemiT);
//Fin de l'état haut
//On passe à l'état bas pendant une demi-période
digitalWrite(3, 0);
delayMicroseconds(DemiT);
//Fin de l'état bas
}
Complément : La 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 :
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).
Remarque : Visualisation 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.