Table des matières:

Raspitone : Jukebox facile à utiliser : 7 étapes
Raspitone : Jukebox facile à utiliser : 7 étapes

Vidéo: Raspitone : Jukebox facile à utiliser : 7 étapes

Vidéo: Raspitone : Jukebox facile à utiliser : 7 étapes
Vidéo: Невероятно вкусные Мясные блюда на Новый Год 2023! 5 горячих БЛЮД на Праздничный стол! 2024, Novembre
Anonim
Raspitone: Jukebox facile à utiliser
Raspitone: Jukebox facile à utiliser

Bonjour, mon prochain projet est, comme j'ai l'habitude de le faire, un projet pas très utile:

C'est un jukebox basé sur un Raspberry 3 B+

Je sais, quelque chose comme ça peut être facilement fait avec un smartphone et un haut-parleur Bluetooth.

Mais pour mon projet, j'avais deux prérequis difficiles:

Je voulais faire quelque chose de "vintage".

Et dans l'ensemble, étant donné que ma dame est définitivement désespérée pour l'ordinateur ou le bluetooth ou quoi que ce soit d'autre du 21ème siècle (et même du 20ème), je devais faire quelque chose de très simple à utiliser………

Ainsi, les spécifications étaient les suivantes:

Un seul bouton poussoir pour démarrer la machine

Un écran tactile (très simple) pour gérer la musique.

Une seule touche sur l'écran pour arrêter la machine.

Et pour avoir un bon son ………

Fournitures

Pour cela j'ai utilisé:

1 Framboise 3 B+

1 ancien home cinéma qui ne servait à rien à cause du lecteur DVD OOS (un vieux Samsung 2.1 avec un woofer et 2 enceintes que j'ai modifié pour rentrer dans le boitier)

1 carte HIFIBERRY DIGI+ (avec sortie optique pour l'ampli de puissance)

1 écran tactile capacitif 7 (le mien est Makeasy pour framboise avec entrée HDMI et alimenté via USB mais n'importe quel écran tactile HDMI devrait être OK)

1 alimentation 5V 5A

1 blindage de relais

1 Arduino nano pour gérer le processus de mise sous/hors tension

1 led IR pour piloter le home cinéma (led pilotée par un transistor 2N2222 NPN)

1 récepteur IR (pour la partie apprentissage des codes IR du projet, je récupère le mien à partir d'un ancien disque dur Multimédia avec télécommande)

3 led

1 interrupteur pour le mode maintenance

1 interrupteur pour travailler sur l'arduino (pendant le téléchargement l'arduino est réinitialisé)

quelques connecteurs JST et Dupont

Et pour la boite

Bois et contreplaqué (mais je ne décrirai pas en profondeur la fabrication de la boîte). juste pour dire que, concernant le boomer à l'intérieur de la box, du contreplaqué de 10 mm et du bois de 18 mm sont obligatoires si vous ne voulez pas voir le Jukebox traverser le salon en jouant !!!!

Étape 1: Description de la partie framboise:

Le Raspi doit gérer différentes choses:

1) les commandes vers le home cinéma (via télécommande IR)

2) les fichiers musicaux

3) l'écran tactile

4) Le heartbeat à l'Arduino (qui gère le Wdt (watch dog timer))

Je suis parti d'une distribution Raspbian strech sur une carte SD 16G (comme nous ne lirons que les fichiers de la carte SD, l'utilisation d'un disque dur n'est pas nécessaire). Je ne passerai pas de temps sur cette partie car le web regorge de tuto à ce sujet..

Voyons les différentes parties dans les prochaines étapes….

Étape 2: Les codes de télécommande IR

Comme je ne trouvais pas le plan du circuit du home cinéma, j'ai décidé de le piloter via des commandes à distance

La première étape que j'ai dû accomplir était d'apprendre à Raspi les codes de la télécommande Home cinéma. pour cela j'ai utilisé le très bon tuto dans Instructables de Austin Stanton IR codes

