Construye tu Propio Teclado de Piano Electrónico con Canciones Integradas
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| Pantalla LCD estándar Adafruit - 16x2 Blanco sobre azul | 1 |
| Pulsador SparkFun 12mm | 8 |
| Resistencia 220 ohm | 4 |
| Resistencia 560 ohm | 1 |
| Resistencia 1k ohm | 1 |
| Resistencia 4.7k ohm | 1 |
| Resistencia 10k ohm | 3 |
| Resistencia 1M ohm | 1 |
| Zumbador (buzzer) | 1 |
| LED (genérico) | 1 |
| Potenciómetro de una vuelta - 10k ohmios | 1 |
| Cables de puente (jumper wires) | 1 |
| Protoboard (genérica) | 1 |
Sobre el proyecto
Introducción
Para empezar, debo decir que soy completamente nuevo en el mundo de la electrónica. Tengo una base decente en programación, lo cual ayuda, pero siempre estoy abierto a nuevas ideas y sugerencias para cualquiera de los proyectos que he creado.
Recientemente he estado aprendiendo más sobre el zumbador piezoeléctrico (Piezo Buzzer) y la programación involucrada, y esta es mi creación basada en lo que he aprendido hasta ahora. Hay mucho margen para expandir con nuevas características o interruptores, lo cual planeo hacer más adelante, ¡pero por ahora pasamos al siguiente reto!
A continuación hay un video de cómo funciona el dispositivo, incluyendo el menú de canciones predefinidas. Admito que técnicamente la canción 4 y 5 son la misma, pero ¿qué se le va a hacer? ¡Tengo ganas de crear cosas más grandes y mejores y escribir el código musical para más canciones no era una de ellas! La codificación básica tanto para los bucles principales como para los bucles individuales de cada canción es bastante fácil de adaptar a tus propias ideas, así que siéntete libre de cambiarlo como mejor te parezca.
¡Míralo en acción!
(Video demostrativo del funcionamiento)
Cómo configurar el hardware
Las teclas del piano...
Los interruptores de las teclas del piano se conectaron usando una escalera de resistencias. Las resistencias se colocan en orden secuencial, conectando cada interruptor a la alimentación. Para mi proyecto, elegí usar (en ohmios) 1M, 10k, 4.7k, 1k, 560 y 220. La primera tecla (a la izquierda) se conecta a la alimentación y también al siguiente interruptor en el circuito. El segundo interruptor se conecta a la resistencia más pequeña, y cada interruptor posterior se conecta a la siguiente resistencia más grande en la serie. El último interruptor pone a tierra la conexión mediante una resistencia de 10k ohm y también conecta los 7 interruptores al pin "analog in" A0 del Arduino. El sketch principal define qué frecuencias de notas musicales se asocian a cada tecla. Para este proyecto usé C4, D4, E4, F4, G4, A4 y B4, siendo C4 el interruptor más a la izquierda. ¡Cambia los valores de frecuencia o añade interruptores adicionales para personalizar completamente tu proyecto!
La pantalla LCD...
Conecta los pines del LCD según el diagrama de circuito. Conecta el pin 3 del LCD al potenciómetro para control de contraste. Los pines exteriores del potenciómetro se conectan a alimentación y tierra para completar este circuito. El pin 15 del LCD se conecta a alimentación mediante una resistencia de 220 ohm. Si alguno de estos pines cambia en tu proyecto, actualiza el código en consecuencia.
El interruptor del menú...
Conecta el interruptor del menú a alimentación, y ponlo a tierra a través de una resistencia de 10k ohm. Este interruptor también debe conectarse al pin 7 del Arduino para controlarlo mediante código.
El LED...
El LED indica cuando estás en "modo menú" y las teclas del piano están deshabilitadas. El LED se enciende al presionar el interruptor del menú. Conecta el ánodo (positivo) del LED al pin 6 del Arduino, y pon a tierra el LED mediante una resistencia de 220 ohm.
El zumbador piezoeléctrico...
Para integrar el zumbador piezoeléctrico, simplemente conecta un extremo al pin 8 del Arduino y el otro lado a tierra mediante una resistencia de 220 ohm. La función "tone" en el código buscará este pin para reproducir la nota solicitada.
Cómo funciona el código
La configuración (setup)...
- El sketch comienza importando las librerías
LiquidCrystal.hypitches.hpara poder referenciar varios elementos de ellas más adelante en el código. - Luego, el código se configura definiendo un nombre para el interruptor del menú, determinando qué pines son entradas vs salidas, y estableciendo los valores de frecuencia para cada una de las 7 teclas del piano.
- Se creó una pestaña nueva para cada canción individual en un esfuerzo por mantener el código organizado y más fácil de entender, y para expandirlo más tarde. Si quieres eliminar o añadir más canciones, asegúrate de cambiar también el código en el sketch principal "Electronic Keyboard".
El bucle principal (main loop)...
- El teclado comienza con el LED apagado y todas las teclas del piano activas.
- Una vez que el bucle detecta que se ha presionado el botón del menú, deshabilita las teclas del piano y enciende el LED para indicar que estás en "modo menú".
Acceso al menú...
- Presiona el botón del menú para recorrer las canciones disponibles, y presiona cualquiera de las teclas del piano para empezar a reproducir la canción mostrada en la pantalla LCD.
- La pantalla LCD mostrará qué canción se está reproduciendo, y luego volverá al mismo punto del menú una vez que la canción termine. Desde ahí, puedes repetirla o continuar en la lista de canciones disponibles.
- Hacer doble clic en el botón del menú reiniciará el menú desde el principio.
- Para volver a usar las teclas del piano, recorre el resto de canciones en el menú. Una vez que la pantalla LCD esté en blanco y el LED apagado, las teclas del piano volverán a funcionar.
Código
El código completo está organizado en varios archivos:
- Electronic Keyboard - Código principal
- Song1 - Tema de Super Mario Bros
- Song2 - Super Mario Bros Underworld
- Song3 - Tema de Jeopardy
- Song4 - Melodía genérica corta
- Song5 - Melodía genérica corta
- pitches.h - Librería de notas musicales
Código principal (Electronic Keyboard)
// LCD Screen, Switch & LED Setup
#include <LiquidCrystal.h>
#include "pitches.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int LCDswitchPin = 7;
int LCDswitchState = 0;
int prevLCDswitchState = 0;
int blueLED = 6;
int LCDswitchCounter = 0;
// Music Note Keys - Set frequency values
int notes[] = {262, 294, 330, 349, 392, 440, 494}; // C, D, E, F, G, A, B
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(LCDswitchPin, INPUT);
pinMode(blueLED, OUTPUT);
digitalWrite(blueLED, LOW);
}
void loop() {
LCDswitchState = digitalRead(LCDswitchPin);
int keyVal = analogRead(A0);
Serial.println(keyVal);
lcd.noDisplay();
digitalWrite(blueLED, LOW);
if (LCDswitchState == HIGH) {
digitalWrite(blueLED, HIGH);
lcd.display();
lcd.clear();
LCDstart();
}
// Keyboard notes & frequency statements
if(keyVal == 1023) { tone(8, notes[0]); } // C
else if(keyVal >= 990 && keyVal <= 1010) { tone(8, notes[1]); } // D
else if(keyVal >= 960 && keyVal <= 980) { tone(8, notes[2]); } // E
else if(keyVal >= 900 && keyVal <= 945) { tone(8, notes[3]); } // F
else if(keyVal >= 650 && keyVal <= 710) { tone(8, notes[4]); } // G
else if(keyVal >= 500 && keyVal <= 550) { tone(8, notes[5]); } // A
else if(keyVal >= 5 && keyVal <= 10) { tone(8, notes[6]); } // B
else if(keyVal <= 1) { noTone(8); }
}
// Funciones LCDstart, Song1title, Song2title, Song3title, Song4title, Song5title
// ... (código completo disponible en el repositorio)
Canciones de ejemplo
Cada canción tiene su propia función con arrays de melodía y duraciones. Las canciones 1-3 incluyen temas conocidos (Mario Bros, Jeopardy), mientras que las 4-5 son melodías genéricas de ejemplo que puedes personalizar.
Librería pitches.h
Define todas las frecuencias de notas musicales desde NOTE_B0 (31 Hz) hasta NOTE_DS8 (4978 Hz). Guarda este archivo en la misma carpeta que tus sketches del teclado/canciones.
Esquemáticos
Diagramas de conexión disponibles en la sección de descargas.
Proceso de manufactura
- Primeros Pasos con TJBot: Construye, Configura y Controla por Voz tu Robot IA
- Alerta de Sed Inteligente para Plantas: Sensor DIY para Riego Óptimo
- Reloj de Palabras en Italiano con Arduino Nano, NeoPixel, LCD y RTC
- Convierte tu Teclado MIDI en Tutor de Piano Inteligente con Arduino, LEDs y MuseScore
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Medidor kWh Sigfox Fiable con Arduino MKR Fox 1200
- Monitor de temperatura con Bluetooth usando Arduino Nano
- Mini Radio Estéreo Compacta RDA5807 – Proyecto con Arduino Nano
- Cerradura por Gestos Sin Contacto: Acceso Seguro con APDS-9960 y Arduino
- Kit Compañero Arduino Nano: Componentes y Herramientas Esenciales para Electrónica DIY
- Test de Precisión de Tiempo de Reacción con Arduino UNO