ARDX-Montages-CIRC06

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Ce que nous faisons

.: Musique :.

.: Les éléments Piezo électriques :.

Jusqu'à maintenant nous avons contrôlé la lumière, le mouvement et les électrons. Attaquons nous maintenant au son.

Mais le son est un phénomène analogique, comment Arduino va t'il résoudre ce problème ?

Une fois encore, nous allons nous appuyer sur l'incroyable vitesse de traitement d'Arduino pour imiter le comportement analogique. Pour y arriver, nous allons raccorder un composant piezo sur une des broches digitales d'Arduino.

Un piezo fait un petit « clic » chaque fois qu'il est traversé par un courant. Si nous envoyons des impulsions à la bonne fréquence (par exemple, 440 fois par seconde pour obtenir un La (A)) ces « clics » combinés produiront une note.

Essayons donc d'expérimenter cette particularités et de faire jouer « A vous dirais-je maman » à notre Arduino.

Le montage

Le matériel nécessaire

ARDX-circ-sheet.png

Fiche de montage CIRC-06
x1

ARDX-pin-header.png

2 Pin header
x4

ARDX-Piezo.png

Piezo Buzzer
x1

 

Tous ces éléments sont disponibles dans le Kit Ardx proposé sur shop.mchobby.be.

Schéma

Circ06-schema.png

Montage

Cir06-montage.png

Le code

Pas besoin de taper tout le code, vous pouvez télécharger ce programme depuis ardx.org/CODE06 et faire un copier/coller dans votre croquis.

/* Melody (cleft) 2005 D. Cuartielles pour K3
 *
 * Cet exemple utilise un piezo pour jouer une
 * mélodie. Il envoie une onde carrée à la
 * fréquence adéquate pour générer la tonalité correspondante.
 *
 * Le calcul de la tonalité est fait en suivant
 * l'opération mathématique suivante:
 *
 * timeHigh = période/2 = 1/(2*FrequenceTonalité)
 *
 * Où les différentes tonalités sont spécifiées dans la table suivante:
 *
 * note Fréquence Période timeHigh
 * Do c 261 Hz    3830    1915
 * Ré d 294 Hz    3400    1700
 * Mi e 329 Hz    3038    1519
 * Fa f 349 Hz    2864    1432
 * Sol g 392 Hz   2550    1275
 * La a 440 Hz    2272    1136
 * Si b 493 Hz    2028    1014
 * Do C 523 Hz    1912    956
 *
 * http://www.arduino.cc/en/Tutorial/Melody
 */

int speakerPin = 9;
int length = 15; // Le nombre de notes

// Les notes. Un espace représente un blanc
char notes[] = "ccggaagffeeddc ";

// Rythme correspondant à chaque note
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
   for (long i = 0; i < duration * 1000L; i += tone * 2) {
      digitalWrite(speakerPin, HIGH);
      delayMicroseconds(tone);
      digitalWrite(speakerPin, LOW);
      delayMicroseconds(tone); 
   }
}

void playNote(char note, int duration) {
   char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
   int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

   // Jouer la tonalité correspondant à une note
   for (int i = 0; i < 8; i++) {
      if (names[i] == note) {
         playTone(tones[i], duration); 
      }
   }
}

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

void loop() {
   for (int i = 0; i < length; i++) {
      if (notes[i] == ' ') {
         delay(beats[i] * tempo); // Attendre
      } 
      else {
         playNote(notes[i], beats[i] * tempo);
      }

      // Pause entre deux notes
      delay(tempo / 2);
   } 
}

Cela ne fonctionne pas?

Voici 3 choses à essayer.

Pas de son?

Etant donné la taille et la forme d'un piezo (un gros cylindre). Il est facile de le placer dans le mauvais trou sur le breadboard.

Vérifiez son emplacement.

Arrêter la mélodie

Je n'arrive plus à penser pendant qu'Arduino joue une mélodie

Il suffit de débrancher le piezo pendant que vous êtes occupé.

Ensuite, chargez votre nouveau programme et rebranchez le piezo

Une autre mélodie

Fatigué d'entendre « A vous dirais- je maman » ?

Le code est écrit de telle sorte qu'il vous sera facile d'ajouter vos propres mélodies.

Jetez un coup d'œil sur la section ci-dessous.

Faire encore mieux

Modifier la vitesse

Le temps de chaque note est calculé à l'aide de variables de telle sorte que nous pouvons modifier le son de chaque note ainsi que le temps de chaque note. Pour changer la vitesse d'une mélodie, il ne faut changer qu'une ligne.

int tempo=300; ---> int tempo=(nouvelle_valeur)

Utiliser une valeur plus grande pour ralentir la mélodie et une plus petite valeur pour l'accélérer.

Adapter les notes

Si vous trouvez que les notes ne correspondent pas bien à la mélodie, cela peut également être corrigé. Les notes sont calculées sur base de la formule décrite dans les commentaires du programme. Pour ajuster une note, il suffit de modifier sa valeur correspondante dans le tableau notes[]. Chaque note correspond à la position de son nom dans e tableau names[].

Par exemple c Do = 1915.

char names[] = { 'c', 'd', 'e', 'f', 'g', 'a','b', 'C' };

int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; 

Composez vos propres mélodies

Le programme est configuré pour jouer « Ah vous dirais-je maman », cependant, il est développé de sorte à pouvoir la changer facilement. Chaque chanson est définie à l'aide d'un entier et de deux tableaux. L'entier indique le nombre de notes, le premier tableau (notes[]) contient les notes et le rythme de chaque note (temps pendant lequel la note est jouée) dans le second (beats[]).

Quelques exemples:

  • Ah! vous dirai-je, maman
int length = 15;
char notes[] = {"ccggaagffeeddc "};
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
  • Joyeux anniversaire (premier couplet)
int length = 13;
char notes[] = {"ccdcfeccdcgf "};
int beats[] = {1,1,1,1,1,2,1,1,1,1,1,2,4};

Plus, plus et encore plus

Plus d'information, où poser vos autres questions ardx.org/CIR06 (anglais)

Internet

.:téléchargement:.

LA fiche de montage est disponible sur ardx.org/BBLS06

.: Vidéo :.

La vidéo du montage est disponible sur ardx.org/VIDE13 (anglais)


Tutoriel/Manuel traduit par Meurisse D. pour MCHobby.be licence Creative Commons BY-SA.

Crédit de traduction
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (shop.MCHobby.be) - Vente de kit et composants » et ce quelque soit le média utilisé.

Utilisation commerciale
L'utilisation commercial de cette traduction (y compris sur site produisant des revenus par l'intermédiaire de publicité), même partielle, est soumise à redevance (license fee).


Le présent manuel a été traduit et autorisé à la vente avec l'aimable autorisation conjointe de Oomlout (www.oomlout.com) et d'AdaFruit (www.adafruit.com).

Produit sous licence Creative Commons BY-SA License and available for download: ardx.org/src/