Born to be wired
713586 visites
Uptime 47 days

Archive pour août 2008

 Et la lumière fut !

 5 août 2008  Bricolage, Projet Arcade  Aucun commentaire
MOC ensemble boitier

Réalisation d’un spot commandé par un détecteur de rythme

Après le tuto concernant le son, voici celui dédié à la lumière.

Partant de l’observation d’une borne Dance Dance Revolution, j’ai remarqué la présence de deux panneaux lumineux en façade qui s’illuminent de manière synchronisée avec la musique. C’est en général du plus bel effet. C’est pour cette raison que j’ai voulu en adapter le principe sur la mamecab.

Le concept est le suivant :
En termes de contraintes fonctionnelles, j’ai voulu que des panneaux lumineux s’éclairent quand le joueur est sur Stepmania ou quand la mamecab fait office de jukebox (Winamp). Mais j’ai également désiré qu’ils ne s’éclairent pas en mode arcade, pour ne pas gêner un joueur en plein combo dans Street Fighter II. Une activation conditionnelle donc, et si possible pas commandée manuellement pour ne pas ajouter un énième switch en façade, celle-ci est déjà bien assez trouée.
En termes de contraintes techniques, il faut que les lumières s’éclairent en rythme avec la musique bien sûr. Il faut aussi que l’éclairage soit assuré en basse tension (plusieurs diodes haute luminosité en façade) comme en haute tension (lampes 40W/60W colorées derrière le marquee). N’étant ni électronicien ni expert en traitement du signal, il fallait aussi une solution assez souple et dont la majeure partie pouvait être traitée informatiquement.

J’en suis donc arrivé à la conclusion que je devais réaliser le montage suivant, en 3 parties :

  • La partie logicielle analyse le son à la volée, détecte l’application lancée, détecte le rythme de la musique s’il y en a, et commande l’éclairage par le biais du port série.
  • La partie matérielle est composée du dispositif de commande, qui va décider ou non de faire passer le courant en haute comme en basse tension, en fonction de ce qui transite sur le port série.
  • L’autre moitié de la partie matérielle est l’éclairage lui-même, composé de lampes et de diodes.

Disclaimer :
Les conseils de cet article sont donnés SANS AUCUNE GARANTIE. Le montage électronique présenté comporte des éléments haute tension. Toutes les précautions d’usages doivent être prises avant manipulation.  Une exposition au courant électrique est susceptible de provoquer des conséquences pathologiques graves pouvant entrainer la mort.

Les joyeusetés étant dites, continuons. Nous allons commencer par la partie hardware, la partie software n’étant pas finalisée au moment de l’écriture de cet article.

Inutile de dire que l’on ne va pas brancher directement la sortie du port série sur le 220V. Il est nécessaire dans ce montage d’isoler proprement la partie commande de la partie puissance. La clé de ce concept réside dans l’utilisation du MOC3043, un pilote de triac avec couplage opto-électrique et isolation à hauteur de 7500V.

Un schéma valant mieux qu’un long discours, je ne m’attarderai pas sur les composants qui entourent le MOC3043, ils sont sensiblement les mêmes d’un site web à l’autre.

Schéma complet du montage, fait avec amour et patience

Un commentaire rapide pour ceux à qui ça ne parle pas du premier coup d’oeil :

  • En bas à gauche la connexion au port série, qui requiert l’activation de RTS pour commander la lumière.
  • En haut à gauche la partie basse tension, destinée à accueillir une ou plusieurs DEL. Cette partie du montage est commandée par un banal transistor.
  • A droite la partie haute tension, commandée par le MOC. On n’oublie pas de mettre un fusible et un switch approprié pour des raisons de sécurité.

On achète ensuite les composants à son magasin d’électronique préféré. La somme investie était de l’ordre de la quinzaine d’euros, le plus cher étant… le boitier en plastique (presque la moitié du prix).

Les composants nécessaires au montage

On s’active ensuite au fer à souder. On obtient un résultat très beau côté composants…

Résultat côté composants…

… et moins beau côté pistes. J’ai un peu merdé dans la zone basse tension, car j’ai voulu ajouter quelques résistances avec un jumper pour ne pas avoir à brancher autre chose que la charge. Ce n’est pas du plus bel effet, mais la partie haute tension est nickel, et c’est le principal.

Résultat côté pistes…

