Introducción
¿Quieres convertir tu Arduino en un instrumento musical? En este proyecto te enseñamos a construir un Piano Electrónico Interactivo usando pulsadores y un zumbador (buzzer). Pero no nos quedamos solo en el sonido: vamos a añadir 5 LEDs que se iluminarán sincronizados perfectamente con cada tecla que toques.
Es el proyecto perfecto para entender cómo controlar entradas y salidas, aprendiendo a crear una interfaz física que responde a tus dedos en tiempo real.
Materiales Necesarios
-
Placa Arduino UNO (o Nano/Mega).
-
5 LEDs (Mezcla colores: Rojo, Amarillo, Verde, Azul).
-
5 Resistencias de 220Ω (para proteger los LEDs).
-
5 Pulsadores (Push buttons).
-
1 Zumbador (Buzzer) Pasivo. (⚠️ Importante: Debe ser pasivo para poder generar las diferentes notas musicales).
-
Protoboard y cables Jumper.
Esquema de Montaje
A diferencia del proyecto automático, aquí necesitamos conectar tanto los «dedos» (botones) como las «voces» (LEDs y Buzzer).
Conexiones:
-
LEDs (x5): Conecta los pines positivos (patas largas) a los pines digitales 9, 10, 11, 12 y 13 del Arduino. Los pines negativos (patas cortas) van con su resistencia de 220Ω a GND.
-
Pulsadores (x5): Conecta una pata de cada botón a los pines digitales 3, 4, 5, 6 y 7. La otra pata del botón va directa a GND (Usaremos la resistencia interna del Arduino para ahorrar cables).
-
Nota: Dejamos libre el Pin 2 (por si necesitas conectar tu servomotor habitual) y los pines 0 y 1 (comunicación serie).
-
-
Zumbador (Buzzer):
-
Pin Positivo (+) → Pin digital 8 del Arduino.
-
Pin Negativo (-) → GND.
-
Código arduinio
const int buttonPins[] = {3, 4, 5, 6, 7}; const int ledPins[] = {9, 10, 11, 12, 13}; const int buzzerPin = 8; const int numKeys = 5; #define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 int keyNotes[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4}; void setup() { pinMode(buzzerPin, OUTPUT); for (int i = 0; i < numKeys; i++) { pinMode(buttonPins[i], INPUT_PULLUP); pinMode(ledPins[i], OUTPUT); } } void loop() { bool keyActive = false; for (int i = 0; i < numKeys; i++) { if (digitalRead(buttonPins[i]) == LOW) { tone(buzzerPin, keyNotes[i]); digitalWrite(ledPins[i], HIGH); keyActive = true; } else { digitalWrite(ledPins[i], LOW); } } if (!keyActive) { noTone(buzzerPin); } }
Cómo Funciona
Este programa combina la lectura digital con la generación de audio para crear una respuesta inmediata. Aquí te explicamos los tres conceptos clave que hacen que funcione:
1. Mapeo de Hardware (Arrays)
En lugar de escribir un bloque de código diferente para cada tecla («Si toco botón 1 haz esto, si toco botón 2…»), usamos Arrays (listas) paralelas:
-
buttonPins[]: Lista de dónde están conectados los botones. -
ledPins[]: Lista de dónde están los LEDs. -
keyNotes[]: Lista de qué nota corresponde a esa posición. El código recorre estas listas constantemente, vinculando automáticamente el botón 1 con el LED 1 y la Nota 1.
2. La Voz del Arduino
Al igual que en el villancico, usamos la función tone(). Esta instrucción envía la frecuencia exacta al pin 8.
-
La diferencia: Aquí no hay tiempos predefinidos (
delay). El sonido se mantiene activo (tone) mientras tu dedo mantenga el circuito cerrado (digitalRead == LOW), y se corta (noTone) en el instante exacto en que levantas el dedo.
3. Lógica de «Pull-Up» Interna
Esta es la parte inteligente del montaje. En el código usamos INPUT_PULLUP.
-
Esto activa una resistencia interna dentro del chip del Arduino.
-
Nos permite conectar los botones directamente a Tierra (GND) sin poner resistencias externas en la protoboard.
-
Ojo: La lógica se invierte. Cuando NO tocas el botón, el Arduino lee
HIGH(1). Cuando SÍ lo tocas, leeLOW(0). Por eso elifbusca unLOW.
Material
- Placa arduino: https://amzn.to/43LM4k4
- Protoboard: https://amzn.to/3LZaZdM
- Cables: https://amzn.to/3K5N3ox
- Leds: https://amzn.to/4iryuse
- Buzzer: https://amzn.to/4ilPlfX
- Pack de lo necesario para empezar: https://amzn.to/3MmuDAs
