Introduction: ¡Mini Piano Con Arduino!

About: Somos el espacio de imaginación, experimentación y prototipado de la PUCV.

¡Hola denuevo! En esta ocasión crearemos un mini piano con una Arduino donde aprenderemos a usar botones de la manera correcta, a usar un parlante, y un poco sobre programación, si quieres probar el proyecto de inmediato puedes hacerlo aquí, los objetivos son:

  • Aprender a usar botones.
  • Aprender a usar las salidas análogas.

¿List@? ¡Empecemos!

Supplies

Los materiales a usar son:

  • 1 x Arduino UNO (o equivalente).
  • 1 x Buzzer.
  • 8 x Resistencia 10k Ohm.
  • 8 x Resistencia 1k Ohm.
  • 8 x Condensadores 1 uF.
  • 8 x Pulsadores.
  • Jumpers/cables varios.

Step 1: ¡Preparemos La Base Para Trabajar!

Primero que nada debemos abrir Tinkercad Circuits y poner nuestra Arduino y protoboard para trabajar, entonces:

  1. En los componentes básicos buscamos una Arduino Uno y la arrastramos al entorno de trabajo (imagen 1).
  2. Cambiamos la pestaña de componentes básicos a todos (imagen 2).
  3. Buscamos la placa de desarrollo más grande y la posicionamos al lado de la Arduino (imagen 3).
  4. Conectamos la alimentación de la Arduino a la protoboard tal cual se ve en la imagen 4.

¡Listo!

Step 2: ¡Agreguemos Los Componentes! - Buzzer

Ya teniendo la base lista es hora de agregar el resto de componentes, empezaremos por el buzzer, entonces:

  1. Volvemos a la pestaña de componentes básicos (imagen 1).
  2. Una vez encontremos el buzzer lo arrastramos a la pestaña de trabajo (imagen 2).
  3. Tenemos que rotarlo así que pulsamos el botón de giro 9 veces, puedes guiarte con la imagen 3 si no lo encuentras, debe quedar en la misma orientación .
  4. Luego arrastramos el buzzer a uno de los lados de la protoboard tal cual aparece en la imagen 4.
  5. Por último lo conectamos a tierra y a la Arduino de la forma que aparece en la imagen 5.

si estas usando una Arduino real sol debes poner el buzzer y conectarlo tal cual se ven en la imagen 5.

¡Listo!

Step 3: ¡Agreguemos Los Componentes! - Condesadores Y Pulsadores

Ahora es tiempo de agregar los condensadores y los pulsadores, las instrucciones son:

  1. Buscar un condensador en en los componentes básicos, arrastralo al espacio de trabajo y cambiar su valor a 1 uF (imagen 1 de referencia).
  2. Apretar el botón de giro 6 veces, y arrastralo a la posición indicada en la protoboard, la orientación y posición resultante debe ser la dispuesta en la imagen 2.
  3. Buscar un pulsador en los componentes básicos y arrastrarlo al lado derecho del condensador (imagen 3).

  4. Repetir los mismo 7 veces (debe quedar como se muestra en la imagen 4).
  5. Ahora debemos conectar un conector del pulsador y uno del condensador a tierra, tal cual se ve en la imagen 5.

si estás usando una Arduino real solo debes considerar como referencia la imagen 5, así deben quedar los componentes.

¡Listo!

Step 4: ¡Agreguemos Los Componentes - Resistencias

Primero empezaremos poniendo la resistencias de 10k ohm.

  1. Buscamos la resistencia en los componentes básicos, lo arrastramos al espacio de trabajo y le cambiamos el valor a 10k Ohm(imagen 1).
  2. Luego lo conectamos entre la linea de 5 V y la patita libre del condensador (imagen 2).
  3. Repetir lo mismo con el resto de capacitores (imagen 3).

A continuación pondremos las resistencias de 1k Ohm.

  1. Buscamos la resistencia en los componentes básicos, lo arrastramos al espacio de trabajo, le cambiamos el valor a 1k Ohm y lo rotamos presionando el botón de giro 3 veces(imagen 4).

  2. Lo conectamos al primer condensador de la forma mostrada en la imagen 5.
  3. Repetimos lo mismo con el resto de condensadores, el resultado debe quedar como el que se ve en la imagen 6.

Por último debemos conectar todos los pulsadores a la Arduino tal cual se ve en la imagen 7, si estas usando una Arduino real puedes guiarte de en la última imagen.

¡Listo!

Step 5: ¡Hora De Programar!

Ahora nos enfocares en entender el código que usaremos para hacer al mini piano funcionar, el cual es:

void setup()
{
pinMode(8, OUTPUT);
pinMode(7, INPUT );
pinMode(6, INPUT );
}

void loop()
{
if (digitalRead(A0) == LOW) {
tone(8, 440, 100);
}
if (digitalRead(A1) == LOW) {
tone(8, 494, 100);
}
if (digitalRead(A2) == LOW) {
tone(8, 523, 100);
}
if (digitalRead(A3) == LOW) {
tone(8, 587, 100);
}
if (digitalRead(A4) == LOW) {
tone(8, 659, 100);
}
if (digitalRead(A5) == LOW) {
tone(8, 698, 100);
}
if (digitalRead(7) == LOW) {
tone(8, 784, 100);
}
if (digitalRead(6) == LOW) {
tone(8, 880, 100);
}
delay(10); // Delay para mejorar la calidad de la simulación
}

