Archive for the 'Bricolage' Category

DIY: Un système d’extinction propre pour RuneAudio

mardi, janvier 15th, 2019

J’ai monté un deuxième lecteur RuneAudio ce week-end, pour le rez-de-chaussée. La principale différence, hormis le boîtier physique, est la gestion de l’alimentation.

En effet, sur mon premier lecteur, basculer l’interrupteur coupe le courant brutalement au Raspberry, ce qui peut occasionner des corruptions du système de fichiers de la carte MicroSD (et l’expérience, sur à peine dix jours, montre que la base de données de MPD finit parfois corrompue).

Je voulais donc un système qui me permette d’allumer le Raspberry en basculant l’interrupteur, de l’éteindre proprement en re-basculant le même interrupteur, et de consommer zéro watt lorsqu’il est éteint.

La solution la plus simple que j’ai trouvé est un interrupteur capable de commander deux circuits distincts, tel que celui-ci ou celui-là (chercher DPST, « Double pole single throw »).

L’un des circuits de cet interrupteur coupera l’arrivée d’électricité à l’alimentation et sera mis en parallèle d’un relais contrôlé par le Raspberry, tandis que l’état du deuxième circuit, relié aux GPIO du Raspberry, sera surveillé par celui et déclencher un shutdown propre.

Le schéma de câblage

Sur le schéma ci-dessus, le 220V est sur les fils bleu et marron ; le 5V sur les rouge et noir ; le contrôle du relais en orange, et celui du deuxième circuit de l’interrupteur en violet.

Nous allons écrire un petit script Python qui commencera par configurer la GPIO 5 en sortie, puis la passera à l’état haut, ce qui aura pour effet de fermer le relais. Ensuite, on configure la GPIO 27 en entrée, puis on lit son état dans une boucle infinie. Selon l’état, on continue d’attendre ou bien on éteint proprement.

# cat /root/power-control.py
import RPi.GPIO as GPIO
import os
import time
import sys

GPIO.setmode(GPIO.BCM)

#Setup de la broche de contrôle du relais pour le fermer
GPIO.setup(5, GPIO.OUT)
GPIO.output(5, GPIO.HIGH)

#Setup de la broche de surveillance de l'interrupteur
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)

#Boucle infinie de surveillance
while True:
state = GPIO.input(27)
if state == True:
#Interrupteur toujours sur ON
time.sleep(0.5)
else:
#Interrupteur sur OFF, déclenchement de l'extinction
os.system("/var/www/command/rune_shutdown poweroff")
os.system("shutdown -h now")
sys.exit(0)

Deux remarques :

  • Selon votre câblage et le type de relais, les GPIO.HIGH seront peut-être des LOW, à adapter.
  • On ne réouvre jamais le relais. Cela se fait tout seul, tard dans le processus de shutdown du Pi et cela a pour conséquence de l’éteindre immédiatement, donc autant ne pas le faire en avance.

Il reste à installer ce script en tant que service Systemd :

# cat /usr/lib/systemd /system/power-control.service
[Unit]
Description=Power control
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python /root/power-control.py

[Install]
WantedBy=multi-user.target

Et enfin, on l’active et on le démarre :

# systemctl enable power-control
# systemctl start power-control
# systemctl status power-control

Pour le reste de la configuration logicielle, c’est la même que dans ce premier article : Configuration de Runeaudio, un lecteur de musique réseau.

Quelques photos :

Devant
Derrière
Dedans

J’ai aussi fait une vidéo au montage hyper-propre sur le même sujet, que vous pourrez trouver sur Youtube :

DIY: Étagères/Présentoir à livres

dimanche, janvier 13th, 2019
Présentoir à livres
  • 5 planches d’aulne de 100x6cm, 18mm d’épaisseur
  • 10 planches d’aulne de 100x4cm, 18mm d’épaisseur
  • 15 vis de 70mmx5
  • 10 vis de 50mmx4
  • 10 chevilles de 6mm
  • 1 foret à bois de 4mm
  • 1 foret béton de 6mm
  • 2 serre-joints

J’avais pas fait de plans, donc voici une petite notice rapido :

Faire trois trous de 4 dans les planches de 6cm de large, à gauche, au milieu et à droite, à 9mm du bord bas de la planche.

Faire deux trous de 4 dans les planches de 6cm, à gauche et à droite, à 1.2cm du bord haut de la planche.

