Piano con Pulsadores y Arduino

Introducción

Este proyecto convierte tu Arduino en un pequeño instrumento musical. Cada pulsador que conectemos representará una nota musical. Al presionarlo, un zumbador (buzzer) piezoeléctrico emitirá el sonido correspondiente a esa nota. Es una forma fantástica de aprender sobre la función `tone()` de Arduino y sobre cómo funcionan las resistencias pull-up internas.

Materiales Necesarios

  • Placa Arduino UNO
  • Zumbador (Buzzer) piezoeléctrico
  • Varios Pulsadores (usaremos 7 para una escala musical)
  • Protoboard y Cables Jumper

Esquema de Montaje

Simplificaremos el montaje usando las resistencias `pull-up` internas de Arduino, así no necesitaremos resistencias externas para los botones. Cada botón conectará un pin digital a tierra (GND) cuando se presione.

Captura de pantalla 2025-10-23 190028

Conexiones:

  • Zumbador (+) → Pin digital 9.
  • Zumbador (-) → GND.
  • Cada Pulsador: una pata a un pin digital (del 2 al 8) y la otra pata a GND.

Código Arduino

// Definimos las notas musicales y los pines asociados

// Frecuencias en Hz de la escala de Do Mayor
int notes[] = {262, 294, 330, 349, 392, 440, 494}; // Do, Re, Mi, Fa, Sol, La, Si

// Pines para los 7 pulsadores de las notas
int buttonPins[] = {2, 3, 4, 5, 6, 7, 8};

const int buzzerPin = 9;

void setup() {
  // Configurar los pines de los pulsadores como entradas con pull-up interno
  for (int i = 0; i < 7; i++) {
    pinMode(buttonPins[i], INPUT_PULLUP);
  }
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  bool notePlayed = false;
  
  // Recorremos todos los pulsadores para ver si alguno está presionado
  for (int i = 0; i < 7; i++) {
    // Con INPUT_PULLUP, un pin lee LOW cuando el botón está presionado
    if (digitalRead(buttonPins[i]) == LOW) {
      // Si se presiona un botón, toca la nota correspondiente
      tone(buzzerPin, notes[i]);
      notePlayed = true; // Marcamos que una nota está sonando
      break; // Salimos del bucle para no tocar varias notas a la vez
    }
  }

  // Si no se presionó ningún botón, apagamos el sonido
  if (!notePlayed) {
    noTone(buzzerPin);
  }
}

Explicación del Código

INPUT_PULLUP

Al configurar un pin como «INPUT_PULLUP», activamos una resistencia interna en el microcontrolador que conecta el pin a 5V. Esto significa que el pin leerá «HIGH» por defecto. Cuando presionamos el botón, conectamos el pin a GND, y entonces lee «LOW». Esto nos ahorra tener que añadir resistencias externas.

tone(pin, frecuencia)

Esta función genera una onda cuadrada de una frecuencia específica en un pin. Es perfecta para hacer sonar zumbadores piezoeléctricos. Le pasamos el pin del buzzer y la frecuencia de la nota que queremos tocar, la cual obtenemos de nuestro array «notes».

noTone(pin)

Detiene la generación de la onda cuadrada en el pin especificado, silenciando el zumbador.