En este proyecto vamos a ver el proceso de diseƱo y fabricaciĆ³n de una mĆ”quina Jukebox o Gramola, perfecta para escuchar mĆŗsica en casa o para utilizarla en nuestras fiestas.
El proyecto estƔ basado en Arduino, aunque tiene unas cuantas cosas mƔs.
Las canciones estƔn
almacenadas en una tarjeta de memoria microSD insertada en un shield MP3 para Arduino UNO, que es lo que se encarga de reproducirlas y que estĆ” controlada por un cĆ³digo del que mĆ”s adelante estĆ” el enlace para descargar. El shield que en cuestiĆ³n
es el siguiente:
Se trata del VS1053B y se puede conseguir fƔcilmente en varios sitios.
Las entradas analĆ³gicas en Arduino no son del todo analĆ³gicas, sino que pueden tomar 1024 valores (0 a 1023), correspondiendo el valor 0 a 0V. y el valor 1023 a 5V, que es el mĆ”ximo admisible. Siendo asĆ, se pueden utilizar divisores de tensiĆ³n para asignar voltajes a rangos de valores de entrada, que se corresponderĆ”n con cada pulsador.
Como vamos a usar 10 pulsadores, vamos a dividir esos 5V en 10 partes, de las que tomaremos aproximadamente el valor central del voltaje de cada tramo para calcular las resistencias del divisor de tensiĆ³n. Los valores que he utilizado son: 0.25, 0.7, 1.2, 2, 2.5, 3, 3.4, 3.9, 4.3 y 4.8 V.
Con estos valores aplicamos la siguiente fĆ³rmula:
Donde R1 es la fija del divisor de tensiĆ³n, Vcc es la tensiĆ³n de referencia cogida del pin 5V del Arduino, Vout la tensiĆ³n que queremos a la salida del divisor de tensiĆ³n y R2 es el valor de la resistencia que queremos calcular para cada pulsador.
Utilizando una resistencia R1 de 3.3K, que es un valor apropiado para nuestro caso, nos salen los siguientes valores de resistencias: 62.7k, 20.27k, 10.45k, 4.95k, 3,3k, 2.2k, 1.55k, 930 ohm, 537 ohm, y 137 ohm.
Todos estos valores si los aproximamos a valores de resistencias estĆ”ndar nos quedarĆan:
Tenemos dos botoneras, una con 10 nĆŗmeros y otra con 8 letras. No vamos a hacer otro cĆ”lculo para 8 valores, utilizaremos el mismo sin las dos Ćŗltimas resistencias, asĆ no complicamos esto mĆ”s, y en el cĆ³digo casi podemos hacer un copia-pega en esta parte.
Eso por ahĆ, ahora vamos la parte de los leds que es mĆ”s divertido todavĆa.
Los leds marcan el botĆ³n pulsado y se mantienen encendidos mientras se reproduce la canciĆ³n seleccionada para indicar cual es la que se estĆ” reproduciendo. Una vez finalizada la reproducciĆ³n se apagan. Hay 18 leds, un grupo de 10 que corresponde a los nĆŗmeros y otro grupo de 8 que corresponde a las letras. Se deberĆ”n encender simultĆ”neamente uno de cada grupo, pero no es necesario que se enciendan a la vez dos del mismo grupo. Las canciones se seleccionan mediante un nĆŗmero y un letra, o sea, una matriz de 10 x 8 que hace el total de 80 canciones.
En el Arduino no tenemos 18 salidas, pero al consistir en dos grupos de leds vamos a usar en dos salidas digitales para encenderlos, aunque tendremos que usar otra salida mƔs para efectuar resets.
¿CĆ³mo encendemos cada led del grupo con una sola salida?, pues la soluciĆ³n estĆ” en los contadores decimales.
Un contador decimal es un circuito integrado que cuenta pulsos, o mƔs bien cuenta cambios de estado, por ejemplo, si en su entrada haces 0-1-0-1-0-1, contarƔ 3, y se activarƔ su salida 3.
Concretamente vamos a utilizar el CD4017BE. Necesitaremos tres.
Al ser un contador decimal tiene 10 salidas, del '0' al '9'. El '0' se activa cuando aĆŗn no se ha contado nada, por lo que nos obliga a utilizar un contador extra para el grupo de 10, ya que uno sĆ³lo contarĆ” hasta nueva, por lo que para el Ćŗltimo botĆ³n del grupo hay que pones otro en cascada al primero. Para el grupo de 8 pulsadores nos basta con un contador.
El primer led de la izquierda de cada grupo lo he incluido en el simulador, pero no va en el circuito, ya que se enciende al iniciar los contadores al ser el '0' del contador.
Otra cosa que no estĆ” en el esquema del simulador y que es muy importante es la resistencia que lleva en serie cada led. Yo he usado leds amarillos con una resistencia en serie de 470 ohmios.
He utilizado el simulador de circuitos electrĆ³nicos SimulIDE, que es fĆ”cil de usar y con descarga libre.
Para ver el funcionamiento del contador de forma sencilla se puede observar el siguiente circuito, donde los pulsos a contar los proporciona un IC555.
Tanto el reset como el enable tienen que estar a nivel bajo para permitir el funcionamiento. Los pulsos para contar van al pin clock. El pin 12, que no se detalla en este esquema es el de acarreamiento, y se utiliza para conectar un segundo contador en cascada. Se activa a nivel bajo cuando se ha contado un ciclo completo. Este pin lo tendremos que usar en uno de los contadores como dije anteriormente.
La salida digital 3 del Arduino saca los pulsos de conteo para el grupo de 10 pulsadores, la salida digital 4 del Arduino el para el grupo de 8 pulsadores, y la salida digital 5 es la que resetea los contadores cuando es necesario.
En las fotos hay varias placas para implementar toda la circuiterĆa anterior, y esto es porque lo he ido montando y probando por partes. Todo esto lo he unificado en un mismo circuito para placa universal, con lo que puede resultar menos engorroso y ahorrarnos unos cuantos cables intermedios.
Esta es la parte correspondiente a las pistas.
Bueno, vamos ahora con el shield MP3 VS1053B que es el que nos va a reproducir los archivos.
El cĆ³digo tiene descripciones para interpretar el funcionamiento y que sirven de guĆa. Explicar el cĆ³digo de forma pormenorizada puede resultar bastante tedioso, pero voy a comentar por encima lo que hace.
La nomenclatura de los archivos tiene que ser "trackxxx.mp3", donde xxx es el nĆŗmero del archivo y marca su orden, por lo que en nuestro caso irĆ”n desde el "track001.mp3" hasta el "track080.mp3".
Haced una lista en texto, excel, o lo querĆ”is, con los archivos, su cĆ³digo de reproducciĆ³n y tĆtulo, para llevar un control de la siguiente manera:
track001A1Radiohead - Just
track002A2Diesel park west - All the myths on sunday
El transformador se conecta de la siguiente manera:
El transformador, al tener dos secundarios, tenemos que unir los comunes de referencia que marcan 0V, que son el cable negro y el naranja. Estos cables van al pin central de los tres que tiene la entrada de alimentaciĆ³n el transformador.
Los otros dos cables, el amarillo y el rojo que tienen 18V cada uno, van uno a cada pin de los extremos del conector, sin importar el orden. El primario, que son los cables marrĆ³n y azul, obviamente van a la red. Estos colores no son un estĆ”ndar absoluto, con otro fabricante puede ser diferente, mirad siempre la documentaciĆ³n disponible. AĆŗn asĆ lo suyo es comprobar las tensiones en los secundarios con el polĆmetro antes de conectarlo al amplificador. Tened cuidado con esto, porque si os equivocĆ”is... ¡PUM!
Pues para que esto empiece a sonar ya sĆ³lo necesitamos unos altavoces.
Son unos altavoces de coche que suenan bien y aguantan bastante guerra. Son de 50 W pero aguantan picos de 150 W, o al menos eso dicen. El juego trae cuatro altavoces, un altavoz principal y un twiter con su filtro por cada canal.
Pero como he dicho, tanto el amplificador como los altavoces son a gusto del consumidor.
Si tenemos todo bien hecho y conectado, el cĆ³digo cargado y los archivos renombrados en la tarjeta, ¡¡esto ya funciona!!. Tenemos una gramola muy chula donde podemos seleccionar nuestras canciones favoritas y escucharlas al momento.
Si, es muy chula, pero ocurre una cosa. Si queremos utilizarla para poner mĆŗsica en nuestra casa, en fiestas o donde se nos ocurra, no podemos estar constantemente seleccionando canciones para que la mĆŗsica no pare.
Hay varios esquemas de circuitos mezcladores para fabricar si buscas en internet, pero tampoco nos vamos a complicar la vida si no es necesario.
Hay una placa mezcladora de de dos canales que estĆ” muy bien y nos viene perfecta.
Esta placa tiene dos entradas de audio, una para el reproductor MP3 y otra para el Bluetooth, y una salida, que irĆ” al amplificador lĆ³gicamente. La placa estĆ” alimentada con 5-12V DC, con lo que nos vale con un alimentador normal para Arduino, que nos da 9V. Inicialmente compartĆ el alimentador del Arduino con esta placa, pero tuve que ponerle uno independiente ya que por alguna razĆ³n que aĆŗn no he descubierto mete ruido al iniciarse el shield para reproducir un archivo.
Para poder controlar los niveles de las entradas electrĆ³nicamente tenemos que cambiar los potenciĆ³metros analĆ³gicos por potenciĆ³metros digitales que podamos gobernar con cĆ³digo. Para la placa mezcladora sĆ³lo tenemos que cambiar uno, el correspondiente a la entrada del Bluetooth, ya que la otra estarĆ” permanentemente abierta al mĆ”ximo.
El potenciĆ³metro digital para este caso es el MCP4251.
Este integrado tiene distintas variantes segĆŗn la resistencia del potenciĆ³metro que se necesite. El potenciĆ³metro de la placa mezcladora es de 5K, por lo que tenemos que escoger uno con ese valor.
En los siguientes videos se aprecia el funcionamiento del control de volumen en la protoboard con los pulsadores (primer video) y el fader cuando se pone a 1 la entrada de control (segundo video). Los leds corresponden al volumen. Tened en cuenta que los leds empiezan a iluminar pasada la mitad del potenciĆ³metro, pero para ver el funcionamiento es suficiente.
Para montar todo este sistema vamos a utilizar un segundo Arduino UNO, al que vamos a colocar un shield personalizado.
En este caso es mĆ”s cĆ³modo y prĆ”ctico que una placa, ya que evitamos cableado y ahorramos espacio.
El circuito de la izquierda estĆ” visto desde arriba, la parte de los componentes, y el circuito de la derecha es la vista desde abajo, la de las pistas. Las lĆneas azules corresponden a las pistas y las rojas son puentes por la parte superior.
Recomiendo poner zĆ³calos para los integrados, ya que asĆ los protegemos de calentamientos al soldarlos, y los podemos sustituir fĆ”cilmente en caso de averĆa, aparte de que si cambiamos de amplificador y el nuevo tiene potenciĆ³metros con otro valor podemos sustituir fĆ”cilmente el integrado por otro del nuevo valor.
Esta es la composiciĆ³n de la placa con los integrados montados. El MPC4251-104E/P en el zĆ³calo de la izquierda para el volumen general y el MPC4251-502E/P a la derecha para la mezcla, segĆŗn se muestra en la imagen.
Vamos a montar dos pulsadores para subir y bajar el volumen en la parte trasera de la gramola, y que conectaremos a esta placa.
Se conectan con sus correspondientes potenciĆ³metros digitales respetando la misma posiciĆ³n que tenĆan en sus placas los que hemos retirado. En la imagen se aprecia, ya que nos guiamos usando colores.
Ahora tenemos que comunicar dos Arduinos con un cable, para que el Arduino que se encarga de la reproducciĆ³n, envĆe una seƱal al que controla la mezcla y le avise de que tiene que hacer el fader cuando seleccionamos una canciĆ³n de nuestra lista.
Este cable sale del pin digital 10 del Arduino con el MP3 y entra al pin digital 8 del Arduino que controla el volumen.
La otra cosa que es recomendable instalar para proteger nuestros altavoces es un par de snubbers en el interruptor. ¿Y que es un snubber?, pues es un pequeƱo y simple circuito RC que absorbe chispazos y amortigua transitorios que son muy habituales en los interruptores, y que en un equipo de sonido se traduce en un desagradable chasquido en los altavoces al encender y apagar el aparato.
Necesitaremos dos, ya que este interruptor corta tanto fase como neutro. Se instala en paralelo con los contactos del interruptor. En nuestro caso, como son dos juegos de contactos necesitamos dos, uno para fase y otro para neutro. Si el interruptor tuviera Ćŗnicamente un juego de contactos para fase o neutro, sĆ³lo instalarĆamos uno.
Como hemos dicho, la gramola, mientras no reproduce ninguna selecciĆ³n, tiene abierto un canal para otra seƱal de audio. Esta seƱal procede de un audio bluetooth, aunque servirĆa cualquier otra fuente de audio sin amplificar.
Yo he instalado el siguiente receptor que ya estaba usando para otras cosas y confirmo que va muy bien, pero cualquiera similar valdrĆa.
const int slaveSelectPin = 10; // Pin enable PotenciĆ³metro Fader
const int slaveSelectPin2 = 9; // Pin enable PotenciĆ³metro Volumen general
const int wiper0writeAddr = B00000000;
const int tcon_0off_1off = B00000000;
const int wiper1writeAddr = B00010000;
const int tconwriteAddr = B01000000;
const int tcon_0off_1on = B11110000;
const int tcon_0on_1off = B00001111;
const int tcon_0on_1on = B11111111;
int vol = 254;
pinMode (slaveSelectPin, OUTPUT);
int volgrl = 50;
int speaker = 0;
int start = 1;
void setup() {
Serial.begin(9600);
BT1.begin(9600);
pinMode (faderPin, INPUT);
pinMode (speakPin, OUTPUT);
// Asigna slaveSelectPin como salida:
SPI.begin();
pinMode (slaveSelectPin2, OUTPUT);
// Asigna shutdownPin como salida:
pinMode (shutdownPin, OUTPUT);
// Empieza con los potenciĆ³metros apagados
digitalWrite(shutdownPin, LOW);
// Inicializa SPI:
char dato = BT1.read(); //Guarda los datos carƔcter a carƔcter en la variable "dato"
cadena[i++] = dato; // Vamos colocando cada carƔcter recibido en el array "cadena"
Serial.print(cadena); // Visualizamos el comando recibido en el Monitor Serial
volgrl = atol(cadena);
if (volgrl >= 200) {
volgrl = 200;
}
clean();
}
}
fader = digitalRead(faderPin);
if (!BT1.available()) {
clean();
}
int button1 = analogRead(1);
int button2 = analogRead(2);
digitalWrite(shutdownPin, HIGH); // Activa el apagado
// Con estado alto en pin 4 fader-, con estado bajo en pin 4 fader+ en potenciĆ³metro del bluetooth hablilitado en pin 10
delay(20);
if (fader == LOW) {
if (vol <= 254) {
Serial.println("SUBE MUSICA BLUETOOTH");
for (vol = 1; vol <= 254; vol++)
{
digitalPotWrite(wiper0writeAddr, vol); // Set wiper 0
digitalPotWrite(wiper1writeAddr, vol); // Set wiper 1
Serial.println(vol);
}
}
}
delay(20);
else if (fader == HIGH)
{
if (vol >= 2) {
Serial.println("BAJA MUSICA BLUETOOTH");
for (vol = 254; vol >= 1; vol--)
{
digitalPotWrite(wiper0writeAddr, vol); // Set wiper 0
digitalPotWrite(wiper1writeAddr, vol); // Set wiper 1
Serial.println(vol);
}
}
}
volgrl = volgrl + 1;
Serial.println(vol);
Serial.println(fader);
digitalPotWrite(wiper0writeAddr, vol); // Set wiper 0
digitalPotWrite(wiper1writeAddr, vol); // Set wiper 1
// Pulsa para subir o bajar volumen general (potenciĆ³metro habilitado en pin 9)
if (volgrl >= 0 && volgrl <= 200)
{
if (button1 >= 1000 && button2 <= 50)
{
(volgrl = 0);
if (volgrl > 200) {
(volgrl = 200);
}
{
digitalPotWrite2(wiper0writeAddr, volgrl); // Set wiper 0
digitalPotWrite2(wiper1writeAddr, volgrl); // Set wiper 1
delay(20);
}
}
else if (button1 <= 50 && button2 >= 1000)
{
volgrl = volgrl - 1;
if (volgrl < 0) {
}
{
// Retardo hasta que se estabiliza el amplificador para activar altavoces
digitalPotWrite2(wiper0writeAddr, volgrl); // Set wiper 0
digitalPotWrite2(wiper1writeAddr, volgrl); // Set wiper 1
delay(20);
}
}
}
digitalPotWrite2(wiper0writeAddr, volgrl); // Set wiper 0
digitalPotWrite2(wiper1writeAddr, volgrl); // Set wiper 1
delay(20);
if (start == 1) {
delay (100);
digitalWrite(speakPin, LOW);
start = 0;
}
}
El cĆ³digo, como el anterior estĆ” detallado en los comentarios, y analizĆ”ndolo un poco creo que se entiende con unos conocimientos mĆ”s o menos bĆ”sicos en programaciĆ³n de este tipo.
¡Pues listo!, ¡ahora si!. Con todos los cables conectados en su sitio, alimentaciones, comunicaciones, audios, potenciĆ³metros, etc., y con los cĆ³digos cargados, podemos montar la fiesta.
Luego cortar el pico de forma vertical para que quede 0,5 cm en vertical, ya que ahĆ irĆ” un perfil.
El ancho del mueble es un estĆ”ndar de 43,5 cm utilizado en los equipos de mĆŗsica, por lo que el tablero para la base y la parte superior medirĆ” 41,5 cm de largo. Cortaremos un tablero rectangular de 41,5 x 20 cm para la base y para la parte superior otro de 41,5 de por lo que corresponda, es mejor medirlo.
Para la parte superior de las ventilaciones usad contrachapado de 0,5 cm. y una vez pegado al mueble realizad los huecos para encajar las rejillas. Hacedlo asĆ ya que el corte va ajustado a la parte superior.
Todos los vinilos son opacos menos uno. El que va en el frontal retroiluminado se imprime en un vinilo transparente y va pegado en policarbonato blanco translĆŗcido.
Seguimos ahora con el panel de tĆtulos. Es una de las cosas que mĆ”s me costĆ³ quedar bien. Lo ideal es disponer de una CNC para cortarlo perfecto, pero como no es mi caso pues con paciencia y cuidado.
Para esta parte he usado un tablero de DM de 5 mm. Me pareciĆ³ mĆ”s adecuado porque tiene que quedar completamente recto y el contrachapado se curva mĆ”s fĆ”cilmente.
Antes de poner los vinilos en el mueble vamos a colocarle unas patas. El tamaƱo de las que indico en el enlace es bastante adecuado. Miden 7,8 mm de altura x 31,5 mm de diƔmetro. Lo suyo es que no se vayan mucho de esas medidas.
Vamos a imprimir las piezas donde van los tĆtulos, y una vez impresas las pintaremos con spray efecto cromado. El efecto cromado queda mejor si se aplica sobre color negro.
Las piezas van pegadas por debajo ajustadas al hueco, y una vez hecho esto se pueden colocan los acetatos y los tĆtulos. Un acetato por debajo y otro por encima de los tĆtulos que van impresos en papel normal.
Esta es la plantilla para los tĆtulos, y sus dimensiones son de 10 x 14,3 cm. Los acetatos tendrĆ”n la mismas dimensiones y van doblados por el medio para darle forma.
Van pintadas con el spray efecto cromado y pegadas con un poco de cianocrilato sobre la tela ya montada.
Para la puerta trasera cortamos una pieza de contrachapado de 10 mm. con las dimensiones del hueco, dejando un poco de holgura para que encaje fƔcilmente. Tened en cuenta la pintura.
La puerta lleva una tira de leds por dentro para la retroiluminaciĆ³n. Estas tiras de leds se pueden cortar para ajustar la medida por las partes seƱaladas en la misma tira.
Para iluminar los tĆtulos por debajo he instalado unas lĆ”mparas en una pieza hecha del contrachapado de 5 mm. donde he montado unos casquillos E14, que cableamos en paralelo y va directamente a la alimentaciĆ³n de red.
Las lƔmparas que he utilizado son led de tono cƔlido de 1W. El cristal es esmerilado para difuminar mƔs la luz. LƔmpara LED en Amazon
La distribuciĆ³n y el aspecto final del montaje quedarĆ” mĆ”s o menos asĆ.
Pues si no se me ha pasado nada, aquĆ hemos terminado. Espero que os haya gustado y os haya resultado interesante.
Si os animƔis a fabricarla seguro que la vƔis a disfrutar.
No hay comentarios:
Publicar un comentario