Want to make creations as awesome as this one?

More creations to inspire you

Transcript

Control de interfaces

La programación

La física del sonido y la musica

Los componentes

Introducción

Integrantes:Cenyko Ivan, Ferman Joaquin, Husulak Mateo y Maximiliano Testa

Introducción

Este proyecto trata sobre un piano que creamos en el lenguaje de programación "C", usamos Visual Studio para programarlo y luego Proteus para simular el circuito.

Lo que hicimos fue simular un piano con las 12 teclas básicas(7 blancas y 5 negras) siendo estas DO, RE, MI, FA, SOL, LA y SI, y también sus semitonos siendo estos DO sostenido, MI bemol, FA sostenido, SOL sostenido y SI bemol.

DO

DO#

RE

MI

FA

SOL

LA

SI

MIb

FA#

SOL#

SIb

La Física del sonido

Sonido: Perturbación de la presión del aire por una vibración de un objeto, que se propaga como onda, se puede decir que cada objeto vibra de cada forma.Propiedades del sonido:

  • La energía con la que vibra un objeto y transmite al aire como sonido se mide en decibelios (dB), esto determina que tan fuerte es el sonido.
  • Su agudez o gravedad es según la frecuencia básica con la que vibran en el aire, a esta se la conoce como frecuencia fundamental
  • Su armonía consta de la frecuencia fundamental, más las frecuencias secundarias, que lo acompañan de una forma precisa según el objeto. Eso hace que dos instrumentos con la misma nota suenen distintos, o que un sonido sea agradable o desagradable.
  • La duración del sonido depende de la longitud de la onda.

La Física del sonido

Para el proyecto hicimos que el microcontrolador varía el tamaño del período (Es la duración del ciclo de una onda en segundos, según esto cambia su frecuencia y por lo tanto su agudez) de una onda cuadrada (Es el tipo de onda que cambia entre un valor máximo o mínimo, como si fuera digital), y por lo tanto produce sonido en un altavoz.

La frecuencia es la cantidad de vez que se repite un ciclo por segundo y esta se mide en hercioz(Hz).

Frecuencia de las notas

La programación.

Main.c

#define F_CPU 1000000 #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "piano.h" int main (void) { TCCR0A = 0x83; //interruptor TCCR0B = 0x03; TIMSK0 = 0x01; sei (); PCICR = 0b00000011; // PCINT0 activada (Interrupciones en todo el Puerto B) PCMSK0 = 0xFF; // interrupcion en PB0 PCMSK1 = 0b00011111; // "" PC0 while (1) { } return 0; } ISR (PCINT0_vect) { //interrupción en PB switch (PINB) { case 0b00000001: NOTA(C4); break; case 0b00000010: NOTA(C4S); break; case 0b00000100: NOTA(D4); break; case 0b00001000: NOTA(D4S); break; case 0b00010000: NOTA(E4); break; case 0b00100000: NOTA(F4); break; case 0b01000000: NOTA(F4S); break; case 0b10000000: NOTA(G4); break; default: NOTA(0); break; } } ISR (PCINT1_vect) { //interrupción en PC switch (PINC) { case 0b01000001: NOTA(G4S); break; case 0b01000010: NOTA(A4); break; case 0b01000100: NOTA(A4S); break; case 0b01001000: NOTA(B4); break; default: NOTA(0); break; } } ISR (TIMER0_OVF_vect) { //interrupción general switch (get_nota()) { //reubicar la nota después de la interrupción case C4: NOTA(C4); break; case C4S: NOTA(C4S); break; case D4: NOTA(D4); break; case D4S: NOTA(D4S); break; case E4: NOTA(E4); break; case F4: NOTA(F4); break; case F4S: NOTA(F4S); break; case G4: NOTA(G4); break; case G4S: NOTA(G4S); break; case A4: NOTA(A4); break; case A4S: NOTA(A4S); break; case B4: NOTA(B4); break; case C5: NOTA(C5); break; } }

Makefile

MCU=atmega328p PART=m328p F_CPU=1000000 CC=avr-gcc OBJCOPY=avr-objcopy CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I. TARGET=main SRCS=main.c piano.c PROGRAMMER=usbasp all: ${CC} ${CFLAGS} -o ${TARGET}.bin ${SRCS} ${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex flash: avrdude -p ${PART} -c ${PROGRAMMER} -U flash:w:${TARGET}.hex:i

Piano.c

#include "piano.h" void corchea (unsigned char nota) { NOTA(nota); _delay_ms (375); } void negra (unsigned char nota) { NOTA(nota); _delay_ms (750); } void blanca (unsigned char nota) { NOTA(nota); _delay_ms (1500); } unsigned char get_nota (void){ //medicion de nota post interrupción switch (OCR0A) { case C4 + (256-C4)/2: return C4; break; case C4S + (256-C4S)/2: return C4S; break; case D4 + (256-D4)/2: return D4; break; case D4S + (256-D4S)/2: return D4S; break; case E4 + (256-E4)/2: return E4; break; case F4 + (256-F4)/2: return F4; break; case F4S + (256-F4S)/2: return F4S; break; case G4 + (256-G4)/2: return G4; break; case G4S + (256-G4S)/2: return G4S; break; case A4 + (256-A4)/2: return A4; break; case A4S + (256-A4S)/2: return A4S; break; case B4 + (256-B4)/2: return B4; break; case C5 + (256-C5)/2: return C5; break; default: return 0; } }

Piano.h

#include <util/delay.h> #include <avr/io.h> #define C4 196 #define C4S 200 #define D4 203 #define D4S 206 #define E4 209 #define F4 211 #define F4S 214 //resultados del traspaso de onda cuadrada a pulsos #define G4 216 #define G4S 218 #define A4 220 #define A4S 222 #define B4 224 #define C5 226 #define NOTA(OCR) TCNT0 = OCR; \ OCR0A = OCR + (256-OCR)/2 //establecer la semi interrupción (se mide en pulsos) void corchea (unsigned char nota); void blanca (unsigned char nota); void negra (unsigned char nota); unsigned char get_nota (void); //declaramos medicion post interrupción

Componentes

Microcontrolador Atmega328p 12 pulsadores 13 resistencias Un altavoz Fuente de 5V de corriente continua Un transistor y una resistencia

Los componentes son:

Componentes

¿Que hacen los componentes en el programa?

El microcontrolador Atmega328p que es quien ejecuta el programa Los 12 pulsadores con sus 12 resistencias para hacer "pull down" Un altavoz que es quien convierte la energía eléctrica en sonido para reproducir las teclas.Fuente de 5V de corriente continua para alimentar al circuito. Un transistor con una resistencia, que son usados como interruptor, que hace que cuando el pin PWM conduzca su valor máximo, deja pasar 5V al altavoz, y permita que el altavoz suene, ya que la corriente y voltaje que envía el pin PWM no es suficiente para un altavoz.