▷ Como Hacer un Piano con Arduino ♬


Materiales:

  • 1 Arduino Uno
  • 8 Pulsadores 
  • 8 Resistencias de 1k
  • 1 Speaker o buzzer

Diagrama de conexiones:


Al presionar un pulsador el speaker va a reproducir un sonido el cual varia dependiendo de la nota que programemos para que suene cuando lo pulsamos,  en este caso esta programado en escala de Do. Entonces para programar el piano con la escala de Do hacemos lo siguiente:


Incluimos la librería "pitches.h" (ahí están definidas las notas musicales), a continuación definimos los pines en donde irán conectados los pulsadores y el speaker.


#include "pitches.h"
#define speaker 8

#define p1 A0
#define p2 A1
#define p3 A2
#define p4 A3
#define p5 A4
#define p6 A5
#define p7 2
#define p8 3

Creamos una variable para definir el tiempo que van a sonar las notas al presionar el pulsador.

short tiempo = 8;

Creamos un array con las notas que vayamos a reproducir. en mi caso las notas son Do, Re, Mi, Fa, Sol, La, Si, Do. Los nombres de todas las notas e información sobre la libreria "pitches.h" la pueden encontrar AQUÍ 


Que es un array y como se utiliza click AQUÍ

int nota[] = {
  NOTE_C3, //DO 0
  NOTE_D3, //RE 1
  NOTE_E3, //MI 2
  NOTE_F3, //FA 3
  NOTE_G3, //SOL 4
  NOTE_A3, //LA 5
  NOTE_B3, //SI 6
  NOTE_C4, // DO 7

};

Definimos entradas y salidas.

void setup() {

  pinMode(p1, INPUT);
  pinMode(p2, INPUT);
  pinMode(p3, INPUT);
  pinMode(p4, INPUT);
  pinMode(p5, INPUT);
  pinMode(p6, INPUT);
  pinMode(p7, INPUT);
  pinMode(p8, INPUT);
  pinMode(speaker, OUTPUT);

}

En el void loop, programamos que al precionar un pulsador, suene una nota. Por ejemplo:


Al preciona p1 (El pulsador que se encuentra conectado al pin A0 del Arduino).

  if (digitalRead(p1)) { // 

Reproducimos la nota que se encuentra definida en la posicion 0 del array, por un tiempo determinado.

    tone(speaker, nota[0], tiempo); 
  }

Hacemos esto con los demás pulsadores y nos queda algo así.

void loop() {

  if (digitalRead(p1)) {
    tone(speaker, nota[0], tiempo);
  }
  if (digitalRead(p2)) {
    tone(speaker, nota[1], tiempo);
  }
  if (digitalRead(p3)) {
    tone(speaker, nota[2], tiempo);
  }
  if (digitalRead(p4)) {
    tone(speaker, nota[3], tiempo);
  }
  if (digitalRead(p5)) {
    tone(speaker, nota[4], tiempo);
  }
  if (digitalRead(p6)) {
    tone(speaker, nota[5], tiempo);
  }
  if (digitalRead(p7) {
    tone(speaker, nota[6], tiempo);
  }
  if (digitalRead(p8) {
    tone(speaker, nota[7], tiempo);
  }

}

Espero que les haya gustado este post, si tienen alguna duda o alguna sugerencia comenten en la parte de abajo, a continuación les dejo el código completo.


CÓDIGO:

#include "pitches.h"
#define speaker 8

#define p1 A0
#define p2 A1
#define p3 A2
#define p4 A3
#define p5 A4
#define p6 A5
#define p7 2
#define p8 3

short tiempo = 8;

// notes in the melody:
int nota[] = {
  NOTE_C3, //DO 0
  NOTE_D3, //RE 1
  NOTE_E3, //MI 2
  NOTE_F3, //FA 3
  NOTE_G3, //SOL 4
  NOTE_A3, //LA 5
  NOTE_B3, //SI 6
  NOTE_C4, // DO 7

};


void setup() {

  pinMode(p1, INPUT);
  pinMode(p2, INPUT);
  pinMode(p3, INPUT);
  pinMode(p4, INPUT);
  pinMode(p5, INPUT);
  pinMode(p6, INPUT);
  pinMode(p7, INPUT);
  pinMode(p8, INPUT);
  pinMode(speaker, OUTPUT);

}


void loop() {

  if (digitalRead(p1)) {
    tone(speaker, nota[0], tiempo);
  }
  if (digitalRead(p2)) {
    tone(speaker, nota[1], tiempo);
  }
  if (digitalRead(p3)) {
    tone(speaker, nota[2], tiempo);
  }
  if (digitalRead(p4)) {
    tone(speaker, nota[3], tiempo);
  }
  if (digitalRead(p5)) {
    tone(speaker, nota[4], tiempo);
  }
  if (digitalRead(p6)) {
    tone(speaker, nota[5], tiempo);
  }
  if (digitalRead(p7) {
    tone(speaker, nota[6], tiempo);
  }
  if (digitalRead(p8) {
    tone(speaker, nota[7], tiempo);
  }
}

4/Post a Comment/Comments

  1. Como haría para que un pulsador me de dos notas; eje el acordeon tiene dos notas por cada botón, una cuando abre el fuelle y otra cundo cierra. en este casa se tendría que poner otro pulsador que haga los veces del fuelle pero como sería el código ?

    ResponderEliminar
    Respuestas
    1. hola, puedes hacerlo de la siguiente manera:

      #include "pitches.h"
      #define speaker 8

      #define p1 A0 // tecla
      #define p2 A1 // fuelle


      short tiempo = 8;

      // notes in the melody:
      int nota[] = {
      NOTE_C3, //DO 0, nota 1
      NOTE_C4, //RE 1, nota 2
      };


      void setup() {

      pinMode(p1, INPUT);
      pinMode(p2, INPUT);
      pinMode(speaker, OUTPUT);

      }


      void loop() {

      if (digitalRead(p2) == HIGH) {
      if (digitalRead(p1) == HIGH) {
      tone(speaker, nota[0], tiempo);
      }
      } else {
      if (digitalRead(p1) == HIGH) {
      tone(speaker, nota[1], tiempo);
      }
      }

      }

      Eliminar
    2. Gracias amigo sería bueno que hicieras un vídeo

      Eliminar
  2. Amigo disculpa la molestia nuevamente ¿ Como podría hacer para que las notas suenan reales en mi casa las notas de un acordeon ?

    ResponderEliminar

Publicar un comentario