Este documento describe una lección de matemáticas sobre cómo usar Arduino para tocar música. La pregunta conductora es cómo podríamos tocar música con Arduino. Los estudiantes diseñarán una tabla de fracciones, una tabla de notas musicales, e implementarán un programa de Arduino para tocar los primeros compases de una melodía usando la instrucción tone(). El producto final será un programa de Arduino que toque música.
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Let there be rock
1. Learning Situation (LS): A fraction of music!
Teacher: Carlos Morales Socorro
High School: IES El Calero
Subject: Maths
Interdisciplinary? Music
Level: 2º ESO LOE
Methodology: TaskBL
Driving question: How could we play music with Arduino?
Final Product: Arduino program
Expert: None
Products / Milestones:
(a<b, “a” has to be finished before “b”)
Test < Score - Table of fractions < Arduino Program
Resources needed: Computer
Duration: <2 weeks
-.-
Criterios de Evaluación 2ESO LOE
x
1. Resolver problemas que involucren operaciones y propiedades con números enteros, fracciones, decimales y porcentajes relacionados con la
vida diaria.
2. Identificar relaciones de proporcionalidad numérica y geométrica y utilizarlas para resolver problemas en situaciones de la vida cotidiana.
x
3. Utilizar el lenguaje algebraico para simbolizar, generalizar y resolver problemas sencillos utilizando métodos numéricos, gráficos o
algebraicos.
4. Utilizar estrategias de estimación y cálculo para obtener áreas y volúmenes de cuerpos geométricos, expresando el resultado de la estimación o
el cálculo en la unidad de medida más adecuada.
5. Utilizar el teorema de Thales y los criterios de semejanza para interpretar relaciones de proporcionalidad geométrica entre segmentos y figuras
planas, y para construir figuras semejantes con una razón dada.
6. Obtener información práctica de gráficas sencillas (de trazo continuo) relacionadas con fenómenos naturales y la vida cotidiana.
7. Representar e interpretar tablas y gráficas cartesianas de relaciones funcionales sencillas, basadas en la proporcionalidad directa, y obtener la
relación de proporcionalidad entre dos magnitudes a partir del análisis de su tabla de valores y de su gráfica.
8. Planificar y realizar estudios estadísticos sencillos para conocer las características de una población, recoger, organizar y presentar los datos
relevantes, utilizando los métodos apropiados y las herramientas informáticas adecuadas.
x
9. Utilizar estrategias y técnicas de resolución de problemas, tales como el análisis del enunciado, el ensayo y error sistemático, la división del
problema en partes, así como la comprobación de la coherencia de la solución obtenida y expresar, utilizando el lenguaje matemático adecuado a
su nivel, el procedimiento que se ha seguido en la resolución.
-.-
Contenidos
I. Estrategias,
habilidades,
destrezas y actitudes
generales
II. Números III. Álgebra IV. Geometría V. Funciones y
Gráficas
VI. Estadística y
Probabilidad
Let there be rock! - AC/DC
1
2. Act 1: How could we play music with Arduino?
Check this out if you don't know Arduino:
https://www.youtube.com/watch?v=Kgz0vD1vSxY
Look at the tone instruction, it's the key!!
tone()
-Description
Generates a square wave of the specified frequency (and 50% duty cycle) on a pin. A duration can
be specified, otherwise the wave continues until a call to noTone(). The pin can be connected to a piezo
buzzer or other speaker to play tones.
NOTE: if you want to play different pitches on multiple pins, you need to call noTone() on one pin
before calling tone() on the next pin.
-Syntax
tone(pin, frequency)
tone(pin, frequency, duration)
-Parameters
pin: the pin on which to generate the tone
frequency: the frequency of the tone in hertz
duration: the duration of the tone in milliseconds (optional)
Try to find out how to play this famous tune:
2
3. Arduino playing Brahms: https://youtu.be/5wiw20wZobs
Plan:
Act 2. Let's design the fraction's table:
Measure nº Fractions Addition
3
4. Act 3. Let's find out the notes' table:
-- España United Kingdom - USA
Measure nº Notes (DO, RE, MI, FA, SOL, LA, SI, DO, ...) Notes (C, D, E, F, G, A, B, D, ...)
4
6. #define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
If we use arduino's pin 8 and a Measure lasts 1200 ms:
tone(pin, frequency, duration)
-.-
tone(8,0,800); delay(800);
tone(8,NOTE_E3,200); delay(200);
tone(
tone(
tone(
tone(
tone(
tone(
tone(
Act 5. Design an Arduino program to play it. Click on Upload!
void setup() {
// put your setup code here, to run once:
int buzzerPin=8;
pinMode(buzzerPin,OUTPUT);
tone(
delay(
tone(
delay(
tone(
delay(
tone(
delay(
6
7. tone(
delay(
tone(
delay(
tone(
delay(
tone(
delay(
tone(
noTone(buzzerPin);
}
Act 6. What could we do to increase the quality of the program?
Key 1: Use the “for” structure to avoid a lot of tone+delay lines.
Key 2: Use Algebra to make it more powerful!
Videotutorial: https://www.youtube.com/watch?v=eH2ozmow2TU
// Basado en el tutorial https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone
#include "pitches.h"
// Fichero externo con las frecuencias asociadas a cada nota de cada una de las 8 octavas que admite el zumbador.
void setup() {
int i; // variable contadora
float duracionCompas=1200;
// variable que marca la duración en milisegundos de un compás. Cuidado, las variables no admiten tildes.
int numNotas=53; // Número de notas
int pinZumbador=8; // Pin de salida para el zumbador
float tiempo;
float fraccionCompas[]={2.0/3.0, 1.0/6.0, 1.0/6.0,
3.0/6.0, 1.0/6.0, 2.0/6.0,
2.0/3.0, 1.0/6.0, 1.0/6.0,
1.0/3.0, 1.0/3.0, 1.0/6.0, 1.0/6.0,
1.0/3.0, 1.0/3.0, 1.0/6.0, 1.0/6.0,
7
9. // Tabla-vector con las alturas de cada nota según tablatura: C: Do, D: Re, E: Mi, F: Fa, G: Sol, A: La, B: Si, C: Do,..
// El 0 se usa para los silencios. El zumbador admite 8 octavas, por lo que se pueda escribir C1, C2, C3, ..., C8.
// Los sostenidos se escriben con una S adicional: Re# en tercera octava: D3S. Recuerda que Mib = Re#.
Serial.begin(9600);
pinMode(pinZumbador,OUTPUT);
for(i=0;i<numNotas;i++)
{
tiempo = duracionCompas*fraccionCompas[i];
Serial.println(tiempo);
tone(pinZumbador, melodia[i], (int) tiempo); // Emite la
nota i con la duracion correspondiente.
delay((int) tiempo); // Espera a que termine esa nota para luego pasar a la siguiente.
}
noTone(pinZumbador); // Desactiva el zumbador.
}
void loop() {
// En esta ocasion no ponemos nada porque hacemos el bucle con N iteraciones (tantas como notas)
}
Act 6. Choose a melody and make Arduino play it!!
Step 1. Fill in your team fraction's table
Step 2. Fill in your team notes' table. Be careful with the octave.
Step 3. Design the Arduino program. Remember to adjust the variables: numNotas, duracionCompas, fraccionCompas
and melodia.
9
10. // Tabla-vector con las alturas de cada nota según tablatura: C: Do, D: Re, E: Mi, F: Fa, G: Sol, A: La, B: Si, C: Do,..
// El 0 se usa para los silencios. El zumbador admite 8 octavas, por lo que se pueda escribir C1, C2, C3, ..., C8.
// Los sostenidos se escriben con una S adicional: Re# en tercera octava: D3S. Recuerda que Mib = Re#.
Serial.begin(9600);
pinMode(pinZumbador,OUTPUT);
for(i=0;i<numNotas;i++)
{
tiempo = duracionCompas*fraccionCompas[i];
Serial.println(tiempo);
tone(pinZumbador, melodia[i], (int) tiempo); // Emite la
nota i con la duracion correspondiente.
delay((int) tiempo); // Espera a que termine esa nota para luego pasar a la siguiente.
}
noTone(pinZumbador); // Desactiva el zumbador.
}
void loop() {
// En esta ocasion no ponemos nada porque hacemos el bucle con N iteraciones (tantas como notas)
}
Act 6. Choose a melody and make Arduino play it!!
Step 1. Fill in your team fraction's table
Step 2. Fill in your team notes' table. Be careful with the octave.
Step 3. Design the Arduino program. Remember to adjust the variables: numNotas, duracionCompas, fraccionCompas
and melodia.
9