Rockola-Gramola-Jukebox

De Wikijoan
(Diferència entre revisions)
Dreceres ràpides: navegació, cerca
(Instal.lació pas a pas)
(Configuració Pikeyd)
Línia 539: Línia 539:
 
fitxer: pikeyd.conf
 
fitxer: pikeyd.conf
 
<pre>
 
<pre>
KEY_LEFT        25
+
KEY_LEFT        5
KEY_RIGHT      8
+
KEY_RIGHT      6
KEY_0          7
+
KEY_0          13
KEY_5          9
+
KEY_5          19
 
</pre>
 
</pre>
 
que en la RPi B+ es correspon a una configuració:
 
que en la RPi B+ es correspon a una configuració:
Línia 551: Línia 551:
 
     *--*
 
     *--*
 
     *--*
 
     *--*
 +
    *--* GPIO18
 
     *--*
 
     *--*
 +
...
 +
  L *--*
 +
  R *--*
 +
  0 *--*
 +
  5 *--*
 
     *--*
 
     *--*
    *--*
 
    *--*
 
    *--*
 
  5 *--* L
 
    *--* R
 
    *--* 0
 
 
...
 
...
 
</pre>
 
</pre>
Línia 573: Línia 573:
 
       *--*
 
       *--*
 
       *--*
 
       *--*
LIGHT1 *--*
+
(LIGHT1) *--* GPIO 18
LIGHT2 *--*
+
(LIGHT2) *--*
LIGHT3 *--*
+
(LIGHT3) *--*
 
       *--*
 
       *--*
      *--*
 
    5 *--* L
 
      *--* R
 
      *--* 0
 
 
...
 
...
 +
    L  *--*
 +
    R *--*
 +
    0 *--*
 +
    5 *--*
 +
      *--*
 
</pre>
 
</pre>
 +
=Raspberry Pi & WS2812 LED-Strips (NeoPixel) - juliol 2019=
 +
Tinc ganes d'acabar la màquina aquesta. Ha passat una mica de temps, i ara penso que la millor manera de fer els efectes de llum és amb una tira de LEDs neopixel. Segueixo aquests enllaços (el primer és per una tira de LEDs normals, i el segon enllaç és per als neopixels):
 +
*https://dordnung.de/raspberrypi-ledstrip/
 +
*https://dordnung.de/raspberrypi-ledstrip/ws2812
 +
 +
S'ha d'instal·lar el mòdul per tal de què la RPi treballi amb el xip WS281X:
 +
*https://github.com/jgarff/rpi_ws281x
 +
*https://github.com/rpi-ws281x/rpi-ws281x-python
 +
 +
python3-pip - Python package installer
 +
<pre>
 +
$ sudo apt-get install python3-pip
 +
$ sudo apt-get install python-pip
 +
 +
$ sudo pip install rpi_ws281x
 +
</pre>
 +
'''Compte''' amb la fletxa petita que està impresa en el Neopixel: mostra la data direction, és important.
 +
 +
Funciona bé el codi d'exemple que es proporciona, script ''strandtest.py'':
 +
*https://raw.githubusercontent.com/rpi-ws281x/rpi-ws281x-python/master/examples/strandtest.py
 +
A partir d'aquí hauré de modificar el comportament. A mi m'interessa fer grups de tres pixels.
  
{{Autor}}, desembre 2014
+
{{Autor}}, desembre 2014, juliol 2019

Revisió de 21:38, 8 jul 2019

Contingut

Introducció

Es tracta de fer una gramola/rockola/jukebox estil anys 50, amb la Raspberry Pi.

