Aujourd'hui, nous allons faire en sorte que notre carte STM32 Nucleo joue une petite mélodie.
Il est possible de faire de la synthèse de son assez sophistiquée grâce au STM32, mais nous nous limiterons à la génération d'un signal PWM dont nous ferons varier la fréquence, afin d'obtenir un résultat similaire à l'utilisation des instructions "tone" et "noTone" sur une carte Arduino.
Il est possible de faire de la synthèse de son assez sophistiquée grâce au STM32, mais nous nous limiterons à la génération d'un signal PWM dont nous ferons varier la fréquence, afin d'obtenir un résultat similaire à l'utilisation des instructions "tone" et "noTone" sur une carte Arduino.
Le circuit
Tel que discuté dans un précédent article, il est plutôt risqué de brancher un haut-parleur directement à une sortie du Nucleo: la résistance d'un haut-parleur étant typiquement très faible (inférieure à 10 Ω), il en résulterait un courant trop intense qui risquerait à la longue d'endommager le STM32. Une méthode beaucoup plus appropriée consiste à insérer un transistor entre la sortie du Nucleo et le haut-parleur.
Voici le schéma du circuit que j'ai utilisé. Le potentiomètre est facultatif: il permet de contrôler le volume sonore.
Plutôt qu'un MOSFET, vous pouvez utiliser un transistor NPN avec une résistance de quelques kΩ à sa base (plus de détails ici).
Le script
Voici un script programmé dans mbed. Après avoir défini la pin D9 comme une sortie PWM au moyen de la fonction PWMOut, on peut régler sa période et son rapport cyclique. La période est liée à la hauteur de la note jouée, alors que le rapport cyclique permet de contrôler le volume.
La constante "note" est un tableau contenant la fréquence associée aux 11 notes contenues dans un octave.
La mélodie se trouve dans la constante "melodie". Il s'agit d'un tableau bi-dimensionnel contenant chacune des notes devant être jouée, de façon séquentielle. Chaque note comporte trois paramètres: la valeur de la note (0 pour do, 1 pour do#, 2 pour ré, jusqu'à 11 pour si), le numéro de l'octave (1 pour l'octave le plus grave, 2 pour l'octave suivant, etc.), et finalement la durée de la note (1 pour une croche, 2 pour une noire, 4 pour une ronde).
Vous pouvez facilement modifier le contenu de la constante "melodie" afin de faire jouer autre chose par votre carte Nucleo, sans avoir à changer quoi que ce soit au reste du programme.
Vidéo de la carte Nucleo en action
Yves Pelletier (Twitter, Facebook)
Voici le schéma du circuit que j'ai utilisé. Le potentiomètre est facultatif: il permet de contrôler le volume sonore.
Plutôt qu'un MOSFET, vous pouvez utiliser un transistor NPN avec une résistance de quelques kΩ à sa base (plus de détails ici).
Le script
Voici un script programmé dans mbed. Après avoir défini la pin D9 comme une sortie PWM au moyen de la fonction PWMOut, on peut régler sa période et son rapport cyclique. La période est liée à la hauteur de la note jouée, alors que le rapport cyclique permet de contrôler le volume.
La constante "note" est un tableau contenant la fréquence associée aux 11 notes contenues dans un octave.
La mélodie se trouve dans la constante "melodie". Il s'agit d'un tableau bi-dimensionnel contenant chacune des notes devant être jouée, de façon séquentielle. Chaque note comporte trois paramètres: la valeur de la note (0 pour do, 1 pour do#, 2 pour ré, jusqu'à 11 pour si), le numéro de l'octave (1 pour l'octave le plus grave, 2 pour l'octave suivant, etc.), et finalement la durée de la note (1 pour une croche, 2 pour une noire, 4 pour une ronde).
Vous pouvez facilement modifier le contenu de la constante "melodie" afin de faire jouer autre chose par votre carte Nucleo, sans avoir à changer quoi que ce soit au reste du programme.
Vidéo de la carte Nucleo en action
Yves Pelletier (Twitter, Facebook)
Aucun commentaire:
Enregistrer un commentaire