Simulación Piano con Buzzer y pulsador
Enviado por VAZQUEZ PATIÑO DAVID ENRIQUE • 17 de Noviembre de 2020 • Trabajo • 873 Palabras (4 Páginas) • 163 Visitas
Objetivo:
Realizar una simulación de piano con los componentes Buzzer y Pulsador, cada uno de estos pulsadores emitirá un sonido distinto al presionarlos, dentro de la programación cambiare su tono entre uno grave y agudo. Haciendo uso de nuestras funciones pinMode(), digitalRead(), tone(), digitalWrite(), delayMicroseconds().
Materiales:
1 Buzzer/Piezo
9 Resistencias de 10K
Jumpers
9 Pulsadores
Cable USB arduino
Procedimiento:
1. Lo primero será colocar nuestros pulsadores de la siguiente manera
2. Lo siguiente será puentear y conectar las resistencias hacia el negativo y por consiguiente la pata izquieda hacia el positivo (Funcionamiento del pulsador fig 1.1)
Fig 1.1
[pic 1]
3. Conectamos nuestra tierra y conectamos a 5v para energizar.
4. Conectaremos nuestros pines digitales hacia nuestros pulsadores desde el pin 2 hasta el 9.
5. Procedemos a conectar nuestro Piezo a la protoboard donde conectamos nuestros jumpers a los pines de salida.
6. Ya con nuestro piezo colocado, ahora conectamos hacia el pin 13 y hacemos puente hacia tierra.
7. Ya teniendo todo conectado, procedemos a realizar la programación de nuestro piano
Variables de pines de pulsador y Piezo
//Pulsadores int psl1 = 2; int psl2 = 3; int psl3 = 4; int psl4 = 5; int psl5 = 6; int psl6 = 7; int psl7 = 8; int psl8 = 9; int psl9 = 12;
//Piezo[pic 2]
int piezo = 13;
[pic 3][pic 4]
En setup() todos los pulsadores como entrada y Piezo como salida void setup(){
//Pulsadores
pinMode(psl1,INPUT); pinMode(psl2,INPUT); pinMode(psl3,INPUT); pinMode(psl4,INPUT); pinMode(psl5,INPUT); pinMode(psl6,INPUT); pinMode(psl7,INPUT); pinMode(psl8,INPUT); pinMode(psl9,INPUT);
//Piezo pinMode(piezo,OUTPUT);
}
En nuestra función loop() vamos a leer el valor digital del pulsador, guardándolo en nuestras variables, y con el condicionante if dependiendo de su estado (si es 1 dara un tono) haremos sonar con la función tone() hacia el Piezo
void loop(){
//Obtenemos valores de nuestro pulsadores int pulsador1 = digitalRead(psl1);
int pulsador2 = digitalRead(psl2); int pulsador3 = digitalRead(psl3); int pulsador4 = digitalRead(psl4); int pulsador5 = digitalRead(psl5); int pulsador6 = digitalRead(psl6); int pulsador7 = digitalRead(psl7); int pulsador8 = digitalRead(psl8); int pulsador9 = digitalRead(psl9);
if( pulsador1 == 1 ){
tone(piezo,300,100);
}
if( pulsador2 == 1 ){
tone(piezo,400,100);
}
if( pulsador3 == 1 ){
tone(piezo,500,100);
}
if( pulsador4 == 1 ){
tone(piezo,600,100);
}
if( pulsador5 == 1 ){
[pic 5]tone(piezo,700,100);
}
if( pulsador6 == 1 ){
tone(piezo,800,100);
}
if( pulsador7 == 1 ){
tone(piezo,900,100);
}
if( pulsador8 == 1 ){
tone(piezo,1000,100);
}
if( pulsador9 == 1 ){
//tema mario
int tam = sizeof(underworld_melody) / sizeof(int);
for (int nota = 0; nota < tam; nota++) {
// calculamos la duracion de la nota
// dividimos el valor de nota entre lo que vale int duracion = 1000 / underworld_tempo[nota];
tocar(piezo, underworld_melody[nota], duracion); int delayNotas = duracion * 1.30; delay(delayNotas);
// Detenemos la melodia tocar(piezo, 0, duracion);
}
//Delay entre tonos delay(10);
}
}
void tocar(int pinATocar, long frecuencia, long _tam) {
digitalWrite(13, HIGH);
long v_delay = 1000000 / frecuencia / 2; // retraso entre notas long ciclos = frecuencia * _tam / 1000; // numeros de ciclos for (long i = 0; i < ciclos; i++) {
digitalWrite(pinATocar, HIGH);
[pic 6][pic 7]delayMicroseconds(v_delay); digitalWrite(pinATocar, LOW); delayMicroseconds(v_delay);
}
digitalWrite(13, LOW);
}
Para finalizar agregue un tono MIDI extra que sería el tema de Mario bajo tierra
//Declaracion del compas de la melodía y arreglo de las notas a tocar int underworld_melody[] = {
NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0,
0,
NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0,
0,
NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0,
...