Différences entre versions de « P2E-Buzzer-PWM-FR »
(→Code) |
|||
Ligne 63 : | Ligne 63 : | ||
<syntaxhighlight lang="python" line highlight="1,8,9,12"> | <syntaxhighlight lang="python" line highlight="1,8,9,12"> | ||
− | + | from machine import Pin, ADC, PWM | |
+ | from maps import map | ||
+ | import time | ||
+ | |||
+ | # Désactive PowerSafe (lower ripple) | ||
+ | Pin( 23, Pin.OUT, value=True ) | ||
+ | |||
+ | a0 = ADC( Pin( Pin.board.GP26 ) ) | ||
+ | buzzer = PWM( Pin( Pin.board.GP13 ) ) | ||
+ | buzzer.duty_u16( 65535//3 ) | ||
+ | while True: | ||
+ | val = a0.read_u16() | ||
+ | hertz = int( map(val, 0, 65535, 100, 10000 ) ) | ||
+ | buzzer.freq( hertz ) | ||
+ | print( 'frequence = %5i Hz' % (hertz) ) | ||
+ | time.sleep_ms( 100 ) | ||
+ | </syntaxhighlight> | ||
Il ne reste plus qu'à tourner le potentiomètre pour modifier la luminosité de la LED. | Il ne reste plus qu'à tourner le potentiomètre pour modifier la luminosité de la LED. | ||
Voici quelques explications: | Voici quelques explications: | ||
− | * '''Ligne | + | * '''Ligne 2''': import de la fonction {{fname|map}} similaire à son homologue Arduino. La fonction bibliothèque {{fname|maps}} est déjà installée sur votre carte MicroPython et est disponible dans le dépôt [https://github.com/mchobby/esp8266-upy/tree/master/LIBRARIAN esp8266-upy/LIBRARIAN]. |
* '''Lignes x à x''': xxx | * '''Lignes x à x''': xxx | ||
Version du 13 décembre 2024 à 17:13
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.
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).
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").
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.
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. La fonction bibliothèque maps est déjà installée sur votre carte MicroPython et est disponible dans le dépôt esp8266-upy/LIBRARIAN.
- Lignes x à x: xxx
Un problème?
xxxx
La luminosité de la LED ne varie pas lorsque le potentiomètre est tourné ?
- Est ce que la valeur affichée dans REPL varie lorsque le potentiomètre est tourné ?
- OUI: vérifier le raccordement entre le GP2 et la LED
- NON: vérifier le raccordement entre le GP26 et le potentiomètre
- La luminosité change par ac-coup ? Cela peut être provoqué par la pause de 1/10 de seconde à chaque tour de boucle. Diminuer le délai à 20 millisecondes augmente la réactivité du script.
- La LED scintille ?!?! cela peut être provoqué par un contact électrique imparfait... vérifier les divers branchement sur les connecteurs.
Le défi
xxxx
Truc et astuce
Traduction augmentée réalisée par Meurisse. D pour shop.MCHobby.be - Licence CC-BY-SA.