Creamos un Piano cn arduino
Arduino + BUZZER = Piano
Clase: Mini-Piano con Arduino (50–70 min)
1) Objetivos de aprendizaje
-
Identificar la relación frecuencia–nota musical (ciencia del sonido).
-
Construir un circuito simple con entradas (botones) y salida (buzzer).
-
Programar Arduino para generar tonos y mapearlos a notas.
-
Iterar un prototipo con pruebas y mejoras rápidas (mentalidad ingenieril).
2) Materiales (por equipo)
-
1 Arduino UNO/Nano (o compatible)
-
1 buzzer pasivo (no el de zumbido fijo)
-
4 a 8 botones/pulsadores (o teclas impresas en 3D/cartón)
-
8 resistencias 10kΩ (pull-down) + 1 resistencia 220Ω para el buzzer (si es necesario)
-
Protoboard y jumpers
-
Opcional: potenciómetro (volumen/efectos), LDR (theremín de luz), o sensor capacitivo (toque)
3) Reto de ingeniería (para motivar)
“Construye un piano de 4 notas en 20 minutos. Luego amplíalo a 8 notas y agrega un modo escala o modo efectos controlado por un botón extra.”
4) Circuito (versión con 4 notas)
-
Buzzer: positivo → D9, negativo → GND
-
Botones: un pin de cada botón → D2, D3, D4, D5; el otro pin → +5V
-
Resistencias de 10kΩ: entre D2–D5 y GND (pull-down)
-
(Alternativa: usar
pinMode(x, INPUT_PULLUP)y cablear el botón a GND → lógica invertida)
5V ── botón ── D2 (con 10kΩ de D2 a GND)
5V ── botón ── D3 (con 10kΩ de D3 a GND)
5V ── botón ── D4 (con 10kΩ de D4 a GND)
5V ── botón ── D5 (con 10kΩ de D5 a GND)
D9 ──(+)Buzzer(−)── GND
5) Código base (4 notas – DO RE MI FA)
Copia/pega, compila y prueba. Está pensado para pull-down (botón a 5V). Si usas INPUT_PULLUP, invierte la lógica de lectura.
// Mini-Piano 4 notas – Arduino
const int BUZZER_PIN = 9;
const int keys[4] = {2, 3, 4, 5}; // pines de botones
const int notes[4] = {262, 294, 330, 349}; // C4, D4, E4, F4 (Hz)
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(keys[i], INPUT); // pull-down externo de 10k a GND
}
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
bool pressed = false;
for (int i = 0; i < 4; i++) {
if (digitalRead(keys[i]) == HIGH) { // botón a 5V
tone(BUZZER_PIN, notes[i]);
pressed = true;
break; // prioridad: primera tecla detectada
}
}
if (!pressed) noTone(BUZZER_PIN);
}
Ampliación a 8 notas (escala C mayor: C4–C5)
-
Añade botones en D6, D7, D8, D10 (o los pines libres que prefieras).
-
Reemplaza arrays:
const int keys[8] = {2,3,4,5,6,7,8,10};
const int notes[8] = {262,294,330,349,392,440,494,523}; // C D E F G A B C
6) Actividades guiadas (paso a paso)
-
Explora: ¿Qué es frecuencia (Hz)? Relación con el tono. Escucha ejemplos (440 Hz = La4).
-
Prototipa: Cablea buzzer y un botón → prueba una nota.
-
Escala: Añade 3 botones más → 4 notas.
-
Itera: Amplía a 8 notas. Añade “modo efecto” (ver abajo).
-
Presenta: Cada equipo interpreta una melodía corta (ej.: “Do-Re-Mi”).
7) Extensiones (visión de futuro 🚀)
-
Modo efectos: un botón extra activa vibrato/portamento controlado por
millis()o un potenciómetro (profundidad/velocidad). -
Sensor de luz (LDR): mapea la luz a la frecuencia → mini-theremín.
-
Capacitivo: usar la librería
CapacitiveSensorpara teclas “touch”. -
MIDI over USB/Serial: envía notas MIDI a un DAW (Ableton, GarageBand) con un convertidor Serial-MIDI en PC.
-
Machine Learning: reconocer patrones de melodías (TinyML) y dar retroalimentación.
-
Diseño 3D: imprimir teclas/caratula del piano y documentar el proceso (STEAM completo).
-
Versión ESP32: usar 2 salidas DAC (mejor calidad de audio) o Wi-Fi para compartir partituras vía web.
8) Variantes didácticas
-
1 sola entrada analógica (resistor ladder): 8 teclas a A0 con resistencias distintas → lees rangos y decides la nota (menos cables).
-
Entradas Pull-Up internas: elimina resistencias externas y conecta botones a GND. Cambia
pinMode(keys[i], INPUT_PULLUP)y condicióndigitalRead(...) == LOW.
9) Evaluación rápida (rúbrica breve – 10 pts)
-
Funcionamiento básico (4 pts): suenan las notas correctas sin falsos disparos.
-
Calidad del cableado (2 pts): orden, colores, seguridad.
-
Código (2 pts): legible, comentarios, arrays correctos.
-
Mejora/creatividad (2 pts): efectos, 8 notas, carcasa, melodía.
10) Checklist de clase
-
Probé el buzzer con
tone(9, 440, 300) -
Cada botón activa una nota única
-
Sin zumbidos cuando no hay botón presionado
-
Documenté conexión y código con 2 fotos
-
Toqué una melodía simple
11) Solución de problemas (rápido)
-
Suena siempre: invierte la lógica (¿usaste INPUT_PULLUP?), revisa
noTone(). -
No suena: ¿buzzer pasivo? ¿pin correcto? Prueba
tone(9, 440, 500)ensetup(). -
Notas incorrectas: revisa el orden de
keys[]vsnotes[]. -
Botón rebota: agrega un retardo suave (
delay(20)) o un filtro por tiempo conmillis().


Comments
Post a Comment