El software per a jukebox més utilitzat es diu dwjukebox (http://dwjukebox.com). És per a DOS i hi ha gent que ha intentat portar-lo a la RPi. El que farem és una interfície totalment nova basada en SDL.

Idees per al disseny, cerca a Google Images per

Les màquines americanes originals són de la marca: Wurlitzer, Seeburg, Ami i Rock-ola.

A Barcelona:

Projecte mopidy: el motor

Projecte mopidy: és el servidor de cançons.

Disseny de la interfície

Per veure un jukebox en funcionament: Bar amb gramola a Barcelona: Bar Leo. Carrer Sant Carles, 34 (Barceloneta)

El disseny ha de ser similar a algun dels skins que hi ha a dwjukebox:

Concretament, el que més m'agrada és:

A veure si amb 5 botons n'hi ha prou per moure'm a tota la interfície. A 5 button interface to emulate up/down/left/right/enter.

La idea del funcionament de la gramola és que cada crèdit (50cts) són dues cançons, i hi ha una llista de reproducció. Quan una persona va i posa 50 cts, les seves cançons queden a la llista de reproducció. Si en aquell moment apreta la tecla random, les cançons es trien de forma aleatòria. Quan una persona va i posa 50 cts té dos crèdits i pot seleccionar dues cançons (havent aplicat prèviament els filtres). Les cançons van a la cua de la llista de reproducció.

En el moment d'arrencada del programa, l'administrador tindrà temps de seleccionar un mode d'arrencada (la pantalla avisa que estem en el mode configuració). Per ex:

Donada una selecció, no tenen perquè estar disponibles totes les cançons. Posem per cas, 5 pàgines. (hi ha cançons que no apareixen, però que ja apareixeran en d'altres ocasions).

D'altra banda, és important barrejar bé els autors (per ex, que de cada autor apareixin dues cançons). No pot ser que si agafo pop dels 70 em surtin només Beatles. He de limitar Beatles a dues cançons per deixar pas a d'altres artistes.

Disseny del moble

Electròncia: LEDs i efectes de llum

Per ex, Mini LED bubble tubes

Utilitzaré les idees desenvolupades a Pinball/milloncete_electromecànic#LEDs_i_efectes_de_llum. Es tracta de què en el contorn del moble hi haurà 15 rodones de metacril.lat il.lumimades per darrere amb tres LED. Aquestes rodones els anomeraré mòdul LED, i consta de 3 LED, un BC337 de propòsit general, 2 resistències i 3 connectors (12V, GND i senyal d'activació.). Són 15 mòduls perquè la configuració dels llums serà 7+1+7, és a dir, el mòdul 8 va a dalt de tot presidint l'eix de simetria.

Eagle: gramola_v4.sch

Pcb leds rockola v1.jpg

El prototip fet amb la protoboard funciona correctament. Es tracta d'un 555 i dos 4017 i un 4011. És a dir, és l'exemple de http://chemelec.com/Projects/Sequencer/Chaser-1.png però reduït a 2 4017 i 15 LEDs. Tot el circuit s'activa amb un pin GPIO de la RPi, que el que fa és activar un relé que alimenta tot el circuit (alimenta els 4 xips que hi ha), i tot el circuit es posa a funcionar.

Tanmateix, aquest circuit no l'implemento perquè només és un dels tres efectes que vull aconseguir. El segon efecte que vull aconseguir és també un LED chaser, però que comença pel mòdul LED 8 i va baixant per l'esquerra i per la dreta. El tercer efecte és senzillament fer pampallugues d'un LED (el LED del crèdit).

La quarta versió incorpora la petita electròncia dels 6 botons que utilitzaré.

Per tant hi haurà una segona versió, una tercera versió i una quarta versió, i quan ha ho tingui complert s'haurà de fer la placa.

En aquesta primera versió el connector té 4 pins: 12V, 5V, GND i GPIO. Els 5V és perquè el relé que faig servir té un primari que es pot connectar directament al senyal de 5V de la RPi.

Errades v4

Vias are a hole in the PCB that has metal running down the inside of the hole so that the traces on the front of the board are electrically connected via the hole to the back of the board.

La versió v4 l'he portat a imprimir a pcbway.com, i s'han introduït una sèrie d'errades que serà necessari subsanar en una versió posterior.

L'errada més important és un error de concepte, en l'esquemàtic. També hi ha un error d'un wire.

1. Quan es tanca el relé no pot ser que quedi curt-circuitat els 12V amb el GND. Fixar-se que tots els xips estan ja alimentats a 12V, independetment del relé. Per tant, és un error greu de concepte de com funciona el relé. L'alimentació de tots els xips ha d'anar al secundari del relé, de manera que quan es tanca els xips s'alimentin a 12V.

2. En el segon 555 (IC4), el pin2 connectat al pin6, també està connectat a 12V (error!)

3. El condensador de 100uF que va de 12V a GND n'he posat tres, i de fet amb un de sol n'hi hauria d'haver prou.

Altres errors:

4. La llibreria que he fet del RELE (device: RELE_FARNELL) està malament. La disposició dels pins no és la correcta, i la distància entre pins també és incorrecta.

5. Fixar-se en l'amplada dels forats, a varis llocs. El relé, té dues potes que són grosses i no són rodones; els diodes tenen potes grosses. Els forats de tornilleria han de ser grossos.

6. S'ha de versionar bé la placa. rockola v4 en comptes de rockola v1. D'altra banda, el tipus de lletra del text no s'ajusta, i a retroplaneta.com la m queda fora de la placa, quan en el disseny que vaig enviar estava bé (el tipus de font tampoc es correspon). No fer servir la lletra proporcional.

7. Dubte. R18, R19 i R20 (part dels botons) es toquen? Sí que es toquen, tot està curtcircuitat. En qualsevol cas s'ha de revisar la proximitat d'algunes pistes amb forats, i algunes pistes que estan en diagonal però que no estan a 45º. Estan ben definides les regles de disseny? Tot això és perquè no he fet bé el DRC.

En definitiva, s'ha de fer una revisió manual molt minuciosa que s'hauria d'haver fet abans de portar a imprimir la placa.

Més coses: ens hem de fixar en el concepte de vias, i entendre bé les vies. En el meu disseny tinc 13 vies.

IMPORTANT. Molt important el route i el ripup per tal de rerutejar manualment les pistes. Es pot enrutar en diagonal (fixar-se en els diferents estils que hi ha).

Aprofundint amb el DRC

És important familiaritzar-se amb el DRC (Design Rules Check, tots els paràmetres), doncs crec que la part dels botons està bastant mal feta en quant a DRC.

Mirar per exemple (encara que està orientat a uns paràmetres per fer els PCBs a casa):

I aquí s'explica com es pot fer el routat manual en comptes del autoroute:

per alternar entre ripup i trace:

Més informació de com fer uns PCB correctes i que acompleixin les DRC:

Si no volem utilitzar les DRC per defecte del Eagle, pot ser interessant utilitzar les DRC de Sparkfun, o bé algunes més restrictives com les de 8mil o fins i tot de 10mil

mil significa dècima de milímetre. Bàsicament 8 mil significa que no es permet una proximitat inferior a 0.8mm entre pistes o entre pista i pad.

Impressió a paper per estudiar i revisar l'esquema

És molt important revisar minuciosament l'esquema abans de fer la comanda de fabricació.

Consells per imprimir. Imprimir tres versions:

versió 5

S'ha corregit els errors de la versió 4.

versió 6

Rockola v6.png

La versió 6 és el mateix esquemàtic que la versió 5, però s'ha canviat el DRC per tal d'utilitzar CNC.

Vull fer la prova per veure si és factible fer aquesta placa amb CNC. He ficat a DRC 25 mil com a norma general, seguint les recomanacions de CNC.

mm = 	mils x 2.54 / 100
To make it easy to remember - every 100 mils is equivalent to 2.54 mm.

Evidentment, després de fer el check surten molts errors. Corregeixo tots els errors que puc movent les pistes allà on hi ha lloc, però evidentment en les pistes que passen entremig dels pins dels xips només em queda l'opció d'aprovar. El resultat crec que pot ser satisfactori.

Recordar que per utiltizar pcbgcode el millor és tornar a mirar la documentació. He de marcar que vull el top i el bottom, i també s'ha de generar el fitxer dels forats. Això només és una prova per demostrar que en principi és factible. Si ens fixem, entre els pins dels xips no s'arriba a veure el color groc, la qual cosa vol dir que va una mica justa. El resultat final suposo que depèn de lo prima que sigui la broca i la seva qualitat. I també caldrà una inspecció manual del resultat.

Possibilitat de fresar la PCB a fabacademy.org. Tenen una fresadora Roland Modela MDX-20. Informació de com generar els fitxers per a la fresadora des del Eagle:

versió 7

Mètode del planxat. La definició és bona i hi ha pistes que passen per entremig dels pins. Tanmateix, a l'hora de muntar els components hi ha inconvenients que s'han de solucionar en la versió 8, i que fan que la probabilitat d'error sigui alta. Les coses a millorar són les següents:

versió 8

Parteixo de v7, i miro d'implementar les millores proposades. Concretament, es tracta d'augmentar el gruix de les vies allà on es pugui. (per ex, 0,032)

Hi ha hagut una sèrie de problemes, que es resolen i es discuteixen en la versió 9.

versió 9

La definició de la versió 8 és bona, però hi ha una sèrie de problemes. Com sempra, la soldadura neta a vegades no és fàcil, i es corre el risc de ser una mica xapusses. Això significa que es pot recremar una pista (sobretot si és prima, com ara 0.016), i aleshores refer aquesta pista és xapussero i et queda el dubte de si hi haurà bona connexió. La versió 8 seria bona si es porta la placa a fer-la a pcbway.com (on la soldadura està més assegurada i les vies són electro-platted). Però si faig la versió 8 amb el mètode del planxat, el muntatge no és fiable.

El primer que faig en la versió 9 és dividir la placa en dues parts funcionals: A) el LED-flash i l'electrònica dels botons; B) el led chaser (en els dos modes que té). D'aquesta manera, faré dues plaques allà on n'hi havia més una, de manera que queden més simplificades, i es minimitza la pèrdua de temps en el cas d'error per si s'ha de repetir una placa.

La placa A) la podré fer d'una sola capa, i la placa B) continuarà sent de dues capes.

