Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Generació de sons (tone)

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

La instrucció tone és la que ens permet fer sonar una nota. Cal indicar la pota per on volem que surti la nota (primer paràmetre) i la freqüència (segon paràmentre). Podem indicar la durada de la nota (en mil·lisegons) afegint un tercer paràmetre. La funció notone permet aturar el so en la pota indicada.

En el següent programa fem sonar primer un La durant mig segon i després un Do durant un altre mig segon i després aturem el so durant dos segons. Després es tornarà a repetir. El brunzidor està connectat a D3.

void setup() {
	pinMode(3, OUTPUT);
}
void loop() {
	tone(3, 440, 250);  // La durant 0,25 s
	delay(500);  // Espera mig segon
	tone(3, 262);   // Do
	delay(250);  // Durada 0,25 s
	noTone(3);   // Silenci
	delay(2000);  // Espera dos segons
}

Si volem fer melodies més elaborades, encara que la qualitat del so no és molt bona, podem fer servir la següent definició de freqüències per a les notes i llavors al programa indiquem la nota que volem.

#define N_Do0     33
#define N_ReB0    35
#define N_Re0     37
#define N_MiB0    39
#define N_Mi0     41
#define N_Fa0     44
#define N_SolB0   46
#define N_Sol0    49
#define N_LaB0    52
#define N_La0     55
#define N_SiB0    58
#define N_Si0     62
#define N_Do1     65
#define N_ReB1    69
#define N_Re1     73
#define N_MiB1    78
#define N_Mi1     82
#define N_Fa1     87
#define N_SolB1   93
#define N_Sol1    98
#define N_LaB1   104
#define N_La1    110
#define N_SiB1   117
#define N_Si1    123
#define N_Do2    131
#define N_ReB2   139
#define N_Re2    147
#define N_MiB2   156
#define N_Mi2    165
#define N_Fa2    175
#define N_SolB2  185
#define N_Sol2   196
#define N_LaB2   208
#define N_La2    220
#define N_SiB2   233
#define N_Si2    247
#define N_Do3    262
#define N_ReB3   277
#define N_Re3    294
#define N_MiB3   311
#define N_Mi3    330
#define N_Fa3    349
#define N_SolB3  370
#define N_Sol3   392
#define N_LaB3   415
#define N_La3    440
#define N_SiB3   466
#define N_Si3    494
#define N_Do4    523
#define N_ReB4   554
#define N_Re4    587
#define N_MiB4   622
#define N_Mi4    659
#define N_Fa4    698
#define N_SolB4  740
#define N_Sol4   784
#define N_LaB4   831
#define N_La4    880
#define N_SiB4   932
#define N_Si4    988
#define N_Do5   1047
#define N_ReB5  1109
#define N_Re5   1175
#define N_MiB5  1245
#define N_Mi5   1319
#define N_Fa5   1397
#define N_SolB5 1480
#define N_Sol5  1568
#define N_LaB5  1661
#define N_La5   1760
#define N_SiB5  1865
#define N_Si5   1976
#define N_Do6   2093
#define N_ReB6  2217
#define N_Re6   2349
#define N_MiB6  2489
#define N_Mi6   2637
#define N_Fa6   2794
#define N_SolB6 2960
#define N_Sol6  3136
#define N_LaB6  3322
#define N_La6   3520
#define N_SiB6  3729
#define N_Si6   3951
#define N_Do7   4186
void setup() {
	pinMode(3, OUTPUT);
}
void loop() {
	tone(3, N_La4, 250);  // La durant 0,25 s
	delay(500);  // Espera mig segon
	tone(3, N_Do4);   // Do
	delay(250);  // Durada 0,25 s
	noTone(3);   // Silenci
	delay(500);  // Espera mig segon
}

 

 

 

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.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.