P2E-Buzzer-PWM-FR

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

En première utilisation, un signal PWM est un signal particulier permettant de moduler la puissance moyenne d'une sortie en activant/désactivant régulièrement (et rapidement) l'état d'une broche. Ce sujet a été traité dans le tutoriel Sortie PWM qui mettait en évidence la possibilité de changer la fréquence d'un signal PWM.

D'autre part, il existe de piezo Buzzer, un dispositif constitué de deux éléments métalliques collés côte-à-côte.

P2E-Buzzer-PWM-01.png

Lorsqu'une tension est appliquée, un bref courant circule dans le piezo et celui-ci change de forme (se déforme légèrement en cuillère). Quand la tension est enlevée, le piezo reprend sa forme originale en rendant l'énergie au circuit. En répétant l'opération à une fréquence donnée, cette déformation répétée comprime l'air environnant qui se met en mouvement à la même fréquence... ce qui --au final-- n'est rien d'autre qu'un son qui se propage dans l'air.

Si la fréquence de vibration du piezo est de 440 Hertz (440 fois par seconde) alors le piezo produira une note "La"

Piezo Actif vs Piezo Passif

Il existe deux type de Piezo Buzzer, dans le monde industriel il n'est pas rare de rencontrer un Piezo Actif (comme ci-dessous).

P2E-Buzzer-PWM-10.png

Ce type de piezo dispose de sa propre électronique faisant vibrer l'élément piezo à une fréquence fixée. Il n'a donc pas besoin d'un signal PWM.

A contratio, le piezo passif (comme présenté en début d'article) a besoin d'un signal PWM pour vibrer. Si possible un système d'amplification en courant sera le bienvenu pour obtenir une déformation plus importante et donc un son plus perceptible.

Le cas du Pico-2-Explorer

Sur le Pico-2-Explorer, le piezo buzzer est branché directement sur GP13 par l'intermédiaire d'une électronique d'amplification.

Pour utiliser le Piezo Buzzer, il est donc nécessaire que le cavalier soit en place (voir au dessus du bouton "Reset").

P2E-Buzzer-PWM-20.png

Cas pratique

L'exemple ci-dessous se propose de moduler un son à partir d'un signal PWM.

La tonalité du son --donc sa fréquence-- varie en fonction de la position du potentiomètre,

Le potentiomètre permet ainsi de passer progressivement d'un son grave (100 Hertz) à un son aigu 10000 Hertz (10 KHz). La fréquence 10 KHz est à la limite de ce que peut produire le piezo buzzer présent sur la carte explorer.

Pour obtenir un son bien audible, le signal PWM est généré avec un cycle utile de 33%

Branchement simplifié

Dans cet exemple, nous allons brancher un potentiomètre sur l'entrée analogique A0 (GP26) afin contrôler la fréquence PWM produite sur GP13 (33% de cycle utile).

En contrôlant la fréquence PWM de 100 Hz à 10 KHz, le script produira un son de 100 à 10000 Hertz.

P2E-Buzzer-PWM-25.png

Remarque:

  • Le script peut être interrompu mais cela n'interrompt pas la génération du son puisque qu'un contrôleur PWM est autonome.
  • Il est bien entendu possible d'interrompre la génération du signal PWM mais il sera plus simple de presser le bouton RESET de la carte (ce qui réinitialise tous les périphériques matériel du microcontrôleur).


Si vous n'êtes pas encore familiarisé avec l'utilisation des entrées analogiques alors vous pouvez consulter le tutoriel sur les entrées analogiques.

Code

Le code ci-dessous peut être saisi dans une session REPL ou dans Thonny IDE.

Cet exemple est également disponible dans le dépôt pwm-buzzer.py .

 1 from machine import Pin, ADC, PWM
 2 from maps import map
 3 import time
 4 
 5 # Désactive PowerSafe (lower ripple)
 6 Pin( 23, Pin.OUT, value=True )
 7 
 8 a0 = ADC( Pin( Pin.board.GP26 ) )
 9 buzzer = PWM( Pin( Pin.board.GP13 ) )
10 buzzer.duty_u16( 65535//3 )
11 while True:
12     val = a0.read_u16()
13     hertz = int( map(val, 0, 65535, 100, 10000 ) )
14     buzzer.freq( hertz )
15     print( 'frequence = %5i Hz' % (hertz) )
16     time.sleep_ms( 100 )

Il ne reste plus qu'à tourner le potentiomètre pour modifier la luminosité de la LED.

Voici quelques explications:

  • Ligne 2: import de la fonction map() similaire à son homologue Arduino est importé depuis la bibliothèque maps.
    La bibliothèque maps est déjà installée sur votre carte MicroPython et est disponible dans le dépôt esp8266-upy/LIBRARIAN.
  • Ligne 6: désactivation du mode d'économie d'énergie sur le régulateur de tension du Pico. Cela réduit significativement le bruit, celui qui sera aussi réceptionné sur l'entrée analogique.
  • Lignes 9 à 10: création de la broche de contrôle du signal PWM (sur la broche 13 attachée piezo buzzer).
  • Ligne 13: conversion de la valeur val obtenue du convertisseur analogique/numérique comprise entre 0 et 65535 vers une valeur comprise entre 100 et 10000. le fonction map() applique une règle de trois pour calculer cette valeur finale qui à toutes les chances d'être un nombre décimal. Le casting avec int() permet d'extraire la valeur entière (Ex: int(13.45) retournera la valeur 13)
  • Ligne 14: modifier la fréquence du signal PWM de la broche (pour rappel, la broches est déjà configurée à 30% de cycle utile.

Etant donné que le script affiche également la fréquence calculé dans la sortie REPL, il est possible d'identifier la fréquence produite, voir même d'en obtenir un graphe si l'on utilise Thonny IDE.

P2E-Buzzer-PWM-26.png

Un problème?

Pas de son ?

  1. Est ce que la valeur affichée dans REPL varie lorsque le potentiomètre est tourné ?
    1. OUI: vérifier la présence du cavalier près de
    2. NON: vérifier le raccordement entre le GP26 et le potentiomètre

Le son est presque inaudible ?

  1. les valeurs au dessus de 8000 Hertz sont à la limite des possibilités du Buzzer.
  2. abaisser les fréquences avec le potentiomètre

J'ai le message d'erreur "ImportError: no module named 'maps'" !

  1. Télécharger le fichier `maps.py` depuis esp8266-upy/LIBRARIAN.
  2. copiez le fichier le `maps.py` dans le répertoire 'lib/' de votre carte MicroPython.

Le son n'est pas très stable:

  1. Cela est provoqué par le bruit sur l'alimentation, bruit que l'on retrouve sur sur l'entrée analogique
  2. Modifier le code pour réduire la précision à 9 ou 10 bits significatif permettra d'éliminer la partie la plus faible du signal (donc le bruit).
    Voyez l'exemple pwm-buzzer-9bits pwm-buzzer-9bits.py dans le dépôt.

Le défi

xxxx

Truc et astuce


Traduction augmentée réalisée par Meurisse. D pour shop.MCHobby.be - Licence CC-BY-SA.


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.