Empezaremos con la función void setu(), donde realizamos las configuraciones iniciales:

void setup()<br>{<br>  pinMode(8, OUTPUT);<br>  pinMode(7, INPUT );<br>  pinMode(6, INPUT );<br>}

Podemos apreciar que la función pinMode(A,B) se repite, con esta decimos que el pin A de la Arduino actúe de modo B, o sea, OUTPUT(salida) o INPUT(entrada), solo es necesario ejecutar estas instrucciones una vez, por ende van en void setup():

Luego tenemos la función void loop(), la cual ejecuta constantemente y en orden las siguientes instrucciones:

void setup()
{
pinMode(8, OUTPUT);
pinMode(7, INPUT );
pinMode(6, INPUT );
}

Podemos apreciar que constantemente se repite una estructura, la cual es if(A){B}, esta es una forma de poner una condición (A) a las instrucciones que tiene dentro (representadas por B), en palabras simples lo que nos quiere decir es "voy a ejecutar las instrucciones B si se cumple la condición A", si tomamos por ejemplo el siguiente código:

  if (digitalRead(A0) == LOW) {
tone(8, 440, 100);
}

Nos indica que la instrucción tone(8, 440, 100) se va a ejecutar si la lectura digital (o sea, estado alto o bajo) en el pin análogo A0 se encuentra en estado bajo, de esta manera podemos decir que si el botón conectado a A0 es apretado (que en este caso es cuando aparece el estado LOW) se emitirá cierto tono en el buzzer conectado al pin 8, esto se repite para todos los otros botones por lo que la manera de entender como funcionan es la misma.

Por último tenemos la función daley(A), la cual nos indica que debemos esperar A milisegundos para seguir ejecutando istrucciones, en este caso son 10.

¡Listo!

Step 6: ¡Escuchemos Como Suena!

Este es el resultado final.

Step 7: ¿Por Qué Las Cosas Funcionan?

Ya sabemos a grosso modo como funciona el código y como van conectadas las cosas entre si, así que me gustaría explicar dos cosas interesantes con respecto a este circuito, primero tenemos una serie de botones, pero ¿Por qué tanta resistencia e inclusive condensadores?

Primero que nada consideremos como está fabricado un switch, es simplemente dos conectores separados que pueden ser conectados mediante otro metal conductor si se pulsa el botón, que en este caso está normalmente abierto, sin embargo no es un dispositivo perfecto ya que a la hora de hacer "click" los conectores vibran lo que genera por un corto periodo de tiempo un efecto de abrir y cerrar muy rápido y muchas veces, tal cual se ve en la imágen 1, para solucionar esto se agrega un condensador y un par de resistencias, el efecto que esto genera es que ahora el condensador debe almacenar o entregar energía que, por el efecto de las resistencias, se demora un poco en hacerlo, entonce los cambios bruscos no pueden ocurrir ya que el condensador no se puede cargar ni descargar a una velocidad tan rápida, el efecto final es que se ve en la imagen 2, esto evita que en periodos de tiempo muy cortos hayan cambios de estado en la en el pin del Arduino, lo cual puede ser muy importante en algunas aplicaciones.


Ahora ¿Por qué el buzzer puede emitir sonido? este se construye con un material llamado "piezoelectrico" lo que permite deformarse ligeramente ante energía eléctrica, si recordamos la función tone(A,B,C), donde A es el pin a usar, B la frecuencia, y C la duración del sonido podemos tener todo más claro, esta función emite una señal cuadrada por el pin A (imagen 3 de referencia) la cual es esencialmente estados HIGH y LOW repetidos en intervalos regulares, lo que genera que el buzzer cambie de estado deformado a no deformado en intervalos de tiempo muy pequeños, esto genera que el aire a su alrededor cambie al mismo ritmo (la deformación presiona al al aire) lo cual genera el sonido que escuchamos ¡Los audífonos que normalmente usas funcionan bajo el mismo principio!

Pero si usamos la misma función ¿Por qué hay distintos sonidos? El secreto para entender esto está en fijarse que en la imagen 3 hay una T que marca una parte de la señal cuadrada, más específicamente la que se repite a lo largo de toda la señal (así es, la señal se compone de la repetición de una sola forma, en este caso es el estado alto y bajo consecutivos) donde T indica el tiempo en que se demora en completar el estado alto y bajo, el argumento B de la función tone(A,B,C) es capaz de cambiar el valor de T, entonces el tiempo de deformación del buzzer cambia a más rápido o más lento por lo que el sonido resultante es distinto, la cantidad de veces que la forma marcada en T se repite en un segundo es llamado frecuencia, y es por medio de esta que especificamos el sonido a reproducir ¿Has escuchado el Do Re Mi Fa Sol La Si? Cada una de estas notas musicales tiene una frecuencia distinta que podemos emular mediente el buzzer y la frecuencia de la señal cuadrada.