Faire trois trous dans le sens longitudinal des planches de 4cm : pour cela, aligner une planche de 4cm perpendiculairement à une planche de 6cm, serrer pour ne pas que ça bouge, réutiliser les trous précédemment faits pour percer la planche de 4cm. Répéter 5 fois, avec une planche de 6 et de 4 différentes à chaque fois.

Pour l’avant : placer une deuxième planche de 4cm perpendiculairement à la première (donc parallèle à la planche de 6cm, en face). Aligner les angles, serrer avec les serre joints, puis visser une vis de 70×5 dans chacun des trous.

Fixer au mur à la hauteur et l’écartement désiré. Je conseille de faire les repères d’un côté, placer les 5 chevilles, visser un côté de chaque étagère sans serrer, aligner horizontalement à l’aide du niveau à bulle, faire un repère pour l’autre trou à la mèche de 4, puis faire le trou définitif à la mèche à béton de 6. Et voilà !

DIY: Intégration esthétique d’un lecteur de musique réseau

samedi, décembre 15th, 2018

Après la configuration logicielle d’un lecteur de musique en réseau, basé sur un Raspberry Pi, il me restait à l’intégrer d’une manière esthétique à l’ampli auquel je comptais le brancher. J’ai eu la chance de tomber sur un vendeur eBay extrêmement sympathique, à qui j’ai demandé après avoir vu qu’il vendait un certain nombre d’amplis TA-88 et de tuners ST-88, s’il n’en avait pas un défectueux qu’il vendrait moins cher. Mon but était de récupérer le châssis pour y intégrer une touche de XXIè siècle. Pour mon plus grand plaisir, il m’a répondu « J’en ai un endommagé que je peux vous offrir – juste pour les frais de ports ». (C’est tellement enthousiasmant qu’il y aie des inconnus aussi gentils avec des inconnus dans le monde)

Je l’ai reçu hier. C’était un tuner, un ST-80, légèrement plus vieux mais au design identique. Le bouton du tuner tournait dans le vide, l’ampoule était grillée, et le bouton power cassé. Je l’ai ouvert, vidé de ses entrailles :

J’étais un peu déçu au début que le bouton power soit cassé, car c’était l’un des seuls éléments d’origine que je comptais utiliser. Par la suite, j’ai remarqué qu’il allait vouloir occuper le même espace physique que le câble HDMI de l’écran, et cela m’a rassénéré sur mon deuxième choix : utiliser l’un des trois autres boutons comme bouton power.

Les entrailles du tuner Sony ST-80
La façade avec les marques pour la découpe

Je me suis attelé à découper la façade suivant les pointillés. J’ai utilisé mon Dremel et de nombreux petits disques de découpe, qui sont très fragiles et s’usent vite quand ils n’éclatent pas avant. La largeur de l’affichage de l’écran, au millimètre, correspondait au diamètre de l’afficheur du tuner. Le plus difficile après la découpe a été de décoller proprement le reste de la plaque d’aluminium sans la tordre. J’ai ensuite enlevé le plastique restant de la partie haute de la façade.

Puis j’ai commencé à intégrer le Raspberry et son alimentation dans le châssis :

Le Raspberry à sa place

J’ai dû changer le support prévu : car autant le Raspberry lui même est compact, autant la taille comparativement gigantesque des prises USB empêchait d’installer la plaque initialement prévue. J’ai donc installé le Raspberry verticalement (le châssis est sur le dos dans la photo ci-dessus), et l’alimentation à plat au fond.

Le châssis avec toute l’électronique

J’ai aussi enlevé la prise double RCA que j’avais précédemment soudée, pour ré-utiliser celles présentes à l’arrière du tuner. 

Le châssis auquel il ne manque plus que l’écran

Installer l’écran a été à la fois plus simple et plus compliqué que j’imaginais. En effet, la carte électronique sur laquelle il repose est plus large que la surface d’affichage. Et elle est pile plus large que l’intérieur du châssis. J’ai dû couper deux des quatres plots permettant de le visser, et n’ai donc pas pu l’installer sur des supports latéraux comme prévu. Par contre, des encoches dans le châssis permettent de le placer exactement comme désiré, sans qu’il ne tombe. Quant à la plaque de façade, sur laquelle j’ai collé des baguettes de bois de renfort sur chacun des côtés, elle entre en forçant légèrement, et tient en place par friction.

Le résultat est plutôt à la hauteur de mes espérances :

(crédit musique : Synthetic Truth par digitalr3public)

Enfin, j’ai profité du fait que le bouton power utilisé est doté de plusieurs circuits pour appliquer cette méthode de gestion de l’alimentation, qui permet d’éteindre proprement le Pi via le bouton power: un système d’extinction propre pour Runeaudio.