El primer que faig és la disposició dels components, i fer l'autorouter. He de fer tantes proves com calgui, canviant la disposició dels components, fins que vegi un disseny queda el més senzill possible (i minimitzant les vies en el cas de les dues capes). Quan hagi trobat la disposició òptima, aquest serà el punt de partida. L'objectiu serà, partint d'aquí, simplificar el màxim i fent la placa més fiable. Per fer-ho, és clau fer ponts que simplifiquen i eliminen pistes i augmentar el gruix de les pistes sempre que es pugui (a 0.032 i 0.05).

Per tant, la clau està en fer ponts que fan que s'eliminin vies i pistes. Per indicar els ponts el conveni que faig servir és ficar forats en el origen i final, i ficar una línia en la tPlace, de manera que quan imprimeixi la capa tPlace on estan tots els components, també es veurà on s'han de ficar els ponts.

En definitiva, com més ponts faci més pistes podré eliminar (sobretot allà on siguin més crítiques), i més gruixudes podran ser les pistes.

Mòduls LED

Modul led.jpg

Tinc 15 mòduls LED. Cada mòdul s'activa per un pin de la placa, que commuta un transistor,i encén els 3 leds.

Electròncia 2: LEDs i efectes de llum (setembre 2016)

A setembre 2016 he deixat el projecte en guaret durant un any, i encara no he implementat la versió original de l'electrònica, amb uns quants problemes que em va donar. Ara faré una aproximació diferent i més senzilla.