On glisse le tout dans le boitier. Ci dessous une photo avec tous les connecteurs annexes, avant de visser l’ensemble.

Positionnement dans le boitier

Impératif : avant de brancher le montage, on vérifie au testeur que toutes les liaisons sont correctes entre les pistes, et qu’il n’y a pas de contact entre les pistes qui ne doivent pas être connectées. Puis on fait un double-check. Puis on fait un triple-check. On ne rigole pas avec ça, c.f. disclaimer pour tous ceux qui n’ont pas compris.

Pour tester le fonctionnement de la partie haute tension sans la connecter au port série, on peut dans un premier temps envoyer la commande avec un petit montage sur pile. Pour la petite anecdote, je l’ai fait en prenant soin de m’équiper de bottes et de gants en caoutchouc. Oui, j’avais l’air con, mais je suis toujours en vie.

Si tout va bien jusque là, le plus dur est passé. On peut connecter le montage sur la sortie série du PC. J’ai effectué le test suivant avec la partie software partiellement finalisée (elle détecte les basses mais pas forcément le rythme) et avec la première lampe trouvée au garage. C’est un halogène, ce qui explique probablement l’extinction progressive sur la vidéo.

Résultat parfaitement conforme à mes attentes. Il ne reste plus qu’à améliorer le software.

La suite dès que possible !

 A minitel story…

 3 août 2008  Bricolage, Projet Serveur  1 commentaire »
Débuggage des niveaux de tension

Dans la vie, s’il y a parmi mes activités une petite lubie qui m’a toujours tenu à cœur, c’est bien celle de détourner un objet de la fonction première pour laquelle il a été conçu.

Aujourd’hui, l’exemple illustrant ce propos est le minitel.

La recette, la voici :

  • Prenez un minitel pas trop vieux, dégoté dans un grenier, sur eBay, ou dans le débarras d’une agence d’une entreprise de travail temporaire (merci Flo :) )
  • Prenez quelques composants électroniques, et soudez-les sur un minuscule circuit imprimé que vous logez à l’intérieur d’une prise série 9 broches, pour des raisons esthétiques.
  • Recompilez votre version de agetty et lancez-le en service sur le port série de votre serveur favori.
  • Connectez le tout ensemble, et voila… Vous obtenez une magnifique console d’administration pour ledit serveur à partir d’un minitel. Plus besoin d’écran et de clavier volumineux…

Rendons à César ce qui appartient à Jules, tout a été possible grâce au guide de Jean-Marc Lichtlé disponible ici : http://lea-linux.org/documentations/Pratique-minitel

D’abord, le montage. On a le choix entre deux types de montages. Le premier sera très rigoureux et utilisera un MAX232 spécialisé dans la conversion des signaux RS232 en série et inversement, niveaux de tensions compris. Ce montage est un poil plus cher et demande également d’alimenter le MAX232 en 5V, tension que ne délivre pas le port série.
La seconde solution est plus cavalière, car un tantinet irrespectueuse de la norme RS232, et de ce fait en théorie incompatible avec certains chipsets, mais a le mérite d’être plus légère et ne ne pas demander de source d’alimentation extérieure. C’est celle-ci que j’ai retenue après quelques tests. Je suis donc parti du schéma que l’on trouve ici : http://yip.free.fr/bidouilles/minitel/terminal.html

Je me suis permis de modifier un poil les valeurs des résistances pour correspondre au mieux à mes niveaux de tension. Je n’ai plus les valeurs en tête, mais les photos de cet article sont assez nettes pour que les intéressés puissent lire les valeurs eux-mêmes.


Disclaimer :
Je ne suis pas électronicien, je suis juste passionné par la bidouille.
Les conseils de cet article sont donnés SANS AUCUNE GARANTIE. Toute tentative de reproduction totale ou partielle de ce montage se fait à vos risques et périls.

J’ai donc commencé par tester le montage sur banc d’essai. Ce n’est pas sorcier, on n’a que 3 résistances et 2 transistors, mais autant commencer là, cela sera plus facile à déboguer. Voila ce que ça donne :

Les composants sont montés sur le banc d’essais

Ensuite, on se monte une petite plate-forme de tests avec un vieux PC sous Windows 2000 (l’envoi et réception se font grâce à l’Hyper Terminal), le minitel, et un oscilloscope si disponible, ça peut aider. A ce propos je remercie mon frère Kiwi pour m’avoir dégoté cet oscillo aussi vieux que fonctionnel et aussi fonctionnel que gratuit :)