DIY: Configuration de Runeaudio, un lecteur de musique réseau

samedi, décembre 8th, 2018

J’ai reçu à mon anniversaire une petite chaîne hifi pour le salon du haut/chambre d’amis, et j’ai voulu lui adjoindre un lecteur réseau pour pouvoir lire notre musique facilement, comme dans la salle de vie en bas.

En bas, j’avais eu la chance de tomber sur un Pioneer N-30 d’occasion, parce qu’à 500€ neuf, pas moyen que je l’achète autrement. Par contre pour haut ça n’a pas été possible car

  • y’en avait pas à un prix acceptable
  • ça aurait été moche comme tout avec ce petit set Sony TA-88/ST-88, non ?
Sony TA-88, ST-88 (et casque Pioneer SE-L40)

Je me suis donc décidé à en monter un moi-même. Pour faire un truc comme ça, la meilleure solution, c’est un Raspberry. Les Raspberry, c’est, en gros, un ordinateur de la taille d’une carte de crédit et de la puissance d’un ordinateur de 2010. Ça fonctionne sous Linux, il y a énormément de ressources sur Internet sur le sujet et, bien que je n’irai pas jusqu’à dire que tout le monde peut s’y mettre, c’est quand même une des portes d’entrées les plus larges pour commencer à adapter du logiciel à ses besoins. 

Les courses

J’ai donc fait une liste de courses (dans laquelle j’avais déjà quelques éléments qui traînaient, mais je mets tout pour celleux qui partent de zéro) :