La primera aproximació era que a l'activar un pin GPIO a la RPi tota l'electrònica es posés a funcionar, amb el 555, 4017 i 4011.

Ara l'aproximació és ben diferent. Des del meu software de la rockola no activo els leds amb un pin GPIO, sinó llençant un script (Python o C), que utilitzarà el bus I2C i un MCP23017 per controlar fins a 16 LEDs. El fet que siguin 16 em va perfecte perquè jo tinc 15 mòduls LED + el coin.

Per fer el projecte em baso en el següent enllaç, que és molt explicatiu:

El esquema electrònic queda molt senzill, i es pot fer amb una protoboard o amb una placa feta a mida amb pistes gruixudes.

El que buscava en el projecte original era descarregar el temps de processador totalment, i que els efectes de llum fossin totalment electrònics. Tot i que la idea és bona, executar un script des del meu programa no ha de representar una sobrecàrrega per al processador.

En l'exemple es fa un chaser senzill. Jo evidentment el puc complicar una mica per fer quatre efectes:

Tots aquests efectes s'han de programar per software, mentre que abans es buscava l'electrònica. És la principal diferència, però axiò no vol dir que sigui una solució pitjor.

Les primeres proves amb I2C i el MCP23017 estan aquí:

video:

Post:

Construcció del moble

Que quedi ben integrada la pantalla amb el moble.

Crèdits. Moneder electrònic. 50 cts dues cançons, per ex.

Idees per al disseny: Una fullola la he de poder corbar, o un DM dels més prims-

Fotos

Rockola frontal.jpg

Un cop tinc la pantalla i el monitor de so, ja puc definir totes les dimensions definitives i tallar el frontal del moble:

Tècnica del transfer

La idea original era retallar forats en el moble i enganxar metacril.lat retroiluminat per darrere amb algun vinil. Però com es veu en la foto no hi ha lloc per retallar i fer forats a la fusta, donat que l'altaveu és bastant gran. La solució és fer transfers directament sobre la fusta, abans d'aplicar el vernís. Si es domina la tècnica es poden fer coses molt xules, i a més puc aplicar qualsevol tros de fusta per aplicar transfers i ficar detalls. El desavantatge és que no és retroiluminat, que és la idea que tenia originalment.

Una altra possibilitat (potser millor) és utilitzar paper satinat i la planxa sobre la fusta, de la mateixa manera que es fan els circuits impresos. Hauria de quedar bé (comprovar)

Forats dels mòduls LED