La plate-forme de tests, ready for action…

C’est parti pour le débogage : on maintient une touche du minitel enfoncée (en l’occurrence le C sur la photo), et on observe que les niveaux de tensions sont cohérents à l’oscillo, en sortie du minitel comme en entrée du port série.

Vérification des tensions à l’oscillo

On prend une table ASCII et on vérifie, en faisant gaffe aux niveaux logiques qui sont « inversés » en RS232, ou autrement dit, un niveau logique actif est représenté physiquement par une tension négative.

Le montage est concluant, rien n’a cramé, on peut donc refaire le même test sur la plate-forme qui va accueillir le montage : ma chère Debian (avec Minicom pour le test).

Le même montage sur une Debian

Le même montage sur une Debian

Test de communication bidirectionnelle

Test de communication bidirectionnelle

Comme le montre la photo (floue), les deux appareils peuvent communiquer entre eux, le texte tapé sur le clavier de l’un apparaissant sur l’écran de l’autre.

Maintenant vient l’étape complexe du montage sur veroboard, avec la contrainte de caser tous les composants dans le capot de la prise Sub-D.

Pas évident, croyez-moi.

Parfait, ça rentre dans le capot, au millimètre près.

On remonte le tout proprement, et on teste… Miracle, tout fonctionne, la preuve en images.

It works !

Un listing des fichiers php du forum affichés sur le minitel.

Pour des raisons pratiques, on peut également recompiler sa propre version de agetty, car celui-ci s’adapte au codage du minitel uniquement une fois les premiers caractères envoyés par celui-ci (c’est à dire le login de l’utilisateur). L’invite de login envoyée au minitel est donc envoyée avec le codage par défaut, que ne comprends pas le minitel. Le patch suivant permet a agetty d’initialiser le dialogue avec un codage que le minitel comprend, et donc d’avoir une invite de login lisible à l’écran. Une fois compilé, j’ai simplement renommé l’exécutable agetty-minitel et installé celui-ci dans /sbin. Le code de agetty est disponible dans le package util-linux.

diff -rupN util-linux-2.12p.old/login-utils/agetty.c util-linux-2.12p.new/login-utils/agetty.c
--- util-linux-2.12p.old/login-utils/agetty.c   2013-06-09 11:01:34.974014067 +0200
+++ util-linux-2.12p.new/login-utils/agetty.c   2007-02-18 20:43:26.000000000 +0100
@@ -728,7 +728,11 @@ termio_init(tp, speed, op)
     (void) ioctl(0, TCFLSH, TCIOFLUSH);
 #endif

+#ifdef V23
+    tp->c_cflag = CS7 | PARENB | HUPCL | CREAD | speed;
+#else
     tp->c_cflag = CS8 | HUPCL | CREAD | speed;
+#endif
     if (op->flags & F_LOCAL) {
        tp->c_cflag |= CLOCAL;
     }

La prise en compte (ou pas) de ce mode de fonctionnement est conditionnée par l’option de compilation V23. Je l’ai donc ajoutée pour prise en compte à la compilation. Pour cela,  j’ai ajouté une option -DV23 à la variable CFLAGS dans le fichier MCONFIG.

diff -rupN util-linux-2.12p.old/MCONFIG util-linux-2.12p.new/MCONFIG
--- util-linux-2.12p.old/MCONFIG        2013-06-09 11:01:52.242168606 +0200
+++ util-linux-2.12p.new/MCONFIG        2007-02-18 20:52:41.000000000 +0100
@@ -234,6 +234,7 @@ CFLAGS := $(OPT) -I$(LIB) $(WARNFLAGS) \
                -DLOGDIR=\"$(LOG_DIR)\" \
                -DVARPATH=\"$(VAR_PATH)\" \
                -DLOCALEDIR=\"$(LOCALE_DIR)\" \
+               -DV23 \
                $(CFLAGS)

La ligne ajoutée dans /etc/inittab pour démarrer le service :

T0:23:respawn:/sbin/agetty-minitel -w minitel 4800 minitel1b-80

Dernière étape : on range le clavier et l’écran au placard. Les étapes de maintenance seront effectuées via SSH, et grâce au minitel en cas de coup dur (coupure réseau, problème matériel, etc). Un gain de place non négligeable en appartement.