Catégorie « Ondes sonores »

Cette catégorie regroupe des sketchs réalisant des émission sonores.

La plupart de ces sketchs ont déjà été présentés dans la rubrique « Activités pour les lycées / Ondes sonores»

1. Beep (Code: Faire clignoter une DEL et produire un “beep” synchrone)


Dans cette activité, le programme des activités d’apprentissage qui permet de faire clignoter une DEL est modifié pour commander la production d’un signal sonore (« un beep »), émis par un buzzer ou un petit haut-parleur, synchrone avec le clignotement de la diode.

 

2. Alarme_sonore (Code: Alarme sonore par détection de passage)

 

Dans cette activité, le programme « beep » est utilisé comme alarme de détection de passage.

Pour cela, on ajoute au montage du sketch « beep », une photorésistance qui sera éclairée par la DEL rouge. La sortie de la photorésistance est connectée à l’entrée analogique A5 de l’Arduino.

La valeur de la broche A5 est alors proportionnelle à l’intensité lumineuse reçue par la photorésistance. En présence d’un obstacle entre la DEL et la photorésistance, la tension mesurée au niveau de la broche A5 diminue et quand celle-ci est inférieure à un seuil (la sensibilité du capteur définie initialement), l’alarme sonore est déclenchée.

 

3. Melody (Code: Jouer une mélodie avec un Arduino)

Dans cette activité, nous allons voir qu’il est possible de jouer une mélodie avec un Arduino.

La mélodie sera jouée en continu après un appui sur le bouton poussoir et arrêtée en appuyant de nouveau sur celui-ci.

4. Emission_sonore (Code: Régler la fréquence d’une onde sonore avec un potentiomètre)

 

Dans cette activité, l’appui sur le bouton-poussoir produit une onde sonore dont la fréquence est réglée à l’aide du potentiomètre. L’émission sonore est arrêtée en appuyant de nouveau sur le bouton poussoir.

Le potentiomètre est connecté sur la broche A0 de l’Arduino. La tension de cette broche varie donc entre 0 et 5 V (voir le principe de fonctionnement du potentiomètre de l’activité d’apprentissage des entrées analogiques) en fonction de la position du curseur du potentiomètre.

La lecture de la valeur de la broche A0 convertie par le convertisseur analogique numérique de l’Arduino donne donc un nombre entier entre 0 et 1023 qui sera utilisé pour régler la fréquence du son émis, en le multipliant par un coefficient préalablement choisi par l’intermédiaire du moniteur série.

 

5. Theremin (Code: Régler la fréquence d’une onde sonore avec une photorésistance)

 

L’objectif de cette activité est de réaliser un pseudo-thérémine.

Le thérémine est un des plus anciens instruments de musique électronique, inventé en 1920 par le Russe Lev Sergueïevitch Termen (connu sous le nom de « Léon Theremin »).

Composé d’un boîtier électronique équipé de deux antennes, l’instrument a la particularité de produire de la musique sans être touché par l’instrumentiste. Dans sa version la plus répandue, la main droite commande la hauteur de la note (la fréquence du son), en faisant varier sa distance à l’antenne verticale. L’antenne horizontale, en forme de boucle, est utilisée pour faire varier le volume selon sa distance à la main gauche.

Dans cette activité, on ne simulera que la commande de la hauteur de la note, à l’aide de la photorésistance du montage d’étude.

La sortie de la photorésistance est connectée à l’entrée analogique A5 de l’Arduino. La valeur de cette broche (nombre entier entre 0 et 1023), lue par la fonction “analogRead()“, est alors proportionnelle à l’intensité lumineuse reçue par la photorésistance.
En approchant la main de la photorésistance, la tension mesurée au niveau de la broche A5 diminue et inversement en reculant la main la tension mesurée augmente.
Ainsi en fonction de la position de la main par rapport à la photorésistance, on va pouvoir jouer la gamme de notes de l’octave 3 (Do, Ré, Mi, Fa , Sol, La, Si).

En premier, il faut étalonner la photorésistance de façon à connaitre les valeurs minimale et maximale de la broche A5 en fonction des conditions d’éclairement de la photorésistance.
Puis on attribue pour chaque note de musique une plage de valeurs de tension réparties entre les valeurs minimale et maximale.

Il suffira ensuite de lire la valeur de la broche A5, de tester dans quelle plage de mesure, elle se trouve et de jouer la note associée.

 

6. Ondes_sonores_Bouton_poussoir


Dans cette activité, nous allons commander la production d’une onde sonore de fréquence préalablement choisie en appuyant sur le bouton-poussoir. L’émission est arrêtée en relâchant le bouton-poussoir.

// Déclaration des constantes et variables

const int PinTone = 3;
const int PinButton = 12;
const int FreqWave = 440;

int ValButton=0;


// Initialisation des entrées et sorties

void setup() {
pinMode (PinButton, INPUT);
}


// Fonction principale en boucle

void loop() {
ValButton = digitalRead(PinButton);
delay(10);
if (ValButton == HIGH) {
tone(PinTone, FreqWave);
}
else {
noTone(PinTone);
}
}

 

7. Ondes_sonores_Reglage_frequence


Dans cette activité, l’appui sur le premier bouton-poussoir produit une onde sonore dont la fréquence est réglée à l’aide de 2 potentiomètres :

– le premier potentiomètre permet un réglage rapide de la fréquence entre 0 et 4080 Hz,
– le deuxième potentiomètre effectue un réglage fin de la fréquence sur une plage de 255 Hz,
– l’émission sonore est arrêtée en appuyant de nouveau sur le bouton poussoir.

Le potentiomètre de réglage rapide est connecté sur la broche A1 de l’Arduino.
La tension de cette broche varie donc entre 0 et 5 V en fonction de la position du curseur du potentiomètre. La lecture de la valeur de la broche A1 convertie par le convertisseur analogique numérique de l’Arduino donne donc un nombre entier entre 0 et 1023.
Ce nombre est divisé par 4 de façon à obtenir un nombre entier compris entre 0 et 255 qui sera convertie en nombre binaire (sur 8 bits) :

0 en décimal = 00000000 en binaire
255 en décimal = 11111111 en binaire

Ce nombre binaire sur 8 bits est convertie en nombre binaire sur 12 bits en ajoutant 4 bits de poids faibles, 0000, à sa fin. On obtient donc un nombre binaire (sur 12 bits) compris entre 000000000000 et 111111110000, soit en décimal, un nombre entier entre 0 et 4080.

Le potentiomètre de réglage fin est connecté sur la broche A2 de l’Arduino. Selon le même principe que précédemment, la lecture de la broche A2 donne une valeur comprise entre 0 et 1023.

Ce nombre est également divisé par 4 et convertie en nombre binaire sur 12 bits. On obtient donc un nombre binaire compris entre 0000000000 et 00001111111111 (entre 0 et 255 en décimal).

La conversion en décimal de l’addition des deux nombres binaires (issus de A1 et A2) nous donnent la valeur de la fréquence en Hz de l’onde sonore, soit entre 0 et 4335 Hz avec un pas de réglage de 1 Hz.

// Déclaration des constantes et variables

const int PinButton = 12;
const int PinTone = 3;
const int PinPot[] = {1,2};

int ValButton=0;
int OldValButton=0;
int State = 0;
int ValPot[] = {0,0};
int FreqWave=0;


// Définition de fonctions

String dec2bin(int d){
String b;
if (d == 0){
b = « 0 »;
}
else{
b = «  »;
while (d != 0){
b = « 01 »[d & 1] + b;
d = d >> 1;}
}
return b;
}

int bin2dec(String b){
int i, len;
int result=0;
len = b.length();
for(i=0; i<len; i++)
{
result = result*2+int(b[i]- ‘0’);
}
return result;
}

int CalculFreq(int valpot1, int valpot2){
String valpot1bin, valpot2bin;
int Freq;
valpot1bin = dec2bin(int(valpot1/4));
valpot1bin= valpot1bin+ »0000″;
valpot2bin = dec2bin(int(valpot2/4));
valpot2bin = « 0000 »+dec2bin(int(valpot2/4));
Freq = bin2dec(valpot1bin) + bin2dec(valpot2bin);
return Freq ;
}


// Initialisation des entrées et sorties

void setup() {
pinMode (PinButton, INPUT);
}


// Fonction principale en boucle

void loop() {
ValButton = digitalRead(PinButton);
delay(10);
if ((ValButton == HIGH) and (OldValButton==LOW)) {
State = 1 – State;
}
OldValButton = ValButton;
if (State==1){
ValPot[0]= analogRead(PinPot[0]);
ValPot[1]= analogRead(PinPot[1]);
FreqWave = CalculFreq(int(ValPot[0]), int(ValPot[1]));
tone(PinTone, FreqWave);
}
else{
noTone(PinTone);
}
}

 

8. Piano

 

Dans cette activité, nous allons voir qu’il est possible de jouer une mélodie avec un Arduino et des boutons poussoir qui vont simuler les touches d’un piano:

– On dispose de 5 boutons poussoir que l’on associe chacun à une note de musique (une onde sonore de fréquence déterminée en Hz) et à une durée d’émission,

– L’appui sur un bouton poussoir permet de jouer la note associée au bouton pendant la durée définie,

– L’exemple de mélodie proposé dans le code sera jouée en suivant la séquence ci-contre :

123123345345

// Déclaration des constantes et variables

const int PinTone = 3;
const int PinButton[] = {12,11,10,9,8};
const int Notes[] = {262,294,330,349,392};
const int NoteDurations[] = {4,4,4,4,8};

int PlayNote = 0;
int Note = 0;
int NoteDuration = 0;


// Initialisation des entrées et sorties

void setup() {
for(int i = 0 ; i < 5 ; i++)
{
pinMode (PinButton[i], INPUT);
}
}


// Fonction principale en boucle

void loop() {

if (digitalRead(PinButton[0]) == HIGH) {
PlayNote = 1;
Note = 0;
}
if (digitalRead(PinButton[1]) == HIGH) {
PlayNote = 1;
Note = 1;
}
if (digitalRead(PinButton[2]) == HIGH) {
PlayNote = 1;
Note = 2;
}
if (digitalRead(PinButton[3]) == HIGH) {
PlayNote = 1;
Note = 3;
}
if (digitalRead(PinButton[4]) == HIGH) {
PlayNote = 1;
Note = 4;
}
if (PlayNote == 1) {
NoteDuration = int(1000/NoteDurations[Note]);
tone(PinTone, Notes[Note], NoteDuration);
delay(1.3*NoteDuration);
PlayNote = 0;
}
}