J'ai eu quelques différences, probablement dues à la nouvelle version car les instructables sont plutôt anciennes, le fichier hardware.conf n'existe plus (du moins je ne l'ai pas trouvé)

Il semble aussi que le transistor utilisé dans le tuto soit un transistor PNP, pour ma part j'ai utilisé un 2N2222 qui est du NPN mais le résultat est le même.(sauf le cablage !!!!!!!!)

L'affectation des broches est donnée dans /boot/config.txt:

#autorisation de lirc le 2019-07-08dtoverlay=lirc-rpi, gpio_out_pin=22, gpio_in_pin=23

La LED IR sera ainsi connectée à la broche 22 du Raspi.

Une remarque importante: lors de l'apprentissage des codes à Raspi il est obligatoire d'utiliser les mots-clés listés dans la commande

irrecord --list-namespace

Voici le fichier que j'ai construit pour mon jukebox:

pi@raspitone:/etc/lirc $ cat lircd.conf

# Veuillez prendre le temps de terminer ce fichier comme décrit dans # https://sourceforge.net/p/lirc-remotes/wiki/Check… # et de le rendre disponible aux autres en l'envoyant à # #

# Ce fichier de configuration a été généré automatiquement

# using lirc-0.9.4c(default) on Thu May 9 17:33:37 2019 # Ligne de commande utilisée: -d /dev/lirc0 /root/lircd.conf

# Version du noyau (uname -r): 4.14.98-v7+ # # Nom distant (à partir du fichier de configuration): jukebox

# Marque de l'appareil distant, la chose que vous tenez dans votre main: # Numéro de modèle de l'appareil distant:

# URL d'informations sur l'appareil distant:

# Le périphérique distant a-t-il un périphérique de capture groupé e. ex., un

# clé USB?:

# Pour les périphériques USB fournis: identifiant du fournisseur USB, identifiant du produit

# et chaîne de périphérique (utilisez dmesg ou lsusb):

# Type d'appareil contrôlé

# (TV, Magnétoscope, Audio, DVD, Satellite, Câble, HTPC, …):

# Appareil(s) contrôlé(s) par cette télécommande:

commencer à distance

nom juke-box

bits 16

drapeaux SPACE_ENC|CONST_LENGTH

eps 30

100

en-tête 4470 4496

un 542 1693

zéro 542 581

piste 553

pre_data_bits 16

pre_data 0xC2CA

écart 107863

toggle_bit_mask 0x0

fréquence 38000

commencer les codes

KEY_POWER 0x807F

KEY_AUX 0x8877

KEY_VOLUMEUP 0xCC33

KEY_VOLUMEDOWN 0xDC23

codes de fin

fin à distance

Comme vous pouvez le voir, j'ai juste besoin de 4 commandes pour piloter le Home Cinéma

Marche / arrêt)

AUX => pour basculer sur le canal d'entrée optique (car le HC démarre toujours sur lecteur DVD)

Et Volume +/-

Les commandes associées sont exécutées via les commandes LIRC:

par exemple: "irsend SEND_ONCE jukebox KEY_VOLUMEUP"

Étape 3: Programme principal

Le programme principal est écrit en Python:

Comme je suis nouveau en Python, je suppose qu'il y a beaucoup d'améliorations qui peuvent être faites, mais cela fonctionne….

Les spécifications:

1) gérer l'écran graphique:

Pour cela, j'ai utilisé APPJAR qui est TKINTER mais civilisé pour étudiant (mon cas), cela veut dire beaucoup plus facile à utiliser, probablement avec moins de possibilités, mais c'était suffisant pour mon propos.

2) lire les fichiers mp3:

J'ai utilisé mplayer pour python.

3) générer des nombres aléatoires pour jouer en mode aléatoire:

Comme je ne voulais pas entendre la même chanson tous les trimestres, j'ai construit un petit programme pour vérifier si le numéro n'était pas présent dans la liste des x numéros précédents (x selon la longueur de la playlist).

La fonction randint en python n'est pas si "aléatoire" à ce que j'ai vu.

4) envoyer le "heartbeat" à l'Arduino

5) gérer le lecteur de fichiers:

Comme Mplayer est asynchrone, lorsque le fichier est démarré, il n'y a aucun moyen de savoir pour Python quand il est terminé (du moins je n'ai pas trouvé de moyen simple)

Pour résoudre ce problème, j'ai utilisé les commandes mplayer donnant la longueur du fichier et la progression dans le fichier en cours