Mise à jour : l’alimentation 12V n’était pas une bonne idée (plus de câble, l’écran reste alimenté après extinction du Raspberry, Mieux vaut utiliser une alim 5V 3A directement. 

L’installation

J’ai choisi de tester (puis j’ai adopté) Runeaudio, une distribution Linux Raspberry qui fait exactement ce que je cherche : lecture de fichiers audio à travers un partage réseau, et « récepteur » AirPlay et DLNA. 

J’ai téléchargé la version Runeaudio 0.5 beta 20180903, qui supporte le Pi 3B+. Attention, il y a plusieurs liens de téléchargements. Bien prendre la version pour le Pi 3B+, à savoir 20180903_runeaudio_rpib2.img.gz.

Ce fichier se dézippe, puis on l’écrit tel quel sur la carte microSD à l’aide d’un logiciel spécialisé (dd sous Linux). Raspberry fournit des documentations pour le faire à partir de Linux, Windows ou OS X. Ils le disent clairement mais ça ne fait pas de mal de le répéter : faites très attention au périphérique de destination, ou vous pourriez écraser le mauvais disque.

Il faut ensuite configurer deux choses : l’écran tactile, et le DAC. Pour le DAC, c’est très facile : il n’y a rien à faire.

Pour l’écran tactile, le manuel très fin qui vient avec nous indique de modifier et/ou ajouter quelques lignes au fichier /boot/config.txt, qui se trouve à la racine de la première partition de la carte SD (d’environ 100Mo) :

max_usb_current=1
hdmi_group=2
hdmi_mode=87
hdmi_drive=1
hdmi_cvt=1024 600 60 6 0 0 0

Attention, certaines de ces lignes sont déjà là et doivent être modifiées ou décommentées. Personnellement j’ai aussi ajouté :

display_rotate=3
lcd_rotate=3

Car je voulais mettre l’écran en mode paysage. Ces paramètres pivotent l’écran, mais pas la matrice tactile, pour laquelle il faut modifier le fichier /etc/X11/xinit/xinitrc, qui se trouve dans la deuxième partition de la carte SD (d’environ 4Go), pour y ajouter la ligne :

xinput --set-prop "WaveShare WS170120" "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1

Mise à jour: il n’est plus nécessaire de paramétrer la rotation de l’écran de manière statique. J’ai écrit raspi-rotate, un petit utilitaire pour lancer Xorg dans le sens qu’on veut facilement, et l’équipe Runeaudio l’a intégré (il suffit de passer en mode dev après installation). La rotation de l’écran peut maintenant se régler dans les paramètres Runeaudio.

Il reste à pré-configurer le Wifi, pour ne pas avoir à brancher de câble réseau. Cela se fait dans le fichier /etc/netctl/wlan0 (à créer, sans extension) :

Description='wlan0 connection'
Interface=wlan0
Connection=wireless
Security=wpa-configsection
IP=dhcp
WPAConfigSection=(
'ssid="
VOTRE_POINT_DACCES"'
'psk="
VOTRE_CLE_WPA"'
'key_mgmt=WPA-PSK'
'proto=WPA'
'group=TKIP'
'pairwise=TKIP'
'priority=3'
)

On peut maintenant assembler les différents éléments et démarrer le Pi !

Connexions et démarrage

La première étape sera de souder les broches du DAC, ainsi que ses prises RCA, et de souder le jack d’alimentation sur l’entrée du convertisseur 12-5V (ne pas confondre le plus et le moins surtout, utilisez un multimètre si nécessaire). J’ai utilisé des câbles pour pouvoir les faire sortir où je le voudrai sur le châssis.

Le jack d’alimentation
Les soudures du DAC

Ensuite, on branche le DAC sur le port d’extension du Raspberry.

Installation du DAC

On branche un câble USB – Micro USB du convertisseur vers l’entrée du Pi.

Le câble d’alimentation

On branche le côté data (fil épais) du doubleur de puissance USB sur un port du Pi, puis le côté « power only » sur une autre sortie du convertisseur (ceci est nécessaire car l’écran consomme plus que ne peut fournir le Pi sur un port USB).

Doubleur de puissance USB

On branche un câble USB – Micro USB du doubleur vers l’entrée USB de l’écran.

Le câble USB de l’écran

On branche le câble HDMI.

Le câble HDMI

On met la carte SD, et on branche l’alimentation. L’écran n’est pas utilisé par défaut sur Runeaudio; il faut donc, une fois le Pi démarré, se connecter par un navigateur à http://runeaudio.local/ (ou http://runeaudio.lan/ ou http://runeaudio/, cela dépend des box internet. Au pire, il faudra aller récupérer son IP sur la box, puis s’y connecter directement.

De là, on peut aller activer l’écran LCD par le Menu, puis Settings : Local browser :

Choix du local browser

On peut aussi en profiter pour activer le DAC (choisir HifiBerry DAC dans la liste dans Settings, puis redémarrer le Pi) :

Choix du module noyau hifiberry-dac

(Il faut aussi régler la sortie de MPD sur le DAC après redémarrage).

Et voilà, la partie informatique/logicielle est prête. Il reste à mettre tout cela dans une belle boîte, ce qui fera l’objet d’un deuxième article.

Ensuite, j’ai attendu patiemment l’arrivée d’un tuner identique et défecteux, et quand il est arrivé, j’ai installé le Raspberry dedans : Partie deux, intégration esthétique d’un lecteur de musique réseau.

Mise à jour : après fabrication d’un deuxième lecteur, j’ai repris et upgradé la partie alimentation afin de pouvoir éteindre proprement le lecteur via le bouton power. Partie trois, un système d’extinction propre pour RuneAudio.

DIY : Fabriquer un placard à épices

samedi, novembre 10th, 2018

Pour faire de la place dans notre placard de cuisine, on s’est dit que les épices seraient vraiment mieux ailleurs – on en a pas mal. Mais où ? On avait 9 centimètres de perdus entre le mur et le frigo, et on s’est dit qu’un genre de tiroir-placard coulissant ferait parfaitement bien le job. On a trouvé des pots de 6cm de diamètre, j’ai changé les proportions de l’étagère à vernis à ongles que j’avais fait pour Abi, et je me suis lancé dans le plan :

Les dimensions retenues sont 1 m de haut par 46.6 de large. Les étagères sont espacées de 14cm (12.2cm entre le haut d’une étagère et le bas de la suivante). Cela permet de mettre 49 pots de 6cm de diamètre, 7 par étage.

La liste des pièces.

Je n’ai pas pris de photo du montage, j’ai oublié. Il est assez simple : chaque planche d’aulne est vissée au fond – le plus difficile est de placer les étagères au bon endroit. Pour ma part je commence avec les montants verticaux, qui sont faciles à positionner ; puis avec chaque étagère, dont le bas est à 14cm du bas de la précédente. En faisant des pré-trous, puis en vissant d’un côté, puis de l’autre par en dessous, cela fonctionne bien. Pour la deuxième et l’avant-dernière, on visse avec une glissière.

Ensuite il reste à coller les rebords anti-chute, à l’étagère et sur les côtés. Puis vernir.

L’installation au mur nécessite d’être deux personnes, pour que l’une soutienne le placard pendant qu’une deuxième visse les glissières au mur.

Et voici le résultat :

news for few, stuff no-one cares about