P2E-MELODIC-BELL
Sonnette
Chez MCHobby, nous avons une sonnette de porte pour le moins originale.
A chaque fois qu'une personne presse le bouton, une piste audio bien rythmée est jouée sur une paire de haut-parleur PC (réglé sur un volume assez élevé).
Ce qu'il y a d'intéressant, c'est que la mélodie est différente d'une fois à l'autre (parmi une sélection de "titre").
C'est une idée assez originale donc nous ne nous lassons pas depuis de nombreuses années.
Alors pourquoi ne pas réaliser quelque-chose de similaire avec notre pico-explorer.
En effet:
- Le Pico Explorer dispose d'un Buzzer amplifié
- La bibliothèque RTTTL permet de jouer des mélodies.
- Le fichier songs.py contient déjà un ensemble de mélodie (voir le détail dans la bibliothèque micropython-rtttl )
Cet exemple se propose jouer un mélodie différente à chaque fois que le bouton est pressé.
Brancher
Pico | Pico-2-Explorer |
GP16 | Btn 3 (ou bouton volant) |
GP13 | Buzzer (cavalier place) |
Le bouton de sonnette sera simulée par l'un des 3 boutons qui sera branché sur le GPIO 16. Ce bouton peut très bien être remplacé par un "bouton volant" pour placer la sonnette à l'entrée de votre chambre.
Sur le Pico-2-Explorer, le piezo buzzer est branché directement sur GP13 par l'intermédiaire d'une électronique d'amplification.
Le cavalier Buzzer doit être en place.
Code
Le script doorbell.py est disponible dans le dépôt dédié au Pico-2-Explorer.
1 import micropython, time
2 from machine import Pin
3 from rtplay import *
4 micropython.alloc_emergency_exception_buf(100)
5
6 counter = 0
7
8 def bouton_cb( obj ):
9 global counter
10 counter += 1
11
12 btn = Pin( Pin.board.GP16, Pin.IN, Pin.PULL_UP )
13 btn.irq( handler=bouton_cb, trigger=Pin.IRQ_FALLING )
14
15 buzzer = RingTonePlayer( Pin.board.GP13 )
16 buzzer.load_songs( 'songs.py' )
17 song_names = buzzer.dir_songs()
18 print( song_names )
19
20 index = 0
21 while True:
22 if counter>0:
23 song_name = song_names[index]
24 print( 'Ring the bell! %i %s' % (index,song_name) )
25
26 buzzer.play_song( song_name )
27
28 index += 1
29 if index >= len(song_names):
30 index = 0
31
32 counter=0
33
34 time.sleep_ms( 200 )
Une fois le script lancé, presser sur bouton joue l'une des mélodies disponibles.
- Lignes 1 à 3 : chargement des bibliothèques nécessaires dont rtplay permettant de jouer des mélodies RTTTL (voir le tutoriel musique
- Ligne 4 : étant donné que cet exemple utilisera le mécanisme d'interruption, il est nécessaire d'allouer un espace mémoire permettant la transmission des messages d'erreurs.
- Ligne 6 : déclaration de la variable globale counter. Cette dernière sera incrémentée de 1 par une routine d'interruption à chaque fois que le bouton de sonnette sera enfoncé. Par conséquent, l'expression counter>0 sera vraie lorsque le bouton de sonnette aura été enfoncé.
['Super Mario - Main Theme', 'Super Mario - Title Music', 'SMBtheme', 'SMBwater', 'SMBunderground', 'Picaxe', 'The Simpsons', 'Indiana', 'TakeOnMe', 'Entertainer', 'Muppets', 'Xfiles', 'Looney', '20thCenFox', 'Bond', 'MASH', 'StarWars', 'GoodBad', 'TopGun', 'A-Team', 'Flinstones', 'Jeopardy', 'Gadget', 'Smurfs', 'MahnaMahna', 'LeisureSuit', 'MissionImp']
Ressources
https://docs.micropython.org/en/latest/library/machine.Pin.html
https://docs.micropython.org/en/latest/reference/isr_rules.html
Traduction augmentée réalisée par Meurisse. D pour shop.MCHobby.be - Licence CC-BY-SA.