Tecnologia vestible

Per començar Elements d'entrada Programació CircuitPython   Recursos CITCEA
Elements no electrònics Elements de sortida Programació Arduino    
Projectes Elements de control Dades pràctiques   Inici

Generació de sons senzills

Les sortides es poden fer servir per fer sonar tons en algun tipus d'altaveu; per exemple un brunzidor piezoelèctric. En aquest cas obtindrem un so o un altre en funció de la freqüència dels polsos.

PWM

La sortida no cal que sigui PWM.

Atès que només podem indicar valors enters de la freqüència, caldrà fer una aproximació. La taula següent indica els valors de freqüència per obtenir les notes de l'escala central del piano:

piano

Nota Freqüència teòrica (Hz) Valor recomanat (Hz)
do3 C4 261,626 262
do#3 re b3 C#4 Db4 277,183 277
re3 D4 293,665 294
re#3 mi b3 D#4 Eb4 311,127 311
mi3 E4 329,628 330
fa3 F4 349,228 349
fa#3 sol b3 F#4 Gb4 369,994 370
sol3 G4 391,995 392
sol#3 la b3 G#4 Ab4 415,305 415
la3 A4 440,000 440
la#3 si b3 A#4 Bb4 466,164 466
si3 B4 493,883 494
do4 C5 523,251 523

Tenim dues maneres de generar sons. La més senzilla és amb la funció tone però cal tenir instal·lada la biblioteca simpleio que no és de les que formen part del nucli de CircuitPython. L'altra forma és variant la freqüència d'un PWM.

Generació de sons amb tone

import simpleio
import board
import time
while True:
    simpleio.tone(board.D0, 262, duration=0.25)  # Do durant 0,25 s
    time.sleep(0.1)                              # Durada del silenci
    simpleio.tone(board.D0, 294, duration=0.25)  # Re durant 0,25 s
    time.sleep(0.1)                              # Durada del silenci
    simpleio.tone(board.D0, 330, duration=0.25)  # Mi durant 0,25 s
    time.sleep(0.1)                              # Durada del silenci
    time.sleep(2)

El programa es podria simplificar si guardem les notes en una tupla i fem servir un bucle for per recórrer-la.

import simpleio
import board
import time
while True:
    for f in (262, 294, 330):
        simpleio.tone(board.D0, f, duration=0.25)    # Nota durant 0,25 s
        time.sleep(0.1)                              # Durada del silenci
    time.sleep(2)

Generació de sons amb PWM

Per generar els sons podem fer servir un PWM en el que variarem la freqüència i, en canvi, mantindrem el duty cycle constant a la meitat del període (valor de 32767) quan toqui la nota i a zero quan no s'hagi de tocar. El següent programa toca les notes Do, Re i Mi seguides d'una pausa i després torna a començar. Suposem que el brunzidor està a D0. Fixem-nos que en la definició de l'objecte especifiquem una freqüència (que pot ser qualsevol) i després la variem segons convingui accedint directament al paràmetre.

import pulseio
import board
import time
brunz = pulseio.PWMOut(board.D0, duty_cycle=0, frequency=262, variable_frequency=True)
while True:
    brunz.frequency = 262     # Do
    brunz.duty_cycle = 32767  # 50 %
    time.sleep(0.25)          # Durada de la nota
    brunz.duty_cycle = 0      # Silenci
    time.sleep(0.1)           # Durada del silenci
    brunz.frequency = 294     # Re
    brunz.duty_cycle = 32767  # 50 %
    time.sleep(0.25)          # Durada de la nota
    brunz.duty_cycle = 0      # Silenci
    time.sleep(0.1)           # Durada del silenci
    brunz.frequency = 330     # Mi
    brunz.duty_cycle = 32767  # 50 %
    time.sleep(0.25)          # Durada de la nota
    brunz.duty_cycle = 0      # Silenci
    time.sleep(0.1)           # Durada del silenci
    time.sleep(2)

El programa es podria simplificar si guardem les notes en una tupla i fem servir un bucle for per recórrer-la.

import pulseio
import board
import time
brunz = pulseio.PWMOut(board.D0, duty_cycle=0, frequency=262, variable_frequency=True)
while True:
    for f in (262, 294, 330):
        brunz.frequency = f
        brunz.duty_cycle = 32767  # 50 %
        time.sleep(0.25)          # Durada de la nota
        brunz.duty_cycle = 0      # Silenci
        time.sleep(0.1)           # Durada del silenci
    time.sleep(2)

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.