Pour 4 et 5, j'ai utilisé la possibilité offerte par Appjar de générer une tâche périodique (comme appjar est un programme d'événement, c'est un moyen de créer un événement périodique). la fonction est:

#******************* démarrer taskman ********************app.registerEvent(taskman)

p.setPollTime(1000)

Taskman pour "task manager" qui est un def dans le programme qui gère tout ce qui n'est pas des événements d'écran (fin du fichier lu, remplir la barre de progression, envoyer un battement de coeur à Nano, ….)

Une fois démarré, l'écran ressemble à ceci:

Image
Image

Voici le programme:(peut être ouvert via Notepad++ ou Geany)

Étape 4: Partie Raspberry: démarrage automatique et ajout de nouveaux fichiers

Si vous regardez le programme, vous pouvez voir que j'utilise des fichiers bash:

1) Start_jukebox:

En fait le but est d'allumer le Home cinéma et de passer sur l'entrée D. IN (entrée optique dans mon Home cinéma)

pi@raspitone:/bin $ cat start_jukebox#!/bin/bash

envoyer le juke-box SEND_ONCE KEY_POWER

dormir 7

envoyer le juke-box SEND_ONCE KEY_AUX

dormir 2

2) stop_jukebox:

Pour éteindre le Home cinéma

pi@raspitone:/bin $ chat stop_jukebox

#!/bin/bash

envoyer le juke-box SEND_ONCE KEY_POWER

Ces deux fichiers bash sont appelés par Python avec la commande os.system

Pour démarrer le script Python j'ai fait un petit bash

pi@raspitone:~ $ cat dem_jukebox.bash#!/bin/bash

cd /accueil/pi

python jukebox_gui.py

Pour le démarrage automatique en mode GUI, je viens de modifier le fichier de démarrage automatique dans /etc/xdg/lxsession/LXDE-pi

pi@raspitone:/etc/xdg/lxsession/LXDE-pi $ cat autostart@lxpanel --profile LXDE-pi

@pcmanfm --desktop --profile LXDE-pi

@xscreensaver -no-splash

@lxterminal --command="dem_jukebox.bash"

point-rpi

Ajout de nouveaux fichiers mp3:

Pour ajouter de nouveaux fichiers, j'ai préféré faire un petit script Python dédié:

nouveau_fichier_chanson.py

Je vais d'abord vous expliquer l'organisation des fichiers système:

Tous les fichiers sont dans /home/pi

les fichiers mp3 sont stockés dans le répertoire /home/pi/Music

Chaque artiste a son propre sous-répertoire hébergeant les fichiers mp3 associés

pi@raspitone:~/Music/Mike_oldfield $ ls -ltotal 760516

-rwxr----- 1 pi pi 2254923 30 juin 2017 A_New_Beginning.mp3

-rwxr----- 1 pi pi 2691736 30 juin 2017 Arrivée.mp3

-rwxr----- 1 pi pi 8383244 30 juin 2017 Ascension.mp3

-rwxr----- 1 pi pi 5410816 30 juin 2017 Blue_Night.mp3

-rwxr----- 1 pi pi 13125199 30 juin 2017 Castaway_(Instrumental).mp3

-rwxr----- 1 pi pi 12903583 30 juin 2017 Castaway.mp3

-rwxr----- 1 pi pi 2969869 30 juin 2017 Celt.mp3

-rwxr----- 1 pi pi 9047745 30 juin 2017 Chariots_(Instrumental).mp3

-rwxr----- 1 pi pi 9403263 30 juin 2017 Chariots.mp3

Dans le répertoire Documents, nous pouvons trouver la liste construite des fichiers à lire.

pi@raspitone:~/Documents $ cat list.txtFranz_Ferdinand/Michael_live.mp3

Franz_Ferdinand/evil_and_a_heathen.mp3

Franz_Ferdinand/Walk_Away_live.mp3

Franz_Ferdinand/love_and_destroy.mp3

Franz_Ferdinand/his_fffire.mp3

Franz_Ferdinand/eleanor_put_your_boots_on.mp3

Franz_Ferdinand/missing_you.mp3

Franz_Ferdinand/this_fire_(playgroup_remix).mp3

Franz_Ferdinand/Jacqueline.mp3

Nous pouvons également trouver les données des listes de lecture (mais cela est construit par le script Python)