Per fer els forats dels mòduls LED utilitzo els forstner de 40mm i 50mm. El procediment per no equivocarme seria.

  1. marcar amb el taladro de fusta de 3mm el centre dels forats.
  2. Ficar en el taladro de columna la broca de 40 mm. Per la part del davant (i d'aquesta manera no s'estellen els cantos) començar a fer el forat, quedar-se just abans de que s'acabi de foradar la fusta.
  3. abans que res, ara toca fresar per tal d'arrodonir els cantos.
  4. continuem per la part de darrera de la fusta, amb el forstner de 60 mm i el taladro de columna. Tenim la referència del forat, taladrem i ens quedem a uns 75 mm del final. Per darrera és per on enganxarem la rodona de metacril.lat.
  5. no cal dir que aquest procés el fem en sèrie per als 15 forats.

Videos

Materials

Fustes i marqueteria

Buscar una reixeta o una gasa negra per amagar els altaveus?

Botons

Per ex,

Pantalla

Amplificador de so

Hi ha diferents possibilitats. Una possibilitat seria instal.lar altaveus per a ordinadors una mica bons.

Finalment em decanto per un monitor de camp proper:

1 Pieza No. de artículo 292493:
------------------------------------------------------------
Neusonik NE08, Active Nearfield Monitor, 2-Way, 8" LF
Driver, 1" HF Driver, magnetically shielded, Frequency
Response: 40 Hz - 22 kHz, Crossover Frequency: 3.2 kHz, LF
Amp: 70 W, Bi-Amped, HF Amp: 70 W, Input: 1 x XLR
balanced, 1 x TRS balanced/unbala nced, Dimensions: 350 x
250 x 320 mm (HxWxD), Weight: 10 kg
Precio: c/u 96.00 EUR (Precio total 96.00 EUR)

Els monitors de camp proper tenen una resposta plana a la freqüència, a diferència dels equips i altaveus HIFI que donen color a la música per tal de què sigui més agradable. Per exemple, realcen els baixos. Per tant és lícita la pregunta si és una bona opció utilitzar uns monitors de camp proper per escoltar música de forma genèrica. Buscant per internet hi ha un fil d'Hispasonic (http://www.hispasonic.com/foros/monitores-activos-para-escuchar-musica/317105) que ho explica bastant bé. Tot i que no és ideal, és qüestió de gustos, i es pot fer sense cap problema, i hi ha gent que ho fa.

L'avantatge d'aquest monitor per a la realització del projecte és que només és un monitor (no són dos); és actiu; és de 70W; el preu està bé.

altres possibilitats, utiltizar una minicadena (amb comandament a distància, també té USB i CD)

Amplificador del so (2a versió)

Com a amplificador de so munto el circuit Amplificador estereo de 60W con TDA2050, i necessito dos altaveus que siguin adients per aquest amplificador.

La marca Visaton té una oferta bastant ampla d'altaveus que són full-range (2 vies). La via dels aguts és es conus que està al mig. Compro un parell dels següents:

Altavoz full-range de 17 cm (6.5") Visaton 

Altavoz de banda ancha de 17 cm con cono para agudos. Cono resistente al agua por impregnación. Anillo decorativo desmontable.

• Tasa de potencia: 40 W
• Potencia máxima: 60 W
• Impedancia nominal Z: 8 Ohm
• Respuesta de frecuencia: 70-20000 Hz
• Media de nivel de presión de sonido: 87 dB (1 W / 1 m)
• Ángulo de apertura (-6 dB): 41 ° / 4000 Hz
• Límite de excursión: +/- 3 mm
• Frecuencia de resonancia: 75 Hz
• inducción magnética: 0,75 T
• Flujo magnético: 190 μWb
• Altura de la barra de la placa frontal: 4 mm
• Diámetro de Bobina: 20 mm
• Altura de bobinado: 4 mm
• Diámetro del recorte: 143 mm
• Peso neto: 0,47 kg
• DC resistencia Rdc: 6,8 Ohm
• Factor Q Mecánica Qms: 4,94
• Factor Q eléctrica Qes: 3.26
• Factor Q total Qts: 1,96
• Volumen equivalente Vas: 16 l
• Área efectiva del pistón Sd: 129 cm ²
• Masa dinámica MMS: 5,9 g
• Factor de fuerza Bxl: 2,5 Tm
• Inductancia de la bobina L: 0,8 mH

Aquesta és la configuració que faré servir en la segona màquina.

Moneder electrònic

Vinils

Com que el moble és de fusta, en principi no caldria vinils. Ara bé, es pot ficar alguns vinils, i que aquests tinguin algun tema amb disseny retro, com per exemple Elvis Presley.

Pressupost

gramola_frontend

Algorisme escollir_cancons

En la gramola no es tracta de tenir disponible totes les cançons, doncs això faria una paginació molt gran. Es tracta de tenir-ne una selecció (posem per cas 5 pantalles) on totes les cançons que pertanyen a la col.lecció i al filtre puguin sortir (encara que no totes tenen la mateixa probabilitat de sortir). Com veiem en la imatge de referència (http://dwjukebox.com/skins/ss-woodcabbox.jpg), cada pantalla són 64 cançons, i si fem 5 pantalles serien 320 cançons. A més, la disposició de les cançons segueix uns criteris particulars: no pot ser que totes les cançons siguin dels Beatles o del Julio Iglesias. S'ha de donar preferència a la diversitat de grups, i de cada grup escollir dues cançons. Però d'altra banda, dels Beatles no seran sempre les mateixes cançons, sinó que hi haurà un efecte aleatori donar prioritat al factor popularity (sense que aquest factor sigui definitiu). Per tant, la manera de mostrar les cançons no és tal qual vénen de la select de la base de dades, sinó que és bastant més complex.

Factor popularity. S'ha de donar preferència a les cançons més populars i conegudes, tenint en compte però que totes les cançons han de tenir la seva oportunitat de ser escoltades. La idea és fer una select a partir de la col.lecció escollida i dels filtres de les dues categories aplicats, i obtinc una llista de cançons que fico dins una matriu multidimensional (doncs aquestes cançons tenen els seus atributs). Un dels atributs és la popularity. Recorro l'array i multiplico popularity per un factor aleatori, popularity_post, i ordeno l'array per aquest factor. El resultat és que s'han desordenat les cançons, però les que tenien un factor popularity alt continuen tenint una avantatge.

No s'acaba aquí. Ara he de fer una reordenació de l'array tenint en compte el grup/artista. Parteixo del primer element de l'array i busco quin és el artista/grup (id_agroup). Hauré de buscar dins de l'array una segona canço d'aquest artista, i ficar-la en la segona posició (i les altres canços anirant cap a la dreta). Ja tinc les dues primeres cançons que pertanyen al mateix grup/artista. Hi ha la possibilitat de què no hi hagi una segona cançó del mateix grup. En aquest cas es deixa la segona posició vacant (NULL) i s'elimina la última posició de l'array. I ara continuo el procés per agrupar la tercera i quarta cançons, i així anar fent. El resultat serà una distribució de cançons en què hi ha vacants, en què els grups no segueixen un ordre alfabètic, i en què dins la mateixa pantalla (o en les altres pantalles) es poden repetir grups, com ara Beatles. Això de fet està d'acord amb el que es veu en la pantalla http://dwjukebox.com/skins/ss-woodcabbox.jpg, tot i que aquí sembla que es dóna preferència a un ordre alfabètic.

Base de dades 1a versió

NOTA. La versió mysql s'ha desestimat per massa complicada i pretensiosa. S'ha de buscar la simplicitat, no només de la bd, sinó també del front-end de la rockola, que ha de quedar el més senzill possible.

Comencem amb mysql.

CATEGORY1 (id_category1, category1)
CATEGORY2 (id_category2, category2)
COLLECTION (id_collection, collection)
COLLECTION_CATEGORY (id_collection, id_category1, id_category2)
AGROUP (id_agroup, agroup) /* artist/group */
SONG (id_song, song, id_agroup, path, file)
SONG_CATEGORY1 (id_song, id_category1)
SONG_CATEGORY2 (id_song, id_category2)

El script script_mysql.txt del projecte és aclaridor i hi ha les selects bàsiques que mostren que aquesta estructura acompleix les expectatives per extreure tota la informació necessària. En definitiva, volem filtrar per col.lecció (en l'arrencada de la màquina), i donada una col.lecció, poder navegar/filtrar per categories (categoria1 i categoria2) i autor.

Base de dades 2a versió (basat en fitxer de text)

NOTA: Les instruccions detallades del protocol a seguir (document de treball) estan a /home/joan/projectes/rockola/omplir_bd/protocol.txt

He de buscar una simplificació de l'organització de les cançons. A més, ha de ser fàcil poder afegir noves cançons al sistema, i que ho pugui fer una persona no experta. Per tant, es busca un protocol simplificat.

Elimino els conceptes de categoria i subcategoria. El que sí que m'importa és el concepte de col.leccions, i evidentment les col.leccions es poden solapar (rock i rock català). Senzillament el que faré és assignar les cançons a les col.leccions on vull que surtin.

El que sí que faré és tenir l'any de la cançó (de fet el que tindré és l'any de l'àlbum), doncs el tema de separar per dècades sí que ho trobo interessant.

A més, he de buscar un mètode que no depengui d'una bd com ara mysql, i que qualsevol persona pugui fer la seva classificació.

1. Definir les colleccions que vull tenir. Pop, pop espanyol, rock, rock català, jazz, jazz clàssic, saxofon.

2. Revisar el nom de les cançons i de les seves carpetes (manualment o automàticament).

3. Amb un programa de tags revisar el tag de les cançons. Intentar completar l'any. De totes maneres, no obsesionar-se amb les categories, doncs per mi allò rellevant són les col.leccions que defineixo.

4. Fitxer mestre (songs_master.txt). El fitxer constarà del següents camps:

-cançó
-nom_ftixer
-ruta
-grup
-any
-lliure
-popularity
-durada
-colleccions (separat per comes, les colleccions on vull que aparegui la cançó).

Per tal d'ajudar a genera el Excel es pot utilitzar un script que miri el nom del fitxer, la ruta i els tags.


A mida que vagi tenint noves cançons, s'haurà d'anar omplint i afegint en el fitxer. La idea és que songs_master.txt i la classificació de les cançons es treballa en l'ordinador domèstic. El fitxer songs_master.txt es puja a la RPi.

Un script (separar_colleccions) genera un fitxer per cadascuna de les colleccions. Per ex:

L'estructura d'aquests fitxers és: (igual que abans, però ara collecció ja no hi és, doncs tinc un fitxer per cada colleccio).

-cançó
-nom_fitxer
-ruta
-grup
-album
-any
-lliure
-popularity
-durada

Per traduir el nom del fitxer amb el nom de la collecció es farà de la manera habitual de substituir espais en blanc per underscore. Per ex,

Rock Català -> Rock_Català.txt

L'aplicació té un Menú principal (primera fase de configuració), en la qual podrem filtrar les cançons. Les opcions són:

Cada vegada que faci un canvi s'ha de mostrar el número de cançons candidates. Per tal de no haver de calcular el número de cançons, això ja està fet en la fase d'actualització. Hi ha el fitxer number_songs.cfg amb la següent estructura:

pop_español	all	no-free	1243
pop_español	40	no-free	86
rock_català	2010	no-free	123
...

La navegació s'ha de fer amb els tres botons que tinc: amb el primer botó navego dins de cada columna; el segon botó serveix per canviar de columna; el tercer botó és per seleccionar/deseleccionar el que tinc.

Un cop tinc feta la selecció (Listen) es trien de forma aleatòria (tenint en compte el factor popularity) fins a 5*64=320 cançons, i s'omple un vector, i ja puc utilitzar la rockola.

Amb el botó shuffle puc tornar a reorganitzar la selecció (amb la possibilitat de què surtin d'altres cançons). Amb el botó Exit torno al menú principal.

Carpeta bd/ de la base de dades de cançons:

songs_master.txt
pop_español.txt
rock_català.txt
...

Carpeta cfg/ de configuració:

number_songs.cfg
preferences.cfg

Per tant, el procés seria:

NOTA: el menú principal i la rockola poden ser aplicacions diferents.

Instal.lació pas a pas

$sudo apt-get install python-smbus i2c-tools
$ sudo i2cdetect -y 1
Per tal de poder fer getopt a C++:
$ libgetopt++-dev

Necessito un script per copiar el software que necessito a la RPI. Aquest script haurà de realitzar les següents tasques.

Aquest script no està pensat per a fer la instal.lació, sinó per a l'actualtizació quan hi hagi noves versions dels programes, noves cançons, nous fitxers de configuració. Per tant, la creació de l'estructura de directoris, etc s'haurà de fer manualment. Per ex, a la RPi es directori de música estarà a /home/pi/musica. concretament, el que s'ha de fer manualment una sola vegada:

El script script_copia_rpi_v1.sh es troba a /home/joan/projectes/rockola/scripts (la versió correcta)

Si he actualitzat el software, a la RPi s'hurà de compilar: (la versió correcta)

g++ -DRPI -o geometria_rockola geometria_rockola_v20.cpp `sdl-config  --cflags --libs` -lSDL_image -lSDL_ttf -lSDL_gfx

Ficar el video de presentació

El video /home/joan/projectes/rockola/video_rockola_2.mp4 el fiquem a /home/pi/rockola/video

Per iniciar rockola_menu en l'inici del sistema:

$ joe .profile
$ sudo /home/pi/rockola/rockola_menu/src/1.0.0/rockola_menu

NOTA: és necessari el sudo quan llenço l'aplicació des de la línia de comanda. El rockola_revival, sense sudo, agafa un temps de processador molt gran (tant amb la RPi B+ com amb la RPi 3). TBD per què passa això: potser té a veure amb el popen, o potser té a veure amb el framerate i la manera com faig el bucle principal de l'aplicatiu. El tema és que amb sudo, el temps de processador passa del 90% al 30%. Si faig sudo en el rockola_menu, aleshores ja no cal llençar amb sudo el rockola_revival.

Per deshabilitar el rainbow square que ens indica que la font d'alimentació és justa:

$ sudo joe /boot/config.txt
avoid_warnings=1

Amb avoid_warnings=1 no permet overclocking. Amb avoid_warnings=2 s'ho salta i sí que fa overclocking.


Gramola front end

Coses a fer:

sudo apt-get install joe
sudo apt-get install mpg123
sudo apt-get install libsdl-image1.2-dev
sudo apt-get install libsdl-ttf2.0-0 libsdl-ttf2.0-dev
sudo apt-get install libsdl-gfx1.2-dev

El portàtil té una resolució de 1600x900 (format 16:9). La pantalla de què disposo té una resolució de 1280x1024 (format 4:3).

És la interfície gràfica, basada en SDL, que funciona tant en el portàtil com en la RPi, i que alimenta el servidor de cançons.

GPIO OUTPUT

Hi ha 3 pins GPIO que són de sortida per activar amb relés els efectes de llum. Faré servir la llibreria wiringPi:

$ sudo apt-get install git-core
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

En el codi rockola-revival-1.0.0:

	#define	LIGHT1	0 //GPIO0, pin 11 del header
	#define	LIGHT2	2 //GPIO2, pin 13 del header
	#define	LIGHT3	3 //GPIO3, pin 15 del header

pinout: http://opensourceecology.org/w/images/e/e5/Rasp_pinout.png

Aquests pins GPIO són compatibles amb els pins que necessito pel pikeyd (següent apartat). Hi ha un embolic amb la nomenclatura dels pins GPIO, però l'anterior enllaç és aclaridor.

Configuració Pikeyd

A part dels pins GPIO per activar els tres efectes de llum, necessito quatre pins GPIO per associar-los a 4 tecles: left, right, 0, 5 (coin). El 0 es correspons a SDLK_0 (amb el portàtil es pot utilitzar 0 o Enter indistintament, però amb la RPi és millor utilitzar el 0, però també es podria canviar).

Per instal.lar i configurar el pikeyd: PiPlay_(abans_PiMAME)#Joystick_i_botons:_una_altra_soluci.C3.B3_.28millor.29.28Nov_2014.29

fitxer: pikeyd.conf

KEY_LEFT        5
KEY_RIGHT       6
KEY_0           13 
KEY_5           19 

que en la RPi B+ es correspon a una configuració:

3.3V *--* 5V
     *--*
     *--* GND
     *--*
     *--*
     *--* GPIO18
     *--*
...
   L *--*
   R *--*
   0 *--*
   5 *--*
     *--*
...

pinout: http://www.virtualfrontiers.co.uk/Images/Raspberry-Pi-GPIO-Layout-Revision-2.png pinout: http://opensourceecology.org/w/images/e/e5/Rasp_pinout.png (aquest enllaç és millor perquè es veu la doble nomenclatura que utilitza el pikeyd d'una banda, i el wiringPi de l'altra).

Fixar-se que LR0 es correspon a la disposició dels botons en la màquina, i el 5 és el coin.

Ajuntatnt els pins de les tecles i dels efectes de llum:

3.3V *--* 5V
       *--*
       *--* GND
       *--*
       *--*
(LIGHT1) *--*  GPIO 18
(LIGHT2) *--*
(LIGHT3) *--*
       *--*
...
     L  *--*
     R *--*
     0 *--*
     5 *--*
       *--*

Raspberry Pi & WS2812 LED-Strips (NeoPixel) - juliol 2019

Tinc ganes d'acabar la màquina aquesta. Ha passat una mica de temps, i ara penso que la millor manera de fer els efectes de llum és amb una tira de LEDs neopixel. Segueixo aquests enllaços (el primer és per una tira de LEDs normals, i el segon enllaç és per als neopixels):

S'ha d'instal·lar el mòdul per tal de què la RPi treballi amb el xip WS281X:

python3-pip - Python package installer

$ sudo apt-get install python3-pip
$ sudo apt-get install python-pip

$ sudo pip install rpi_ws281x

Compte amb la fletxa petita que està impresa en el Neopixel: mostra la data direction, és important.

Funciona bé el codi d'exemple que es proporciona, script strandtest.py:

A partir d'aquí hauré de modificar el comportament. A mi m'interessa fer grups de tres pixels.


creat per Joan Quintana Compte, desembre 2014, juliol 2019

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines