Émission d’un son (seconde générale)

Principe

Certains microcontrôleurs (Arduino et Micro:bit) ne possédant pas de sortie analogique (CNA) pour générer des tensions sinusoïdales, une méthode simple pour produire un son est de générer une tension carrée (entre 0 et Vcc) de fréquence f à l’entrée d’un haut-parleur.

Le son obtenu par cette technique n’est pas pur car il comporte des harmoniques aux fréquences 3f, 5f, 7f, …

Avertissement

Pour les faibles fréquences, le son devient « métallique » avec la présence importante d’harmoniques !

Méthode 1 : construire le signal carré

Branchement d’un haut-parleur sur la broche 8

#define brocheHP 8

float frequence=440;
float periode=1/frequence;

void setup(){
    pinMode(brocheHP, OUTPUT);
}

void loop(){
  digitalWrite(brocheHP,HIGH);
  delayMicroseconds(1000000*periode/2.0);
  digitalWrite(brocheHP,LOW);
  delayMicroseconds(1000000*periode/2.0);
}

Méthode 2 : utiliser une fonction spéciale

/*
Exemple Arduino
*/
#include "pitches.h"

// notes in the melody:
int melody[] = {NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {4, 8, 8, 4, 4, 4, 4, 4 };

void setup() {
for (int thisNote = 0; thisNote < 8; thisNote++) {
   int noteDuration = 1000/noteDurations[thisNote];
   tone(8, melody[thisNote],noteDuration);
   int pauseBetweenNotes = noteDuration * 1.30;
   delay(pauseBetweenNotes);
   noTone(8);
}
}

void loop() {
// Pas de boucle ici !
}

Applications

  • Hauteur d’un son (relation entre fréquences et notes).

  • Générer une mélodie à partir de plusieurs notes.