Le petit script Python ajoute les nouvelles chansons, enregistrées dans Musique, dans le list.txt après avoir formaté les titres au format UNIX

Voici le script:(peut être ouvert via Notepad++ ou Geany)

Étape 5: La gestion de l'alimentation via Arduino Nano

Comme je voulais avoir quelque chose de facile pour démarrer, j'ai décidé de le faire faire par un petit nano:

Le principe:

En appuyant sur le bouton de démarrage les appareils sont tous alimentés, le nano démarre (1 ou 2 secondes) et prend en charge la gestion de l'alimentation en déclenchant un relais qui shunte les contacts du bouton poussoir.

Ensuite, Nano attend 35 secondes pour recevoir le rythme cardiaque de Raspberry (cela signifie que le processus de démarrage est terminé et que le programme du jukebox s'exécute).

Tant que le nano reçoit le rythme cardiaque, il maintient le relais activé (minuterie de chien de garde)

S'il n'y a plus de battement de coeur (signifie que le programme du jukebox est arrêté) Nano attend 20 secondes (pour être sûr que le raspi est complètement arrêté) pour libérer le relais de puissance.

Le jukebox est alors totalement éteint

J'ai ajouté un switch pour activer une entrée du nano pour indiquer le mode maintenance (j'utilise le jukebox pour gérer mes autres serveurs raspi via ssh et vnc). Nano désactive alors le processus de chien de garde

Remarque:

l'entrée pour le rythme cardiaque de Raspi doit être abaissée (mais le 3,3 V de Raspi est considéré comme un niveau élevé par Nano)

Cela pourrait être fait avec NE555 mais je suis paresseux et j'ai toujours des nano dans mon tiroir !!!!

Voici le programme C court (peut être ouvert avec Notepad++)

Étape 6: Le câblage

Le câblage
Le câblage
Le câblage
Le câblage

Pour l'écran:

Un câble HDMI et un câble USB sont utilisés sur Raspi pour alimenter et piloter l'écran.

Pour le panneau avant:

Un câble USB est également connecté depuis le Raspi pour pouvoir télécharger de nouveaux fichiers ou faire des sauvegardes.

Un câble USB est connecté depuis le Nano pour pouvoir accéder au soft (pour des modifications si nécessaire)

Je branche aussi un dongle clavier sans fil sur le raspberry pour pouvoir faire la maintenance sans utiliser la prise USB externe

Comme Raspberry et Arduino sont utilisés, le câblage est assez simple.

Tout est situé sur une carte matricielle en bande.

A partir de framboise 2 GPIO sont utilisés:

Pin22 pour LED IR

Broche 27 pour le rythme cardiaque vers Arduino

sur Arduino

La broche 2 est utilisée comme broche d'interruption pour le rythme cardiaque de Raspi.

Les broches 3 à 5 sont utilisées pour piloter les leds (Start, Wdt, Maintenance).

La broche 6 est pour l'interrupteur de maintenance.

La broche 7 est sortie vers le blindage du relais.

Voici le fichier frits:

Étape 7: La boîte

La boîte
La boîte

Je ne décrirai pas beaucoup ce que j'ai fait car cela dépend de l'ampli de puissance et des enceintes utilisées.

A titre indicatif le home cinéma se situe dans le fond du boitier.

Juste au dessus des haut-parleurs:

1 haut-parleur de graves

2 haut-parleurs médium, que j'ai modifiés pour les insérer dans la boite.

Au sommet:

Le panneau avant avec l'écran, les LED, les interrupteurs et les prises USB.

Le bois:

Pour les haut-parleurs, les panneaux latéraux du haut et du bas, j'ai utilisé une planche de bois de 18 mm.

La face avant est en contreplaqué de 10 mm avec des vis de 40 mm.

Pour faciliter le câblage et la maintenance (si besoin !!!) j'ai mis le circuit sur un tiroir derrière la façade

Pour éviter la surchauffe un gros trou est fait sur le bas du panneau arrière et j'ai mis un ventilateur 5V (8 cm) sur le panneau arrière juste à côté du circuit.

La photo ci-dessus est juste pour donner une idée.

Alors c'est tout !!!!!!!!!

Merci de m'avoir lu

Et à la prochaine pour de nouvelles aventures

Conseillé: