まこと の ブログ - Mot-clé - VidéosMaKoTo no burogu — Journal de bord…2024-03-28T19:46:56+01:00MaKoTourn:md5:c74815e3268f2d506228368f0d9c6d01Dotclearpincab, le flipper numérique -1-urn:md5:282adc075ac93e33f1b9a0bec16e32292023-09-12T18:39:00+02:002023-09-12T18:39:00+02:00makoto doushiteArcadeBricolageDIYHackingModélisation3DVidéos<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/Addams.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.Addams_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a>
<em>Pincab</em>, se dit d'un Flipper virtuel électronique et numérique.<br /></p>
<blockquote><p>J'avais vu passer ce concept de machine il y a quelques temps déjà, sans vraiment y voir d'intérêt, mais sous l'impulsion d'une commande familiale, j'ai été amené à m'y intéresser de prés.<br />
En effet, je n'aurais qu'à m' « occuper de l'ordinateur, tsé là », et mon frère de gérer la menuiserie et la mécanique.<br />
Sauf qu'en vrai, on ne peut pas faire les choses à moitié, et pour comprendre, expérimenter, tester et valider les choses informatiques, il me fallait une plate-forme de test, un truc en carton que j'ai alors monté avec succès, et puis… Je me suis pris au jeu !<br />
J'ai dores et déjà livré et intégré la partie électro-informatique dans le pincab echelle 1:1 (écran de la table 42 pouces).<br />
Je vais donc dans cette série de billet détailler la construction au long court d'un mini-pincab (écran de la table 22 pouces), basé sur ma maquette de test, en bois plutôt qu'en carton !<br /></p></blockquote>
<p><br /></p>
<h3><ins>Introduction</ins> :<br /></h3>
<p>Pas la peine de trop s'éparpiller, le site <em><a href="https://montetoncab.fr/pincab-de-a-a-z-le-guide/">Monte ton cab</a></em> compile toutes les informations utile à cette entreprise. Cependant tout cela va très loin dans le détail, pour une approche la plus réalistique possible.<br />
Ici nous allons voir l'essentiel et simplifier assez les choses, tant au niveau matériel que logiciel, y compris niveau prix de reviens, en choisissant des alternatives aux produits « tout fait » disponible sur le marché du pincab, ainsi que de la récup (évidemment !)<br />
En effet, ils sont pléthoriques les sites qui proposent des pincab clefs en main, ou aux services de machine en kit, et les prix atteignent des folies… M'étonnant toujours que ce type de bizness puisse marcher, pour des produits non-authentiques qui plus est (dans le sens « pas un vrai flipper »), je me ravise en me disant que « y'en a qui peuvent payer », et que tout le monde n'est pas capable de construire de lui-même, même si on le guide… J'ai mis du temps à le comprendre, beaucoup… Faudra que j'écrive à ce sujet un jour…<br /></p>
<p>Nous étudierons donc, plus ou moins, dans le désordre :<br /></p>
<blockquote><p>- La configuration informatique matérielle.<br />
- Le logiciel de simulation de table de flipper.<br />
- Les fichiers qui constituent une table.<br />
- Le logiciel de sélection des tables (menu).<br />
- La matrice à Led (<em>DMD</em>).<br />
- Le contrôleur de jeu (les flips, les boutons).<br />
- Les plans <em>3D</em> et la menuiserie.<br /></p></blockquote>
<p><br /></p>
<h3><ins> La configuration informatique </ins> :<br /></h3>
<p><strong>Ordinateur :</strong><br />
Il existe plusieurs logiciels de simulation de table de flipper, qui pour le dire simplement, reproduisent les éléments constitutif des tables en imageries <em>3D</em> (attention, je n'ai pas dit <em>relief</em>… N'en déplaisent aux confus qui ont décidés de piquer le mot <em>3D</em> pour désigner le relief au cinéma), et comme tout logiciel gérant de la <em>3D</em> est plus ou moins gourmand en ressources matérielles, c'est ce qui va d'emblée déterminer nos choix.<br />
Ainsi avec un ordinateur de récupération présentant un processeur <em><strong>intel Core i3</strong></em> et sont <em>GPU</em> intégré <em><strong>HD <abbr></abbr>???</strong></em>, nous ne pourrons pas faire tourner les dernières versions de tables, censées être graphiquement les plus réalistes. (ça rame sévère !)<br />
Toutefois la génération précédente de logiciel est tout à fait apte à fonctionner de manière fluide sur ce type de matériel, ce sera très bien pour réemployer un vieil ordinateur… La planète, tout ça… (tu sais. Si tu sais pas, inscris-toi à une <em><a href="https://fresqueduclimat.org/">fresque du climat</a></em>, d'urgence !)<br /></p>
<p><strong>Écrans :</strong><br />
Côté écran, j'avais a disposition un vieil <strong>écran 15" au format 4/3</strong>, qui sera parfait pour être utilisé en tant que <em>backglass</em> (la vitre avec la déco et l'affichage des scores du flipper), car c'est bien ce ratio d'image qui se rapproche le plus des décorations de <em>backglass</em> des flippers véritables.<br />
Ceci permet de décider implicitement de la taille de l'écran de la table.<br />
En effet, l'image du <em>backglass</em> dépasse de part et d'autre d'une caisse de flipper, donc la hauteur de l'écran de table se doit d'être plus petite que la largeur de l'écran de <em>backglass</em>. Ainsi j'ai trouvé un <strong>écran 22" au format 16/9</strong> qui fera parfaitement l'affaire.<br />
Petit point technique, là ou l'écran 4/3 sera présenté de manière classique face à soit, la technologie de la dalle <em>LCD</em> importe peu. Par contre pour la table, qui sera posée à l'horizontale et utilisée à la verticale, la technologie <em>LCD</em> de type <em>IPS</em>, doit permettre une restitution parfaite de l'image sous cet angle inhabituel.<br /><br /></p>
<h3><ins>La maquette</ins> :<br /></h3>
<p>Quand j'en ai eu marre de bricoler sur l'ordi en me tordant le cou, j'ai fini par bilouiller une structure en carton.<br /></p>
<ul>
<li>Après avoir disposé les écrans sur une planche et des cales, j'ai découpé les formes voulues dans du carton d'emballage (oui bah faut pas tous les jeter tavu c'est bien utile !), que j'ai assemblé pour en doubler l'épaisseur et abouter les morceaux qui étaient trop petits avec de la colle blanche vinylique (tsé, la colle à bois quoi).<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230408_164633.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230408_164633_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230408_164643.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230408_164643_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Ça donne ça, et c'est pas mal pour se rendre compte puis tester le logiciel dans les meilleures conditions.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230408_183530.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230408_183530_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230408_192415.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230408_192415_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Une petite vidéo :</li>
</ul>
<center> <head>
<style type="text/css">
.rotated {
transform: rotate(90deg);
margin: 50px 25px;
}
</style> </head> <body>
<div class="rotated"><iframe title="Démo maquette pincab" width="900" height="506" src="https://peertube.makotoworkshop.org/videos/embed/c8602dec-35e6-48fa-9557-f682122b611e?warningTitle=0" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups"></iframe></div>
</body> </center>
<p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <h3><ins>Le contrôleur de jeu</ins> :<br /></h3>
<p>Pour piloter le jeu avec des boutons empruntés au stock de mes bornes, j'ai opté pour « hack » de clavier.<br /></p>
<ul>
<li>Après avoir récupéré la plaquette et le cordon <em>USB</em> d'un clavier de récupération, il a fallu en cartographier la matrice et souder une nappe de fils pour permettre le raccordement aux boutons…</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230612_212611.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230612_212611_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230614_213548.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230614_213548_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230614_213513.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230614_213513_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173624.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173624_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Par la suite j'ai ajouté quelques boutons dont nous verrons l'usage plus tard, ainsi que des trous de ventilation pour tenir compte de la chauffe de l'écran et de l'ordi.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173741.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173741_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173701.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173701_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173531.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173531_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173522.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173522_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173550.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173550_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/20230722_173611.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.20230722_173611_t.jpg" alt="" /></a><br /><br /></p>
<h3><ins>Les plans <em>3D</em></ins> :<br /></h3>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/09.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.09_s.png" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Je projette de construire un boîtier qui soit escamotable, comme c'est le cas d'un véritable flipper, pour rabattre la partie du <em>backglass</em> sur la table. Mais aussi qu'on puisse accrocher au mur et replier. Au choix…<br /><br /></li>
</ul>
<p>J'en suis à la quatrième itération, dans l'étude de la conception des formes possibles avec ces contraintes. Je pense faire des plans <em>2D</em> vectoriel aussi afin de pouvoir commander un kit de pièces découpées au laser.<br />
Je stagne un peu, mais ça se précise…<br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/05.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.05_s.png" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/08.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/pincab/.08_s.png" alt="" /></a><br />
<br /></p>
<h3>À suivre…</h3>http://burogu.makotoworkshop.org/index.php?post/2023/09/05/pincab1#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/742IR « Light » Gun avec Arduino (version aboutie) -3-urn:md5:a9c3cab3d7c961767330423c7ca1ba8b2023-03-11T17:35:00+01:002023-03-11T17:37:45+01:00makoto doushiteArcadeDIYHackingJeux videoManette-Joypad-JoystickRétrogamingVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2023/03/02/irgun_arduino2">Suite et fin de l'épisode précédent</a> :<br /></p>
<ul>
<li>Une petite galerie pour commencer, avec un flingue refermé et opérationnel :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06195.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06195_m.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06196.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06196_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06197.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06197_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06191.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06191_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06199.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06199_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06193.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06193_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06194.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06194_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06198.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06198_m.jpg" alt="" /></a><br /><br /></p>
<h3>La barre infrarouge :<br /></h3>
<p>Ou plutôt cette fois-ci, les barres !<br /></p>
<ul>
<li>L'occasion de rappeler que ce ne sont pas deux mais bien de quatre sources de lumière infrarouge dont le système a besoin pour se repérer dans l'espace.<br /></li>
</ul>
<blockquote><p>On peut bien entendu utiliser deux <em>Wii Sensors Bar</em> officielles, ou non.<br />
Ou bien partir sur quelque chose d'un peu plus « sur mesure ».<br />
Et devinez-quoi…<br />
Wé on fait ça !<br /></p></blockquote>
<ul>
<li>On utilise 3 leds <em>IR</em> à souder en série avec une résistance de 10Ω afin de former une des quatre source <em>IR</em> suffisamment puissante :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06223.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06223_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06226.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06226_s.jpg" alt="" /></a></p>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/leds.png"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.leds_s.png" alt="" style="float:left; margin: 0 1em 1em 0;" /></a><br />
On obtient ce circuit en calculant à l'aide de <a href="http://www.hebeiltd.com.cn/calculator/v5/led.php">cet outil en ligne</a>, ou <a href="https://ledcalculator.net/">cet autre</a> pour les caractéristiques de ces leds qui sont : 1,35V @100mA.<br />
J'ai décidé d'alimenter le circuit avec 5V, ici provenant d'un convertisseur <em>DC/DC</em> depuis le 12V, vu qu'une alimentation est prévue pour les solénoïdes des pistolets, autant en profiter.<br />
Mais on pourrait très bien utiliser l<em>'USB</em> d'un ordinateur vu que ce montage ne consomme que 400 mA.<br /></p>
<ul>
<li>La barre est réalisé dans une lamelle de carte plastique de 2 mm d'épais, percé de trous de Ø 5 mm pour accueillir les leds. Ensuite les fils sont soigneusement collés sur la lamelle :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06232.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06232_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06235.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06235_s.jpg" alt="" /></a><br /></p> <ul>
<li>Une surépaisseur de plastique est collé sur tout le pourtour, là où c'est possible, afin de constituer une sorte de boîtier pour y dissimuler les fils. C'est cette surépaisseur qui servira de surface de contact avec l'écran de jeu.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06239.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06239_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06240.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06240_s.jpg" alt="" /></a><br /></p>
<ul>
<li>On peut alors les coller au plus prés de l'image, ce qui permet d'optimiser la captation de la lumière <em>IR</em> émise par les leds pour la caméra <em>IR</em> du pistolet, et donc de permettre potentiellement de gagner quelques centimètre de distance de recul (plus prés !)<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06242.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06242_m.jpg" alt="" /></a><br />
Une petite peinture noire et ce sera parfait !<br /></p>
<ul>
<li>Ces barres sont quand même bien plus élégantes et pratiques que les barres du commerce ou mon précédent bricolage, non ?</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06243.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06243_t.jpg" alt="" /></a><br /><br /></p>
<h3>Programmation :<br /></h3>
<ul>
<li>Trop long pour être intégré à cette page, vous trouverez le code à charger dans l<em>'Arduino Pro Micro</em> sur mon <em><a href="https://github.com/makotoworkshop/IRGun_Arduino/releases/tag/v2.3">Github</a></em>, en annexe à ce billet de blog. <sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2023/03/04/irgun_arduino3#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup><br /><br /></li>
</ul>
<h3>Le câblage 12V :<br /></h3>
<ul>
<li>Voici le câblage réalisé en parallèle pour distribuer le 12V depuis une alim de 5 Ampères, ce qui est surdimensionné pour le coup.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06245.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06245_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06249.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06249_s.jpg" alt="" /></a><br />
Je peux alors alimenter les Leds <em>IR</em> et les solénoïdes des deux pistolets avec cette seule alimentation.<br /></p>
<ul>
<li>J'utilise le convertisseur <em>DC/DC</em> 12V -> 5V que voici, plutôt qu'une prise <em>USB</em> :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06247.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06247_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06248.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06248_s.jpg" alt="" /></a><br /><br /></p>
<h3>Démonstration :<br /></h3>
<ul>
<li>Une petite vidéo :</li>
</ul>
<iframe title="IRGun demo" src="https://peertube.makotoworkshop.org/videos/embed/5668e104-d70f-4a8f-a2b3-c1feee563b47?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<p>À propos de la « calibration », qu'est-ce à dire ?<br /></p>
<blockquote><p>La calibration sert avant toute chose à positionner dans l'espace la course de la visée réticulaire du pistolet. Elle est donc à effectuer une fois pour toute, lorsqu'on aura fixé les barres de Leds <em>IR</em> sur le haut et le bas de l'écran.<br />
Ainsi, si on devait être amené à déplacer les Leds <em>IR</em>, il alors faudrait refaire la calibration des pistolets pour adapter les références de la caméra <em>IR</em> à cette nouvelle position.<br /></p></blockquote>
<p><br /></p>
<h3>Conclusion :<br /></h3>
<ul>
<li>Je suis enfin satisfait du logiciel, merci encore a <em><a href="https://github.com/samuelballantyne/IR-Light-Gun">Samuel Ballantyne</a></em> pour son <em>Samco_2.0_4IR_32u4_BETA</em>, une excellente base de départ pour les modifications que j'ai apporté qui m'auront demandé mine de rien beaucoup de travail.<br /></li>
</ul>
<p>Mais ça valait le coup d'obtenir un produit fonctionnel et tout à fait fiable, pouvant s'adapter à de nombreuses situations de jeux/réglages d'émulateurs.<br />
Concernant le jouet en lui-même, j'ai apprécié le fait de pouvoir détourner ses fonctions d'origines pour en faire quelque chose de nouveaux !<br /></p>
<ul>
<li>On hérite cependant de quelques défauts, comme la course de la gâchette qui est ridiculement courte et qui mériterait une modification mécanique, afin d'améliorer l'immersion.<br /></li>
</ul>
<p>La prise en main est bonne, mais pour des sessions de jeux un peu longue, on notera que la poignée n'est pas très ergonomique, et mériterait un ajout en impression3D pour plus de confort au niveau de la paume de main.<br />
Et enfin niveau design, j'ai conclu que l'arme avait été dessinée par un gaucher…<br />
En effet, si vous observez la galerie de photos en début de post, vous remarquerez que toutes les vis de fixation de la coque sont orientées côté gauche de l'arme, ainsi que le capot du compartiment à piles, ce qui est esthétiquement disgracieux si l'on est droitier·ère, car on a tous ces éléments sous les yeux. Fin heureux le gaucher·ère !<br />
Sans compter que le bouton <em>Start</em> se retrouve à droite de l'arme, contrairement au pistolet <em>Guncon Playstation</em> de <em>Namco</em> par exemple.<br />
Bref, on va bien s'amuser <img src="http://burogu.makotoworkshop.org/index.php?pf=smile.svg" alt=":)" class="smiley" /></p>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2023/03/04/irgun_arduino3#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] Ci-dessous</p></div>
http://burogu.makotoworkshop.org/index.php?post/2023/03/04/irgun_arduino3#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/739IR « Light » Gun avec Arduino (version aboutie) -2-urn:md5:413626c46813e5016e2287e3dea2b2482023-03-04T20:04:00+01:002023-03-12T11:24:28+01:00makoto doushiteArcadeDIYHackingJeux videoManette-Joypad-JoystickRétrogamingVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2023/01/31/irgun_arduino">Suite de la réalisation en cours</a> :<br />
Nous nous étions donc laissés sur l'ouverture du boîtier du jouet laissant apparaître tous les composants le constituant.<br /></p>
<h3><ins>Démontage</ins> :<br /></h3>
<ul>
<li>J'ai procédé au démontage complet dont voici tous les composants électroniques et mécaniques :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06132.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06132_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06116.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06116_s.jpg" alt="" /></a><br />
- Côté mécanique, on se débarrasse des éléments constituant la lentille, et on conserve tout le reste montré sur la photo.<br />
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06117.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06117_t.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a>
- Concernant l'électronique, la led IR, le haut-parleur et les connecteurs du compartiment à piles seront retirés, le reste réutilisés.<br /><br /></p>
<ul>
<li>Au dos de la carte, il y a le bouton poussoir « Start ».<br /><br /></li>
</ul>
<h3><ins>Préparation des modules électro-mécaniques</ins> :<br /></h3>
<p><strong>Module solénoïde :</strong></p>
<ul>
<li>Conformément au schéma électronique, j'ai procédé au câblage sur une plaquette à trous afin que l'ensemble tienne le moins de place possible.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06125.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06125_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06127.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06127_s.jpg" alt="" /></a><br />
Une petite vidéo !<br /></p>
<iframe title="IRGun solenoide test" src="https://peertube.makotoworkshop.org/videos/embed/f7be9ce4-cb13-4e4a-8cc1-9d9712d108b9?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<p><br /><br /></p>
<p><strong>Module Caméra IR :</strong></p>
<ul>
<li>Démontage d'une <em>Wiimote</em> afin d'en récupérer la caméra Infra-Rouge :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06053.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06053_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06055.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06055_s.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>La caméra est soudée sur une nappe au bout de laquelle est sertie un connecteur <em>HE10</em>. Qu'on ira donc raccorder à la petite plaquette à trous qui contient les composants alliés à la caméra.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06165.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06165_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06128.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06128_s.jpg" alt="" /></a><br /><br /></p> <p><strong>Partie <em>Arduino</em> :</strong></p>
<ul>
<li>De la plaquette d'origine, j'ai coupé tous les câbles inutiles et récupéré l’interrupteur <em>On/Off</em> du jouet destiné à devenir <em>SW5A</em> (<em>Reload Auto On/Off</em>). Tandis qu'en lieu et place du <em>On/Off</em> d'origine sera utilisé un switch à 4 broches acheté (<em>SWA6</em>: sélection mode Souris/Joystick/les deux), que j'ai dû découper un peu pour que le bouton puisse rentrer dessus. (comparatif avant/après sur le cliché) :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06118.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06118_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06160.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06160_s.jpg" alt="" /></a><br /></p>
<ul>
<li>J'ai préparé une plaque à trous qui viendra recevoir tous les câbles du circuit, avec des connecteurs ♀ pour y insérer l<em>'arduino</em> et des <em>pins-header</em> ♂ pour y raccorder les interrupteurs <em>SW4A</em> (c'est celui en noir, acheté) et <em>SW5A</em> (l'argenté de récup', si t'as suivi l'affaire donc).<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06122.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06122_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06121.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06121_s.jpg" alt="" /></a><br /><br /></p>
<h3><ins>Modification mécanique</ins> :<br /></h3>
<p>Il va falloir trouver une place pour placer le solénoïde et le seul endroit que j'ai trouvé qui ferait l'affaire est donc à la place qu'occupait le haut-parleur.<br /></p>
<ul>
<li>Tracé grossier de l'emplacement de la découpe sur les deux parties de la coque :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06135.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06135_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06136.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06136_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06137.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06137_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06138.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06138_t.jpg" alt="" /></a><br /></p>
<ul>
<li>Une fois la place dégagée,</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06144.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06144_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06145.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06145_s.jpg" alt="" /></a><br /></p>
<ul>
<li>viens le moment délicat de repérer l'emplacement des trous afin de fixer le solénoïde en place. Pour ce faire j'ai utilisé des morceaux de vis taillés en pointe (dans un mandrin de perceuse, on tourne le corps de la vis sur une lime…) pour marquer le plastique le plus précisément possible :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06139.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06139_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06140.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06140_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Voilà une fois percé et vissé en place avec du <em>M4</em>. Sur la seconde photo, c'est le support de l'interrupteur (d'origine <em>On/Off</em>) qui a été élargi pour accueillir le switch à 4 broches <em>SWA6</em> qui est trop large sinon pour y loger :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06142.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06142_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06143.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06143_s.jpg" alt="" /></a><br />
Une petite vidéo…<br /></p>
<iframe title="IRGun solenoide second test" src="https://peertube.makotoworkshop.org/videos/embed/04c91da9-1ef7-4419-b117-760e59cab5bc?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<p><br /></p>
<ul>
<li>Et enfin on se débarrasse du compartiment à pile, qui va nous gêner pour la suite…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06146.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06146_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06147.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06147_s.jpg" alt="" /></a><br /><br /></p>
<h3><ins>Peinture spécifique</ins> :<br /></h3>
<p>On va devoir peindre… L'intérieur !<br />
Hum, alors pourquoi faire ça ne se verra pas !?<br />
Bah si, ça se verra…</p>
<ul>
<li>Vise un peu les photos du jouet en fonctionnement, première photo au repos, et seconde, lors d'un tir</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06104.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06104_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06105.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06105_s.jpg" alt="" /></a><br />
La lumière passe à travers la coque ! Du coup c'est n'importe-quoi… Quand je disais que c'était une arnaque ce jouet…<br /></p>
<ul>
<li>Viens alors la longue et ingrate tâche qui consiste à masquer les zones qui ne doivent pas recevoir de peinture, à l'aide de bande de masquage et de « <em>Maskol</em> », un produit de maquettiste (en vert, on l'étale au pinceau, ça durcit. On le retire en le frottant, ça bouloche…)<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06150.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06150_m.jpg" alt="" /></a><br /></p>
<ul>
<li>Ensuite j'ai pulvérisé une sous-couche de peinture grise « <em>Mr Surfacer 1200</em> » à l'aérographe, puis une couche de noir en bombe <em>Montana</em> noir mate.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06151.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06151_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06152.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06152_s.jpg" alt="" /></a><br /></p>
<ul>
<li>C'est beaucoup mieux n'est-ce pas ?</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06188.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06188_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06190.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06190_s.jpg" alt="" /></a><br /><br /></p>
<h3><ins>Intégrations des modules</ins> :<br /></h3>
<p>Une fois le masquage retiré et les rebords nettoyés on va pouvoir procéder à l'assemblage et au câblage des modules.<br /></p>
<blockquote><p>Note pour plus tard : le <em>maskol</em> ça va vite à mettre, mais c'est long à enlever, la bande masque, c'est long à mettre, mais c'est rapide à enlever. Usage à combiner donc de manière intelligente…<br /></p></blockquote>
<ul>
<li>On commence par percer les trous pour les interrupteurs <em>SW4A</em> et <em>SW5A</em> que j'avais oublié de faire… Bon au moins avec la peinture noire on voit mieux le tracé à suivre pour la découpe et le perçage :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06155.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06155_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06156.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06156_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Ils sont ensuite vissés avec des vis <em>M2</em> à tête fraisées :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06157.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06157_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06159.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06159_s.jpg" alt="" /></a><br />
À propos des vis, j'ai d'ailleurs dû leurs mettre du vernis de blocage car la percussion du solénoïde à tendance à force à les dé-serrer.<br /><br /></p>
<p><strong>Lestage :</strong></p>
<ul>
<li>Pour plus de réalisme j'ai voulu ajouter du poids au pistolet, en découpant des morceaux dans une barre d'acier carré de 10 mm. Les 3 petits sont destinés à se loger dans la crosse :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06134.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06134_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06213.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06213_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Le long morceau va aller dans le canon, car il s'y loge parfaitement, moyennant le limage de deux angles pour s'adapter aux reliefs. J'ai ensuite percé et taraudé la barre pour la maintenir vissée à travers le plastique en profitant d'un élément de design extérieur de la coque :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06173.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06173_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06172.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06172_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06170.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06170_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06171.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06171_t.jpg" alt="" /></a><br />
Avec tout ça on obtient un total de 700 grammes.<br /><br /></p>
<p><strong>Support caméra :</strong></p>
<ul>
<li>On va préparer maintenant un support mécanique pour la caméra dans de la carte plastique de 2 mm d'épais.</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06162.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06162_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06163.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06163_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06164.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06164_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06166.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06166_t.jpg" alt="" /></a><br /></p>
<ul>
<li>Une fois la caméra dans son logement, le filtre <em>UV</em> de la <em>Wiimote</em> est collé par dessus, ce qui tiens la caméra en place. Suffit alors de visser ce montage sur la pièce orange qui constitue le bout du canon :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06167.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06167_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06168.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06168_s.jpg" alt="" /></a><br /><br /></p>
<p><strong>Câblage :</strong></p>
<ul>
<li>Un premier cliché montre le câblage en cours et le second une fois achevé :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06161.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06161_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06175.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06175_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Passons en revue quelques détails, ici gros plans sur l<em>'arduino</em> et sur la plaquette bidouillée sur laquelle sont raccordés un certains nombre de câbles en provenance de l<em>'arduino</em> :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06200.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06200_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06201.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06201_s.jpg" alt="" /></a><br /></p>
<ul>
<li>L'occasion aussi de préciser que pour se raccorder, par exemple sur la résistance d'une led, il aura fallu couper la piste pour isoler la résistance et la led du reste du circuit d'origine. Ici étant donné que mon circuit utilise les 3 leds avec la cathode en commun, j'ai dessoudé/ressoudé les trois leds pour les changer de sens, le fil rouge devenant donc la masse (c'était donc d'origine à anode commune). J'ai donc soigneusement coupé la piste correspondant au fil rouge…</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06215.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06215_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06206.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06206_s.jpg" alt="" /></a><br /></p>
<ul>
<li>On aperçoit aussi le module caméra IR calé sous la plaquette. Sur l'autre photo on peut voir que j'ai pris soin d'isoler la barre de lest en acier avec du carton et du ruban polyimide car une fois la coque refermée elle sera potentiellement en pression avec le module <em>arduino</em> :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06204.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06204_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06205.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06205_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Les boutons poussoirs réintégrés avec du fil plus solide et le switch de sélection <em>SWA6</em> :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06202.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06202_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06203.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06203_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Le « socket » de l<em>'arduino</em> avec tous les câbles qui partent un peu partout dans le flingue. Le module solénoïde emmailloté dans du ruban polyimide pour l'isoler un peu, qui se glisse par chance pile dans l'espace sous l<em>'arduino</em> :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06207.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06207_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06208.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06208_s.jpg" alt="" /></a><br /></p>
<ul>
<li>La prise <em>USB</em> soudée sur un câble fait maison, constitué comme ceci :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06209.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06209_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06210.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06210_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06211.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06211_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/IRGun/dsc06212.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/IRGun/.dsc06212_t.jpg" alt="" /></a><br /></p>
<blockquote><p>- Une prise <em>microUSB</em> à souder,<br />
- Une prise classique récupérée en emmaillotée de ruban vert pour l'isoler,<br />
- Et un câble type « liaison série » entre les deux.<br />
- Du fil multi-brin (jaune et noir) qui court tout le long du câble série afin de transporter le 12V nécessaire au module solénoïde via un connecteur <em>Power Jack</em> femelle.<br /></p></blockquote>
<p>Le tout est fourré dans une gaine tressée par soucis de propreté.<br /></p>
<ul>
<li>C'en est terminé, la prochaine fois nous verrons ce qu'il en est des leds infra-rouge à disposer autour de l'écran, ainsi qu'une vidéo descriptive de l'appareil.<br /></li>
<li>Ha oui oups j'allais oublier ! Et le code à uploader dans l<em>'arduino</em> bien sûr, le temps que je le mette au propre…<br /><br /></li>
</ul>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2023/03/04/irgun_arduino3">À suivre…</a></h3>http://burogu.makotoworkshop.org/index.php?post/2023/03/02/irgun_arduino2#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/738TempéroClockurn:md5:95123e94e1eb3982e644fa92556ef40a2022-07-30T17:32:00+02:002022-07-30T16:45:29+02:00makoto doushiteArduinoDIYVidéosÉlectronique <p><a href="http://burogu.makotoworkshop.org/public/electronique/horloge/dsc03666.jpg" title="dsc03666.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/horloge/.dsc03666_s.jpg" alt="dsc03666.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<blockquote><p>Étant donné que je m'amuse bien avec les capteurs de températures/humidités en ce moment, j'ai eu envie d'en ajouter un dans le salon/salle à manger/atelier/salle de jeu/dortoire à ratoux/chambre d'amis/biliothéque…<br /></p></blockquote>
<ul>
<li>Et plutôt que d'entreprendre un nouvel afficheur, j'ai préféré utiliser celui que j'avais déjà, l'<a href="http://burogu.makotoworkshop.org/index.php?post/2018/03/04/horloge">horloge de salon</a>, elle même dérivée de l'horloge du <a href="http://burogu.makotoworkshop.org/index.php?post/2018/11/01/wrrw8">WebRadioRéveilWifi</a>, donc de conserver la même carte électronique, et simplement la modifier pour ajouter un capteur <em>DHT11</em>.<br /></li>
</ul>
<ul>
<li>J'ai donc édité le schéma (projet kicad en annexe<sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2022/07/30/horloge2#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup>) afin de documenter les modifications faites à la volée (comprendre charcutage de pistes au cutter, soudage de composants à la sauvage).<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/horloge/HorlogeBleue_Tempero_Structurel.png"><img src="http://burogu.makotoworkshop.org/public/electronique/horloge/.HorlogeBleue_Tempero_Structurel_m.png" alt="" /></a><br />
Ont donc été supprimé les leds alarmes et le buzzer, car finalement ça ne m'est pas utile, afin de disposer d'une sortie <em>PWM</em> de l<em>'Arduino</em> pour séparer la commande des deux leds constituant le « deux points » scindant heure et minutes.<br />
Je n'ai pas de photos à montrer, j'ai refermé l'appareil là… flemme.<br /><br /></p>
<h3><ins>Le programme</ins> :<br /></h3>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/horloge/dsc06037.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/horloge/.dsc06037_t.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li><a href="https://github.com/makotoworkshop/HorlogeBleue_Tempero/blob/main/HorlogeBleue_Tempero.ino">Le code est ici</a> ou en annexe du billet<sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2022/07/30/horloge2#wiki-footnote-2" id="rev-wiki-footnote-2">2</a>]</sup>, corrigé de quelques erreurs de jeunesse, mais je n'ai pas pris le temps de nettoyer le code et de commenter correctement, désolé…<br /><br /></li>
<li>Les boutons Alarmes ont donc été remplacées par :<br /></li>
</ul>
<p>- Un bouton « Temp/Humido » permettant de choisir d'afficher en permanence la température ou bien l'humidité (mise à jours toutes les 2 secondes).<br />
- Un bouton « Caroussel » permettant d'afficher l'heure durant 8 secondes, puis de basculer 2 secondes sur la température, puis 2 secondes sur l'humidité.<br />
- Le bouton « Horloge » permet comme auparavant de mettre à l'heure l'horloge en le combinant aux boutons « heures » ou « minutes », mais aussi de demander d'afficher uniquement l'heure.<br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/horloge/dsc06034.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/horloge/.dsc06034_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/horloge/dsc06035.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/horloge/.dsc06035_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/electronique/horloge/dsc06036.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/horloge/.dsc06036_s.jpg" alt="" style="float:left; margin: 0 1em 1em 0;" /></a><br />
- Pour le reste, les leds de l'horloge s'allument lorsque le capteur <em>PIR</em> détecte un mouvement, et ceci pour 3 heures durant, avant de s'éteindre.<br />
- Pendant ce temps la photorésistance se charge d'ajuster l'intensité lumineuse des leds, plus forte s'il capte beaucoup de lumière et moins forte dans le cas contraire.<br />
<br /><br /><br /></p>
<ul>
<li>Une petite vidéo :</li>
</ul>
<iframe title="TempéroClock démo" src="https://peertube.makotoworkshop.org/videos/embed/c554198b-e4fd-4411-b681-6d2195e67e5e?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2022/07/30/horloge2#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] À voir ci-dessous… Attention, je n'ai pas mis à jour le PCB, il n'y a que le structurel qui contient les modifications</p>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2022/07/30/horloge2#rev-wiki-footnote-2" id="wiki-footnote-2">2</a>] ci-dessous</p></div>
http://burogu.makotoworkshop.org/index.php?post/2022/07/30/horloge2#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/729Un haut-parleur en bois…urn:md5:c111840509a9a7a41d99e5fa8a00af332022-05-27T14:33:00+02:002022-05-27T14:33:00+02:00makoto doushiteBidouillesBricolageDIYLowTechVidéos <blockquote><p>L'hiver dernier je découvrais le concept du haut-parleur passif, via une vidéo d'<a href="https://www.youtube.com/watch?v=NuYM6yOed5M">Olivier Verdier</a>, et celui-ci d'annoncer sa participation à la <em>Maker Faire</em> de <em>Paris</em> les 27 et 28 novembre 2021, avec l'intention de fabriquer un modèle plus petit.<br />
Confinement/couvre-feu machin oblige, l'édition de cette année était « numérique », c'est à dire en ligne, aussi j'ai pu assister à sa démonstration, <a href="https://www.youtube.com/watch?v=vy_PGT2au6A">désormais disponible en replay</a>.<br /></p></blockquote>
<p>J'ai trouvé l'objet suffisamment plaisant pour avoir l'envie de le réaliser, histoire aussi d'utiliser les quelques chutes de bois qu'il me reste toujours, et que je ne jette jamais. Faut jamais jeter les chutes d'ailleurs hein, la preuve !<br /><br /></p>
<blockquote><p>Pas de plans ni de mesures très précises cette fois, on se lance directement en fonction des morceaux qu'on trouve.<br /></p></blockquote>
<ul>
<li>On a donc en présence les pièces découpées dans du pin/sapin, chute donc de la borne <em><a href="http://burogu.makotoworkshop.org/index.php?post/2012/01/14/borne-arcade-12">AstroCity-like</a></em> et d'étagères que je n'ai jamais documentées ici.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/20220430_194837.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.20220430_194837_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/20220430_195418.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.20220430_195418_s.jpg" alt="" /></a><br />
J'ai trouvé ces triangles et une barre qu'il a simplement fallu ajuster, pour aller avec une planchette coupée en deux.<br /></p>
<ul>
<li>Reste à faire le trou pour y placer l'ordi-phone cible.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/20220430_200024.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.20220430_200024_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/20220430_200052.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.20220430_200052_s.jpg" alt="" /></a><br />
Il est assez grossier car le haut-parleur n'est pas destiné à cet ordi-phone là, je serais amené à redécouper cette ouverture plus tard.<br /></p>
<blockquote><p>Oublié de faire plus de photos, mais c'est suffisamment simple à comprendre donc on s'en passera…<br /></p></blockquote>
<ul>
<li>Une fois les pièces du bas collées, et celle du dessus tenue en place avec des goujons, j'ai sorti la ponceuse à bande pour égaliser tous les bords, et arrondir les arrêtes.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/dsc05744.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.dsc05744_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/dsc05745.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.dsc05745_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Ensuite j'ai appliqué un vernis acrylique incolore en deux couches (avec égrainage léger entre), et collé des pieds en caoutchouc de récupération.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/dsc05743.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.dsc05743_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/dsc05746.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.dsc05746_s.jpg" alt="" /></a><br />
Grâce aux système à goujon, il est possible d'ôter le dessus, et à loisir de modifier l'ouverture pour l'adapter à l'épaisseur de l'ordi-phone cible.<br /></p>
<ul>
<li>Et… Bah c'est terminé.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/dsc05741.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.dsc05741_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/dsc05742.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/haut-parleur/.dsc05742_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Une petite vidéo :<br /></li>
</ul>
<iframe title="haut-parleur_lowtech_23" src="https://peertube.makotoworkshop.org/videos/embed/6ae9e773-e36e-42e6-a820-d207794ba7f7?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<p>Ça amplifie… Un peu quoi, faut évidemment pas s'attendre à une folie, ni à ce que cela améliore la qualité du son. C'est le même son pourri qui sort de l'ordi-phone, en un peu plus fort.<br /><br />
<ins>Crédit musique</ins> : <em>Necronomidol</em>, pour l<em>'<a href="https://www.twitch.tv/videos/1052545465">IdolCon 2021</a></em></p>http://burogu.makotoworkshop.org/index.php?post/2022/05/26/haut-parleur#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/721Sound Voltex -6-urn:md5:ed164d532e01d7202d5819ba00ab3dc72022-05-22T10:56:00+02:002022-05-28T10:28:25+02:00makoto doushiteArcadeBricolageDIYJeux videoManette-Joypad-JoystickVidéos<p><a href="http://burogu.makotoworkshop.org/index.php?post/2022/05/18/sdvx5">Suite de la bidouille précédente</a> :<br /></p>
<blockquote><p>C'est presque terminé !<br />
Tout est en place et utilisable, mais on va voir comment améliorer encore l'aspect et la jouabilité.<br /></p></blockquote>
<p><br /></p>
<h3><ins>Changement des Leds</ins> :</h3>
<p>Les boutons viennent par défaut avec des Leds blanches, et c'est un peu tristoune.<br />
Pour s'approcher du schéma de couleur du jeu d'arcade, je me suis procuré des lots de leds afin de faire quelque essais.<br /></p>
<blockquote><p>- Quelques leds 5 mm « super bright » de différentes couleurs : <a href="https://fr.aliexpress.com/item/4000896062123.html?spm=a2g0s.9042311.0.0.b41e6c37x2fZK7">moins de 2€ le lot de 50</a></p></blockquote>
<ul>
<li>Grâce au feuillet de caractéristiques fournies par le vendeur, j'ai pu calculer la valeur des résistances au plus juste, et câbler les couleurs sur une plaquette labo :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/leds5mm.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.leds5mm_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_210927.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_210927_s.jpg" alt="" /></a><br />
110Ω pour les leds en 2.2V et 160Ω pour les 3,2V.<br /></p>
<ul>
<li>Les boutons disposent d'un bloc enfichable constitué du microswitch et du support de led. Il est alors vraiment facile d'y remplacer la led, en ayant pris soins souder la résistance, puis d'entortiller ses pattes sur le support avant de l'insérer en place.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211218_003308.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211218_003308_m.jpg" alt="" /></a><br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_230346.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_230346_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Ensuite place aux essais, qui ont consistés à disposer des jeux de couleurs côte à côte pour déterminer lesquelles allaient le mieux ensemble…<br /><br /></li>
</ul>
<p>Selon mon bon goût, bien évidemment.<br /><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_230418.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_230418_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_230437.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_230437_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_231024.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_231024_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_231045.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_231045_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_230542.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_230542_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_230625.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_230625_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_230734.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_230734_t.jpg" alt="" /></a><br /></p> <ul>
<li>J'ai donc opté pour ces couleurs là !</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211217_222541.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211217_222541_m.jpg" alt="" /></a><br /><br /></p>
<h3><ins>Remplacement des microswitchs</ins> :</h3>
<ul>
<li>Les microswitchs d'origines sont très dur à actionner, et sont en plus assez bruyant. Je les ai donc remplacé par les célèbres <em>Omron D2MV-01-1C3</em> :</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20220223_184738.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20220223_184738_m.jpg" alt="" /></a>
On peut s'en procurer chez les fournisseurs d'<a href="https://www.mouser.fr/ProductDetail/Omron-Electronics/D2MV-01-1C3?qs=HDDQUw%2F3Phqm1Y5wA%2Fdz9w%3D%3D">électronique industrielle</a>, mais aussi de fournitures d'arcade comme <em><a href="https://akishop.jp/products/microswitch-d2mv-01-1c3">Akishop</a></em>. Il n'y a d'ailleur que chez ces derniers qu'on peut trouver des ressorts de remplacement normé type : <em><a href="https://akishop.jp/products/pushbutton-spring-sanwa-obsa-sp">Sanwa OBSA-SP</a></em> que j'ai choisis en 100g (à défaut de 60g dispos).<br />
Il y a d'ailleurs tout un délire autour des marques, modèles, grammage de boutons, on peut en voir un aperçu sur <a href="https://gamo2.com/en/product/faucetwo/">la page du <em>faucetwo</em></a> et dans ses <em><a href="https://gamo2.com/en/product/faucetwo/specs.html">Specs</a></em>.<br /></p>
<ul>
<li>Une petite vidéo :<br /></li>
</ul>
<iframe title="SDVX_boutons_23" src="https://peertube.makotoworkshop.org/videos/embed/7fa15984-0522-4939-94ca-fd1a44c6fe18?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<p><br /><br /></p>
<h3><ins>Mise en <em>borne</em></ins> :</h3>
<ul>
<li><em>TV Game, contrôleur de jeu, bartop</em> ? On ne sait plus trop…<br /></li>
</ul>
<p>Cependant, pour un confort de jeu hybride, s'approchant un petit peu de la borne, j'ai réfléchis à un emplacement et à la manière d'intégrer l'objet à mon salon déjà bien remplis…<br />
En deux temps, trouver un assez grand écran sur <em>leboncoin</em>, et bricoler un meuble existant.<br /></p>
<blockquote><p>Je n'ai pas de photos de la fabrication de la chose, aussi nous allons simplement nous rendre au salon dans l'intention de jouer…<br /></p></blockquote>
<ul>
<li>Dirigeons nous vers le meuble qui soutient la <em>jubeat</em>, et ouvrons la porte :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05829.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05829_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05826.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05826_s.jpg" alt="" /></a><br />
Ho, des barres en bois cheloues…<br /></p>
<ul>
<li>Et sous la drap blanc, notre machin <em>Sound Voltex</em> :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05827.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05827_m.jpg" alt="" /></a></p>
<ul>
<li>Ensuite volte face, à côté de la <em>candy</em>, il y a ces vieilles <em>étagères confos</em> avec un bras qui soutiens l'écran 27'' trouvé pour 70€.</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05824.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05824_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05823.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05823_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05825.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05825_t.jpg" alt="" /></a><br /></p>
<ul>
<li>Avec une modif cependant, y'a une tablette escamotable, bricolée avec une chute d'agglo un peu moisie (la cave…) d'un ancien « meuble », et des coulisses de serveur bien mastoc, découpées à dimensions, sinon bien trop profondes.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05822.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05822_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05819.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05819_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05818.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05818_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05817.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05817_t.jpg" alt="" /></a><br /></p>
<ul>
<li>Tirons la tablette, et ho bah quelle coïncidence, les barres en bois trouvent leurs places ici :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05816.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05816_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05814.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05814_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Et donc les gros trous là c'est pour ?? Ha oui, les pieds du machin ! Allons-y alors on pose… Ce qui laisse la place aux haut-parleurs de s'exprimer, malin !<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05815.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05815_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05799.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05799_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05800.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05800_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05798.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05798_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Voilà ! Face profil, tout ça…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05801.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05801_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05807.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05807_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05794.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05794_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05795.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05795_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05796.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05796_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05797.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05797_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05802.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05802_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05803.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05803_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Et pour le branchement, les câbles sont disponibles sur l'étagère, si on remonte dans les photos, on les y aperçoit.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05805.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05805_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05812.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05812_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05809.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05809_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05810.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05810_s.jpg" alt="" /></a><br />
Le vidéo <em>Display Port</em> (via un adaptateur <em>DVI</em>), l'alim <em>IEC C13</em> et l<em>'USB</em> connecté sur l'ordi interne, mode <em>TV Game</em>.<br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05790.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05790_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<blockquote><p>Vous aurez remarqué que la fiche d'alim disponible était branché sur une fiche <em>C14</em> en guise de bouchon, qu'il m'a suffit de retirer avant de brancher le <em>TV Game</em>.<br />
En effet, ce câble laissé branché sur la prise murale et donc laissé en l'air le reste du temps deviendrait alors une source de danger d'électrocution sans ce bouchon de fortune que j'ai pris l'initiative d'utiliser.<br /></p></blockquote>
<ul>
<li>Voilà donc tout ça pour avoir le panel à une hauteur de 93 cm censé correspondre à la borne d'arcade et jouer debout dans les meilleurs conditions… Aller, on s'en fait une !<br /></li>
</ul>
<iframe title="SDVX_demo01_23" src="https://peertube.makotoworkshop.org/videos/embed/554fdc50-f786-4a4c-aa03-f3b426298f9a?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<p>Déso pour la prise de son, au micro de caméra c'est jamais très bien…<br />
Le logiciel utilisé est donc <a href="https://github.com/Drewol/unnamed-sdvx-clone">Unamed SDVX Clone</a>, avec la skin <a href="https://github.com/Hoshikara/LucidWave"><em>LucidWave</em></a>.<br /></p>
<ul>
<li>À ce stade on peut être tenté, à juste titre de se demander comment le meuble peut tenir en équilibre, ainsi chargé et déséquilibré par ce porte-à-faux, sans compter qu'on tape dessus !<br /></li>
</ul>
<blockquote><p>C'est très simple. L'écran est lourd (8kg) !<br />
Rétroéclairage tube déjà, donc 2kg de plus qu'un modèle plus moderne. Ensuite en bas du meuble, il y a des casiers dans lesquels il y a des vieux disques dur pour rajouter du poids à l'ensemble.<br />
Donc à moins de s'appuyer volontairement et fortement sur le contrôleur de jeu, ça soutient très bien son poids.<br /></p></blockquote>
<p><br /></p>
<h3><ins>Galerie</ins> :</h3>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05849.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05849_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05835.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05835_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05846.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05846_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05847.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05847_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05834.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05834_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05848.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05848_t.jpg" alt="" /></a><br /></p>
<ul>
<li>Et pour le mode <em>contrôleur de jeu</em> alors ? Bah tu débranches l<em>'USB</em> là, tires un peu le câble, pi voilà !<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05833.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05833_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05845.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05845_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Gros plans…</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05843.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05843_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05840.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05840_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05838.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05838_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05841.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05841_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05842.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05842_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05839.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05839_t.jpg" alt="" /></a><br /><br /></p>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2022/05/26/sdvx7">À suivre…</a></h3>http://burogu.makotoworkshop.org/index.php?post/2022/05/21/sdvx6#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/719Sound Voltex -2-urn:md5:d925905ccb6f5748fc58cea2c8052c982022-01-09T19:10:00+01:002022-05-14T13:12:50+02:00makoto doushiteArcadeArduinoBricolageDIYJeux videoManette-Joypad-JoystickVidéos<p><a href="http://burogu.makotoworkshop.org/index.php?post/2021/11/06/sdvx1">Suite de la bidouille précédente</a> :<br /></p>
<blockquote><p>Je disais donc, « construire quelques chose de plus sérieux », mais qui reste peu encombrant, à l'image du stick arcade qu'on peut sortir du placard pour « se faire un p'ti street ».<br />
Et c'est sur cette même idée que je vais procéder. En effet la technique de fabrication sera quasi identique à celle de mon <a href="http://burogu.makotoworkshop.org/index.php?post/2011/03/20/joystick-arcade-usb-1-">joystick</a>, « celui-là même par quoi tout à commencé », réalisé il y a maintenant 10 ans. (Merde ! Déjà… Comme on dit…)<br />
Je ne vais rien inventer, pas mal d'amateurs·ices ont déjà bricolés ce genre de choses, et on trouve quelques tutos bien fichu sur le net.<br />
Comme celui-ci <a href="https://sdvx-diy.github.io/">https://sdvx-diy.github.io/</a>, dont je vais utiliser le firmware électronique un poil modifié pour mon usage (le soft à coller dans l<em>'Arduino</em>), ou celui-là <a href="https://consandstuff.github.io/rhythmcons/sound-voltex/sdvx-normal/">https://consandstuff.github.io/rhythmcons/sound-voltex/sdvx-normal/</a>, qui s'attarde à détailler sa manière de faire.<br />
J'ambitionne juste de faire plus élégant, sachant bien entendu que chacun ses goûts, y'a pas trop à discuter, tout ça quoi…<br /></p></blockquote>
<p><br /></p>
<h3><ins>Fournitures</ins> :<br /></h3>
<p>Désolé, je n'ai pas pas pensé prendre de photos avec tous le matos arcade réunis, et j'ai la flemme de tout démonter pour le faire, donc vous découvrirez ça en allant.<br /></p>
<ul>
<li>Les prix sont frais de port et <em>TVA</em> comprise :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211103_185841.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211103_185841_t.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<blockquote><p>- 25 Cosses à sertir 6.3 mm : <a href="https://fr.aliexpress.com/item/32786820964.html">3€71</a><br />
- 50 Cosses à sertir 4.8 mm : <a href="https://fr.aliexpress.com/item/32755341225.html">4€15</a><br />
- 1 Bouton carré de 33 mm : <a href="https://fr.aliexpress.com/item/32804514696.html">3€</a><br />
- 4 Boutons carrés de 60 mm : <a href="https://fr.aliexpress.com/item/4001356296596.html">18€62</a><br />
- 5 Boutons rectangulaires de 50x30 mm : <a href="https://fr.aliexpress.com/item/32765559236.html">11€15</a><br />
- 2 Encodeur 600 P / R 5V-24V, axe 6 mm : <a href="https://fr.aliexpress.com/item/32669741048.html">24€30</a><br />
- 2 Bouton en aluminium (Diamètre 30 mm, hauteur 25 mm, trou 6 mm) : <a href="https://fr.aliexpress.com/item/32912485815.html">7€70</a><br /></p></blockquote>
<p>Total = 72€63<br /><br /></p>
<h3><ins>Découpe du panel</ins> :<br /></h3>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dj-dao.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dj-dao_t.jpg" alt="" style="float:left; margin: 0 1em 1em 0;" /></a>
La première question que je me suis posé, outre le fait de commander des fournitures arcade adéquates, est de savoir à quelles dimensions découper le boîtier du contrôleur, que les gens réalisent souvent assez gros, à l'image du <a href="https://www.gamo2.com/jp/products/detail.php?product_id=65">contrôleur officiel</a> qui reprend le design biseauté de la borne d'arcade (quelques photos sur le <a href="https://blog.flipflop-jp.com/archives/3020/post-3020/">blog.flipflop-jp</a>).<br /><br /></p>
<ul>
<li>Mais c'est en voyant les <a href="https://gamo2.com/en/product/faucetwo/specs.html">dimensions très réduites du modèle faucetwo</a> dessiné par <a href="https://www.youtube.com/watch?v=ZGUSWQXGf6Y">Tokaku</a> que j'ai décidé de m'en rapprocher.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/SDVX_measures_Makoto.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.SDVX_measures_Makoto_m.png" alt="" /></a><br /></p> <p>Ce qui donc a permis de résoudre la première étape : Choisir le panneau de bois dans lequel découper le panel.<br /></p>
<blockquote><p>J'avais depuis 20 ans en stock du contre-plaqué de récupération de 6 mm d'épaisseur pas mal rigide, et justement un morceau d'à peu prés la bonne dimension.<br /></p></blockquote>
<ul>
<li>J'ai donc reporté le patron<sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2022/01/08/sdvx2#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup> de l'emplacement des boutons, avec une technique un peu particulière.<br /></li>
</ul>
<blockquote><p>En 10 ans, j'ai eu le temps de mater quelques vidéos de menuisier sur <em>tutube</em> et d'emprunter leur manière de tracer, non pas avec un crayon, mais avec une lame de cutter.<br />
Non seulement c'est plus précis, l'épaisseur du trait ne laissant plus aucun doute sur le fait de couper dessus, à droite ou à gauche de celui-ci, ça ne s'estompe pas à force de manipulations, et fraise sur le gâteau, j'ai constaté que si l'on a pris soin d'enfoncer la lame jusqu'à la première couche de bois, les éclats de bois produit par la scie sauteuse sont instantanément neutralisés à cette frontière, laissant une arrête bien nette !<br />
Voilà donc pour le « level up » par rapport au panel de mon joystick tout éclaté à l'époque…<br /></p></blockquote>
<ul>
<li>Du coup, cliquez bien sur les vignettes pour voir ce tracé en grand :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05507.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05507_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05508.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05508_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Pour la découpe des emplacements des boutons, ça se passe simplement en perçant deux trous et en y insérant la lame de scie sauteuse, avant de terminer à la lime.</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211109_153220.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211109_153220_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211109_162659.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211109_162659_s.jpg" alt="" /></a><br /></p>
<ul>
<li>La tige des encodeurs étant très courte, j'ai décidé d'utiliser la défonceuse afin de gagner 3 mm de profondeur en y logeant le corps des encodeurs.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211115_123356.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211115_123356_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211109_153232.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211109_153232_s.jpg" alt="" /></a><br />
Première fois pour moi avec cet outil utilisé à main levée, c'est vraiment intéressant ce qu'on peut faire avec…<br /></p>
<ul>
<li>Voici l'ouvrage terminé et les fournitures en place, fixées dans leurs emplacements.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211111_172328.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211111_172328_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211111_172659.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211111_172659_s.jpg" alt="" /></a><br />
Comme vous le voyez, le bloc micro-switch qui comporte la led s'insère et se verrouille dans le bouton.<br /><br /></p>
<h3><ins>Le câblage</ins> :<br /></h3>
<p>On va pouvoir procéder tranquillement au câblage, directement sur site, ainsi les câbles seront optimisés en longueur.<br /></p>
<ul>
<li>On commence par le chemin de masse, puis le raccordement de chaque boutons et leds à l<em>'Arduino Pro Micro</em> :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211111_200841.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211111_200841_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211111_214401.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211111_214401_s.jpg" alt="" /></a><br />
Le fil souple multi-brun de récupération que j'utilise étant relativement fin, et ne disposant pas de pince à sertir adéquate, je me suis contenté de souder chaque fil sur les cosses, puis de rabattre les ergots. Le petit capuchon de silicone est vraiment pratique et sera très utile pour isoler les contacts et éviter tout accident de court-circuit qui pourrait survenir à la manipulation.<br /></p>
<ul>
<li>Une petite vidéo, désolé pour le cadrage tremblant :<br /></li>
</ul>
<iframe title="panelSDVX_test" src="https://peertube.makotoworkshop.org/videos/embed/6a12ea98-d076-4c48-858f-c9463d6c8918?warningTitle=0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="640" height="360" frameborder="0"></iframe>
<ul>
<li>Voilà une fois le chemin de câble attaché :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211120_210402.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211120_210402_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211120_210323.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211120_210323_s.jpg" alt="" /></a><br />
Après avoir testé le panel, j'ai eu la mauvaise surprise de voir la prise <em>microUSB</em> de l<em>'arduino</em> s'arracher de la plaquette, alors que je branchai simplement le câble <em>USB</em> dessus. J'ai bien entendu ressoudé ça en place, et ceci m'a fait prendre conscience au passage qu'il vaudrait mieux permettre le remplacement de l<em>'arduino</em> facile.<br />
J'ai donc dé-soudé tous les fils et utilisé une plaquette à trous avec ce qu'il faut pour insérer l<em>'arduino</em> dessus. Par la même occasion, ça permet de fixer tout ça avec une vis au panel.<br /></p>
<ul>
<li>Et aussi d'en profiter pour raccourcir les câbles des encodeurs et vu qu'ils ne disposent pas de système de cosses, leur confectionner des connecteurs sur mesure à raccorder sur la plaquette à trous.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211120_212259.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211120_212259_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211120_212747.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211120_212747_s.jpg" alt="" /></a><br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211120_212934.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211120_212934_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Contrairement à mon joystick, le panel sera maintenu en place avec des aimants, c'est pour ça que j'ai fixé sur les rebords, des plaquettes en métal d'aimants à placard, avec de la colle <em>araldite</em>.<br /></li>
</ul>
<p>On s'arrête ici pour le moment.<br />
Nous avons donc un panel fonctionnel, câblé proprement qu'il suffira de coller dans un boîtier.<br />
Enfin ça, c'est ce que pensais, puis j'ai changé mes plans…<br />
Affaire à suivre <img src="http://burogu.makotoworkshop.org/index.php?pf=smile.svg" alt=":)" class="smiley" /><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05605.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05605_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05608.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05608_s.jpg" alt="" /></a><br /><br /></p>
<h3><ins>Programmation</ins> :<br /></h3>
<p>Avant de téléverser <a href="https://github.com/Reyn-Mukai/SDVX-DIY/tree/Standard">le firmware</a> dans l<em>'Arduino</em>, j'ai dû modifier le sketch <em>SDVX-SIY.ino</em> afin de réorganiser l'assignation des pins en fonction de ce que j'ai câblé.<br />
Là vous me diriez à juste titre que j'aurais dû regarder le code et câbler en fonction, sauf qu'à priori le code est prévu pour un <em>Arduino Leonardo</em>, et donc une assignation différente.<br />
Par chance l<em>'Arduino Pro Micro</em> dispose de « pile-poil » le nombre de pins nécessaires aux boutons et aux leds… ouf !<br /></p>
<pre class="brush: cpp">/* Button Input Pins */
#define BTA_PIN A2
#define BTB_PIN A3
#define BTC_PIN A0
#define BTD_PIN A1
#define FxL_PIN 4
#define FxR_PIN 5
#define START_PIN 8
/* LED Output Pins */
#define BTA_LED 9
#define BTB_LED 10
#define BTC_LED 14
#define BTD_LED 15
#define FxL_LED 6
#define FxR_LED 7
#define START_LED 16
/* Software Debounce Interval */
#define DEBOUNCE 10
/* Encoder */
#define ENC_1_PIN_A 0
#define ENC_1_PIN_B 1
#define ENC_2_PIN_A 2
#define ENC_2_PIN_B 3</pre>
<p><br /></p>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2022/01/11/sdvx3">À suivre…</a></h3>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2022/01/08/sdvx2#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] Fichier pour GIMP en annexe ci-dessous</p></div>
http://burogu.makotoworkshop.org/index.php?post/2022/01/08/sdvx2#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/713Sound Voltex -1-urn:md5:4a97fe1743a5e247de483a7491a2acaf2022-01-08T15:02:00+01:002022-01-09T19:18:09+01:00makoto doushiteArcadeArduinoBricolageDIYImpression3DJeux videoManette-Joypad-JoystickVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/SDVX_EXCEEDGEAR.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/SDVX_EXCEEDGEAR.png" alt="" style="float:left; margin: 0 1em 1em 0;" /></a><br />
<em>Sound Voltex</em>… Qu'est-ce que c'est encore ça donc ?<br />
Ben un autre jeu de rythme de <em>Konami</em>, que vous pourrez découvrir plus en détail sur le site <a href="https://bemani.fr/game/sdvx/">https://bemani.fr/game/sdvx/</a>.<br />
Mais surtout une énorme borne d'Arcade, comme on peut l'admirer ci-contre… (non, calme-toi, je vais pas la fabriquer…)<br /><br /></p>
<p>Il semble en effet que je fasse partie des ces personnes qui aime ce type de jeu, et jusqu'ici je ne m'en étais pas vraiment rendu compte…<br />
Je pensais jouer à « un peu tout », mais en fait le temps passant, certains genres ressortent bien plus maintenant qu'auparavant.<br />
Et si je regarde ce que j'ai tâté pour 5 minutes, ou des centaines d'heures, nous avons tout de même <em>DDR, Guitar Heroe, Oendan, Taiko no Tatsujin, jubeat, Beat Mania, Technika2</em>, et <em>Pop'n music</em>.<br /></p>
<p>Ainsi je suis un joueur de <em>Shmup</em> et chose pas si rare pour cette catégorie, aussi de jeux de rythmes. Il y a un lien entre ces deux genres, et celleux qui ont déjà entendu parler du concept de « zone » ou de « flow » comprendront je pense ce qu'il peut bien y avoir en commun entre un <em>Shmup</em> et un <em> rhythm game</em>.<br /><br /><br /><br /></p>
<ul>
<li>Bref, séduit par l'originalité du contrôleur du jeu, j'ai voulu m'y essayer, en commençant doucement par quelque chose d'accessible pour moi, « sans dépenser un rond » ni traverser la moitié du pays pour trouver une borne jouable.<br /><br /></li>
</ul>
<h3><ins>Un contrôleur fait maison</ins> :<br /></h3>
<p>J'ai donc repéré l’existence d'un mini-contrôleur, alias le « Pocket-SDVX », partagé sur le <em><a href="https://github.com/speedypotato/Pocket-SDVX">github de speedypotato</a></em>.<br />
Ni une ni deux, j'ai fouillé mes tiroirs à la recherche des composants nécessaires, et oui, j'avais souvenir de tout avoir sous la main, on va pouvoir le construire tout de suite !<br /></p>
<ul>
<li><em>Arduino Pro Micro</em>, encodeurs, touches de clavier mécanique de récup, restait à imprimer les pièces de plastiques :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20210928_190233.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20210928_190233_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05480.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05480_s.jpg" alt="" /></a><br /></p> <ul>
<li>Cependant, si tout est prévu pour s’en-clipser, il restait un soucis avec ces encodeurs au corps dépourvu de filetage et j'ai donc improvisé en le passant dans une filière <em>M8</em>, pour un résultat satisfaisant :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05481.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05481_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05482.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05482_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Les pièces en présences…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05485.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05485_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05487.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05487_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Le câblage n'a rien de compliqué, et le système de passage du câble micro-usb plutôt bien pensé :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05492.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05492_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05493.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05493_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Le <em>knob</em><sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2021/11/06/sdvx1#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup> viens se ficher sur la tige de l'encodeur… Et voilà !<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211001_200839.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211001_200839_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/20211001_200817.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.20211001_200817_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Dessous j'ai collé des pieds de caoutchouc de récup, et j'ai fini par imprimer la déco sur un film plastique autocolant :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05495.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05495_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/dsc05503.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/sdvx/.dsc05503_s.jpg" alt="" /></a><br /></p>
<p>Le choix par défaut du jaune c'est ainsi révélé pas si mal <img src="http://burogu.makotoworkshop.org/index.php?pf=smile.svg" alt=":)" class="smiley" /><br />
Bon ensuite faut programmer l<em>'Arduino</em>, rien de compliqué si vous êtes familier avec ça, tout est indiqué par <em><a href="https://www.youtube.com/watch?v=lBxHQ7Z72sY&list=PLSlCMOwxujV7-DYrM4eC2Sb4_rMR5udEE">speedypotato</a></em>, y compris pour la partie câblage.<br /><br /></p>
<h3><ins>Et le jeu alors ?</ins> :<br /></h3>
<blockquote><p>Vous serez heureus·e·s d'apprendre qu'il existe un clone du jeu d<em>'Arcade</em> qui ne porte pas son nom, <em><a href="https://github.com/Drewol/unnamed-sdvx-clone">unnamed-sdvx-clone</a></em>.<br /></p></blockquote>
<p>Via le <em>github</em> on va donc pourvoir se l'installer via quelques commandes :<br /></p>
<ul>
<li>Clonage du projet en local puis récupération des dépendances grâce à <em>submodule recursive</em> :<br /></li>
</ul>
<pre class="brush: bash">git clone https://github.com/Drewol/unnamed-sdvx-clone.git
cd unnamed-sdvx-clone/
git submodule update --init --recursive</pre>
<ul>
<li>Installation du compilateur <em>CMake</em> et les librairies requises :<br /></li>
</ul>
<pre class="brush: bash">sudo apt install cmake libfreetype-dev libogg-dev libvorbis-dev libsdl2-dev zlib1g-dev libpng-dev libjpeg-dev libarchive-dev libgl1-mesa-dev openssl libssl-dev libiconv-hook-dev</pre>
<ul>
<li>Configuration du logiciel :<br /></li>
</ul>
<pre class="brush: bash">cmake -DCMAKE_BUILD_TYPE=Release .</pre>
<p>Si des erreurs sont indiquées, il faut les corriger avant de passer à l'étape suivante !<br /></p>
<p>Et enfin, compilation du logiciel :<br /></p>
<pre class="brush: bash">make</pre>
<ul>
<li>Avant de pouvoir jouer, il faut créer le dossier suivant :</li>
</ul>
<pre class="brush: bash">mkdir bin/songs</pre>
<p>Et déposer les chansons dedans (accepte les arborescences en sous-dossier).<br />
Pour dégotter les chansons, ces mots clefs seront utiles : <em>ksh songs sdvx</em><br />
Il est également possible de télécharger des titres directement depuis le jeu, via le menu « Get Songs » sur la page d'accueil :)<br /></p>
<ul>
<li>L'exécutable se trouve dans le dossier <em>bin</em> :</li>
</ul>
<pre class="brush: bash">unnamed-sdvx-clone/bin/usc-game</pre>
<p>Ça fonctionne parfaitement sur mon Ubuntu 20.04LTS !
<br /><br /></p>
<h3><ins>Maintenant on joue !</ins> :<br /></h3>
<p>Le jeu a le gros avantage de changer d'aspect selon que l'écran est disposé horizontalement ou verticalement, et c'est cette dernière disposition qui sera bien sûr la plus adaptée, faisant apparaître le poste de pilotage du véhicule qui parcoure les « rails ».<br /></p>
<ul>
<li>Une petite vidéo :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" title="miniSDVX_demo" src="https://peertube.makotoworkshop.org/videos/embed/0b641c43-d394-42f8-b87a-43402b31a06d?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p>Oui, alors on dirait qu'on est en train de taper au clavier du coup :P<br /></p>
<ul>
<li>Un petit contrôleur de voyage bien sympatosh, le jeu est plaisant… hum, je pense qu'on va construire quelque chose de plus sérieux. (Non pas la borne j'ai dis !!)<br /><br /></li>
</ul>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2022/01/08/sdvx2">À suivre…</a></h3>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2021/11/06/sdvx1#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] En annexe vous trouverez le fichier 3D pour le <em>knob</em> que j'ai dû dessiner moi-même.</p></div>
http://burogu.makotoworkshop.org/index.php?post/2021/11/06/sdvx1#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/712Un Clavier Orthogonal pour le 21ième siècle -2-urn:md5:f3ef28da422d776a915a2dc31bd970cb2021-06-17T21:41:00+02:002022-07-24T09:50:19+02:00makoto doushitebépoBépoDIYHackingImpression3DModélisation3DRécupVidéosVrai clavier ergonomique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2016/10/18/clavierorthomembrane01">Suite de l'étude précédente</a> :<br /></p>
<blockquote><p>Je reviens, enfin, sur mon idée de clavier <em>DIY</em>, et plus de 4 ans plus tard et quelques expérimentations infructueuses, j'ai décidé de laisser en pertes irrécupérables le temps passé sur la version du clavier à membrane.<br />
Pas aussi simple qu'il me paraissait, embourbé dans mes pensées, j'ai fini par me résoudre au fait que si tant de gens fabriquaient leurs claviers à partir de touches mécaniques, ça n'était sans doute pas pour rien…<br />
Et puis j'ai découvert les claviers « splittés » via <em><a href="https://www.thingiverse.com/search?q=split+keyboard&type=things&sort=relevant">thingiverse</a></em>, notamment le fameux <em><a href="https://www.thingiverse.com/thing:1702966">Dactyl Keyboard</a></em>, avant de me plonger dans la page « <a href="https://github.com/pvinis/awesome-split-keyboards">Awesome Split Keyboards</a> » !<br />
Devant tant de diversité, que choisir…?<br />
J'ai laissé courir, occupé ailleurs, jusqu'à ce qu'un jour <a href="https://www.youtube.com/watch?v=WmjB4KrfuN0">cette vidéo</a> arrive jusqu’à moi.<br />
Séduit par la simplicité et le concept, évident pour moi maintenant, de recollage possible du clavier en un morceau, alors que les autres design ne m'y avait pas fait penser.<br />
Ou alors je n'étais pas réveillé… Ça arrive wé…<br />
Bref, j'avais enfin devant moi un concept validé, mais comme d'habitude, il faut toujours que je modifie la recette, c'est ce qu'on va voir ici et maintenant !<br /></p></blockquote>
<ul>
<li>Je suis donc allé chercher mon sac à touches de clavier de récup', afin de faire des essais de dispositions, pour enfin obtenir ceci.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210430_213613.jpg" title="20210430_213613.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210430_213613_s.jpg" alt="20210430_213613.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210430_213643.jpg" title="20210430_213643.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210430_213643_s.jpg" alt="20210430_213643.jpg" /></a><br /></p>
<p>On s'inspire à nouveau du <em>TypeMatrix2030</em>, et d'un clavier 50% orthogonal, auquel on ajouterait deux colonnes, une pour la colonne centrale des validations et suppressions sous les doigts forts, et une autre pour les touches françaises du <em>bépo</em>, vous remarquerez alors mes marques au crayon sur les touches pour figurer la configuration <em>bépo</em>.<br /></p>
<ul>
<li>Donc déjà, comparé aux claviers anglo-saxon, impossible d'obtenir un 12x5 sans sacrifier quelques touches auxquelles je tenais, et c'est dans cette configuration minimale qu'on se rend alors compte des différences importantes entre les langues, preuve s'il en est une nouvelle fois, que l<em>'azerty</em> dérivé du <em>qwerty</em> est une mauvaise idée, mais bon, on va pas refaire l'histoire.<br /></li>
</ul>
<p>Ainsi on se retrouve avec 14 colonnes sur 5 lignes, au final plus proche d'<a href="https://keyboardsimulator.xyz/">un clavier 60%</a>.<br /></p>
<ul>
<li>J'envisageais de virer la ligne du haut, pour condenser encore plus la config, mais pour un premier essai, ça suffira comme ça, on verra plus tard si j'en réalise un second.<br /></li>
<li>Ensuite j'ai découvert un <a href="http://www.keyboard-layout-editor.com/#/gists/066f2433ae243facaa2d19ca94bcc62c">outil en ligne</a> permettant de dessiner le clavier proprement :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/E0P8QlcXIAc5dF7.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.E0P8QlcXIAc5dF7_m.png" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/E0P8QlcWQAQwAdp.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.E0P8QlcWQAQwAdp_m.png" alt="" /></a><br /><br /></p> <h3><ins>Électronique et firmware</ins> :<br /></h3>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/pro_micro_pinout.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.pro_micro_pinout_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>J'étais d'autant plus prompt à réaliser ce clavier lorsque j'ai compris qu'il serait aisé de le concevoir autour de l<em>'Arduino Pro Micro</em>.<br /></li>
</ul>
<blockquote><p>En fait deux <em>Pro Micro</em>, car il en faut un dans chaque morceaux de clavier, communiquant entre eux soit par une liaison série, soit une liaison <em>i2c</em>, via un câble jack 3,5 mm.<br /></p></blockquote>
<ul>
<li>J'ai choisis la liaison série pour la simple et bonne raison que je ne disposais que de connecteurs et câbles jack 3 broches, alors qu'il faut 4 broches pour utiliser l<em>i2c</em>.<br /></li>
</ul>
<blockquote><p>Pour autant, j'ai aussi découvert qu'on pouvait réaliser tout ça avec l<em>'Arduino Pro Mini</em>, moins cher et disposant de plus d'entrées, et après quelques longues expérimentations, assez proche du but, j'ai abandonné l'idée par manque total de fiabilité. J'écrirais peut-être un compte-rendu, avant que je n'oublie définitivement tous les détails de l'aventure, ce pourrait-être intéressant…<br /></p></blockquote>
<p>Car il va en falloir pas mal des entrées pour cette matrice, et en fait un seul µC n'aurait pas suffit pour les 67 touches, donc c'est pas plus mal qu'il soit en deux parties.<br /></p>
<ul>
<li>Concernant le firmware, je me suis décidé pour le <em>QMK</em>, qui m'a paru <a href="https://docs.qmk.fm">bien documenté</a>, et encore, à ce moment là je n'avais pas encore pris là mesure de l'intérêt du clavier « reprogrammable ». Nous verrons cela par la suite…<br /></li>
</ul>
<p><br /></p>
<h3><ins>Fabrication</ins> :<br /></h3>
<p>On va pouvoir passer à l'armature mécanique que sera imprimée 3D, que j'ai voulu la plus simple possible, commençant d'abord par quelques tests de faisabilité.<br /></p>
<ul>
<li>Ici un 2x2 pour vérifier le bon écartement entre les touches et la taille idéale du carré qui accueille les touches en-clipsables.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210501_162812.jpg" title="20210501_162812.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210501_162812_s.jpg" alt="20210501_162812.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210501_162819.jpg" title="20210501_162819.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210501_162819_s.jpg" alt="20210501_162819.jpg" /></a><br /></p>
<ul>
<li>Puis, me rendant compte que l'armature ploierait sous la pression des doigts, j'ai ajouté des colonnettes à chaque intersection, et c'était aussi l'occasion de tester l'intégration des aimants permettant de réunir facilement les deux parties du clavier, et de vérifier l'écartement des touches spéciales.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210504_193805.jpg" title="20210504_193805.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210504_193805_s.jpg" alt="20210504_193805.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210504_193818.jpg" title="20210504_193818.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210504_193818_s.jpg" alt="20210504_193818.jpg" /></a><br /></p>
<ul>
<li>Quand tout fut terminé de modéliser, c'est parti pour l'impression !<br /></li>
</ul>
<p>Et a vrai dire, que le clavier soit splitté, m'arrange pour un tas de raisons. Ici c'est évidemment car chaque pièces ne déborde pas du volume d'impression et peut être imprimée en un bloc.<br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210506_101849.jpg" title="20210506_101849.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210506_101849_s.jpg" alt="20210506_101849.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210506_145709.jpg" title="20210506_145709.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210506_145709_s.jpg" alt="20210506_145709.jpg" /></a><br /></p>
<ul>
<li>Cinq heures plus tard, on obtiens notre première pièce d<em>'ABS</em> imprimée correctement.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_155815.jpg" title="20210508_155815.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_155815_s.jpg" alt="20210508_155815.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_155825.jpg" title="20210508_155825.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_155825_s.jpg" alt="20210508_155825.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_155732.jpg" title="20210508_155732.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_155732_s.jpg" alt="20210508_155732.jpg" style="float:right; margin: 0 0 1em 1em;" /></a><br />
Et deux heures pour le fond, avec le <em>PLA</em> gris qui me restait.<br />
Ensuite on nettoie tout ça à la lime aux endroits utiles, et on taraude les trous <em>M3</em> pour accueillir les vis de fixations.<br /><br /><br /><br /></p>
<ul>
<li>L'insertion des touches est satisfaisante <img src="http://burogu.makotoworkshop.org/index.php?pf=smile.svg" alt=":)" class="smiley" /><br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/fb421d48-2870-4d8a-a149-db49ab4966ff?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210506_172036.jpg" title="20210506_172036.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210506_172036_s.jpg" alt="20210506_172036.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210506_172610.jpg" title="20210506_172610.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210506_172610_s.jpg" alt="20210506_172610.jpg" /></a></p>
<ul>
<li>L'objet (<a href="https://www.thingiverse.com/thing:4851095">téléchargeable ici</a>) est apparemment fini, mais il reste encore beaucoup à faire…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_171751.jpg" title="20210508_171751.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_171751_t.jpg" alt="20210508_171751.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_171755.jpg" title="20210508_171755.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_171755_t.jpg" alt="20210508_171755.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_171805.jpg" title="20210508_171805.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_171805_t.jpg" alt="20210508_171805.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/20210508_171836.jpg" title="20210508_171836.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.20210508_171836_t.jpg" alt="20210508_171836.jpg" /></a><br /><br /></p>
<h3><ins>Câblage</ins> :<br /></h3>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04971.jpg" title="dsc04971.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04971_t.jpg" alt="dsc04971.jpg" style="float:right; margin: 0 0 1em 1em;" /></a>
Ici il faut réaliser un matriçage avec des diodes <em>1N4148</em>, et on va mettre à profit les longues pattes disponibles sur ces composants.<br /><br /><br /></p>
<ul>
<li>En réalisant une boucle côté anode, qu'on enfiche sur une des broches des touches du clavier. Puis on la soude et on coupe l'excédent.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04972.jpg" title="dsc04972.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04972_s.jpg" alt="dsc04972.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04974.jpg" title="dsc04974.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04974_s.jpg" alt="dsc04974.jpg" /></a><br /></p>
<ul>
<li>La patte côté cathode sera alors pliée pour rejoindre la touche d'à côté, et une fois le tout soudé, nous avons une ligne de formée.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04975.jpg" title="dsc04975.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04975_s.jpg" alt="dsc04975.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04976.jpg" title="dsc04976.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04976_s.jpg" alt="dsc04976.jpg" /></a>]<br /></p>
<ul>
<li>Reste à faire de même pour toutes les lignes.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04977.jpg" title="dsc04977.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04977_s.jpg" alt="dsc04977.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04978.jpg" title="dsc04978.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04978_s.jpg" alt="dsc04978.jpg" /></a><br /></p>
<ul>
<li>Concernant les colonnes, il suffit de s'occuper de la seconde broche de chaque touche et de les relier ensemble. Pas de photo de ce stade ici, mais ce sera visible dans les étapes suivantes. J'ai utilisé du fil <a href="https://fr.farnell.com/roadrunner/rrw-a-105/fil-assortis-0-19mm-pqt-4/dp/5017245">émaillé RoadRunner</a> très fin, qu'il suffit de chauffer pour faire fondre localement le vernis.<br /></li>
</ul>
<p><br /></p>
<h3><ins>Tests avant intégration du µContrôleur</ins> :<br /></h3>
<ul>
<li>Arrivé ici, j'ai souhaité vérifier que tout allait bien, en reliant chaque ligne et chaque colonne aux µContrôleurs sur une plaquette d'essai. Ceci pour faciliter les choses et éviter des opérations de désoudures/soudures en cas d'erreur.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04995.jpg" title="dsc04995.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04995_s.jpg" alt="dsc04995.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc04996.jpg" title="dsc04996.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc04996_s.jpg" alt="dsc04996.jpg" /></a><br />
Ceci implique donc de programmer les µContrôleurs, ce qu'on abordera en détail dans le prochain billet, pour éviter d'alourdir celui-ci.<br /><br /></p>
<h3><ins>Finalisation du câblage</ins> :<br /></h3>
<ul>
<li>Le clavier fonctionnant parfaitement, on peut donc effectuer proprement l'intégration des µContrôleurs dans le boîtier.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05001.jpg" title="dsc05001.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05001_s.jpg" alt="dsc05001.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05003.jpg" title="dsc05003.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05003_s.jpg" alt="dsc05003.jpg" /></a><br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05000.jpg" title="dsc05000.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05000_t.jpg" alt="dsc05000.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>J'ai utilisé un micro switch très petit, du type qu'on trouve dans les ordi-phones. Celui-ci sera utile à la reprogrammation du clavier.<br /></li>
</ul>
<p>Il en faut un par morceau de clavier, car il faut pouvoir reprogrammer chacun d'eux !<br /><br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05005.jpg" title="dsc05005.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05005_t.jpg" alt="dsc05005.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Le connecteur jack 3,5 mm femelle stéréo à visser, qui sert à relier les deux parties du clavier.<br /><br /><br /><br /><br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05009.jpg" title="dsc05009.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05009_t.jpg" alt="dsc05009.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>J'ai voulu déporter le port <em>micro USB</em> des <em>Arduino Pro Micro</em> en <em>Mini USB</em>, pour des questions de robustesse.<br /></li>
</ul>
<p>En effet, les connecteurs <em><a href="https://pinouts.ru/PortableDevices/micro_usb_pinout.shtml">MicroUSB</a></em> sont relativement fragile, et ce clavier destiné au nomadisme, j'ai préféré un plus gros modèle de connecteur.<br />
Ceci est fait ici avec des connecteurs <em><a href="https://pinouts.ru/PortableDevices/mini-USB_pinout.shtml">MiniUSB</a></em> de récupération, découpé de mini-plaquettes défectueuses, directement soudés sur le connecteur <em>MicroUSB</em> de l<em>'Arduino</em>. <br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05007.jpg" title="dsc05007.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05007_s.jpg" alt="dsc05007.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05009b.jpg" title="dsc05009b.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05009b_s.jpg" alt="dsc05009b.jpg" /></a><br /></p>
<ul>
<li>À défaut donc de se procurer ce type de connecteurs, et mini-plaquettes pour se faciliter les choses… Mais je voulais finir l'objet sans attendre.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05058.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05058_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05059.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05059_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Les aimants sont collés à la colle cyano, et petite astuce pour faciliter l'opération, on place des aimants de l'autre côté le temps que la colle séche (sur le second cliché):<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05011.jpg" title="dsc05011.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05011_s.jpg" alt="dsc05011.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/clavier/dsc05012.jpg" title="dsc05012.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/clavier/.dsc05012_s.jpg" alt="dsc05012.jpg" /></a><br /></p>
<h3>À suivre…<br /><br /></h3>
<p><strong><ins>Quelques liens utiles</ins> :</strong><br />
Pour voir en 3D ce que donne la plupart des clavier <em>DIY</em> : <a href="https://keyboardsimulator.xyz/">https://keyboardsimulator.xyz/</a><br />
Et en 2D : <a href="https://jhelvy.shinyapps.io/splitkbcompare/">https://jhelvy.shinyapps.io/splitkbcompare/</a><br />
Aide au design de <em>PCB</em> avec <em>Kicad</em> : <a href="https://deskthority.net/wiki/KiCAD_keyboard_PCB_design_guide">https://deskthority.net/wiki/KiCAD_keyboard_PCB_design_guide</a><br />
Outil en ligne pour dessiner son clavier : <a href="http://www.keyboard-layout-editor.com/">http://www.keyboard-layout-editor.com/</a><br /></p>
<p>Doc sur le matriçages :<br />
<a href="https://www.dribin.org/dave/keyboard/one_html/">https://www.dribin.org/dave/keyboard/one_html/</a><br />
<a href="http://www.alpmn.byethost32.com/matrices.htm">http://www.alpmn.byethost32.com/matrices.htm</a><br /></p>
<p>Réalisations : <br />
<a href="https://www.ghost7.com/3d-printed-hand-wired-40-keyboard/">https://www.ghost7.com/3d-printed-hand-wired-40-keyboard/</a><br />
<a href="https://lord.re/posts/39-clavier-handmade/">https://lord.re/posts/39-clavier-handmade/</a><br />
<a href="https://blog.fsck.com/2012/12/building-a-keyboard-part-1.html">https://blog.fsck.com/2012/12/building-a-keyboard-part-1.html</a><br />
<a href="http://yager.io/keyboard/keyboard.html">http://yager.io/keyboard/keyboard.html</a><br />
<a href="https://imgur.com/gallery/87LfDVI">https://imgur.com/gallery/87LfDVI</a><br />
<a href="https://www.ergodox.io/">https://www.ergodox.io/</a><br />
<a href="https://www.youtube.com/watch?v=y0F8Mig40m0">https://www.youtube.com/watch?v=y0F8Mig40m0</a><br />
<a href="https://www.fevrierdorian.com/blog/post/2017/05/24/Construire-un-clavier-m%C3%A9canique-pour-le-fun">https://www.fevrierdorian.com/blog/post/2017/05/24/Construire-un-clavier-m%C3%A9canique-pour-le-fun</a><br />
<a href="http://www.thebitbangtheory.com/2016/05/hackeyboard-an-open-hardware-mechanical-keyboard-part-v/">http://www.thebitbangtheory.com/2016/05/hackeyboard-an-open-hardware-mechanical-keyboard-part-v/</a><br /></p>
<p>Splitté : <br />
<a href="https://hackaday.com/2020/06/18/inputs-of-interest-curves-are-the-key-to-my-type/">https://hackaday.com/2020/06/18/inputs-of-interest-curves-are-the-key-to-my-type/</a><br />
<a href="https://hackaday.com/2020/06/02/inputs-of-interest-ergodox-post-mortem/">https://hackaday.com/2020/06/02/inputs-of-interest-ergodox-post-mortem/</a><br />
<a href="https://hackaday.com/2020/08/11/split-keyboard-finder-stacks-them-up-for-your-approval/">https://hackaday.com/2020/08/11/split-keyboard-finder-stacks-them-up-for-your-approval/</a></p>http://burogu.makotoworkshop.org/index.php?post/2021/05/14/qmk_flash_32u4#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/705jubeat -1-urn:md5:e9fa4f464fa12a688f5c695b433444702021-04-05T17:52:00+02:002022-05-26T18:25:17+02:00makoto doushiteArcadeArduinoBricolageDIYJeux videoManette-Joypad-JoystickVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/IMG_0238.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.IMG_0238_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<blockquote><p>Cela fait un peu plus de 6 ans maintenant, en décembre 2014, que j'ai découvert <em><a href="https://en.wikipedia.org/wiki/Jubeat">Jubeat</a></em> en salle d'Arcade, et que j'ai été rapidement séduit par la rapidité de prise en main de ce jeu de rythme de <em>Bemani</em> (la branche Rhythm game de <em>Konami</em>).<br /></p></blockquote>
<p>Photo d'époque avec mon <em><a href="http://burogu.makotoworkshop.org/index.php?post/2014/09/03/firefoxos">FirefoxOS</a></em> sur <em>OpenC</em> (que j'utilise toujours…) qui galère sévère en basse lumière.<br /></p>
<blockquote><p>Et depuis que la salle a fermé, j'<a href="http://burogu.makotoworkshop.org/index.php?post/2015/09/23/liste-travaux-projets2">envisageais</a> de me fabriquer une version portable de la borne, mais sans jamais lancer les choses sérieusement. J'avais quelques idées de façons de faire et elles nécessitaient l'emploi d'une découpeuse laser, j'avais d'ailleurs commencé à me renseigner sur l'engin en FabLab…<br />
Mais bon, je pense que j'étais freiné par la complexité mécanique du panel 16 boutons à concevoir, on est ici pas face à la trivialité de confection d'un stick arcade.<br /></p></blockquote>
<ul>
<li>J'avais tout de même trouvé pas mal de documentation sur des panels <em>DIY</em>, et on en trouve encore plus aujourd'hui, mais globalement la recette reste la même, à base de microswitch :<br /></li>
</ul>
<p>À l'époque, c'est sur <em>NezBlog</em> que j'ai eu l'inspiration, site Japonais malheureusement disparu, mais qui ne meurt pas complètement grâce à <em><a href="https://archive.org/">archive.org</a></em>, voici donc, via <em>archive.org</em> les 4 pages du contrôleur aboutit en 2011 :<br /></p>
<blockquote><p>- <a href="https://web.archive.org/web/20161215125251/http://blog.nezweb.net/archives/572">jubeatコントローラ自作計画まとめ</a><br />
- <a href="https://web.archive.org/web/20161215125311/http://blog.nezweb.net/archives/624">jubeatコントローラ自作計画まとめ(2)</a><br />
- <a href="https://web.archive.org/web/20161215125430/http://blog.nezweb.net/archives/652">jubeatコントローラ自作計画まとめ(3)</a><br />
- <a href="https://web.archive.org/web/20161215125543/http://blog.nezweb.net/archives/778">自作jubeat用PIC回路図&ファームウェア</a><br />
- La vidéo qui montre la progression de la construction, sur <em><a href="https://www.nicovideo.jp/watch/sm16300086">NicoNico Douga</a></em><br /></p></blockquote>
<ul>
<li>Au même moment, je découvrais le panel <em><a href="https://www.gamo2.com/en/index.php?dispatch=products.view&product_id=310">DAO FB9</a></em>, un clone du panel de la borne originale, pour ainsi dire, une copie parfaite, qui avait le mérite d'être portable, permettant d'y glisser un écran, malheureusement plus distribué depuis.<br /></li>
</ul>
<p>Séduit par ces solutions, je me disais que plutôt que de concevoir une borne encombrante, autant avoir un panel à plaquer sur mon écran d'ordi 24 pouces, orientable grâce à un bras <em>ergotron</em>, et le tour serait joué…<br /></p>
<ul>
<li>Faut dire aussi qu'à l'époque j'étais tombé sur <a href="https://bemani.fr/forums/sujet/homemade-jubeat-controller/">pas mal d'informations erronées</a> à propos de l'écran de la borne !<br /></li>
</ul>
<p>On pouvait lire par-ci par-la qu'il faisait 22 pouces, réglé en 1280x720 et que les touches du panel mesuraient 65 mm de côtés.<br /></p>
<ul>
<li>Grâce aux photos du <em><a href="https://blog.flipflop-jp.com/archives/2711/post-2711/">FB9</a></em> sur le blog FlipFlop, j'ai pu comprendre que c'était sans doute du flan, et puis intrigué j'ai voulu vérifier, en mesurant comme j'ai pu à la salle, et j'avais noté des touches de 67 mm écartée de 13 mm, calculant alors un écran 26 pouces. (j'étais pas loin !)<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/IMG_0243.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.IMG_0243_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>En parallèle de ça, j'avais aussi expérimenté le logiciel, en découvrant des clones du jeu :</li>
</ul>
<p>- Comme <em><a href="https://www.qwant.com/?client=brz-moz&q=Youbeat38FullDownload&t=web">Youbeat</a></em> (<em>Jubeat</em> se prononçant en fait <em>Youbeat</em>)<br />
- Ainsi que <em><a href="http://yosh52.web.fc2.com/">Jubeat Analyser</a></em>, qui permet carrément de créer ses propres <em>pattern</em> de jeux à plaquer sur des chansons. Je ne suis pas sûr d'ailleurs, mais je pense que <em>Youbeat</em> a été crée à partir de <em>Jubeat analyser</em>… À vérifier.<br />
- Voici d'ailleurs un peu plus d'info sur l'état actuel de l'émulation <a href="https://davidobot.net/2020/05/03/jubeat-pc">via ce site</a>.<br /></p>
<ul>
<li>Cependant j'avais pu dégotter une archive du jeu original — et qui fonctionnait — dans sa version « <em>Knit</em> », permettant alors de confirmer que le jeu tournait plutôt en 1360x768.<br /></li>
</ul>
<p>Souhaitant coller le plus à l'original, et pollué par ces info contradictoires, je ne comprenais plus rien, et ça a contribué à enterrer un peu plus l'étude qui partait mal…<br /><br /></p> <h3><ins>Retour à aujourd'hui</ins> :<br /></h3>
<ul>
<li>Après cette longue introduction, il y a quelques semaines donc, je ne me souviens plus trop pourquoi, le niveau de motivation est remonté et j'ai annoncé la chose publiquement via <em><a href="https://twitter.com/Makoto_Doushite/status/1361390301357694979">twitter</a></em> sachant que quelques personnes aiment à voir ce genre de bricoles.<br /></li>
</ul>
<p>Magie twitesque, <em>@catzou</em> me mis en relation avec la commu <em>Discord: Make Some Noise</em>, où j'ai découvert que mes travaux autour de l'arcade, décrit dans ce blog sont relativement connu par d'autres bricoleurs, puis j'ai été accompagné par <a href="https://www.instagram.com/crazyredmachine/">CrazyRedMachine</a> pour faire avancer mon entreprise à grand pas !<br />
D'abord intimidé par le fait d'être influencé dans mes idées, que la ligne directrice n'aille pas dans le sens obtus que j'ai pu imaginer, j'ai su me laisser entraîner petit à petit vers des solutions concrètes et plus simples, que nous verrons après.<br />
En effet, 6 ans plus tard j'ai acquis pas mal de nouvelles compétences, et certaines choses me paraissent plus facilement envisageable.<br />
- Notamment pour la fabrication des touches que j'imaginais tailler à la défonceuse, en ayant conçu des gabarit à l'imprimante3D.<br />
- Et comme on trouve des <em>rubbers</em> <a href="https://www.arcadespareparts.com/arcade_parts/konami_parts/jubeat_rubber_switch/13748.html">ici</a> ou <a href="https://www.yubiparts.com/product/jubeat-rubbers">là</a>, j'envisageais de fabriquer une plaquette électronique comme sur le panel original, avant de me rendre compte que <em><a href="https://github.com/veroxzik/jubeat-boards/tree/main/jubeat-button-pcb">veroxzik</a></em> avait déja fort bien fait le boulot.<br />
Encouragé donc, je comptais me faire découper la structure du panel au laser via <a href="https://easymetal.fr/">easymetal</a> dans <a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/Frame_metal.dxf">une plaque</a> de 5 mm d'épais, afin d'avoir une structure de base bien rigide, et ensuite d'imaginer comment assembler tout ça…<br /></p>
<ul>
<li>Car cette fois, on me tuyautait à partir d'informations fiables mesurées sur des pièces d'arcade originales, que voici :<br /></li>
</ul>
<blockquote><p>- Taille des touches, surface visible, 66,4x66,4 mm.<br />
- Grille avec des trous de 70x70 mm espacés de 11,67 mm.<br />
- Écran original de 25,5 pouces. Ça ne se trouve plus, donc on peut utiliser un moniteur de 27 pouces et on ajustera les bords de l'image dans les réglages de la carte graphique, ou alors un écran de TV 26 pouces qui sera le plus approchant.<br /></p></blockquote>
<p>Cependant, travailler à partir de photo sans avoir jamais touché les entrailles de l'objet reste un exercice difficile, et j'avais du mal à formaliser l'assemblage de cette solution hybride.<br />
S'est alors présenté une opportunité…<br /><br /></p>
<h3><ins>Ça devient concret</ins> :<br /></h3>
<ul>
<li><em>CrazyRedMachine</em> me fit part de la possibilité d'acheter des pièces de la borne d'origine, ou de son clone exploité en Chine (<em>Magic Box</em>).<br /></li>
</ul>
<p>Pas facile à trouver, mais faisable, via des sites comme <em>Yahoo Auction</em>, ou <em>Taobao</em>.<br />
Pour le premier, j'ai laissé passer l'enchère car le <em>proxy</em> (site web intermédiaire qui commande pour vous, car on ne peut pas acheter directement depuis la <em>France</em>) refusait d'enchérir un vendeur qui avait une note pas très bonne (comme sur <em>ebay</em> quoi), et pas de regret car le panel est finalement parti autour de 300€, puis bon, j'aime pas trop les enchères…<br />
Pour le second, nous avons vu « poper » <a href="https://item.taobao.com/item.htm?id=635571209771">cette annonce fort intéressante en achat immédiat,</a><sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2021/04/04/Jubeat#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup> et le temps de trouver un <em>proxy</em> (<em>Superbuy</em>), de comprendre comment il fonctionne, de me décider, et j'avais acheté l'item, avec à chaque étapes du processus, l'inquiétude du débutant… Et puis 34 jours plus tard, il est arrivé !<br /></p>
<ul>
<li>Et surprise, il s'agit d'un panel officiel <em>Jubeat</em> alors qu'on s'attendait à son clone !!<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04868.jpg" title="dsc04868.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04868_m.jpg" alt="dsc04868.jpg" /></a><br />
Avec les 50€ frais de ports (ça pèse quand même 2,5 kg, et avec le carton au total 3,2 kg), donc pour 100€ au total, c'est vraiment bien, et je suis quasi certain que j'aurais dépensé autant voir plus en le fabriquant moi même.<br /><br /></p>
<h3><ins>En attendant le colis</ins> :<br /></h3>
<p>Mais laissons un peu ça de côté, et voyons ce qu'on a pu faire en attendant que le paquet arrive.<br /></p>
<ul>
<li>J'allais donc recevoir un panel de jeu prêt à l'emploi, sauf qu'il manquait évidemment l'électronique pour interagir avec sur l'ordinateur.<br /></li>
</ul>
<blockquote><p>J'étais parti dans l'idée de bricoler l'électronique d'un clavier azerty de récupération donc, avant de me rendre compte qu'au delà de 3 ou 4 touches appuyées simultanément (et encore, ça dépend desquelles) la détection des touches supplémentaires ne fonctionne pas, ce qui peut-être pourrait se révéler gênant en cour de jeu.<br /></p></blockquote>
<ul>
<li>Cependant <em>CrazyRedMachine</em> avait déjà travaillé le sujet et publié sur son <em><a href="https://github.com/CrazyRedMachine/jubeatIO">github</a></em> de quoi se bricoler l'électronique d'un contrôleur de jeu disposant de 19 boutons, bien assez donc, à base d<em>'Arduino Leonardo</em>.<br /></li>
</ul>
<p>Comme je ne disposais que du modèle <em>Arduino pro Micro</em>, plus petit mais équivalent (moyennant moins d'in/out), je me suis donc attelé à sa programmation via cette modification du code, destinée à adapter les entrées utilisées sur le <em>pro Micro</em> :<br /></p>
<pre class="brush: cpp">// Arduino Leonardo
//uint8_t buttonPin[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,A5,A4,A3,A2,A1};
// Arduino Pro Micro
uint8_t buttonPin[] = {1,0,2,3,4,5,6,7,8,9,10,16,14,15,18,19,20,21};</pre>
<ul>
<li>Et pour compiler le programme sans encombre, il faudra avoir installé la librairie <em>ArduinoJoystickLibrary</em> de <em><a href="https://github.com/MHeironimus/ArduinoJoystickLibrary">MHeironimus</a></em>.<br /></li>
</ul>
<p>Super, ça marche, sur mon ordi <em>nunux</em> avec la commande pour tester les joysticks.<br /></p>
<pre class="brush: bash">jstest /dev/input/js0</pre>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/20210320_161620.jpg" title="20210320_161620.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.20210320_161620_t.jpg" alt="20210320_161620.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>La connexion de l<em>'Arduino</em> aux plaques du contrôleur <em>Jubeat</em> va donc s'effectuer via des connecteurs <em>JST</em>, et j'ai pu en trouver des pré-câblés sur <em><a href="https://www.ebay.fr/itm/10-Sets-JST-PH2-0mm-Right-Angle-2-3-4-5-10Pin-Cord-Wire-To-Board-Connector-Cable/114689270129?var=414849075046">ebay</a></em>, au pas de 2 mm, avec 9 broches (<em>JST PH2.0mm 9 pin</em>).<br /><br /></li>
<li>Une fois reçu, et quelques heures de câblages plus tard en suivant bien le <a href="http://burogu.makotoworkshop.org/index.php?post/2021/04/04/public/bricolage/arcade/jubeat/pinout.png">schéma</a> (oui c'est toujours très long à bricoler des câbles), voilà donc mon dispositif paré, plus qu'à attendre l'arrivée du panel :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04913.jpg" title="dsc04913.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04913_s.jpg" alt="dsc04913.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04911.jpg" title="dsc04911.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04911_s.jpg" alt="dsc04911.jpg" /></a><br /><br /></p>
<h3><ins>Premier essai</ins> :<br /></h3>
<blockquote><p>Comme dirait l'autre, « j'adore qu'un plan se déroule sans accrocs », j'ai donc le panel devant moi, et pas d'erreurs dans la commande, ce sont les bons connecteurs <em>JST</em>, je connecte, branche l'ordinateur sur le test de joystick, et… Ho bah, ça marche pô, pas un seul des 16 boutons (càd 64 contacts) ne réponds :(<br /></p></blockquote>
<p>Un soucis dans le câblage, je me serais trompé… Hum ?<br />
Pas vraiment d’inquiétude en fait, j'ai bien conscience d'être face à un matériel qui a pas mal vécu, et qui présente des traces de corrosions.<br /></p>
<ul>
<li>Autrement dit, avant de conclure quoique ce soit il va me falloir tout démonter, nettoyer, et remonter avant de tester à nouveau.<br /></li>
</ul>
<p>L'occasion de voir comment c'est fait, et de peut-être comme c'était mon idée au départ, de pouvoir formaliser l'assemblage, sous forme de ressource en 3D qu'il suffirait de donner, au mieux, à une machine CNC. Sorte de rattrapage, l'achat du panel ayant fait perdre la reproductibilité du projet que je vous présente ici, ce qui m'a quelque peu chiffonné au départ. Mais bon ça se trouve je serais happé par un autre sujet et je ne produirais jamais ces ressources ? Bref, n'attendez pas après, ce sera une surprise… ou pas !<br /></p>
<ul>
<li>Observons donc ce que nous avons là…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04875.jpg" title="dsc04875.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04875_s.jpg" alt="dsc04875.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04876.jpg" title="dsc04876.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04876_s.jpg" alt="dsc04876.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04874.jpg" title="dsc04874.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04874_s.jpg" alt="dsc04874.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04873.jpg" title="dsc04873.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04873_s.jpg" alt="dsc04873.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04877.jpg" title="dsc04877.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04877_s.jpg" alt="dsc04877.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Dans l'ensemble, pas mal de traces de début de rouille sur le métal, la peinture s'est écaillée au niveau de l'encadrement des touches, et durant le transport il y a eu de la casse sur un pied (recollé à la colle époxy) et la barre de fixation supérieure a été tordue (redressée à coups de marteau).<br /></li>
</ul>
<p>D'ailleurs, il est a noter qu'un morceau de la vis de fixation du pied est encore dans son filetage, et qu'un autre morceau de vis, bien saillant et tordu, est encore en place sur la barre de fixation, ce qui tend à me faire penser que le vendeur <em>taobao</em> serait en fait un récupérateur, désossant les carcasses à l'arrache pour tirer quelqu'argent des pièces détachées. Je ne critiquerais pas la méthode, si celle-ci permet de sauver quelques pièces sur des bornes en fin de vie.<br /></p>
<ul>
<li>Procédons au démontage, on retourne le panel, et en constate que la barre centrale qui maintient le bout des plaquettes électronique (<em>PCB</em>) en place est à l'envers, puisque les petits caoutchoucs noirs sont justement là pour venir en contact des coins des <em>PCB</em>. Il faudra que je retourne correctement cette barre au remontage :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04879.jpg" title="dsc04879.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04879_s.jpg" alt="dsc04879.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04881.jpg" title="dsc04881.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04881_s.jpg" alt="dsc04881.jpg" /></a><br /></p>
<ul>
<li>Une fois les vis retirées, on peut extraire les <em>PCB</em> une à une, et oui, les contacts sont très sales, pas étonnant donc que ça ne fonctionne pas…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04882.jpg" title="dsc04882.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04882_s.jpg" alt="dsc04882.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04884.jpg" title="dsc04884.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04884_s.jpg" alt="dsc04884.jpg" /></a><br /></p>
<ul>
<li>On continue, avec les <em>rubbers</em>, ces petits tampons en caoutchouc, du même type qu'on trouve dans les manettes de jeux pour faire contact avec les <em>PCB</em>, aux 4 coins de chaque touches, qu'on met soigneusement de côté pour ne pas en perdre, ils sont vraiment très petits.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04886.jpg" title="dsc04886.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04886_s.jpg" alt="dsc04886.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04887.jpg" title="dsc04887.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04887_s.jpg" alt="dsc04887.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04888.jpg" title="dsc04888.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04888_s.jpg" alt="dsc04888.jpg" style="float:right; margin: 0 0 1em 1em;" /></a>
Ensuite on peut retirer les touches, qui ont l'air pas mal rayées…<br /></p>
<ul>
<li>Donc pour le nettoyage, on va d'abord finir le démontage et tout laver au savon ou liquide vaisselle, à l'aide d'une brosse à dent quand nécessaire. Les <em>PCB</em> seront terminées à l'alcool, en insistant bien au niveaux des points de contacts. Par contre, les <em>rubbers</em> ne seront PAS nettoyé à l'alcool, car le produit déterriore les contacts. Donc simplement de l'eau à l'aide de coton tige. Surtout PAS d'alcool non plus sur les touches, car celà aurait pour effet de blanchir et accentuer l'apparition de rayures sur la matière transparente, je l'ai expérimenté par le passé. Donc liquide vaisselle et séchage/lustrage avec un chiffon à lunette pour ne pas ajouter de rayures.<br /></li>
</ul>
<ul>
<li>Une fois toutes les vis retirées, on peut séparer le squelette en plastique de la frame en métal :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04896.jpg" title="dsc04896.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04896_s.jpg" alt="dsc04896.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04889.jpg" title="dsc04889.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04889_s.jpg" alt="dsc04889.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04891.jpg" title="dsc04891.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04891_t.jpg" alt="dsc04891.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04892.jpg" title="dsc04892.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04892_t.jpg" alt="dsc04892.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04893.jpg" title="dsc04893.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04893_t.jpg" alt="dsc04893.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04894.jpg" title="dsc04894.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04894_t.jpg" alt="dsc04894.jpg" /></a><br /></p>
<ul>
<li>En retournant le squelette, on découvre un joint de caoutchouc :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04900.jpg" title="dsc04900.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04900_s.jpg" alt="dsc04900.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04898.jpg" title="dsc04898.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04898_s.jpg" alt="dsc04898.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04899.jpg" title="dsc04899.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04899_t.jpg" alt="dsc04899.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04901.jpg" title="dsc04901.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04901_t.jpg" alt="dsc04901.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04902.jpg" title="dsc04902.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04902_t.jpg" alt="dsc04902.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04903.jpg" title="dsc04903.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04903_t.jpg" alt="dsc04903.jpg" /></a><br />
Aller ! Au lavage !<br /><br /></p>
<h3><ins>Second essai</ins> :<br /></h3>
<p>Et bien je n'ai pas d'image à montrer en détails du panel propre, je pense qu'on l'a assez vu, et on va plutôt faire un essai en situation réelle ce sera plus parlant !<br /></p>
<ul>
<li>J'ai donc couché ma <em>TV</em> à plat sur une table, et posé le panel <em>Jubeat</em> dessus, en m'assurant que le bout des vis de celui-ci ne viennent pas en contact avec l'écran, grace aux épais rebords de la <em>TV</em>.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04909.jpg" title="dsc04909.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04909_t.jpg" alt="dsc04909.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04908.jpg" title="dsc04908.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04908_t.jpg" alt="dsc04908.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04907.jpg" title="dsc04907.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04907_t.jpg" alt="dsc04907.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/dsc04910.jpg" title="dsc04910.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/arcade/jubeat/.dsc04910_t.jpg" alt="dsc04910.jpg" /></a></p>
<ul>
<li>Une petite vidéo… 6 ans donc que je n'avais pu toucher à ce jeu :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/e4d091ea-9aef-4975-9d13-d5f63ae4357c?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<ul>
<li>On verra la suite de la construction plus tard, mais côté rénovation, je pense qu'il faudra prévoir un décapage avant une nouvelle couche de peinture, ainsi que le polissage des touches pour tenter d'améliorer l'aspect de tout ça.<br /><br /></li>
</ul>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2021/04/18/jubeat02">À suivre…</a><br /><br /></h3>
<p><strong><ins>Ressources</ins> :</strong><br />
- <a href="https://blog.flipflop-jp.com/archives/4146/%e3%83%af%e3%83%b3%e3%83%ab%e3%83%bc%e3%83%a0jubeat%e3%80%80ac%e7%ad%90%e4%bd%93%e6%90%ac%e5%85%a5%e3%81%ae%e6%a7%98%e5%ad%90/">https://blog.flipflop-jp.com/archives/4146/ワンルームjubeat ~AC筐体搬入の様子~</a><br />
- <a href="https://blog.flipflop-jp.com/archives/4324/jubeat%e7%ad%90%e4%bd%93%e3%81%ae%e3%81%8a%e6%8e%83%e9%99%a4%ef%bd%9e%e3%83%a2%e3%83%8b%e3%82%bf%e3%83%bc%e8%a3%8f%e7%b7%a8%ef%bd%9e/">https://blog.flipflop-jp.com/archives/4324/jubeat筐体のお掃除~モニター裏編~</a><br />
- <a href="http://tools.bemaniso.ws/">http://tools.bemaniso.ws/</a><br />
- <a href="https://bemani.guide/games/jubeatclan/setup/">https://bemani.guide/games/jubeatclan/setup/</a><br />
- <a href="http://www.emuline.org/topic/605-arcade-pc-jubeat-misc-dumps-konami/">http://www.emuline.org/topic/605-arcade-pc-jubeat-misc-dumps-konami/</a><br />
- <a href="https://www.instructables.com/Arduino-LeonardoMicro-as-Game-ControllerJoystick/">https://www.instructables.com/Arduino-LeonardoMicro-as-Game-ControllerJoystick/</a></p>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2021/04/04/Jubeat#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] Profitez-en, le vendeur en a d'autres en stock !</p></div>
http://burogu.makotoworkshop.org/index.php?post/2021/04/04/Jubeat#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/702Mini Game Center -7-urn:md5:f71465411aada75a9a02f4126e4ea8332020-05-29T18:42:00+02:002020-08-11T19:59:36+02:00makoto doushiteMaquettesCandy-cabDIYJeux videoRaspBerryPIRétrogamingVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2020/05/23/minigamecenter06">Suite de l'étude précédente</a> :</p>
<blockquote><p>Où en étions-nous donc avant cet interlude de mhhh au moins 3 billets…<br />
Ha oui, je promettais qu'on verrait comment intégrer l'écran dans la maquette et qu'on aurait terminé cette Sega Astro City. Donc l'heure est venue ! Par contre je dirais plutôt « peut-être » terminée, avant de pouvoir la peindre… Voyons donc cela.<br /></p></blockquote>
<p><a href="http://burogu.makotoworkshop.org/index.php?post/2018/10/28/minigamecenter01">Dans le premier billet sur le sujet</a>, on a vu qu'il était donc possible d'utiliser un écran <em>LCD</em> de 2,2 pouces, et qu'il était de taille idéale pour aller dans la maquette de la borne au 1/12 !<br />
En plus avec la vitre en plastique bombée, l'effet loupe rendait vraiment bien, on se croirait presque sur un cathodique haha.<br />
Mais comment le faire tenir en place ? Le coller ? Et si on veut mettre l'écran à la verticale pour jouer des vidéos de jeux en <em>tate</em>, ça risque d'être compromis non ? En plus la maquette à été pensée de telle façon à ce que le capot de l'écran, le bezel et le panel soient démontable…<br />
<br /></p>
<h3><ins>Intégration de l'écran</ins> :<br /></h3>
<p>J'ai donc passé du temps avec mon pied à coulisse, à concevoir une pièce de remplacement pour la pièce d'origine (en noir) destinée à tenir une photo d'écran contre la vitre. Il s'agissait donc que la pièce tienne l'écran en place contre la vitre, en compensant son épaisseur.<br />
Autre contrainte à tenir compte, l'écran est plus large à droite, du fait de la conception de la nappe de connectique.<br />
Et enfin il fallait bien entendu pouvoir disposer l'écran horizontalement ou verticalement.<br /></p>
<ul>
<li>Après une demi-journée à modéliser et 3 prototypes imprimés, j'ai enfin obtenu satisfaction (<a href="https://www.thingiverse.com/thing:4000988">pièce grise imprimée en ABS</a>, dispo aussi en annexe) :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/1d540b9c-22e7-4759-a983-5aff3fbd34f2?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04472.jpg" title="dsc04472.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04472_m.jpg" alt="dsc04472.jpg" /></a><br /></p>
<ul>
<li>Pour terminer la pièce, il faut élargir les trous avec un forêt de 2 mm, ainsi le bezel se clipsera facilement, sans pour autant se défaire.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04483.jpg" title="dsc04483.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04483_t.jpg" alt="dsc04483.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04503.jpg" title="dsc04503.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04503_t.jpg" alt="dsc04503.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04485.jpg" title="dsc04485.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04485_t.jpg" alt="dsc04485.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04486.jpg" title="dsc04486.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04486_t.jpg" alt="dsc04486.jpg" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04487.jpg" title="dsc04487.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04487_s.jpg" alt="dsc04487.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Pour les tenons de fixations, j'ai utilisé des morceaux d'un gros trombonne, rentré en place par insertion à chaud, puis coupé et limé à une longueur correcte.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04490.jpg" title="dsc04490.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04490_t.jpg" alt="dsc04490.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04491.jpg" title="dsc04491.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04491_t.jpg" alt="dsc04491.jpg" /></a><br /></p> <ul>
<li>Cependant il restait tout de même quelques modifs à apporter à l'écran lui-même, car sinon le capot de l'écran ne ferme pas… Déjà, découper les deux petits tétons à l'arrière, qui sont ici inutiles. Et souder une rallonge à la nappe de connexion. (Au départ je pensais pouvoir m'en passer, mais non, c'est vraiment trop juste) :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04482.jpg" title="dsc04482.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04482_s.jpg" alt="dsc04482.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04478.jpg" title="dsc04478.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04478_s.jpg" alt="dsc04478.jpg" /></a><br /></p>
<ul>
<li>Ensuite, couper les bords en plastiques pour permettre à l'écran d'être excentré sur la droite dans la borne, afin d'avoir l'image bien centrée :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04479.jpg" title="dsc04479.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04479_s.jpg" alt="dsc04479.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04480.jpg" title="dsc04480.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04480_s.jpg" alt="dsc04480.jpg" /></a><br /></p>
<ul>
<li>Voici ce que ça donne une fois en place, à l'horizontale puis à la verticale :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04492.jpg" title="dsc04492.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04492_s.jpg" alt="dsc04492.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04495.jpg" title="dsc04495.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04495_s.jpg" alt="dsc04495.jpg" /></a><br /></p>
<ul>
<li>Une fois le bezel avec la vitre clipé sur le support, il est donc possible de glisser l'écran en place, en <em>yoko</em> ou en <em>tate</em>… Et là tu bien comprends pourquoi j'ai dédoublé le connecteur d'écran sur la plaquette du <em>PiHAT</em> :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04493.jpg" title="dsc04493.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04493_t.jpg" alt="dsc04493.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04494.jpg" title="dsc04494.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04494_t.jpg" alt="dsc04494.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04496.jpg" title="dsc04496.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04496_t.jpg" alt="dsc04496.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04497.jpg" title="dsc04497.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04497_t.jpg" alt="dsc04497.jpg" /></a><br /></p>
<ul>
<li>La position <em>tate</em>, verticale donc, ne pose aucun problème puisque la nappe est au dessus et que la place ne manque pas.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04498.jpg" title="dsc04498.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04498_s.jpg" alt="dsc04498.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04499.jpg" title="dsc04499.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04499_s.jpg" alt="dsc04499.jpg" /></a><br /></p>
<ul>
<li>Par contre à l'horizontale, <em>yoko</em> donc, il reste l'ablation d'un ergot de renfort à faire dans le capot de la borne pour permettre à celui-ci de se refermer sans gêne.<br /></li>
</ul>
<p>Et bien sûr comme rien n'est parfait, on pourra ajuster la position centrale de l'écran en calant des p'tis bouts de truc, sur le long du côté gauche de l'écran.<br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04501.jpg" title="dsc04501.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04501_s.jpg" alt="dsc04501.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04500.jpg" title="dsc04500.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04500_t.jpg" alt="dsc04500.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04502.jpg" title="dsc04502.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04502_t.jpg" alt="dsc04502.jpg" /></a><br />
<br /></p>
<h3><ins>Quelques essais</ins> :<br /></h3>
<ul>
<li>Un cliché réussit en lumière ambiante, et dés le second dans la pénombre on voit que la lumière résiduelle du dos de l'écran va être un problème pour la réaalisation de la maquette, et il faudra prendre soins de l’empêcher de passer.<br /></li>
</ul>
<p>J'ai zoomé au max quelques photos pour bien voir, et on remarque un petit effet pouvant faire penser à des <em>scanlines</em>, il est dû à la matrice du <em>LCD</em> grossie par la vitre convexe plaquée sur l'écran, et non à un effet spécial quelconque, car la vidéo jouée est un enregistrement pur d'une partie avec <em>Mame</em>, avec ses pixel bien carrés, <a href="https://makotoworkshop.org/Highscores/deathsml.html">comme celle-ci</a>.<br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04518.jpg" title="dsc04518.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04518_m.jpg" alt="dsc04518.jpg" style="float:left; margin: 0 1em 1em 0;" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04520.jpg" title="dsc04520.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04520_t.jpg" alt="dsc04520.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04521.jpg" title="dsc04521.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04521_t.jpg" alt="dsc04521.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04522.jpg" title="dsc04522.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04522_t.jpg" alt="dsc04522.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04525.jpg" title="dsc04525.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04525_t.jpg" alt="dsc04525.jpg" /></a><br /><br /><br /></p>
<ul>
<li>Une petite vidéo :<br /></li>
</ul>
<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/b5b05b84-148e-46e1-9407-65483a0a4cb0?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<blockquote><p>Maintenant il faut que j'étudie comment sécuriser le <em>Raspberry</em> dans la maquette, et à quel endroit placer le haut-parleur, ce qui nécessitera peut-être de confectionner une nouvelle pièce… Moi qui pensais pouvoir commencer la peinture, ça devra attendre encore un peu…<br /></p></blockquote>
<p><br /></p>
<h3> <a href="http://burogu.makotoworkshop.org/index.php?post/2020/06/01/minigamecenter08">À suivre…</a></h3>http://burogu.makotoworkshop.org/index.php?post/2020/05/27/minigamecenter07#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/694Mini Game Center -6-urn:md5:e080992218d6a6633ce09a514b87f26d2020-05-26T20:55:00+02:002020-06-02T10:38:28+02:00makoto doushiteRaspberry PiCandy-cabDIYJeux videoRaspBerryPIRaspbianRétrogamingVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2020/05/17/minigamecenter05">Suite de l'étude précédente</a> :<br /></p>
<blockquote><p>Toujours à la recherche d'une solution simple pour piloter les bornes du <em>MiniGameCenter</em>, c'est maintenant vers la transmission infrarouge directement au <em>Raspberry</em> que je vais me tourner.<br />
Ce n'est pas une technique qui m'est inconnue, puisque je l'utilise sur mon <a href="http://burogu.makotoworkshop.org/index.php?post/2016/07/31/openelec">médiacenter</a> et mon <em><a href="http://burogu.makotoworkshop.org/index.php?post/2018/11/01/wrrw8">WebRadioReveilWifi</a></em>, mais pensant faire autrement je ne l'avais pas envisagée jusqu'alors.<br /></p></blockquote>
<p>Ainsi je devrais pourvoir faire la même chose qu'avec ce qu'on à vu la dernière fois sans fil avec le <em>bluetooth</em>, en utilisant 2 fils soit un <em>GPIO</em>.<br />
Et si je veux pouvoir utiliser la fonction « Power ON », il faudra me résoudre à câbler un fil supplémentaire.<br /></p>
<blockquote><p>Voyons déjà comment ça se passe avec le soft <em>Lirc</em>, car c'est pas toujours évident à faire marcher, <a href="http://burogu.makotoworkshop.org/index.php?post/2017/12/10/wrrw05">déjà la fois dernière</a> j'avais dû bricoler un peu pour que ça fonctionne sur le <em>Raspbian</em> de l'époque, alors que plutôt encore, c'était bien passé…<br /></p></blockquote>
<p><br /></p>
<h3><ins>Support de l'infra-rouge</ins> :<br /></h3>
<ul>
<li>Installer le soft de gestion de l'infrarouge :<br /></li>
</ul>
<pre class="brush: bash">sudo apt update
sudo apt install lirc</pre>
<p>À l'heure où j'installe ce soft, l’installation plante (Ha ça commence !)</p>
<ul>
<li>Mais rien n'est perdu, y faut bricoler, et déplacer un fichier…<br /></li>
</ul>
<pre class="brush: bash">sudo mv /etc/lirc/lirc_options.conf.dist /etc/lirc/lirc_options.conf</pre>
<ul>
<li>Puis relancer l'installation :<br /></li>
</ul>
<pre class="brush: bash">sudo apt install lirc</pre>
<ul>
<li>Ensuite on va modifier le fichier de configuration comme suis :<br /></li>
</ul>
<pre class="brush: bash">sudo nano /etc/lirc/lirc_options.conf</pre>
<pre class="brush: bash">driver = default
device = /dev/lirc0</pre>
<ul>
<li>Renommer cet autre fichier :<br /></li>
</ul>
<pre class="brush: bash">sudo mv /etc/lirc/lircd.conf.dist /etc/lirc/lircd.conf</pre>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/Pilotage_IR_bb.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.Pilotage_IR_bb_s.png" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Activer le module sur le <em>Raspberry</em> en éditant <em>config.txt</em> afin d'ajouter la ligne suivante pour activer le <em>GPIO6</em> et redémarrer le <em>Rpi</em>.<br /><br /><br /><br /></li>
</ul>
<p>Le Capteur <em>IR</em> est impérativement alimenté par le 3,3V du <em>Raspberry</em>, et donc sa broche de signal branchée sur le <em>GPIO6</em>.<br />
J'ai mis le dessin standard d'une <em>RpiZero</em>, mais on passera ici par le connecteur <em>GPIO</em> du <em>Pi-HAT</em>.<br /></p> <pre class="brush: bash">sudo nano /boot/config.txt</pre>
<pre class="brush: bash">dtoverlay=gpio-ir,gpio_pin=6</pre>
<ul>
<li>Pour vérifier que le module fonctionne :<br /></li>
</ul>
<pre class="brush: bash">sudo systemctl status lircd.service</pre>
<ul>
<li>Et enfin pour tester si les commandes infrarouge sont bien reçues :</li>
</ul>
<pre class="brush: bash">sudo killall lircd
sudo mode2 -d /dev/lirc0</pre>
<ul>
<li>À chaque appuie sur une touche de la télécommande, devrait s'afficher ce genre de truc :</li>
</ul>
<pre class="brush: bash">space 1223
pulse 281
space 1193
pulse 350
space 1199
pulse 264
space 1901</pre>
<p><br /><br /></p>
<h3><ins>Configuration de la télécommande</ins> :</h3>
<ul>
<li>Comme dans <a href="http://burogu.makotoworkshop.org/index.php?post/2017/12/10/wrrw05">ce billet d'époque</a> on va identifier la télécommande et associer chacun de ses boutons à une touche du clavier.<br /></li>
</ul>
<pre class="brush: bash">sudo irrecord -d /dev/lirc0 telecommande''</pre>
<blockquote><p>Sauf que la commande <em>irrecord</em> ne fonctionne pas avec <em>Raspbian Buster</em> (actuellement la version 10.4 avec le kernel 4.19.97+).<br />
Ça va donc être coton pour configurer une télécommande exotique, et il serait plus facile de se référer à <a href="http://lirc.sourceforge.net/remotes/">la base de télécommande en ligne de <em>Lirc</em></a>.<br />
Par chance, j'ai retrouvé <a href="http://lirc.sourceforge.net/remotes/pinnacle_systems/PCTV_800i.jpg">une petite télécommande sympatique</a> que ne me servait plus et qui <a href="http://lirc.sourceforge.net/remotes/pinnacle_systems/">est bien listée</a> dans la base !<br /></p></blockquote>
<ul>
<li>Je peux donc me contenter de simplement copier/coller le <a href="http://lirc.sourceforge.net/remotes/pinnacle_systems/PCTV_800i">fichier correspondant</a> :</li>
</ul>
<pre class="brush: bash">sudo nano /etc/lirc/lircd.conf.d/PCTV_800i.conf</pre>
<pre class="brush: bash"># this config file was automatically generated
# using lirc-0.8.5(default) on Fri Oct 2 14:44:45 2009
# contributed by Aaron Hurt (ahurt[at]anbcs[dot]com)
# brand: Pinnacle Systems 800i
begin remote
name PCTV_800i
bits 13
flags RC5|CONST_LENGTH
eps 30
aeps 100
one 913 842
zero 913 842
plead 932
gap 112434
toggle_bit_mask 0x800
begin codes
key_mute 0x11C0
key_menu 0x11C1
key_power 0x11F9
key_volumeup 0x11C3
key_volumedown 0x11C9
key_channelup 0x11C6
key_channeldown 0x11CC
btn_1 0x11CF
btn_2 0x11D5
btn_3 0x11D0
btn_4 0x11D8
btn_5 0x11DB
btn_6 0x11DE
btn_7 0x11D1
btn_8 0x11E1
btn_9 0x11D2
btn_0 0x11E7
key_screen 0x11E4
key_t 0x11EA
key_rewind 0x11ED
key_playpause 0x11F0
key_fastforward 0x11F3
key_record 0x11F6
key_stop 0x11FC
key_question 0x11FF
end codes
end remote</pre>
<ul>
<li>Reste alors à redémarrer le service <em>Lirc</em>.<br /></li>
</ul>
<pre class="brush: bash">sudo service lircd restart</pre>
<p><br /><br /></p>
<h3><ins>Logiciel de pilotage de la playlist vidéo</ins> :</h3>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/Telecom_pinnacle.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.Telecom_pinnacle_s.png" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>La télécommande devrait être instantanément reconnue, reste alors à reprendre le code <em>Python</em> initié lors des bidouilles avec le <em>bluetooth</em> et de l'adapter pour fonctionner avec <em>Lirc</em>, avec l'import de la librairie correspondante, dans <a href="https://github.com/makotoworkshop/MiniGameCenter/blob/master/VideoOMXcontrol_GPIO_Multifonctions_Playlist_IR.py">le fichier <em>VideoOMXcontrol_GPIO_Multifonctions_Playlist_IR.py</em></a> .<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/Pilotage_IR_2_bb.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.Pilotage_IR_2_bb_s.png" alt="" style="float:left; margin: 0 1em 1em 0;" /></a><br /><br /><br /></p>
<p>Et comme il est maintenant possible de piloter plusieurs <em>Rpi</em>, en connectant les <em>GPIO6</em> de chacun d'eux sur le capteur <em>IR</em>, il faut ajouter un système de sélection permettant de choisir à quelle machine on décide de s'adresser. (indiqué dans le code par la balise <em>### Début de zone à adapter à chaque Rpi</em>).<br /><br /><br /></p>
<blockquote><p>- Ainsi pour piloter par exemple le <em>Rpi N°2</em>, on appuie simplement sur la touche <em>2</em>, et toutes les actions suivantes seront effective uniquement pour lui.<br />
- De même en appuyant sur la touche <em>Menu</em>, on pourra piloter toutes machines simultanément… On verra ça dans une démo vidéo plus bas.<br /></p></blockquote>
<pre class="brush: python">#!/usr/bin/env python2.7
# coding: utf-8
# Compatible Python3
# Programme pour RaspberryPi
# Joue une playliste de vidéos avec omxplayer
# Pilotage des vidéos et de la playliste avec télécommande IR
##################################
# Import des modules nécessaires #
##################################
from omxcontrol import *
import subprocess
import RPi.GPIO as GPIO
import time
from lirc import RawConnection
#############
# Init GPIO #
#############
PIN_BRIGHTNESS = 12 # GPIO18, PWM de réglage de la luminosité
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(PIN_BRIGHTNESS, GPIO.OUT)
####################
# Variable Globale #
####################
conn = RawConnection()
Activation = 0
#####################
# Ressources Vidéos #
#####################
def Selection(i):
switcher={
0:'/home/pi/deathsml_15-07-2015_1cc_h264-21.mp4',
1:'/home/pi/dodonpachi_23-02-2014_montage.mp4',
2:'/home/pi/espgal_26-02-2015_1cc_x264_crf23.mp4',
3:'/home/pi/galaxian.mp4',
}
return switcher.get(i,"Séléction Invalide")
#############
# Variables #
#############
vid = 0
brightness = 100
pwm = GPIO.PWM(PIN_BRIGHTNESS, 130) # channel et frequence en Hz, meilleur résultat à 120 et 130Hz
##########################
# Démarrage (facultatif) #
##########################
os.system('sudo pkill omxplayer') # S'assure qu'aucune instance omxplayer ne tourne encore, en cas de plantage
# omxplayer /home/pi/deathsml_15-07-2015_1cc_h264-21.mp4 --aspect-mode stretch -o local
pwm.start(brightness) # Démarrage de la PWM du rétroéclairage LCD au max (100)
###############################
# Fonctions pour Télécommande #
###############################
def bouton_VOLUMEMOINS():
# baisse le volume
print("Volume -")
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
def bouton_VOLUMEPLUS():
# augmente le volume
print("Volume +")
omx.action(OmxControl.ACTION_INCREASE_VOLUME)
def bouton_LUMMOINS():
global brightness
# Baisser la luminosité de l'écran LCD
brightness = brightness - 10
if brightness <= 10:
brightness = 10
print("Luminosité baissée au max")
print("Baisse la luminosite :", brightness)
pwm.ChangeDutyCycle(brightness)
def bouton_LUMPLUS():
global brightness
# Augmenter la luminosité de l'écran LCD
brightness = brightness + 10
if brightness >= 100:
brightness = 100
print("Luminosité augmentée au max")
print("Augmente la luminosite :", brightness)
pwm.ChangeDutyCycle(brightness)
def bouton_BACK():
# un petit saut un arriére dans la vidéo
print('<<')
omx.action(OmxControl.ACTION_SEEK_BACK_SMALL)
def bouton_PRECEDENT():
global vid
# Stopper la lecture et tombe donc en erreur via Try > Except de la boucle principale
print('Vidéo Précédente')
omx.action(OmxControl.ACTION_EXIT)
vid = vid - 1 # pour lire la vidéo précédente
if vid == -1:
vid = 3
print('vid : ',vid)
omx.action(OmxControl.ACTION_PAUSE)
def bouton_FORWARD():
# un petit saut en avant dans la vidéo
print('>>')
omx.action(OmxControl.ACTION_SEEK_FORWARD_SMALL)
def bouton_SUIVANT():
global vid
# Stopper la lecture et tombe donc en erreur via Try > Except de la boucle principale
print('Vidéo Suivante')
omx.action(OmxControl.ACTION_EXIT)
vid = vid + 1 # pour lire la vidéo suivante
if vid == 4:
vid = 0
print('vid : ',vid)
omx.action(OmxControl.ACTION_PAUSE)
def bouton_PLAY():
# Pause/Play la vidéo
print('Pause/Play')
omx.action(OmxControl.ACTION_PAUSE)
def bouton_STOP():
# Stoppe la vidéo
print('Stop')
omx.action(OmxControl.ACTION_EXIT)
def ProcessIRRemote():
#get IR command
#keypress format = (hexcode, repeat_num, command_key, remote_id)
try:
keypress = conn.readline(.0001)
# print(keypress)
except:
keypress=""
if (keypress != "" and keypress != None):
data = keypress.split()
sequence = data[1]
command = data[2]
#ignore command repeats
if (sequence != "00"):
return
# print(data)
# print(sequence)
print(command)
return command
#####################
# Boucle Principale #
#####################
while True:
try:
omx = OmxControl() # appel librairie OmxControl
Commande = ProcessIRRemote() # scrutte les touches de télécommande
### Début de zone à adapter à chaque Rpi (changer le bouton utilisé dans le if et elif)
if Commande == 'btn_1' :
Activation = 1 # activation de la réception pour ce Rpi
elif Commande == 'btn_2' or Commande == 'btn_3' or Commande == 'btn_4' or Commande == 'btn_5' or Commande == 'btn_6' or Commande == 'btn_7' or Commande == 'btn_8' or Commande == 'btn_9' or Commande == 'btn_0':
Activation = 0 # désactivation de la réception pour ce Rpi si récetion d'un code bouton qui ne lui est pas destiné
elif Commande == 'key_menu': # activation de la réception pour tous les Rpi
Activation = 1
#### Fin de zone
if Activation == 1:
if Commande == 'key_volumedown' :
bouton_VOLUMEMOINS() # Vol-
elif Commande == 'key_volumeup':
bouton_VOLUMEPLUS() # Vol+
elif Commande == 'key_screen':
bouton_LUMMOINS() # Lum-
elif Commande == 'key_t':
bouton_LUMPLUS() # lum+
elif Commande == 'key_rewind':
bouton_BACK() # <<
elif Commande == 'key_fastforward':
bouton_FORWARD() # >>
elif Commande == 'key_channeldown':
bouton_PRECEDENT() # précédent
elif Commande == 'key_channelup':
bouton_SUIVANT() # suivant
elif Commande == 'key_playpause':
bouton_PLAY() # Play/Pause
elif Commande == 'key_stop':
bouton_STOP() # Stop
except OmxControlError as ex: # si le controle ne voit plus D-Bus, relance la vidéo
print("ERREUR de contrôle D-Bus, relance de la vidéo")
print('Selection : ',Selection(vid))
subprocess.Popen(['omxplayer','--aspect-mode', 'stretch', '-o', 'local', Selection(vid)], stdin=subprocess.PIPE)
time.sleep(3) # tempo pour laisser le temps au player vidéo de démarrer
omx = OmxControl() # appel librairie OmxControl
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME) # -18 db
# on réinitialise les ports GPIO en sortie de script
GPIO.cleanup()
#####################################################
# Fonctions disponible dans la librairie OmxControl #
#####################################################
#ACTION_DECREASE_SPEED
#ACTION_INCREASE_SPEED
#ACTION_REWIND
#ACTION_FAST_FORWARD
#ACTION_SHOW_INFO
#ACTION_PREVIOUS_AUDIO
#ACTION_NEXT_AUDIO
#ACTION_PREVIOUS_CHAPTER
#ACTION_NEXT_CHAPTER
#ACTION_PREVIOUS_SUBTITLE
#ACTION_NEXT_SUBTITLE
#ACTION_TOGGLE_SUBTITLE
#ACTION_DECREASE_SUBTITLE_DELAY
#ACTION_INCREASE_SUBTITLE_DELAY
#ACTION_EXIT
#ACTION_PAUSE
#ACTION_DECREASE_VOLUME
#ACTION_INCREASE_VOLUME
#ACTION_SEEK_BACK_SMALL
#ACTION_SEEK_FORWARD_SMALL
#ACTION_SEEK_BACK_LARGE
#ACTION_SEEK_FORWARD_LARGE
#ACTION_SEEK_RELATIVE
#ACTION_SEEK_ABSOLUTE
#ACTION_STEP
#ACTION_BLANK
#ACTION_MOVE_VIDEO
#ACTION_HIDE_VIDEO
#ACTION_UNHIDE_VIDEO
#ACTION_HIDE_SUBTITLES</pre>
<p><br /><br /></p>
<h3><ins>Gestion du Power On/Off, une solution hybride</ins> :</h3>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/Pilotage_IR_3_bb.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.Pilotage_IR_3_bb_s.png" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<blockquote><p>Je suis assez content du résultat, ça fonctionne vraiment bien, et pour parachever le tout il faudrait pouvoir allumer et éteindre proprement toutes les mini-bornes également avec la télécommande.<br /></p></blockquote>
<ul>
<li>Pour ce faire on va profiter des trucs expérimentés lors des études précédentes pour mélanger les solutions :<br /></li>
</ul>
<p>- Je suis donc obligé de rajouter un fil sur la pin <em>Switch</em> du <em>PiHAT</em>, prévue pour cela… Un fil ce sera toujours mieux que de devoir tout câbler.<br />
- Et pour chaque <em>Rpi</em> donc, raccorder ce fil sur un <em>Arduino Pro-mini 3,3V</em>, qui prendra lui aussi le capteur <em>IR</em> en entrée…<br />
Ce qui m'arrange pas mal c'est de pouvoir alimenter le capteur <em>IR</em> par le <em>VCC</em> (3,3V) de l<em>'Arduino</em>, ce qui évite de tirer cette tension depuis un <em>Rpi</em> ou d'une alim dédiée.<br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04467.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04467_s.jpg" alt="" title=" " /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04466.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04466_s.jpg" alt="" title=" " /></a><br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04468.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04468_m.jpg" alt="" title=" " /></a><br /></p>
<ul>
<li>Et grâce à <a href="https://github.com/makotoworkshop/MiniGameCenter/blob/master/Pilotage_multi_Rpi_LIRC/Pilotage_multi_Rpi_LIRC.ino">ce programme</a>, on va pouvoir éteindre le système d'exploitation du <em>Rpi</em> sélectionné, et aussi le rallumer tranquillement. En cas de plantage logiciel, si le <em>Rpi</em> venait à ne plus répondre, on pourra aussi forcer la coupure de l'alimentation.<br /></li>
</ul>
<pre class="brush: cpp">/* Pilotage IR MiniGameCenter
* Gestion du power on/off */
#include <IRremote.h>
#include <SoftwareSerial.h>
//################
//# DÉCLARATIONS #
//################
//——— Prototypes Fonctions ———//
void decodage_touche(void);
void Selection(void);
void PowerONOFF(void);
void ForcePowerOFF(void);
//——— Pins ———//
#define RPi02 2
#define RPi03 3
#define RPi04 4
#define RPi05 5
#define RPi06 6
#define RPi07 7
#define RPi08 8
#define RPi09 9
#define RPi10 10
#define RPi01 11
int RECV_PIN = 12;
//——— Variables ———//
int Activation = 0;
//——— Lib ———//
IRrecv irrecv(RECV_PIN);
decode_results results;
//#########
//# SETUP #
//#########
void setup()
{
Serial.begin(9600);
Serial.println("Enabling IRin");
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
Serial.println("Enabled IRin");
pinMode(RPi01, OUTPUT);
pinMode(RPi02, OUTPUT);
pinMode(RPi03, OUTPUT);
pinMode(RPi04, OUTPUT);
pinMode(RPi05, OUTPUT);
pinMode(RPi06, OUTPUT);
pinMode(RPi07, OUTPUT);
pinMode(RPi08, OUTPUT);
pinMode(RPi09, OUTPUT);
pinMode(RPi10, OUTPUT);
digitalWrite(RPi01, HIGH);
digitalWrite(RPi02, HIGH);
digitalWrite(RPi03, HIGH);
digitalWrite(RPi04, HIGH);
digitalWrite(RPi05, HIGH);
digitalWrite(RPi06, HIGH);
digitalWrite(RPi07, HIGH);
digitalWrite(RPi08, HIGH);
digitalWrite(RPi09, HIGH);
digitalWrite(RPi10, HIGH);
}
//#############
//# FONCTIONS #
//#############
void decodage_touche() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
void Selection() {
switch (results.value) {
case 0x1CF: // Pinnacle PCTV_800i touche 1 (elle répond à deux codes, 1CF et 9CF)
Serial.println("Selection Rpi N°1");
results.value = 0; // empéche la répétition de touche
Activation = 1;
break;
case 0x9CF: // Pinnacle PCTV_800i touche 1 (elle répond à deux codes, 1CF et 9CF)
Serial.println("Selection Rpi N°1");
results.value = 0; // empéche la répétition de touche
Activation = 1;
break;
case 0x1D5: // Pinnacle PCTV_800i touche 2 (elle répond à deux codes, 1D5 et 9D5)
Serial.println("Selection Rpi N°2");
results.value = 0; // empéche la répétition de touche
Activation = 2;
break;
case 0x9D5: // Pinnacle PCTV_800i touche 2 (elle répond à deux codes, 1D5 et 9D5)
Serial.println("Selection Rpi N°2");
results.value = 0; // empéche la répétition de touche
Activation = 2;
break;
case 0x1D0: // Pinnacle PCTV_800i touche 3)
Serial.println("Selection Rpi N°3");
results.value = 0; // empéche la répétition de touche
Activation = 3;
break;
case 0x9D0: // Pinnacle PCTV_800i touche 3
Serial.println("Selection Rpi N°3");
results.value = 0; // empéche la répétition de touche
Activation = 3;
break;
case 0x1D8: // Pinnacle PCTV_800i touche 4)
Serial.println("Selection Rpi N°4");
results.value = 0; // empéche la répétition de touche
Activation = 4;
break;
case 0x9D8: // Pinnacle PCTV_800i touche 4
Serial.println("Selection Rpi N°4");
results.value = 0; // empéche la répétition de touche
Activation = 4;
break;
case 0x1DB: // Pinnacle PCTV_800i touche 5)
Serial.println("Selection Rpi N°5");
results.value = 0; // empéche la répétition de touche
Activation = 5;
break;
case 0x9DB: // Pinnacle PCTV_800i touche 5)
Serial.println("Selection Rpi N°5");
results.value = 0; // empéche la répétition de touche
Activation = 5;
break;
case 0x1DE: // Pinnacle PCTV_800i touche 6)
Serial.println("Selection Rpi N°6");
results.value = 0; // empéche la répétition de touche
Activation = 6;
break;
case 0x9DE: // Pinnacle PCTV_800i touche 6)
Serial.println("Selection Rpi N°6");
results.value = 0; // empéche la répétition de touche
Activation = 6;
break;
case 0x1D1: // Pinnacle PCTV_800i touche 7)
Serial.println("Selection Rpi N°7");
results.value = 0; // empéche la répétition de touche
Activation = 7;
break;
case 0x9D1: // Pinnacle PCTV_800i touche 7)
Serial.println("Selection Rpi N°7");
results.value = 0; // empéche la répétition de touche
Activation = 7;
break;
case 0x1E1: // Pinnacle PCTV_800i touche 8)
Serial.println("Selection Rpi N°8");
results.value = 0; // empéche la répétition de touche
Activation = 8;
break;
case 0x9E1: // Pinnacle PCTV_800i touche 8)
Serial.println("Selection Rpi N°8");
results.value = 0; // empéche la répétition de touche
Activation = 8;
break;
case 0x1D2: // Pinnacle PCTV_800i touche 9)
Serial.println("Selection Rpi N°9");
results.value = 0; // empéche la répétition de touche
Activation = 9;
break;
case 0x9D2: // Pinnacle PCTV_800i touche 9)
Serial.println("Selection Rpi N°9");
results.value = 0; // empéche la répétition de touche
Activation = 9;
break;
case 0x1E7: // Pinnacle PCTV_800i touche 0)
Serial.println("Selection Rpi N°10");
results.value = 0; // empéche la répétition de touche
Activation = 10;
break;
case 0x9E7: // Pinnacle PCTV_800i touche 0)
Serial.println("Selection Rpi N°10");
results.value = 0; // empéche la répétition de touche
Activation = 10;
break;
case 0x1C1: // Pinnacle PCTV_800i touche menu
Serial.println("Selection de tous les Rpi !");
results.value = 0; // empéche la répétition de touche
Activation = 11;
break;
case 0x9C1: // Pinnacle PCTV_800i touche menu
Serial.println("Selection de tous les Rpi !");
results.value = 0; // empéche la répétition de touche
Activation = 11;
break;
default:
// if nothing else matches, do the default
// default is optional
break;
}
}
void PowerONOFF(){
if ((Activation == 1) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°1");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi01, LOW); // Power ON Rpi N°1
delay(300); // simule un appuie court
digitalWrite(RPi01, HIGH);
}
else if ((Activation == 2) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°2");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi02, LOW); // Power ON Rpi N°2
delay(300); // simule un appuie court
digitalWrite(RPi02, HIGH);
}
else if ((Activation == 3) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°3");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi03, LOW); // Power ON Rpi N°3
delay(300); // simule un appuie court
digitalWrite(RPi03, HIGH);
}
else if ((Activation == 4) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°4");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi04, LOW); // Power ON Rpi N°4
delay(300); // simule un appuie court
digitalWrite(RPi04, HIGH);
}
else if ((Activation == 5) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°5");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi05, LOW); // Power ON Rpi N°5
delay(300); // simule un appuie court
digitalWrite(RPi05, HIGH);
}
else if ((Activation == 6) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°6");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi06, LOW); // Power ON Rpi N°6
delay(300); // simule un appuie court
digitalWrite(RPi06, HIGH);
}
else if ((Activation == 7) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°7");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi07, LOW); // Power ON Rpi N°7
delay(300); // simule un appuie court
digitalWrite(RPi07, HIGH);
}
else if ((Activation == 8) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°8");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi08, LOW); // Power ON Rpi N°8
delay(300); // simule un appuie court
digitalWrite(RPi08, HIGH);
}
else if ((Activation == 9) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°9");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi09, LOW); // Power ON Rpi N°9
delay(300); // simule un appuie court
digitalWrite(RPi09, HIGH);
}
else if ((Activation == 10) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF Rpi N°10");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi10, LOW); // Power ON Rpi N°10
delay(300); // simule un appuie court
digitalWrite(RPi10, HIGH);
}
else if ((Activation == 11) && ((results.value == 0x1F9) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Power ON/OFF de tous les Rpi !");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi01, LOW); // Power ON Rpi N°1
digitalWrite(RPi02, LOW); // Power ON Rpi N°2
digitalWrite(RPi03, LOW); // Power ON Rpi N°3
digitalWrite(RPi04, LOW); // Power ON Rpi N°4
digitalWrite(RPi05, LOW); // Power ON Rpi N°5
digitalWrite(RPi06, LOW); // Power ON Rpi N°6
digitalWrite(RPi07, LOW); // Power ON Rpi N°7
digitalWrite(RPi08, LOW); // Power ON Rpi N°8
digitalWrite(RPi09, LOW); // Power ON Rpi N°9
digitalWrite(RPi10, LOW); // Power ON Rpi N°10
delay(300); // simule un appuie court
digitalWrite(RPi01, HIGH);
digitalWrite(RPi02, HIGH);
digitalWrite(RPi03, HIGH);
digitalWrite(RPi04, HIGH);
digitalWrite(RPi05, HIGH);
digitalWrite(RPi06, HIGH);
digitalWrite(RPi07, HIGH);
digitalWrite(RPi08, HIGH);
digitalWrite(RPi09, HIGH);
digitalWrite(RPi10, HIGH);
}
}
void ForcePowerOFF(){
if ((Activation == 1) && ((results.value == 0x1F6) || (results.value == 0x9F9))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°1");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi01, LOW); // Force Power OFF Rpi N°1
delay(4000); // simule un appuie long
digitalWrite(RPi01, HIGH);
}
else if ((Activation == 2) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°2");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi02, LOW); // Force Power OFF Rpi N°2
delay(4000); // simule un appuie long
digitalWrite(RPi02, HIGH);
}
else if ((Activation == 3) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°3");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi03, LOW); // Force Power OFF Rpi N°3
delay(4000); // simule un appuie long
digitalWrite(RPi03, HIGH);
}
else if ((Activation == 4) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°4");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi04, LOW); // Force Power OFF Rpi N°4
delay(4000); // simule un appuie long
digitalWrite(RPi04, HIGH);
}
else if ((Activation == 5) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°5");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi05, LOW); // Force Power OFF Rpi N°5
delay(4000); // simule un appuie long
digitalWrite(RPi05, HIGH);
}
else if ((Activation == 6) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°6");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi06, LOW); // Force Power OFF Rpi N°6
delay(4000); // simule un appuie long
digitalWrite(RPi06, HIGH);
}
else if ((Activation == 7) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°7");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi07, LOW); // Force Power OFF Rpi N°7
delay(4000); // simule un appuie long
digitalWrite(RPi07, HIGH);
}
else if ((Activation == 8) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°8");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi08, LOW); // Force Power OFF Rpi N°8
delay(4000); // simule un appuie long
digitalWrite(RPi08, HIGH);
}
else if ((Activation == 9) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°9");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi09, LOW); // Force Power OFF Rpi N°9
delay(4000); // simule un appuie long
digitalWrite(RPi09, HIGH);
}
else if ((Activation == 10) && ((results.value == 0x1F6) || (results.value == 0x9F6))) {
Activation = 0;
Serial.println("Force Power OFF Rpi N°10");
results.value = 0; // empéche la répétition de touche
digitalWrite(RPi10, LOW); // Force Power OFF Rpi N°10
delay(4000); // simule un appuie long
digitalWrite(RPi10, HIGH);
}
}
//#############
//# PROGRAMME #
//#############
void loop() {
decodage_touche(); // pour récupérer le code des touches
Selection(); // sélectionne le Rpi à opérer
PowerONOFF(); // appelle le script de powerOff, seulement si le Rpi a été sélectionné avant
ForcePowerOFF(); // Coupe l'alim du Rpi brutalement, seulement si le Rpi a été sélectionné avant
delay(100);
}</pre>
<ul>
<li>Vidéo démo :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/16bca09a-7577-4f31-a515-e14500f65ab5?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><br /></p>
<h3><ins>Pour finir</ins> :</h3>
<ul>
<li>Je repense au <em>Bluetooth</em> qui de fait se retrouve par défaut alimenté en permanence sur les <em>Rpi</em>, alors on va le désactiver pour économiser une peu de courant :<br /></li>
</ul>
<pre class="brush: bash">sudo echo "dtoverlay=disable-bt" | sudo tee -a /boot/config.txt
sudo systemctl disable hciuart.service
sudo systemctl disable bluetooth.service
sudo apt purge bluez -y
sudo apt autoremove -y</pre>
<p>Après celà on économise 0,011 A.<br /><br /></p>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2020/05/27/minigamecenter07">À Suivre…</a><br /><br /></h3>
<p>Ressources :<br />
- <a href="https://www.instructables.com/id/Setup-IR-Remote-Control-Using-LIRC-for-the-Raspber/">https://www.instructables.com/id/Setup-IR-Remote-Control-Using-LIRC-for-the-Raspber/</a><br />
- <a href="https://www.instructables.com/id/Easy-Setup-IR-Remote-Control-Using-LIRC-for-the-Ra/">https://www.instructables.com/id/Easy-Setup-IR-Remote-Control-Using-LIRC-for-the-Ra/</a><br /></p>http://burogu.makotoworkshop.org/index.php?post/2020/05/23/minigamecenter06#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/693Mini Game Center -5-urn:md5:1774e86eaae9c1fa82a386c7840a294a2020-05-25T18:32:00+02:002020-06-02T10:39:01+02:00makoto doushiteÉlectroniqueCandy-cabDIYJeux videoRaspBerryPIRaspbianRétrogamingVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2020/03/24/minigamecenter04">Nous revoici pour la suite de notre étude sur le <em>MiniGameCenter</em></a> :<br /></p>
<blockquote><p>J'ai nommé celle-ci de cette manière pour évoquer une salle d'arcade, réunissant donc plusieurs bornes… sinon j'aurais plutôt dit « MiniBorne »…<br />
L'important au final c'est qu'on puisse donc interagir avec plusieurs machines sans que cela ne devienne compliqué, ni que ça ressemble à une usine à gaz.<br />
Et c'est pour cette raison que j'écris ceci… Je me suis rendu compte que mon idée de départ, à savoir comme on l'a vu lors du <a href="http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter03">billet N°3</a>, piloter chaque borne par ses <em>GPIO</em> se révélerait assez inadaptée, nous allons voir pourquoi.<br /></p></blockquote>
<p>C'est impec pour une seule borne, mais pour plusieurs on se retrouverait alors avec un tas de boutons poussoirs de partout.<br /></p>
<ul>
<li>J'ai alors pensé à les mutualiser, c'est à dire relier ensembles les GPIO respectifs de chaque <em>Rpi</em> et d'utiliser la masse comme sélecteur de <em>Rpi</em>. En effet si on débranche la masse, de tous les <em>Rpi</em> sauf un seul, alors on pilotera seulement celui-ci avec les boutons. Pour cela j'aurais utilisé des <em><a href="https://www.youtube.com/watch?v=TbLGdpBpSCI">CD4066B</a></em> (quad bilateral switch), piloté avec un <em>Arduino</em>, et quelques boutons supplémentaire pour choisir à quel Rpi on se serait adressé. Je n'ai dessiné que pour deux <em>Rpi</em>, mais on peut en rajouter presque autant qu'on veut (la limite venant du nombre d'in/out de l'arduino):<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/CD4066.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.CD4066_m.png" alt="" /></a><br /></p>
<ul>
<li>Et puis… bon, au final c'est plus un hack qu'une solution académique, alors je me serais orienté vers une solution à base de <em>74LS573</em> (Octal D-Type Latch with 3-STATE Outputs).</li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/74LS573.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.74LS573_m.png" alt="" /></a><br /></p>
<blockquote><p>Et puis en dessinant tout ça, de vite me rendre compte que Ok, j'ai un nombre minimum de boutons poussoir, mais il va y avoir un gros tas de câbles à passer dans le faux plancher du <em>MiniGameCenter</em>, et des boutons à mettre quelque part, et qu'en plus de ça, si on le place en vitrine, bah on pilote rien sans avoir à l'ouvrir pour actionner les boutons… Cerise sur le gâteau, faut en plus se taper une nouvelle carte électronique à réaliser, voire à revoir le <em>Pi-Hat</em> pour y intégrer les <em>74LS573</em>.<br /></p></blockquote>
<ul>
<li>Alors pour le pilotage à travers la vitrine, j'ai expérimenté très facilement d'utiliser un capteur infrarouge sur l<em>'Arduino</em> et une télécommande de récup.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04455.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04455_m.jpg" alt="" title=" " /></a><br />
Ça fonctionne très bien, et j'aurais conservé l'idée à base de <em>74LS573</em> + boutons + <em>Arduino</em> + capteur <em>IR</em>, mais non, tout ce câblage et une <em>PCB</em> à faire… La flemme, il me fallait continuer à expérimenter d'autres solutions, et puis j'ai repensé au fait que le <em>Rpi Zero W</em> embarquait un module <em>Bluetooth</em>…<br /><br /></p> <h3><ins>Pilotage <em>Bluetooth</em> avec un module <em>HC-05</em></ins> :<br /></h3>
<p>J'ai donc utilisé un module <em>HC-05</em>, interfacé à un <em>Arduino Pro Mini 3,3V</em>, et un capteur <em>IR</em> pour tester la chose.<br />
<strong>- <ins>Côté <em>Arduino</em></ins> :</strong><br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04461.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04461_m.jpg" alt="" title=" " /></a><br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04459.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04459_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" title=" " /></a>
- Le capteur <em>IR</em> est câblé en pin 12 et alimenté en 3,3V par l<em>'Arduino</em>.<br />
- Le module <em>HC-05</em> est câblé <em>RxD</em> en pin 8, <em>TxD</em> en pin 7, et alimenté en 5 Volts par l<em>'USB</em> du programmateur.<br /></p>
<blockquote><p>Attention les signaux de ce module travaillent effectivement en 3,3V, c'est pourquoi j'ai fait le choix d'un <em>Arduino 3,3V</em>, comme c'était le cas aussi pour le pilotage des <em>GPIO</em> du <em>Rpi</em> car celui-ci attend du 3,3V (petit « détail » à ne jamais oublier !).<br /></p></blockquote>
<p><a href="https://github.com/makotoworkshop/MiniGameCenter/blob/master/Pilotage_multi_Rpi_Bluetooth/Pilotage_multi_Rpi_Bluetooth.ino">Voici le code <em>Arduino</em></a> qui reçoit les commandes infra-rouge et les envoies sur la liaison série <em>bluetooth</em> :<br /></p>
<pre class="brush: cpp">#include <IRremote.h>
#include <SoftwareSerial.h>
//################
//# DÉCLARATIONS #
//################
//——— Prototypes Fonctions ———//
void arcade(void);
void decodage_touche(void);
//——— Pins ———//
int RECV_PIN = 12;
#define pinBluetooth_rx 7 // Broche 11 en tant que RX, à raccorder sur TX du HC-05
#define pinBluetooth_tx 8 // Broche 10 en tant que TX, à raccorder sur RX du HC-05
SoftwareSerial SerialBluetooth(pinBluetooth_rx, pinBluetooth_tx);
//——— Lib ———//
IRrecv irrecv(RECV_PIN);
decode_results results;
//#########
//# SETUP #
//#########
void setup()
{
Serial.begin(9600);
// In case the interrupt driver crashes on setup, give a clue
// to the user what's going on.
Serial.println("Enabling IRin");
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
Serial.println("Enabled IRin");
// INITIALISATION PORT SERIAL BLUETOOTH
pinMode(pinBluetooth_rx, INPUT);
pinMode(pinBluetooth_tx, OUTPUT);
SerialBluetooth.begin(9600);
SerialBluetooth.println("Hello Viewer");
}
//#############
//# FONCTIONS #
//#############
void arcade() {
switch (results.value) {
case 0xF730CF: // Vol-
Serial.println("R2 — Vol-");
SerialBluetooth.println("R2"); // mot envoyé pour commande en bluetooth
results.value =0; // empéche la répétition de touche
break;
case 0xF7B04F: // Vol+
Serial.println("G2 — Vol+");
SerialBluetooth.println("G2"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF7708F: // Lum-
Serial.println("B2 — Lum-");
SerialBluetooth.println("B2"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF7F00F: // Lum+
Serial.println("STROBE — Lum+");
SerialBluetooth.println("STROBE"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF708F7: // <<
Serial.println("R3 — <<");
SerialBluetooth.println("R3"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF78877: // >>
Serial.println("G3 — >>");
SerialBluetooth.println("G3"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF748B7: // Précédent
Serial.println("B3 — Précédent");
SerialBluetooth.println("B3"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF7C837: // Suivant
Serial.println("Fade — Suivant");
SerialBluetooth.println("FADE"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF728D7: // Play/pause
Serial.println("R4 — Play/pause");
SerialBluetooth.println("R4"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF7A857: // Stop
Serial.println("G4 — Stop");
SerialBluetooth.println("G4"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
case 0xF7E817: // Power
Serial.println("Smooth — Power");
SerialBluetooth.println("SMOOTH"); // mot envoyé pour commande en bluetooth
results.value =0;
break;
default:
// if nothing else matches, do the default
// default is optional
break;
}
}
// Mapping télécommande :
// ON OFF
//F700FF F7807F F740BF F7C03F
// R0 G0 B0 W
//F720DF F7A05F F7609F F7E01F
// R1 G1 B1 Flash
//F710EF F7906F F750AF F7D02F
// R2 G2 B2 Strobe
//F730CF F7B04F F7708F F7F00F
// R3 G3 B3 Fade
//F708F7 F78877 F748B7 F7C837
// R4 G4 B4 Smooth
//F728D7 F7A857 F76897 F7E817
void decodage_touche() {
if (irrecv.decode(&results)) {
// Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
//#############
//# PROGRAMME #
//#############
void loop() {
decodage_touche(); // pour récupérer le code des touches
arcade();
delay(100);
}</pre>
<p><br /></p>
<p><strong>- <ins>Côté <em>Raspberry</em></ins> :</strong><br /></p>
<ul>
<li>Prérequis, installation du <em>Bluetooth</em> sur le <em>Raspberry</em> :<br /></li>
</ul>
<pre class="brush: bash">sudo apt install bluetooth pi-bluetooth blueman bluez-tools</pre>
<ul>
<li>Pour vérifier on peut lancer la commande permettant d'obtenir les informations sur le <em>bluetooth</em> embarqué du <em>Rpi</em> :<br /></li>
</ul>
<pre class="brush: bash">hciconfig</pre>
<ul>
<li>Ensuite on va récupérer l'adresse du module <em>HC-05</em> dont on aura besoin pour la suite, en lançant le programme <em>bluetoothctl</em> :<br /></li>
</ul>
<pre class="brush: bash">bluetoothctl</pre>
<ul>
<li>On entre alors quelques commande pour y parvenir :<br /></li>
</ul>
<pre class="brush: bash">[bluetooth]# agent on
[bluetooth]# power on
[bluetooth]# scan on</pre>
<ul>
<li>Là il faut patienter jusqu'à voir passer le module :<br /></li>
</ul>
<pre class="brush: bash">Discovery started
[…]
[NEW] Device 00:19:09:11:16:11 HC-05</pre>
<ul>
<li>Astuce, si jamais on veut ré-accéder à cette info, car une fois scanné, l'appareil est mémorisé et n'apparaîtra plus. Pour le lister il faut faire :<br /></li>
</ul>
<pre class="brush: bash">[bluetooth]# devices</pre>
<p>Pour sortir, taper « <em>Exit</em> ».<br /></p>
<ul>
<li>Une commande utile aussi pour « pinger » un appareil et voir s'il est en état de répondre :<br /></li>
</ul>
<pre class="brush: bash">sudo l2ping 00:19:09:11:16:11</pre>
<pre class="brush: bash">Ping: 00:19:09:11:16:11 from B8:27:EB:F2:84:96 (data size 44) ...
44 bytes from 00:19:09:11:16:11 id 0 time 41.76ms
44 bytes from 00:19:09:11:16:11 id 1 time 9.85ms
44 bytes from 00:19:09:11:16:11 id 2 time 12.04ms</pre>
<ul>
<li>En cas de soucis on pourra éventuellement utiliser ces commandes pour relancer le pilote : <br /></li>
</ul>
<pre class="brush: bash">sudo service bluetooth stop
sudo service bluetooth start</pre>
<ul>
<li>Bien, on va pouvoir maintenant interfacer le <em>HC-05</em> et le <em>Raspberry</em> à l'aide de ces deux commandes :<br /></li>
</ul>
<pre class="brush: bash">bt-agent -c NoInputNoOutput -p /home/pi/bluethooth.cfg &
sudo rfcomm connect hci0 00:19:09:11:16:11 &</pre>
<p>- La première permet de lancer l'agent <em>bluetooth</em> dans un mode non interactif, pour lequel on spécifie les paramètres dans le fichier <em>bluethooth.cfg</em> qui contient donc l'adresse et le code pin du <em>HC-05</em> (d'usine c'est 1234).<br />
- La seconde initie la connexion série entre les deux appareils.<br /></p>
<pre class="brush: bash">00:19:09:11:16:11 1234</pre>
<ul>
<li>Indication, quand la connexion n'est pas établie, la led du module clignote en permanence, alors que si la connexion est ok, le module clignote 2 fois toutes les 5 secondes.<br /></li>
</ul>
<ul>
<li>Pour le code <em>Python</em>, nous aurons besoin de la librairie <em>Serial</em> :<br /></li>
</ul>
<pre class="brush: bash">sudo apt install python-serial python3-serial</pre>
<ul>
<li><a href="https://github.com/makotoworkshop/MiniGameCenter/blob/master/VideoOMXcontrol_GPIO_Multifonctions_Playlist_Bluetooth.py">Voici le code <em>python</em></a> qui écoute la liaison série <em>bluetooth</em>, et lorsqu'il reçoit un mot correspondant à une touche, effectue l'action demandée.<br /></li>
</ul>
<blockquote><p>Par exemple, si on appuie sur la touche de la télécommande <em>IR</em> identifée comme étant « 0xF748B7 » par l<em>'Arduino</em>, celui-ci envoie alors le mot « B3 » sur la liaison série <em>bluetooth</em>. Le programme <em>python</em> reçoit le mot, et demandera à <em>Omxplayer</em> de jouer la vidéo précédente.<br /></p></blockquote>
<pre class="brush: python">#!/usr/bin/env python2.7
# coding: utf-8
# Compatible Python3
# VideoOMXcontrol_GPIO_Multifonctions_Playlist_Bluetooth.py
# Programme pour RaspberryPi
# Joue une playliste de vidéos avec omxplayer
# Pilotage des vidéos et de la playliste avec une télécommande IR via un Arduino + bluetooth
##################################
# Import des modules nécessaires #
##################################
from omxcontrol import *
import subprocess
import RPi.GPIO as GPIO
import time
import serial
#############
# Init GPIO #
#############
PIN_BRIGHTNESS = 12 # GPIO18, PWM de réglage de la luminosité
PIN_POWEROFF = 40 # GPIO21, Uniquement PowerOff logiciel. Le powerOn, via Arduino + switch RpiOnOff
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(PIN_BRIGHTNESS, GPIO.OUT)
GPIO.setup(PIN_POWEROFF, GPIO.OUT)
bluetoothSerial = serial.Serial("/dev/rfcomm0",baudrate=115200)
print("Bluetooth connected")
#####################
# Ressources Vidéos #
#####################
def Selection(i):
switcher={
0:'/home/pi/deathsml_15-07-2015_1cc_h264-21.mp4',
1:'/home/pi/dodonpachi_23-02-2014_montage.mp4',
2:'/home/pi/espgal_26-02-2015_1cc_x264_crf23.mp4',
3:'/home/pi/galaxian.mp4',
}
return switcher.get(i,"Séléction Invalide")
#############
# Variables #
#############
vid = 0
brightness = 100
pwm = GPIO.PWM(PIN_BRIGHTNESS, 130) # channel et frequence en Hz, meilleur résultat à 120 et 130Hz
##########################
# Démarrage (facultatif) #
##########################
os.system('sudo pkill omxplayer') # S'assure qu'aucune instance omxplayer ne tourne encore, en cas de plantage
# omxplayer /home/pi/deathsml_15-07-2015_1cc_h264-21.mp4 --aspect-mode stretch -o local
pwm.start(brightness) # Démarrage de la PWM du rétroéclairage LCD au max (100)
###############################
# Fonctions pour Télécommande #
###############################
def bouton_VOLUMEMOINS():
# baisse le volume
print("Volume -")
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
def bouton_VOLUMEPLUS():
# augmente le volume
print("Volume +")
omx.action(OmxControl.ACTION_INCREASE_VOLUME)
def bouton_LUMMOINS():
global brightness
# Baisser la luminosité de l'écran LCD
brightness = brightness - 10
if brightness <= 10:
brightness = 10
print("Luminosité baissée au max")
print("Baisse la luminosite :", brightness)
pwm.ChangeDutyCycle(brightness)
def bouton_LUMPLUS():
global brightness
# Augmenter la luminosité de l'écran LCD
brightness = brightness + 10
if brightness >= 100:
brightness = 100
print("Luminosité augmentée au max")
print("Augmente la luminosite :", brightness)
pwm.ChangeDutyCycle(brightness)
def bouton_BACK():
# un petit saut un arriére dans la vidéo
print('<<')
omx.action(OmxControl.ACTION_SEEK_BACK_SMALL)
def bouton_PRECEDENT():
global vid
# Stopper la lecture et tombe donc en erreur via Try > Except de la boucle principale
print('Vidéo Précédente')
omx.action(OmxControl.ACTION_EXIT)
vid = vid - 1 # pour lire la vidéo précédente
if vid == -1:
vid = 3
print('vid : ',vid)
omx.action(OmxControl.ACTION_PAUSE)
def bouton_FORWARD():
# un petit saut en avant dans la vidéo
print('>>')
omx.action(OmxControl.ACTION_SEEK_FORWARD_SMALL)
def bouton_SUIVANT():
global vid
# Stopper la lecture et tombe donc en erreur via Try > Except de la boucle principale
print('Vidéo Suivante')
omx.action(OmxControl.ACTION_EXIT)
vid = vid + 1 # pour lire la vidéo suivante
if vid == 4:
vid = 0
print('vid : ',vid)
omx.action(OmxControl.ACTION_PAUSE)
def bouton_PLAY():
# Pause/Play la vidéo
print('Pause/Play')
omx.action(OmxControl.ACTION_PAUSE)
def bouton_STOP():
# Stoppe la vidéo
print('Stop')
omx.action(OmxControl.ACTION_EXIT)
def bouton_POWEROFF():
# activer le gpio21
GPIO.output(PIN_POWEROFF, GPIO.HIGH)
print('PowerOFF')
#####################
# Boucle Principale #
#####################
while True:
try:
omx = OmxControl() # appel librairie OmxControl
data = bluetoothSerial.readline() # donnée reçue via bluetooth
print(data)
print(type(data)) # Si python2 c'est un string, si python3 c'est un byte
print('debut',data,'fin') # Permet de révéler que la valeur envoyer présent \r\n en fin de mot
time.sleep(0.1)
if data.decode("utf-8") == 'R2\r\n' : # .decode("utf-8") pour convertir le byte en string en python3 (pas d'impact sur le résultat en python2)
bouton_VOLUMEMOINS() # Vol-
elif data.decode("utf-8") == 'G2\r\n':
bouton_VOLUMEPLUS() # Vol+
elif data.decode("utf-8") == 'B2\r\n':
bouton_LUMMOINS() # Lum-
elif data.decode("utf-8") == 'STROBE\r\n':
bouton_LUMPLUS() # lum+
elif data.decode("utf-8") == 'R3\r\n':
bouton_BACK() # <<
elif data.decode("utf-8") == 'G3\r\n':
bouton_FORWARD() # >>
elif data.decode("utf-8") == 'B3\r\n':
bouton_PRECEDENT() # précédent
elif data.decode("utf-8") == 'FADE\r\n':
bouton_SUIVANT() # suivant
elif data.decode("utf-8") == 'R4\r\n':
bouton_PLAY() # Play/Pause
elif data.decode("utf-8") == 'G4\r\n':
bouton_STOP() # Stop
elif data.decode("utf-8") == 'SMOOTH\r\n':
bouton_POWEROFF() # Power off
except OmxControlError as ex: # si le controle ne voit plus D-Bus, relance la vidéo
print("ERREUR de contrôle D-Bus, relance de la vidéo")
print('Selection : ',Selection(vid))
subprocess.Popen(['omxplayer','--aspect-mode', 'stretch', '-o', 'local', Selection(vid)], stdin=subprocess.PIPE)
time.sleep(3) # tempo pour laisser le temps au player vidéo de démarrer
omx = OmxControl() # appel librairie OmxControl
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME) # -18 db
# on réinitialise les ports GPIO en sortie de script
GPIO.cleanup()
#####################################################
# Fonctions disponible dans la librairie OmxControl #
#####################################################
#ACTION_DECREASE_SPEED
#ACTION_INCREASE_SPEED
#ACTION_REWIND
#ACTION_FAST_FORWARD
#ACTION_SHOW_INFO
#ACTION_PREVIOUS_AUDIO
#ACTION_NEXT_AUDIO
#ACTION_PREVIOUS_CHAPTER
#ACTION_NEXT_CHAPTER
#ACTION_PREVIOUS_SUBTITLE
#ACTION_NEXT_SUBTITLE
#ACTION_TOGGLE_SUBTITLE
#ACTION_DECREASE_SUBTITLE_DELAY
#ACTION_INCREASE_SUBTITLE_DELAY
#ACTION_EXIT
#ACTION_PAUSE
#ACTION_DECREASE_VOLUME
#ACTION_INCREASE_VOLUME
#ACTION_SEEK_BACK_SMALL
#ACTION_SEEK_FORWARD_SMALL
#ACTION_SEEK_BACK_LARGE
#ACTION_SEEK_FORWARD_LARGE
#ACTION_SEEK_RELATIVE
#ACTION_SEEK_ABSOLUTE
#ACTION_STEP
#ACTION_BLANK
#ACTION_MOVE_VIDEO
#ACTION_HIDE_VIDEO
#ACTION_UNHIDE_VIDEO
#ACTION_HIDE_SUBTITLES</pre>
<p><br /><br /></p>
<ul>
<li>Pour automatiser le fonctionnement de la borne, on peut mettre ceci dans le script de démarrage du programme python <em>arcade.sh</em> :</li>
</ul>
<pre class="brush: bash">#!/bin/bash
# Init de l'agent Bluetooth sans interaction (code-pin)
bt-agent -c NoInputNoOutput -p /home/pi/bluethooth.cfg &
# init de l'écran LCD
/usr/local/bin/fbcp &
# démarrage de la connexion série via Bluetooth
sudo rfcomm connect hci0 00:19:09:11:16:11 &
sleep 7
# Lancement du programme
/usr/bin/python3 /home/pi/omxcontrol/VideoOMXcontrol_GPIO_Multifonctions_Playlist_Bluetooth.py</pre>
<ul>
<li>Une petite démo en vidéo :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/6604ca96-8c38-462e-94a8-87590bf319d8?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p>Les hauts parleurs qui grésillent, le « Power ON » impossible, et surtout de me rendre compte que malgré tous mes efforts, pas moyen de piloter plusieurs <em>Rpi</em> avec ce matériél (liaison série exclusive, module qui ne s'appaire qu'avec un seul <em>Rpi</em> à la fois), peut-être avec d'autre types de module ?<br />
Bref, ce n'est pas encore la bonne méthode, ou du moins elle ne me convient pas, c'était intéressant, et je vais continuer à tester des trucs…<br /><br /></p>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2020/05/23/minigamecenter06">À suivre…</a><br /><br /></h3>
<p><ins>Ressources</ins> :<br />
- <a href="https://www.alex-design.fr/Projets-R-A/Douche-connectee/Connection-bluetooth-entre-Arduino-et-Raspberry-Pi-3">https://www.alex-design.fr/Projets-R-A/Douche-connectee/Connection-bluetooth-entre-Arduino-et-Raspberry-Pi-3</a><br />
- <a href="https://github.com/Pi4IoT/Interfaces/tree/master/bluetooth">https://github.com/Pi4IoT/Interfaces/tree/master/bluetooth</a><br />
- <a href="https://stackoverflow.com/questions/34709583/bluetoothctl-set-passkey">https://stackoverflow.com/questions/34709583/bluetoothctl-set-passkey</a><br />
- <a href="https://www.kynetics.com/docs/2018/pairing_agents_bluez/">https://www.kynetics.com/docs/2018/pairing_agents_bluez/</a><br />
- <a href="https://www.youtube.com/watch?v=lEFRYvNjsWg">https://www.youtube.com/watch?v=lEFRYvNjsWg</a><br /></p>http://burogu.makotoworkshop.org/index.php?post/2020/05/17/minigamecenter05#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/692Hoodie pour SmartDollurn:md5:8b591e586e0c8f81b123da3a57c379ce2020-05-09T20:56:00+02:002020-05-10T10:51:51+02:00makoto doushiteBJDBonhommeCoutureDIYVidéos<blockquote><p>Et donc passons maintenant à la réalisation de ce <em>hoddie</em>, alias <em><a href="https://shop.smartdoll.jp/collections/learn/products/hooded-cardigan-pattern">Hooded Cardigan</a></em>, grâce au patron fournit par Danny et ses équipes, comme je l'indiquais dans <a href="http://burogu.makotoworkshop.org/index.php?post/2020/05/04/bjd-chaussettes">le billet précédent</a>.<br /></p></blockquote>
<p>On va se contenter de suivre au mieux les instructions de couture du patron, en s'aidant des photos des réalisations postées par d'autres couturiers·ères.<br /></p>
<ul>
<li>T'as pas d'imprimante ? Calque ton écran !<br /></li>
</ul>
<p>Une fois le patron découpé et réparti sur un vieux t-shirt, il suffit de découper toutes les pièces en nombre suffisant.<br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04344.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04344_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04345.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04345_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/20200331_200456.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.20200331_200456_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04346.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04346_s.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>J'ai commencé par les manches, en assemblant les deux pièces, sans comprendre pourquoi le revers était plus petit que la largeur de la manche… Je me suis tout de même débrouillé comme ça, sans penser qu'il s'agissait en fait de placer les deux piéces bord à bord afin d'étirer le revers lors de la couture, pour avoir un revers resserré au niveau du poignet. Première erreur…<br /></li>
</ul>
<p>Mais bon, le résultat est tout de même satisfaisant.<br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/20200331_193555.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.20200331_193555_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/20200331_193959.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.20200331_193959_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/20200331_195635.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.20200331_195635_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/20200331_200300.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.20200331_200300_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/20200331_200348.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.20200331_200348_m.jpg" alt="" /></a><br /></p>
<ul>
<li>Une petite vidéo de l'opération :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/53c089f9-ed9d-4876-8cb4-0297d6a21b67?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<ul>
<li>Ensuite les poches à coudre sur l'intérieur des pièces du devant.<br /></li>
</ul>
<p>D'abord découpé et cousu le rebord de la poche, puis couture zigzag sur la pièce de poche pour la sécuriser .<br />
Une fois les deux pièces épinglées ensemble côté intérieur donc, couture de la poche.<br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04347.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04347_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04348.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04348_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04349.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04349_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04351.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04351_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04350.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04350_m.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>Assemblage des deux côtés ainsi préparés avec le dos du <em>hoodie</em>, facile, suffit de suivre la ligne.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04352.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04352_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04353.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04353_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04354.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04354_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04355.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04355_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04356.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04356_m.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>Maintenant on va pouvoir assembler le rebord inférieur.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04359.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04359_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a>
Cette fois la bande est bien de la même longueur que l'assemblage précédent. Après l'avoir préparée en cousant ses côtés, la coudre en opposition tout le long, puis la rabattre vers le bas, et effectuer une surpiqure pour bien maintenir ce rabat en place. J'ai dû recommencer deux fois en constatant que la surpiqure faisait gondoler le tissus, mais rien n'y a fait, sans doute à cause de la nature quelque peu étirable du tissus choisis.<br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04357.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04357_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04360.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04360_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04361.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04361_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04362.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04362_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04363.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04363_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04364.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04364_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04365.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04365_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04366.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04366_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04367.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04367_t.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>La couture des épaules ne pose pas de difficultés, une fois sur l'envers, avec une simple couture droite, et des points zigzag de sécurité.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04368.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04368_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04369.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04369_s.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>Passons au plus complexe avec l'assemblage des manches au reste.<br /></li>
</ul>
<p>Au départ j'ai voulu épingler les deux parties comme sur la première photo, mais la manche gênait vraiment la machine à coudre, alors j'ai plutôt fait comme sur la deuxième photo, en glissant la manche à l'intérieur, et c'est plutôt pas mal comme astuce… Heureusement car vu la taille très petite (je rappelle l'échelle, 1/3) de l'ouvrage, ce passage à la machine a demandé beaucoup d'adresse, mais j'y suis au arrivé finalement patiemment.<br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04370.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04370_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04371.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04371_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04372.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04372_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04373.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04373_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04374.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04374_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04375.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04375_s.jpg" alt="" /></a><br /></p>
<blockquote><p>Et c'est là que je suis tombé sur cette vidéo, pourtant intégrée en bas de la page <em>Hooded Cardigan Pattern</em>.<br /></p></blockquote>
<center><iframe width="560" height="315" src="https://www.youtube.com/embed/umsIdVpZD0k" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></center>
<p>Je n'avais pas fait attention, rivé sur les photos au dessus, et je découvrais alors une façon de faire vraiment plus simple pour l'assemblage, et réalisais donc ma seconde erreur commise dans l'ordre de couture des manches.<br />
Donc, ne faites pas comme moi ! Ma manière de faire sied tout à fait à un vêtement à taille humaine, mais ici vu l'échelle 1/3, il aurait fallu faire preuve de plus d'ingéniosité pour faciliter l'opération. Idem pour les revers de manches, où j'ai alors compris la raison de ce revers plus petit qu'il eu fallu étirer.<br /></p>
<blockquote><p>Merci donc à <em>Samsally UnderOrange</em> pour ces excellentes démonstrations vidéos.<br /></p></blockquote>
<p><br /></p>
<ul>
<li>Retournons à l'étape suivante, avec l'assemblage de la capuche…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04378.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04378_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04379.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04379_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04381.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04381_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04382.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04382_t.jpg" alt="" /></a><br /><br /></p>
<ul>
<li>Et enfin de la fermeture éclair, que je n'ai pas cousue jusqu'en haut comme sur le modèle original, mais coupée pour l'arrêter au col, afin de placer un lacet de chaussure dans l'ourlet de la capuche.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04387.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04387_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04388.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04388_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04389.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04389_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04390.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04390_t.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04392.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04392_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04394.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04394_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/dsc04393.jpg"><img src="http://burogu.makotoworkshop.org/public/couture/bjd-hoodie/.dsc04393_m.jpg" alt="" /></a><br /></p>
<ul>
<li>Et voilà !<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04416.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04416_m.jpg" alt="" style="float:left; margin: 0 1em 1em 0;" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04432.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04432_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04435.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04435_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04412.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04412_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04413.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04413_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04418.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04418_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04422.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04422_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04431.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04431_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04420.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04420_t.jpg" alt="" /></a><br /></p>
<p><a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04414.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04414_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04417.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04417_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04411.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04411_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04428.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04428_t.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/dollfie/kizuna/dsc04415.jpg"><img src="http://burogu.makotoworkshop.org/public/dollfie/kizuna/.dsc04415_t.jpg" alt="" /></a><br /></p>http://burogu.makotoworkshop.org/index.php?post/2020/05/04/bjd-hoodie#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/690Mini Game Center -4-urn:md5:7c8e5e83fe355858c018c6d36f74d5b22020-03-28T16:34:00+01:002020-06-02T10:39:22+02:00makoto doushiteÉlectroniqueCandy-cabDIYJeux videoRaspBerryPIRaspbianRétrogamingVidéosÉlectronique <p><a href="http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter03">Suite de l'étude précédente :</a><br /></p>
<ul>
<li>Rien de nouveau pour ce billet, juste un point d'étape pour visualiser la réalisation du <em>Pi HAT, Version 1.1</em> dont je parlais dans le <a href="http://burogu.makotoworkshop.org/index.php?post/2018/10/28/minigamecenter01">billet N°1</a> de cette série.<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts allow-popups" src="https://peertube.makotoworkshop.org/videos/embed/fdfcf770-affe-4dc3-ada7-c403e9533daa?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2020/05/17/minigamecenter05">À suivre…</a></h3>http://burogu.makotoworkshop.org/index.php?post/2020/03/24/minigamecenter04#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/685Une éolienne à axe vertical -17- ( Fin )urn:md5:61860eedc16dcff87a39f1f3ff053ba02020-02-22T21:33:00+01:002020-02-24T18:42:35+01:00makoto doushiteEnergies RenouvelablesBricolageDIYImpression3DMécaniqueRécupVidéosÉcologieÉolienne<blockquote><p>Comme indiqué dans l'<a href="http://burogu.makotoworkshop.org/index.php?post/2019/09/09/eolienne-axe-vertical-16">épisode précédent</a>, j'ai mis en place un peu d'électronique afin de monitorer la production électrique et la charge de la batterie, grâce à une <a href="http://burogu.makotoworkshop.org/index.php?post/2019/08/30/anemometre4">mise à niveau de mon anémomètre documenté ici</a>.<br /></p></blockquote>
<ul>
<li>Les capteurs sont donc placés dans le boîtier électrique, l'ampèremètre en série juste après le régulateur de charge, et le voltmètre aux bornes de la batterie. La liaison de donnée remonte quant à elle le long du mât pour être raccordé à l'anémomètre tout en haut :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191116_110512.jpg" title="20191116_110512.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191116_110512_t.jpg" alt="20191116_110512.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191221_160929.jpg" title="20191221_160929.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191221_160929_t.jpg" alt="20191221_160929.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191116_110538.jpg" title="20191116_110538.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191116_110538_t.jpg" alt="20191116_110538.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191116_113426.jpg" title="20191116_113426.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191116_113426_t.jpg" alt="20191116_113426.jpg" /></a><br /></p>
<p>Une petite vidéo pour voir le résultat :<br /></p>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/3465b48f-6d41-4c60-8188-d86ad808beff?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p>Je m'efforce de faire tourner manuellement l'éolienne pour constater que c'est bien autour de 25 rotations/minutes de celle-ci qu'on commence à produire une dizaine de Watts.<br /><br /></p>
<blockquote><p>Comme deviné, la poulie 8 dents n'aura rien donné d'intéressant ! Pas suffisamment de vents pour permettre la rotation, le couple demandé avec ce rapport était trop important.<br /></p></blockquote>
<ul>
<li>La poulie 10 dents installée ici (en orange), permettait à l'éolienne de tourner, mais trop difficilement pour le vent de la fin d'année.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191116_115756.jpg" title="20191116_115756.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191116_115756_s.jpg" alt="20191116_115756.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191118_104657.jpg" title="20191118_104657.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191118_104657_s.jpg" alt="20191118_104657.jpg" /></a><br /></p> <ul>
<li>J'ai donc dû me résoudre à remettre la poulie 12 dents, mais de constater avec inquiétude un problème majeur :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191223_104521.jpg" title="20191223_104521.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191223_104521_s.jpg" alt="20191223_104521.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/20191223_104523.jpg" title="20191223_104523.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.20191223_104523_s.jpg" alt="20191223_104523.jpg" /></a><br /></p>
<p>La courroie s'est craquelée sur quasiment toute sa longueur !<br /></p>
<ul>
<li>En vidéo :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/1b6340b8-fd31-4c82-ad6e-b782958537ed?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><br /></p>
<ul>
<li>Malgré tout j'ai laissé tout ça en place et continué d'observer les graphiques générés sur <em>Grafana</em>.<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/573dedf0-a113-4922-a3fb-6a3431084d6d?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><br /></p>
<ul>
<li>Et puis fin janvier, la courroie à fini par lâcher, sur une des craquelures observées.<br /></li>
</ul>
<p>J'ai tenté une réparation de fortune qui n'aura malheureusement pas tenu une journée…<br />
J'ai un peu cafouillé pour voir comment m'y prendre, mais c'était fait, donc j'ais collé à la néopréne, une couche de caoutchouc de chambre à air de vélo, et constatant bêtement la trop grande élasticité de l'assemblage, je décidais de coller une couche de tissu, puis une nouvelle couche de caoutchouc afin de préserver le tissus des intempéries. J'ai aussi cousu la courroie à cette bande et coulé le fil dans la cyanoacrylate pour le protéger.<br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/dsc04322.jpg" title="dsc04322.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.dsc04322_s.jpg" alt="dsc04322.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/dsc04320.jpg" title="dsc04320.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.dsc04320_s.jpg" alt="dsc04320.jpg" /></a><br /></p>
<p>Voyez, la courroie s'est brisée ailleurs, et tout à lâché puisque la colle n'a pas tenu non plus. Et de toute façon pas de regret, d'autre endroits étaient prés à se briser à leurs tours.<br />
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/dsc04323.jpg" title="dsc04323.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.dsc04323_s.jpg" alt="dsc04323.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/dsc04321.jpg" title="dsc04321.jpg"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.dsc04321_s.jpg" alt="dsc04321.jpg" /></a><br /><br /></p>
<h3><ins>Fin de l'expérimentation</ins> :<br /></h3>
<ul>
<li>Voilà, la courroie est fichue, et en y regardant de plus près c'est sans doute ma faute car je n'ai pas fait attention aux préconisations du fabriquant qui déconseillait l'usage de poulie inférieure à 12 dents… La courbure alors trop prononcée aura eu raison de l'élasticité du polyuréthane, sans compter les rayons UV qui l'ont coloré en jaune, dénaturant le matériaux ( pour le rendre dur ? )<br /></li>
<li>Et il se trouve qu'on a aussi constaté que la vieille batterie ne tiens plus la charge.<br /></li>
<li>L'étude des graphiques révèle quant à elle que lorsque l'éolienne tourne, c'est de manière trop peu soutenue, donc elle se lance et s'arrête rapidement. Et même si parfois elle tiens la rotation entre les vagues, ce n'est pas assez long pour charger quoi que ce soit… D'autant plus qu'on ne dépasse jamais guère plus de 25 rpm (une dizaine de Watts), la résistance électromagnétique du générateur étant sans doute en cause, ces vents manquants de forces.<br /></li>
</ul>
<blockquote><p>La plupart du temps quand le vent souffle suffisamment, cela va ressembler à ça, ou ça :</p></blockquote>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/grafanalyse01.png" title="grafanalyse01.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.grafanalyse01_s.png" alt="grafanalyse01.png" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/grafanalyse02.png" title="grafanalyse02.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.grafanalyse02_s.png" alt="grafanalyse02.png" /></a><br /></p>
<blockquote><p>Voici un passage intéressant où de l'énergie est produite sur 15 min, et malheureusement, les mesures de l’ampèremètre ne sont pas du tout représentatives de la réalité, car pas suffisamment réactives, elles ne remontent pas tous les points de mesures. (un bug que j'ai corrigé plus tard, mais trop tard…)<br /></p></blockquote>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/grafanalyse03.png" title="grafanalyse03.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.grafanalyse03_m.png" alt="grafanalyse03.png" /></a><br /></p>
<blockquote><p>Là on voit bien que ce sont les rafales de vent qui lancent la rotation, puis ce que ça donne sur un peu plus de 2h :<br /></p></blockquote>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/grafanalyse04.png" title="grafanalyse04.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.grafanalyse04_s.png" alt="grafanalyse04.png" /></a>
<a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/grafanalyse05.png" title="grafanalyse05.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.grafanalyse05_s.png" alt="grafanalyse05.png" /></a><br /><br /></p>
<ul>
<li>J'ai pu constater aussi une différence significative (30 à 40 Km/h peut-être) entre les vents annoncés par les services météo et les vents relevés par mon anémomètre, témoignant simplement de la différence de hauteur de la mesure, la météo prenant celle-ci autour de 90 mètres d'altitude.<br /></li>
</ul>
<blockquote><p>Par exemple, ici la météo annonce 53 Km/h de vent et 91 Km/h en rafale, mais on voit bien que l'anémomètre relève 15 Km/h de moyenne et on note quelques rafales autour de 30 Km/h, dont une à 50 Km/h. (l'éolienne tourne maintenant à vide, c'est pour ça qu'elle va si vite hein…)<br /></p></blockquote>
<p><a href="http://burogu.makotoworkshop.org/public/bricolage/eolienne/grafanalyse07.png" title="grafanalyse07.png"><img src="http://burogu.makotoworkshop.org/public/bricolage/eolienne/.grafanalyse07_m.png" alt="grafanalyse07.png" /></a><br />
Mise en forme du dashboard de <em>grafana</em> disponible sous fichier <em>json</em> en annexe<sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2020/02/22/eolienne-axe-vertical-17#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup>.<br /><br /></p>
<ul>
<li>Conclusion évidente, l'éolienne n'est pas perchée suffisamment haut, et en l'état actuel du matériel dont nous disposons, il ne sera pas possible de l'élever. D'autant que cela compliquerait pas mal la maintenance de la mécanique, qui voit parfois des boulons se desserrer sous la contrainte répétée.<br /></li>
</ul>
<p>Pour rappel elle se situe à 3 mètres de haut, terrain en plaine bien dégagé autour, et il lui faudrait une dizaine de mètres supplémentaires j'imagine.<br /></p>
<blockquote><p>Bref, lorsque ce sera l'apocalypse et qu'on aura besoin d'un p'tit peu de jus, on s'y remettra, mais en attendant, fini de jouer <img src="http://burogu.makotoworkshop.org/index.php?pf=smile.svg" alt=":)" class="smiley" /></p></blockquote>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2020/02/22/eolienne-axe-vertical-17#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] ci-dessous</p></div>
http://burogu.makotoworkshop.org/index.php?post/2020/02/22/eolienne-axe-vertical-17#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/684Mini Game Center -3-urn:md5:4ea6a9db65a638aa383059a5dd47ba512020-01-11T10:16:00+01:002020-06-02T10:40:22+02:00makoto doushiteRaspberry PiCandy-cabDIYImpression3DJeux videoModélisation3DRaspBerryPIRaspbianRétrogamingVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter02">Suite de l'étude précédente :</a><br />
Bien ! Maintenant que le système est installé, il nous faut un programme pour exploiter la mini-borne, et ainsi automatiser l'affichage des vidéos.<br /><br /></p>
<h3>1 - <ins>Playlist de vidéos et pilotage par <em>GPIO</em></ins> :<br /></h3>
<ul>
<li>Il faut voir mes petites bornes comme des <em>judebox</em> à jeux vidéos, qui jouent une vidéo en boucle.<br /></li>
</ul>
<p>- Sur la carte <em>SD</em> sont stockées plusieurs vidéos de démo de jeux ou de <a href="http://burogu.makotoworkshop.org/index.php?post/2013/08/02/recmame">parties enregistrées</a>.<br />
- Les vidéos sont jouées par un script <em>Python</em>, et il est alors possible d'interagir avec la vidéo qui joue. Ainsi on va pouvoir :<br /></p>
<blockquote><p>- augmenter/diminuer le <strong>volume sonore</strong>, à l'aide de deux boutons poussoir.<br />
- augmenter/diminuer la <strong>luminosité de l'écran</strong>, à l'aide de ces même deux boutons, avec un appuie long (> 2s).<br />
- <strong>sauter de 30 secondes</strong> en avant/arrière, à l'aide de deux autres boutons poussoir.<br />
- <strong>jouer la vidéo suivante/précédente</strong>, à l'aide de ces même de deux autres boutons, avec un appuie long (> 2s).<br />
- <strong>faire une pause/relancer</strong> la lecture de la vidéo, à l'aide du bouton dédié.<br /></p></blockquote>
<p><br /></p>
<ul>
<li>Voici dores et déjà une petite vidéo de démonstration pour bien comprendre l'idée :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/26239d6c-1e78-4828-b504-1d891cf0071f?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><br /></p>
<ul>
<li>Et donc, pour ce faire, voici le schéma de câblage des boutons aux <em>GPIO</em> :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/Pupitre_boutons01.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.Pupitre_boutons01_m.png" alt="" /></a><br />
C'est le dessin du <em>RaspberryPi Zero</em> qui est représenté, mais les câbles (cf. la vidéo) sont bien raccordés sur le <em>Pi HAT</em> (cf. <a href="http://burogu.makotoworkshop.org/index.php?post/2018/10/28/minigamecenter01">le schéma structurel</a>). Les condensateurs d'anti-rebond font 100nF.<br />
Il ne reste plus qu'a programmer…<br /><br /></p> <ul>
<li>On a donc besoin de <em>Python3</em> avec la librairie <em>RPI.GPIO</em>, et de la librairie <a href="https://github.com/Douglas6/omxcontrol"><em>omxcontrol</em> de <em>Douglas6</em></a> qui fonctionne avec <em>dbus</em> :</li>
</ul>
<pre class="brush: bash">sudo apt-get install python3-rpi.gpio python3-dbus
cd /home/pi
git clone https://github.com/Douglas6/omxcontrol.git
cd omxcontrol
sudo python setup.py install</pre>
<p>On a donc un dossier <em>/home/pi/omxcontrol</em> dans lequel on va placer notre programme <em>Python</em> pompeusement appelé « <a href="https://github.com/makotoworkshop/MiniGameCenter/blob/master/VideoOMXcontrol_GPIO_Multionctions_Playlist.py"><em>VideoOMXcontrol_GPIO_Multionctions_Playlist.py</em></a> ».<br /></p>
<pre class="brush: python">#!/usr/bin/env python2.7
# coding: utf-8
# Compatible Python3
# Programme pour RaspberryPi
# Joue une playliste de vidéos avec omxplayer
# Pilotage des vidéos et de la playliste avec 5 boutons GPIO
##################################
# Import des modules nécessaires #
##################################
from omxcontrol import *
import subprocess
import RPi.GPIO as GPIO
import time
#############
# Init GPIO #
#############
PIN_PLAY = 31 # GPIO06, Play/Pause/Stop [Appuie court et long]
PIN_VOLMOINS = 35 # GPIO19, Volume -
PIN_VOLPLUS = 37 # GPIO26, Volume +
PIN_PRECEDENT = 38 # GPIO20, Précédent [Appuie court et long]
PIN_SUIVANT = 36 # GPIO16, Suivant [Appuie court et long]
PIN_BRIGHTNESS = 12 # GPIO18, PWM de réglage de la luminosité
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(PIN_PLAY, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIN_VOLMOINS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIN_VOLPLUS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIN_PRECEDENT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIN_SUIVANT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIN_BRIGHTNESS, GPIO.OUT)
#####################
# Ressources Vidéos #
#####################
def Selection(i):
switcher={
0:'/home/pi/deathsml_15-07-2015_1cc_h264-21.mp4',
1:'/home/pi/dodonpachi_23-02-2014_montage.mp4',
2:'/home/pi/espgal_26-02-2015_1cc_x264_crf23.mp4',
3:'/home/pi/galaxian.mp4',
}
return switcher.get(i,"Séléction Invalide")
#############
# Variables #
#############
vid = 0
long_press = 1
very_long_press = 3
start = 0
end = 0
brightness = 100
pwm = GPIO.PWM(PIN_BRIGHTNESS, 130) # channel et frequence en Hz, meilleur résultat à 120 et 130Hz
#############
# Démarrage #
#############
os.system('sudo pkill omxplayer') # S'assure qu'aucune instance omxplayer ne tourne encore, en cas de plantage
# omxplayer /home/pi/deathsml_15-07-2015_1cc_h264-21.mp4 --aspect-mode stretch -o local
pwm.start(brightness) # Démarrage de la PWM du rétroéclairage LCD au max (100)
# fonction qui sera appelée quand on appuiera sur le bouton : PIN_VOLMOINS
def bouton_PIN_VOLMOINS(channel):
global brightness
global start
global end
if GPIO.input(channel) == GPIO.LOW:
print("GPIO.LOW")
start = time.time()
if GPIO.input(channel) == GPIO.HIGH:
print("GPIO.HIGH")
end = time.time()
elapsed = end - start
print(elapsed)
if (elapsed > very_long_press):
print("very_long_press: ",very_long_press)
# À DÉFINIR
print('Fonction à définir')
elif (elapsed > long_press):
print("long_press :",long_press)
# Baisser la luminosité de l'écran LCD
brightness = brightness - 10
if brightness <= 10:
brightness = 10
print("Luminosité baissée au max")
print("Baisse la luminosite :", brightness)
pwm.ChangeDutyCycle(brightness)
elif (elapsed > 0):
print("short_press")
# Baisser le Volume du son
print("Button Volume - pressé")
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
def bouton_PIN_VOLPLUS(channel):
global brightness
global start
global end
if GPIO.input(channel) == GPIO.LOW:
print("GPIO.LOW")
start = time.time()
if GPIO.input(channel) == GPIO.HIGH:
print("GPIO.HIGH")
end = time.time()
elapsed = end - start
print(elapsed)
if (elapsed > very_long_press):
print("very_long_press: ",very_long_press)
# À DÉFINIR
print('Fonction à définir')
elif (elapsed > long_press):
print("long_press :",long_press)
# Augmenter la luminosité de l'écran LCD
brightness = brightness + 10
if brightness >= 100:
brightness = 100
print("Luminosité augmentée au max")
print("Augmente la luminosite :", brightness)
pwm.ChangeDutyCycle(brightness)
elif (elapsed > 0):
print("short_press")
# Monter le Volume du son
print("Button Volume + pressé")
omx.action(OmxControl.ACTION_INCREASE_VOLUME)
def bouton_PIN_PRECEDENT(channel):
global vid
global start
global end
if GPIO.input(channel) == GPIO.LOW:
print("GPIO.LOW")
start = time.time()
if GPIO.input(channel) == GPIO.HIGH:
print("GPIO.HIGH")
end = time.time()
elapsed = end - start
print(elapsed)
if (elapsed > very_long_press):
print("very_long_press: ",very_long_press)
# À DÉFINIR
print('Fonction à définir')
elif (elapsed > long_press):
print("long_press :",long_press)
# Stopper la lecture et tombe donc en erreur via Try > Except de la boucle principale
print('Vidéo Précédente')
omx.action(OmxControl.ACTION_EXIT)
vid = vid - 1 # pour lire la vidéo précédente
if vid == -1:
vid = 3
print('vid : ',vid)
elif (elapsed > 0):
print("short_press")
# un petit saut un arriére dans la vidéo
print('<<')
omx.action(OmxControl.ACTION_SEEK_BACK_SMALL)
def bouton_PIN_SUIVANT(channel):
global vid
global start
global end
if GPIO.input(channel) == GPIO.LOW:
print("GPIO.LOW")
start = time.time()
if GPIO.input(channel) == GPIO.HIGH:
print("GPIO.HIGH")
end = time.time()
elapsed = end - start
print(elapsed)
if (elapsed > very_long_press):
print("very_long_press: ",very_long_press)
# À DÉFINIR
print('Fonction à définir')
elif (elapsed > long_press):
print("long_press :",long_press)
# Stopper la lecture et tombe donc en erreur via Try > Except de la boucle principale
print('Vidéo Suivante')
omx.action(OmxControl.ACTION_EXIT)
vid = vid + 1 # pour lire la vidéo suivante
if vid == 4:
vid = 0
print('vid : ',vid)
elif (elapsed > 0):
print("short_press")
# un petit saut en avant dans la vidéo
print('>>')
omx.action(OmxControl.ACTION_SEEK_FORWARD_SMALL)
def bouton_PIN_PLAY(channel):
global start
global end
if GPIO.input(channel) == GPIO.LOW:
print("GPIO.LOW")
start = time.time()
if GPIO.input(channel) == GPIO.HIGH:
print("GPIO.HIGH")
end = time.time()
elapsed = end - start
print(elapsed)
if (elapsed > very_long_press):
print("very_long_press: ",very_long_press)
# À DÉFINIR
print('Fonction à définir')
elif (elapsed > long_press):
print("long_press :",long_press)
# Stoppe la vidéo
print('Stop')
omx.action(OmxControl.ACTION_EXIT) # SORTIR DE LA BOUCLE PRINCIPALE sinon la vidéo se relancera
elif (elapsed > 0):
print("short_press")
# Pause/Play la vidéo
print('Pause/Play')
omx.action(OmxControl.ACTION_PAUSE)
GPIO.add_event_detect(PIN_VOLMOINS, GPIO.BOTH, callback=bouton_PIN_VOLMOINS, bouncetime=100)
GPIO.add_event_detect(PIN_VOLPLUS, GPIO.BOTH, callback=bouton_PIN_VOLPLUS, bouncetime=100)
GPIO.add_event_detect(PIN_PRECEDENT, GPIO.BOTH, callback=bouton_PIN_PRECEDENT, bouncetime=100)
GPIO.add_event_detect(PIN_SUIVANT, GPIO.BOTH, callback=bouton_PIN_SUIVANT, bouncetime=100)
GPIO.add_event_detect(PIN_PLAY, GPIO.BOTH, callback=bouton_PIN_PLAY, bouncetime=100)
#####################
# Boucle Principale #
#####################
while True:
try:
omx = OmxControl() # appel librairie OmxControl
except OmxControlError as ex: # si le controle ne voit plus D-Bus, relance la vidéo
print("ERREUR de contrôle D-Bus, relance de la vidéo")
print('Selection : ',Selection(vid))
subprocess.Popen(['omxplayer','--aspect-mode', 'stretch', '-o', 'local', Selection(vid)], stdin=subprocess.PIPE)
time.sleep(3) # tempo pour laisser le temps au player vidéo de démarrer
omx = OmxControl() # appel librairie OmxControl
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME)
omx.action(OmxControl.ACTION_DECREASE_VOLUME) # -18 db
# on réinitialise les ports GPIO en sortie de script
GPIO.cleanup()
#####################################################
# Fonctions disponible dans la librairie OmxControl #
#####################################################
#ACTION_DECREASE_SPEED
#ACTION_INCREASE_SPEED
#ACTION_REWIND
#ACTION_FAST_FORWARD
#ACTION_SHOW_INFO
#ACTION_PREVIOUS_AUDIO
#ACTION_NEXT_AUDIO
#ACTION_PREVIOUS_CHAPTER
#ACTION_NEXT_CHAPTER
#ACTION_PREVIOUS_SUBTITLE
#ACTION_NEXT_SUBTITLE
#ACTION_TOGGLE_SUBTITLE
#ACTION_DECREASE_SUBTITLE_DELAY
#ACTION_INCREASE_SUBTITLE_DELAY
#ACTION_EXIT
#ACTION_PAUSE
#ACTION_DECREASE_VOLUME
#ACTION_INCREASE_VOLUME
#ACTION_SEEK_BACK_SMALL
#ACTION_SEEK_FORWARD_SMALL
#ACTION_SEEK_BACK_LARGE
#ACTION_SEEK_FORWARD_LARGE
#ACTION_SEEK_RELATIVE
#ACTION_SEEK_ABSOLUTE
#ACTION_STEP
#ACTION_BLANK
#ACTION_MOVE_VIDEO
#ACTION_HIDE_VIDEO
#ACTION_UNHIDE_VIDEO
#ACTION_HIDE_SUBTITLES</pre>
<p><br /></p>
<h3>2 - <ins>Automatisation</ins> :<br /></h3>
<ul>
<li>Pour démarrer automatiquement le programme python dés le démarrage du <em>Raspberry</em>, on utilise un script bash :<br /></li>
</ul>
<pre class="brush: bash">nano /home/pi/arcade.sh</pre>
<p>Avec dedans :</p>
<pre class="brush: bash">#!/bin/bash
/usr/local/bin/fbcp &
/usr/bin/python3 /home/pi/omxcontrol/VideoOMXcontrol_GPIO_Multifonctions_Playlist.py</pre>
<ul>
<li>Et puis on ajoute simplement le script dans le <em>.bashrc</em> de l'utilisateur courant<sup>[<a href="http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter03#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup>.<br /></li>
</ul>
<pre class="brush: bash">sudo nano /home/pi/.bashrc</pre>
<p>À la fin du fichier, renseigner :</p>
<pre class="brush: bash">echo Lancement du script arcade après le login de l utilisateur pi
/bin/bash /home/pi/arcade.sh</pre>
<p><br /><br /></p>
<p>C'est terminé pour l'électronique et l'informatique ! Du moins pour le pilotage d'une seule borne.<br />
Plus tard je ferais en sorte de pouvoir piloter chaque borne du <em>Game Center </em> depuis un seul pupitre.<br />
La prochaine fois nous verrons comment intégrer l'écran dans la maquette et nous auront terminé cette <em>Sega Astro City</em>.<br /></p>
<h3><a href="http://burogu.makotoworkshop.org/index.php?post/2020/03/24/minigamecenter04">À suivre…</a></h3>
<p><ins>Ressources</ins> : <br />
<a href="https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/">https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/</a><br />
<a href="https://stackoverflow.com/questions/36073640/time-between-button-press-and-release-in-python">https://stackoverflow.com/questions/36073640/time-between-button-press-and-release-in-python</a><br /></p>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter03#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] Pas possible d'utiliser la méthode désormais classique via <em>systemd</em>, car le programme refusait de se lancer à cause d'erreurs avec <em>dbus</em>. Cependant ce n'est pas plus mal, car le programme est lancé par la console loguée sur l'écran LCD, on le voit démarrer à l'allumage du pi.</p></div>
http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter03#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/683Mini Game Center -1-urn:md5:79ff97c454ee07c7d5ed53989e1eaeba2020-01-09T11:18:00+01:002020-01-10T22:34:10+01:00makoto doushiteÉlectroniqueCandy-cabDIYImpression3DJeux videoModélisation3DRaspBerryPIRaspbianRétrogamingVidéosÉlectronique<h3><ins>Introduction</ins> :<br /></h3>
<p>Il y a quelques temps (quand je dis ça, souvent tu peux compter années…) j'avais vu qu'il existait des modèles réduits de machines et bornes d'arcade. Sous forme de « jouets », c'est à dire tout fait et peint, en boite. J'ai trouvé ça sympa…<br />
Plus tard j'ai découvert que ça existait aussi en maquette, mais souvent découragé de constater les ruptures de stocks, où simplement que la période d'exploitation (très courtes de nos jours) était passée.<br />
Alléché par les quelques diorama agrémentés de figurines aperçu parfois au détour d'albums photos partagés, j'avais quand même envie d'avoir ma petite salle d'arcade dans la vitrine, et puis un jour réédition ou re-stock je sais pas, j'ai eu l'occasion de me procurer quelques maquettes au 1/12.<br /></p>
<p><br /></p>
<h3>1 - <ins>Présentation du projet</ins> :<br /></h3>
<ul>
<li>Bien évidemment, mon choix s'est immédiatement porté sur le kit de l<em>'AstroCity</em>, et de penser très fort au déballage de celui-ci, qu'avoir une telle maquette sous la main m'aurait grandement facilité la vie et permis d'améliorer significativement la <a href="http://burogu.makotoworkshop.org/index.php?post/2011/12/25/borne-arcade-11">construction de ma borne</a> !<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20180719_183920.jpg" title="20180719_183920.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20180719_183920_s.jpg" alt="20180719_183920.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20180719_183813.jpg" title="20180719_183813.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20180719_183813_s.jpg" alt="20180719_183813.jpg" /></a><br />
D'autres maquettes et accessoires viendraient s'ajouter afin de concevoir un diorama autour de bornes telles que <em>Taiko no Tatsujin</em>, une <em>Viewlix Street Fighter IV</em>, d'autres <em>Astro</em> en versus, des distributeurs de <em>Gashapon</em>, une machine à pince, et des bornes qui n'existent pas ou indisponible en maquette, comme les bornes <em>Taïto</em> (<em>Galaxian</em>) qui seraient alors « full-scratchée ».<br /></p>
<ul>
<li>Comme je n'invente presque jamais rien, c'est au détour d'une vidéo que j'ai pu voir que certains s'amusaient à intégrer de petits écrans LCD pilotés par un <em>RaspberryPi</em>, et visiblement ça se fait depuis un bout, car c'était un <em>RPi2</em> (ou 3) qui se voyait dessoudé de ses connectiques pour pouvoir être placé dans la maquette, alors donc que le <em>RPi Zero</em> n'existait pas.<br /></li>
</ul>
<p>Vous devinez la suite, faire pareil, mais à ma façon !<br /></p>
<ul>
<li>Chaque bornes se verrait alors agrémenté d'un écran diffusant une vidéo de jeu, afin de rendre le diorama encore plus vivant.<br /></li>
</ul>
<p>Pour la construction de la maquette, un live <em>Twitch</em> dont voici la rediff est dispo, et pour les expérimentations d'écrans aussi :<br /></p>
<iframe width="320" height="180" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/492b956c-6da1-4653-96d5-4f711ca81236?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<iframe width="320" height="180" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/08923614-eba8-4e7b-b866-4e7f6737d79f?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p>On gagne toujours à discuter autour de soi, et grâce à mes visiteurs·euses/commentateursṫrices de live, j'ai reçu quelques informations importantes et conseils avisés, qui m'auront orienté efficacement dans ce projet, aussi je tiens ici à vous remercier <img src="http://burogu.makotoworkshop.org/index.php?pf=smile.svg" alt=":)" class="smiley" /> <br /><br /></p> <h3>2 - <ins>Le « <em>Pi HAT</em> », Version 1.0</ins> :<br /></h3>
<ul>
<li>Ainsi j'ai pu dessiner le schéma électronique de mon <em>Pi HAT</em> maison avec <em>KiCAD</em>, réaliser la <em>PCB</em> et la faire fabriquer.<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/600d2605-d948-4aee-a7cd-df0d344adf57?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20181116_201507.jpg" title="20181116_201507.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20181116_201507_s.jpg" alt="20181116_201507.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20191021_182315.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20191021_182315_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20191021_182403.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20191021_182403_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20180907_105421.jpg" title="20180907_105421.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20180907_105421_s.jpg" alt="20180907_105421.jpg" /></a><br /></p>
<ul>
<li>Cette carte enfichée sur le <em>Rpi</em> à 5 fonctions : gérer l'écran LCD, la carte Son, le pilotage via <em>GPIO</em>, l'alimentation et le on/off.<br /></li>
</ul>
<p>On y connectera donc l'écran LCD, un haut-parleur, des boutons, et l'alimentation 5Volts.<br /></p>
<ul>
<li>Une fois les composants reçu, j'ai tranquillement soudé ma première plaque en <em>CMS</em> (ou <em>SMD</em>), pour un résultat qui laisse perplexe, jugez plutôt :<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/2e3fe298-4cd9-4d6a-9fa3-fb86d9e2fde8?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<p>Le problème ayant été cerné au bout que quelques heures de recherche, j'ai alors modifié la <em>PCB</em> afin d'isoler le signal d'horloge <em>SCLK</em> du bus <em>SPI</em> qui pilote l'écran, car il « repissait grave » dans la carte son, provoquant donc ces « bip bip bip bip bip » très agaçants.<br /><br /></p>
<h3>3 - <ins>Le « <em>Pi HAT</em>, Version 1.1 »</ins> :<br /></h3>
<ul>
<li>Après avoir redisposé les composants, réalisé un plan de masse le plus imposant possible autour de <em>SCLK</em>, et repris quelques erreurs, voici la nouvelle <em>PCB</em> (en bleu) qui fonctionne à merveille !<br /></li>
</ul>
<p>J'ai pu réussir ça en mettant les composants sur les deux faces, chose que je n'avais étonnement pas envisagé sur l'ancienne version (en vert).<br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20191021_182516.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20191021_182516_s.jpg" alt="" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20191021_182649.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20191021_182649_s.jpg" alt="" /></a><br />
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04305.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04305_s.jpg" alt="" title=" " /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/20200108_205745.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.20200108_205745_s.jpg" alt="" /></a><br /></p>
<ul>
<li>Une petite vidéo, avec le son propre !<br /></li>
</ul>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/3c8df63e-013c-4b33-8ec5-bacef3f1e67d?warningTitle=0" frameborder="0" allowfullscreen></iframe>
<ul>
<li>Seuls défauts à l'arrivée, une sérigraphie (texte en blanc) erronée et un soucis avec le bouton on/off récalcitrant, assez difficile à diagnostiquer, mais facilement corrigé avec quelques rustines…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04305b.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04305b_m.jpg" alt="" /></a><br /><br /></p>
<h3>4 - <ins>Le schéma structurel du « <em>Pi HAT</em>, Version 1.2 »</ins> :<br /></h3>
<ul>
<li>Cette fois c'est la bonne (?), voici le schéma de la dernière version qui corrige le soucis du bouton on/off. Sources en annexe du billet.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/MGC_Hat_RpiZero_V1.2_Structurel.png"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.MGC_Hat_RpiZero_V1.2_Structurel_m.png" alt="" style="display:table; margin:0 auto;" /></a><br /></p>
<center>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/a8285df8-167b-472e-a895-31a4e68f31c0?warningTitle=0" frameborder="0" allowfullscreen></iframe>
</center>
<ul>
<li><ins>Liste des composants</ins>:<br /></li>
</ul>
<pre>
Nom Type et valeur Boîtier
R1, R2 Résistances 270Ω SMD 1206
R3, R9, R10, R11 Résistances 10kΩ SMD 1206
R4 Résistance 47kΩ SMD 1206
R5 Résistance 1,5kΩ SMD 1206
R6, R7, R8 Résistances 150Ω SMD 1206
R12 Résistance 20kΩ SMD 1206
R13, R14, R15, R16 Résistances 100Ω SMD 1206
R17, R18 Résistances 1kΩ SMD 1206
C1, C2, C9 Condensateurs 33nF SMD 1206
C5, C8, C12 Condensateurs 100nF SMD 1206
C3, C4, C7, C11 Condensateurs 10µF 16V SMD 4x5,4 mm
C6 Condensateur 1µF 50V SMD 4x5,4 mm
C10 Condensateur 470µF 16V SMD 8x10,5 mm
D1 LED SMD 1206
RV1, RV2 Potentiomètre 10kΩ TC33X-103G
Q1 Transistor DMMT5401 SMD SOT23
Q2 Transistor DMG2305UX SMD SOT23
Q3 Transistor PMV65XP SMD SOT23
Q4, Q5 Transistor 2N2222 SMD SOT23
LS1 Pin Header 1x2 2,54 mm Horizontal
U1 ATtiny85V SMD SOIC 8
U2 Ampli LM386 SMD SSOP 8
J1 Pin Header 1x2 2,54 mm Horizontal
J2 Pin Header 1x4 2,54 mm Horizontal
J3 Pin Header 1x7 2,54 mm Horizontal
J4 FPC/FCC 0,8 mm 14 pins
-- Écran LCD 2,2" TM022HDH26
A1 Pin Socket 2x20 2,54 mm Vertical
SW1 Bouton Switch SMD 6x3 mm
</pre>
<ul>
<li>Je n'ai pas encore fait fabriquer cette carte, et je ne sais pas si je le ferais, car ce n'est pas vraiment nécessaire étant donné que la V1.1 fonctionne avec la rustine.<br /></li>
</ul>
<p>J'étudie en ce moment le concept de la carte à boutons pour piloter le système, et aussi de pouvoir commander plusieurs bornes avec un seul pupitre à boutons, avec notamment la possibilité de piloter tout ça avec une télécommande infrarouge, ce qui serait pas mal pour interagir avec le <em>Mini Game Center</em> au fond de la vitrine.<br /><br /></p>
<h3> <a href="http://burogu.makotoworkshop.org/index.php?post/2020/01/05/minigamecenter02">À Suivre…</a></h3>http://burogu.makotoworkshop.org/index.php?post/2018/10/28/minigamecenter01#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/658Un écran LCD piloté via SPI pour le RaspberryPiurn:md5:e30e55341e7f4e4c34cca724c282145c2020-01-01T21:10:00+01:002020-01-01T21:26:22+01:00makoto doushiteRaspberry PiDIYRaspBerryPIRaspbianVidéos<blockquote><p>L'écran utilisé pour le <em><a href="http://burogu.makotoworkshop.org/index.php?post/2018/08/23/wrrw7">WebRadioReveilWiFi</a></em> donnant au final une qualité d'image assez nulle, et pour le besoin d'autres projets, j'ai regardé un peu ce qu'il se faisait du côté des écrans LCD <em>non-Composite</em> et <em>non-HDMI</em>.<br /></p></blockquote>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04295.jpg" title="dsc04295.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04295_s.jpg" alt="dsc04295.jpg" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Ce qui revient le plus ce sont les écrans de type <em>ili9340</em> qui fonctionnent en <em>SPI</em> et qui ont l'avantage d'exister de différentes tailles et résolutions, avec parfois aussi des fonctionnalités tactile résistives.<br /></li>
</ul>
<p>J'ai acquis deux modèles différents, l'un en 2,2 pouces qui vient sur une plaquette enfichable avec un connecteur <em>GPIO</em> de 40 broches, et un autre de 2,8 pouces tactile sur sa plaquette avec un connecteur <em>GPIO</em> de 26 broches.<br /></p>
<ul>
<li>Voici ce que ça donne en place sur un <em>RPi</em> :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04299.jpg" title="dsc04299.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04299_s.jpg" alt="dsc04299.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04300.jpg" title="dsc04300.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04300_s.jpg" alt="dsc04300.jpg" /></a><br /></p>
<ul>
<li>On remarque que l'écran 2.2" est directement soudé sur la plaquette, tandis que l'écran 2,8" est tenu à la plaquette avec un connecteur <em>FCC</em>.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04298.jpg" title="dsc04298.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04298_s.jpg" alt="dsc04298.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/dsc04301.jpg" title="dsc04301.jpg"><img src="http://burogu.makotoworkshop.org/public/ordi/raspi/MiniGameCenter/.dsc04301_s.jpg" alt="dsc04301.jpg" /></a><br /><br /></p>
<h3><ins>Fonctionnement</ins> :<br /></h3>
<p>Ces écrans fonctionnent en <em>SPI</em>, c'est à dire qu'ils exploitent directement les <em>GPIO</em> suivant :<br /></p>
<blockquote><p>- CE0 (<em>GPIO08</em>)<br />
- MISO (<em>GPIO09</em>)<br />
- MOSI (<em>GPIO10</em>)<br />
- SCLK (<em>GPIO11</em>)<br /></p></blockquote>
<p>D'autres pins sont utilisées pour gérer le <em>RESET</em> et le <em>D/CX</em>.<br /></p> <p>Et donc pour utiliser le <em>SPI</em> le <em>Raspberry</em> à besoin qu'on le lui active, et qu'on lui charge un driver (module), ce qu'on peut faire,<br /></p>
<ul>
<li>Avec <em>sudo rpi-config</em> ou en éditant directement le fichier <em>/boot/config.txt</em>, pour activer le mode <em>SPI</em> :</li>
</ul>
<pre class="brush: bash">dtparam=spi=on
disable_overscan=1
framebuffer_width=320
framebuffer_height=240</pre>
<blockquote><p>Les 3 dernières lignes sont nécessaires afin d'utiliser le player de vidéo <em>oxmplayer</em> dans de bonnes conditions.<br />
framebuffer width et height, à régler selon la résolution native du modèle de LCD.<br /></p></blockquote>
<p>En effet, mon premier réflexe aura été d'utiliser <em>mplayer</em> car je le connaissais bien, mais ce dernier est incapable d'utiliser l'accélération matérielle du processeur pour décoder les vidéos <em>H264</em>, ce qui fait qu'à la lecture, celles-ci se mettaient à ramer, avec en prime un message d'avertissement sur l'état extrêmement lent du système.<br />
Les vidéo en <em>H263</em> passaient très bien, mais leurs poids très conséquent m'a découragé à utiliser ce format, et j'ai donc découvert <em>oxmplayer</em>, dédié à gérer le décodage hardware sur le <em>RPi</em>.<br /></p>
<ul>
<li>Créer le fichier, avec dedans le nom des modules à charger :</li>
</ul>
<pre class="brush: bash">sudo nano /etc/modules-load.d/fbtft.conf</pre>
<pre class="brush: bash">spi-bcm2835
fbtft_device</pre>
<ul>
<li>Créer le fichier, avec dedans les paramètres du module à charger au démarrage du <em>Rpi</em> :</li>
</ul>
<pre class="brush: bash">sudo nano /etc/modprobe.d/fbtft.conf</pre>
<pre class="brush: bash">options fbtft_device custom name=fb_ili9341 gpios=reset:25,dc:24 speed=48000000 rotate=270 fps=30 bgr=1</pre>
<p>Voilà, l'écran qui à la mise sous tension était blanc, se met en marche et passe au noir, on va pouvoir lire une vidéo !<br />
<strong>Cependant, pour déterminer ces paramètres, il aura fallu procéder à des essais préalables…</strong><br /><br /></p>
<ul>
<li>Lancer le module manuellement :</li>
</ul>
<pre class="brush: bash">sudo modprobe fbtft_device custom name=fb_ili9341 gpios=reset:24,dc:25,led:18 speed=64000000 fps=30 bgr=1 rotate=90</pre>
<p>On fait correspondre les arguments au câblage relevé sur la plaquette de l'écran:<br /></p>
<blockquote><p>- Le <em>Reset</em> en <em>GPIO24</em>, donc pin N°18.<br />
- Le signal <em>DC</em> en <em>GPIO25</em>, pin N°22.<br />
- <em>LED </em>pour le contrôle du rétro-éclairage par <em>PWM</em>, pin N°12.<br />
- <em>speed</em> pour indiquer la vitesse de rafraîchissement de l'écran, en MHz.<br />
- <em>rotate</em> pour orienter l'écran donc.<br /></p></blockquote>
<ul>
<li>On peut vérifier que les arguments on bien été pris en compte avec la commande <em>dmesg</em> :</li>
</ul>
<pre class="brush: bash">[ 305.495703] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[ 305.504822] spidev spi0.1: spidev spi0.1 125000kHz 8 bits mode=0x00
[ 305.504878] bcm2708_fb soc:fb: soc:fb id=-1 pdata? no
[ 305.805642] graphics fb1: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=33, spi0.0 at 64 MHz
[ 305.805738] fbtft_device: GPIOS used by 'fb_ili9341':
[ 305.805747] fbtft_device: 'reset' = GPIO24
[ 305.805751] fbtft_device: 'dc' = GPIO25
[ 305.805755] fbtft_device: 'led' = GPIO18
[ 305.805770] spidev spi0.1: spidev spi0.1 125000kHz 8 bits mode=0x00</pre>
<ul>
<li>Pour changer sans avoir à redémarrer, il suffit de décharger le module avec :<br /></li>
</ul>
<pre class="brush: bash">sudo modprobe -r fbtft_device</pre>
<p>Et de recommencer l'opération jusqu'à satisfaction !<br /><br /></p>
<h3><ins>Lire une vidéo depuis la console</ins> :<br /></h3>
<ul>
<li>Pour lire une vidéo on aura besoin de <em>mplayer</em> et <em>omxplayer</em></li>
</ul>
<pre class="brush: bash">sudo apt install mplayer omxplayer</pre>
<p>Je vais quand même expliquer <em>mplayer</em>, qui ne pourra lire que des vidéos en <em>DivX</em> ou un autre format aussi léger, surtout sur un <em>RPi Zero</em>.<br />
<strong><em>mplayer</em></strong> :</p>
<ul>
<li>Lancer la vidéo avec <em>mplayer</em>:</li>
</ul>
<pre class="brush: bash">sudo SDL_VIDEODRIVER=fbcon SDL_FBDEV=/dev/fb1 mplayer -vo sdl -framedrop deathsml_15-07-2015_1cc_h264-21.mp4</pre>
<ul>
<li>Avec playlist, Créer la liste :</li>
</ul>
<pre class="brush: bash">nano /home/pi/playlists/video.m3u</pre>
<pre class="brush: bash">/home/pi/video/dodonpachi_23-02-2014_montage.mp4
/home/pi/video/galaxian.mp4</pre>
<pre class="brush: bash">sudo SDL_VIDEODRIVER=fbcon SDL_FBDEV=/dev/fb1 mplayer -vo sdl -framedrop -playlist playlists/video.m3u -loop 0</pre>
<ul>
<li>Contrôler <em>mplayer</em> en mode slave, utile pour scripter :</li>
</ul>
<pre class="brush: bash">mkfifo /tmp/mplayer-control</pre>
<p>ajouter « <em>-slave -input file=/tmp/mplayer-control</em> » à la commande <em>mplayer</em> :</p>
<pre class="brush: bash">sudo SDL_VIDEODRIVER=fbcon SDL_FBDEV=/dev/fb1 mplayer -vo sdl -framedrop -slave -input file=/tmp/mplayer-control -playlist playlists/video.m3u -loop 0</pre>
<ul>
<li>Pour connaître toutes les commandes possibles :</li>
</ul>
<pre class="brush: bash">mplayer -input cmdlist</pre>
<pre class="brush: bash">echo 'pt_step -1' > /tmp/mplayer-control
echo 'pt_step 1' > /tmp/mplayer-control
echo "volume -1" > /tmp/mplayer-control
echo "volume 1" > /tmp/mplayer-control
echo "pause" > /tmp/mplayer-control
echo "stop" > /tmp/mplayer-control</pre>
<p>Pour le play, relancer la playliste<br /><br /></p>
<p><strong><em>oxmplayer</em></strong> :
Avec ce player on va pouvoir lire du <em>H264</em> :<br /></p>
<ul>
<li>Installer <em>fbcp</em>, soft de <em>Framebuffer mirroring</em>, pour obtenir la console sur l'écran et plus encore :</li>
</ul>
<pre class="brush: bash">sudo apt-get update
sudo apt-get install cmake git
git clone https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
cmake ..
make
sudo install fbcp /usr/local/bin/fbcp</pre>
<p>D'après ce que j'en comprend, ce soft copie l'affichage <em>tty</em> depuis le premier <em>frameBuffer</em> vers le second, (<em>/dev/fb0</em> sur <em>/dev/fb1</em>), ce qui doit permettre de bénéficier de l'accélération GPU hardware dédié à la vidéo.<br />
Et effectivement <em>dmesg</em> précise que :</p>
<pre class="brush: bash">Sep 3 20:59:58 raspberrypi fbcp[652]: Primary display is 720 x 480
Sep 3 20:59:58 raspberrypi fbcp[652]: Second display is 320 x 240 16bps</pre>
<ul>
<li>Démarrer le programme en tâche de fond et lancer la vidéo</li>
</ul>
<pre class="brush: bash">fbcp &
omxplayer /home/pi/deathsml_15-07-2015_1cc_h264-21.mp4 --aspect-mode stretch -o local</pre>
<ul>
<li>Pour choisir la sortie son, en <em>local</em> (sortie <em>Jack</em>), <em>HDMI</em> ou les deux :</li>
</ul>
<pre class="brush: bash">omxplayer -o local deathsml_15-07-2015_1cc_h264-21.mp4
omxplayer -o hdmi deathsml_15-07-2015_1cc_h264-21.mp4
omxplayer -o both deathsml_15-07-2015_1cc_h264-21.mp4</pre>
<p>Doc : <a href="https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md">https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md</a><br />
Playlist : <a href="http://apsvr.com/blog/?p=134">http://apsvr.com/blog/?p=134</a><br />
Python : <a href="https://python-omxplayer-wrapper.readthedocs.io/en/latest/">https://python-omxplayer-wrapper.readthedocs.io/en/latest/</a><br />
<br /></p>
<ul>
<li>Une petite vidéo de démonstration :</li>
</ul>
<center>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/9317a35d-91e5-40be-8620-19e6089f00be?warningTitle=0" frameborder="0" allowfullscreen></iframe>
</center>
<p><br /></p>
<ul>
<li>Pour arrêter la copie du <em>Framebuffer</em> :<br /></li>
</ul>
<pre class="brush: bash">sudo pkill fbcp</pre>
<ul>
<li>Pour démarrer <em>fbcp</em> au démarrage du <em>Rpi</em> , Éditer :</li>
</ul>
<pre class="brush: bash">sudo nano /etc/rc.local</pre>
<p>Et ajouter cette ligne avant la ligne <em>exit 0</em></p>
<pre class="brush: bash">/usr/local/bin/fbcp &</pre>
<p><br /></p>
<h3><ins>Régler le rétro-éclairage</ins> :<br /></h3>
<p>Par défaut le rétro-éclairage en <em>PWM</em> n'est pas activé, l'éclairage est donc poussé au maximum. Le simple fait d'utiliser le <em>GPIO18</em> en mode <em>PWM</em> active la fonction…<br /></p>
<ul>
<li>J'ai tenté d'utiliser le mode le plus souvent indiqué, avec la librairie <em><a href="http://wiringpi.com/">WiringPi</a></em>, qui consiste à passer le <em>GPIO18</em> en mode <em>PWM</em>, et de faire varier sa valeur (de 0 à 1023) mais cette méthode freeze <em>mplayer</em>…<br /></li>
</ul>
<pre class="brush: bash">gpio -g mode 18 pwm
gpio pwmc 1000
gpio -g pwm 18 1023</pre>
<ul>
<li>Alors je lui préfère la méthode <em>python</em> !<br /></li>
</ul>
<p>Installer la librairie <em>RPIO</em><br /></p>
<pre class="brush: bash">sudo apt-get install python3-rpi.gpio</pre>
<ul>
<li>Pour le code, c'est assez simple et sans mauvais effet sur la vidéo en cours de lecture :<br /></li>
</ul>
<pre class="brush: python">import RPi.GPIO as RPGPIO # Import the GPIO Raspberry PI module
LED = 18
RPGPIO.setmode(RPGPIO.BCM)
RPGPIO.setup(LED, RPGPIO.OUT)
pwm = RPGPIO.PWM(LED, 1000)
brightness = 50 # Brightness value must be between 0 (min) and 100 (max)
pwm.start(brightness)</pre>
<ul>
<li>Il est aussi possible d'éteindre complètement l'écran, assez simplement avec ces deux commandes, respectivement <em>PowerOFF</em> et <em>PowerON</em> :<br /></li>
</ul>
<pre class="brush: bash">echo 1 | sudo tee /sys/class/backlight/*/bl_power
echo 0 | sudo tee /sys/class/backlight/*/bl_power</pre>
<p><br /></p>
<p><ins>Ressources</ins> :<br />
- <a href="https://www.instructables.com/id/Connect-LCD-to-Raspberry-Pi-Without-Breakout-Board/">https://www.instructables.com/id/Connect-LCD-to-Raspberry-Pi-Without-Breakout-Board/</a><br />
- <a href="https://learn.adafruit.com/adafruit-2-2-pitft-hat-320-240-primary-display-for-raspberry-pi/downloads">https://learn.adafruit.com/adafruit-2-2-pitft-hat-320-240-primary-display-for-raspberry-pi/downloads</a><br />
- <a href="https://github.com/notro/fbtft/wiki/fbtft_device">https://github.com/notro/fbtft/wiki/fbtft_device</a><br />
- <a href="https://learn.adafruit.com/adafruit-2-2-pitft-hat-320-240-primary-display-for-raspberry-pi?view=all#backlight-control">https://learn.adafruit.com/adafruit-2-2-pitft-hat-320-240-primary-display-for-raspberry-pi?view=all#backlight-control</a><br />
- <a href="https://github.com/notro/fbtft/wiki/Framebuffer-use">https://github.com/notro/fbtft/wiki/Framebuffer-use</a><br />
- <a href="https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/backlight-control">https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/backlight-control</a><br />
- <a href="https://github.com/notro/fbtft/wiki/Backlight">https://github.com/notro/fbtft/wiki/Backlight</a><br />
- <a href="http://ingeniapp.com/en/using-2-2-lcd-spi-in-python-with-raspberry-pi/#comment-811">http://ingeniapp.com/en/using-2-2-lcd-spi-in-python-with-raspberry-pi/#comment-811</a><br />
- <a href="https://pythonhosted.org/RPIO/">https://pythonhosted.org/RPIO/</a></p>http://burogu.makotoworkshop.org/index.php?post/2018/09/03/ecranspi#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/654Double variateur de vitesse pour Train Électrique HOurn:md5:c7596ba72479e873fbc1affb55dec8e32019-12-29T10:07:00+01:002019-12-29T10:07:00+01:00makoto doushiteÉlectroniqueArduinoDIYImpression3DModélisation3DVidéosÉlectronique<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190521_105133.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190521_105133_s.jpg" alt="" style="float:right; margin: 0 0 1em 1em;" /></a></p>
<ul>
<li>Il y a quelques mois j'ai retrouvé mon vieux train électrique et j'ai eu envie de le dépoussiérer un peu…<br /></li>
</ul>
<p>Ne disposant alors que d'un vieux variateur <em>Jouef</em> 3 positions, je me suis dit qu'avec les compétences d'aujourd'hui il serait aisé d'en construire un, et de remettre en état les rails et roues des machines oxydées, voire parfois rouillées.<br /></p>
<blockquote><p>Quand j'étais ado donc, j'ignorais un tas de choses, et sans modélistes dans mon entourage j'étais alors sans ressources devant un train électrique qui ne roulait pas bien, avec ses voies qui s'oxydaient avec le temps…<br />
Personne pour me dire qu'il existait des « gommes » à frotter, des produits pour nettoyer les voies, et autre trucs « marketés » pour modéliste fortunés.<br />
Pas de boutiques de modélisme, tout au mieux un magasin de jouet qui n'y connaissait rien, le genre de type qui te répond sans sourciller que celui-là est mieux car il est écrit « super » sur l'emballage, alors que tu demandais la différence entre deux produits similaires.<br />
J'ignorais même qu'il puisse exister des livres sur le sujet, sauf à être tombé sur un magasine une fois au <em>CDI</em> du lycée.<br />
Bref, l'accès à l'information faisait défaut, et n'ayant pas la possibilité de vadrouiller en ville, difficile d'en apprendre plus, surtout quand on ne sait pas quoi rechercher.<br />
Alors dans la morosité ambiante de fin du monde « as we know it », j'ai envie de dire que nous vivons l'époque formidable où internet est né, (et qu'il faudrait veiller à préserver sans corrompre) avec un accès à l'information phénoménal, tel que j'aurais pu en rêver…<br />
Les gens qui savent l'utiliser au mieux se voient ainsi « augmentés » d'un tas de connaissances, et c'est à travers ma propre expérience et le recoupement d'informations que j'ai pu confirmer que le modéliste sait entretenir un train électrique alors même que ces jouets étaient vendu sans aucunes explications !<br />
Je n'ose même pas imaginer le nombre de trains jetés par une famille dans le même cas que moi, mais un peu moins regardante, pensant que « le truc est cassé, hob, poubelle ».<br />
À l'époque mon père avait bien pensé à utiliser de l'alcool à brûler à passer sur les voies et du papier abrasif à frotter sur roues, mais on voyait ça comme une solution de secours assez sale, pour sauver le coup sans fierté, on y allait doucement par peur d'abîmer.<br /></p></blockquote>
<ul>
<li>Trente ans plus tard et internet te confirmes que c'est bien comme ça qu'il faut faire, et que tu peux t'en donner à cœur joie !<br /></li>
</ul>
<p>- Papier abrasif à l'eau pour carrosserie grain 800 puis 1000, pour récupérer rails et roues.<br />
- Et entretiens avec ton hydrocarbure préféré, de l'essence F, je trouve que ça marche bien.<br /></p>
<p>Un peu longue l'intro <sup></sup>; oups, alors pour faire un varariateur c'est simple, il faut une <em>PWM</em>.<br /></p>
<ul>
<li>Après quelques tests sur plaquette d'essais, une petite vidéo :<br /></li>
</ul>
<center>
<iframe width="640" height="360" sandbox="allow-same-origin allow-scripts" src="https://peertube.makotoworkshop.org/videos/embed/9fb5777f-df60-48d1-8e5d-7720f0d88501?warningTitle=0" frameborder="0" allowfullscreen></iframe>
</center>
<p><br /></p>
<h3><ins>Le schéma électronique </ins> :<br /></h3>
<ul>
<li>Bon c'est un peu chargé, mais on s'en sort…<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/VariateurTrain_bb.png"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.VariateurTrain_bb_m.png" alt="" style="display:table; margin:0 auto;" /></a><br /></p> <p><strong>Matériel requis :</strong></p>
<blockquote><p>- 1 <em>Arduino Pro Mini 5V</em>.<br />
- Un ordi avec port USB et le soft Arduino IDE.<br />
- 1 module Pont en H à base de L298N.<br />
- 1 potentiométre de 10kΩ ou une résistance de 220Ω.<br />
- 2 potentiométres (la valeur n'a aucune importance).<br />
- 1 Prise jack 3.5 mm d'alimentation .<br />
- 1 afficheur LCD type HD44780 16 ou 20 x 2.<br />
- 4 boutons poussoirs.<br />
- 4 vis M3x12 mm.<br /></p></blockquote>
<ul>
<li>J'ai câblé les boutons sur une plaque à trous et intégré le tout dans un boîtier sur mesure, <a href="https://www.thingiverse.com/thing:3727150">dispo sur Thingiverse</a><br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_124945.jpg" title="20190825_124945.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_124945_s.jpg" alt="20190825_124945.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_125058.jpg" title="20190825_125058.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_125058_s.jpg" alt="20190825_125058.jpg" /></a><br /></p>
<ul>
<li>L<em>'Arduino</em> est protégé des courts-circuits avec un sac plastique.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_125113.jpg" title="20190825_125113.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_125113_s.jpg" alt="20190825_125113.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_125330.jpg" title="20190825_125330.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_125330_s.jpg" alt="20190825_125330.jpg" /></a><br /></p>
<ul>
<li>On referme avec les vis.<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_125122.jpg" title="20190825_125122.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_125122_s.jpg" alt="20190825_125122.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_125512.jpg" title="20190825_125512.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_125512_s.jpg" alt="20190825_125512.jpg" /></a><br /></p>
<ul>
<li>Voilà pour la démo, à l'allumage :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_130219.jpg" title="20190825_130219.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_130219_s.jpg" alt="20190825_130219.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_130223.jpg" title="20190825_130223.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_130223_s.jpg" alt="20190825_130223.jpg" /></a><br /></p>
<ul>
<li>En marche arrière, vitesse 86/100, puis marche avant, vitesse 42/100 :<br /></li>
</ul>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_130232.jpg" title="20190825_130232.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_130232_s.jpg" alt="20190825_130232.jpg" /></a>
<a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190825_130239.jpg" title="20190825_130239.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190825_130239_s.jpg" alt="20190825_130239.jpg" /></a><br /></p>
<ul>
<li><strong>Programme pour l’<em>Arduino Pro Mini</em> :</strong><br /></li>
</ul>
<pre class="brush: cpp">#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// https://maxpromer.github.io/LCD-Character-Creator/
byte barre1[] = {
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001
};
byte barre2[] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000
};
byte bulle[] = {
B11100,
B10100,
B11100,
B00000,
B00000,
B00000,
B00000,
B00000
};
/* Variateur N°1 */
const int enable1 = 9; // L298N Driver la PWM
const int input1 = 8; // L298N Driver les broches de signal
const int input2 = 13; // L298N Driver les broches de signal
const int faderVitesse01 = A0; // la broche pour régler la vitesse
const int buttonStartStopPin01 = A5; // the number of the pushbutton pin
int valeurBoutonStartStop01; // variable for reading the pushbutton status
int valBoutonStartStop_prec01 = LOW;
volatile int etatStop01 = LOW;
const int buttonInvertPin01 = A4; // the number of the pushbutton pin
int valeurBoutonInvert01; // variable for reading the pushbutton status
int valBoutonInvert_prec01 = LOW;
int etatInvert01 = LOW;
/* Variateur N°2 */
const int enable2 = 10; // L298N Driver la PWM
const int input3 = 7; // L298N Driver les broches de signal
const int input4 = 6; // L298N Driver les broches de signal
const int faderVitesse02 = A1; // la broche pour régler la vitesse
const int buttonStartStopPin02 = A2; // the number of the pushbutton pin
int valeurBoutonStartStop02; // variable for reading the pushbutton status
int valBoutonStartStop_prec02 = LOW;
volatile int etatStop02 = LOW;
const int buttonInvertPin02 = A3; // the number of the pushbutton pin
int valeurBoutonInvert02; // variable for reading the pushbutton status
int valBoutonInvert_prec02 = LOW;
int etatInvert02 = LOW;
//#########
//# Setup #
//#########
void setup() {
// put your setup code here, to run once:
// set up the LCD's number of columns and rows:
lcd.begin(20, 2);
lcd.setCursor(0, 0);
// Print a message to the LCD.
lcd.print(" Double Variateur");
lcd.setCursor(0, 1);
lcd.print(" Train Electrique");
lcd.createChar(0, barre1);
lcd.createChar(1, barre2);
lcd.createChar(3, bulle);
delay(5000);
affiche();
pinMode(input1, OUTPUT);
pinMode(input2, OUTPUT);
pinMode(buttonStartStopPin01, INPUT_PULLUP);
pinMode(buttonInvertPin01, INPUT_PULLUP);
// attachInterrupt(0, BoutonStopGo, FALLING); // attache l'interruption externe n°0 (pin2 soit bouton Stop) à la fonction BoutonStopGo
pinMode(input3, OUTPUT);
pinMode(input4, OUTPUT);
pinMode(buttonStartStopPin02, INPUT_PULLUP);
pinMode(buttonInvertPin02, INPUT_PULLUP);
// Serial.begin(9600);
analogWrite(enable1, 0); //on démarre moteur en avant et en roue libre
digitalWrite(input1, LOW);
digitalWrite(input2, HIGH); // enable pullup resistor
analogWrite(enable2, 0); //on démarre moteur en avant et en roue libre
digitalWrite(input3, HIGH);
digitalWrite(input4, LOW); // enable pullup resistor
}
//#############
//# Programme #
//#############
void loop() {
BoutonSens01();
BoutonStopGo01();
BoutonSens02();
BoutonStopGo02();
if (etatStop01 == HIGH) {
Vitesse01();
}
else {
analogWrite(enable1, 0); // envoie la vitesse, doit recevoir valeurs de 0 à 255
}
if (etatStop02 == HIGH) {
Vitesse02();
}
else {
analogWrite(enable2, 0); // envoie la vitesse, doit recevoir valeurs de 0 à 255
}
}
//###################################
//# affiche : Train N°1 ||Train N°2 #
//###################################
void affiche() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Train N");
lcd.setCursor(7, 0);
lcd.write(byte(3)); // bulle
lcd.setCursor(8, 0);
lcd.print("1");
lcd.setCursor(9, 0);
lcd.write(byte(0)); // barre1
lcd.setCursor(10, 0);
lcd.write(byte(1)); // barre2
lcd.setCursor(11, 0);
lcd.print("Train N");
lcd.setCursor(18, 0);
lcd.write(byte(3)); // bulle
lcd.setCursor(19, 0);
lcd.print("2");
}
//##################################################
//# Mode Vitesse + inverser le sens de rotation 01 #
//##################################################
void Vitesse01()
{
int valfaderVitesse01 = analogRead(faderVitesse01); // valeurs de 0 à 1023
int vitesse = map(valfaderVitesse01, 0, 1023, 0, 255); // Discrétise la valeur du potentiomètre, 0 à 0 (0 à 75 pour vitesse très lente) et 1023 à 255
// int vitesse = map(valfaderVitesse01, 0, 1023, 75, 255); // Discrétise la valeur du potentiomètre, 0 à 0 (0 à 75 pour vitesse très lente) et 1023 à 255
int vitesseLCD = map(valfaderVitesse01, 0, 1023, 0, 99);
if (etatInvert01 == LOW) { // si le bouton est appuiyé
digitalWrite(input1, LOW); //le moteur va dans un sens
digitalWrite(input2, HIGH);
// Serial.print("+");
lcd.setCursor(0, 1); // début du texte à la colonne 0, ligne 1
lcd.print(" >> ");
}
else {
digitalWrite(input1, HIGH); //le moteur va dans l'autre sens
digitalWrite(input2, LOW);
// Serial.print("-");
lcd.setCursor(0, 1);
lcd.print(" << ");
}
analogWrite(enable1, vitesse); // envoie la vitesse, doit recevoir valeurs de 0 à 255
// Serial.println(vitesse);
lcd.setCursor(7, 1);
lcd.print(vitesseLCD);
lcd.setCursor(9, 1);
lcd.write(byte(0)); // barre1
lcd.setCursor(10, 1);
lcd.write(byte(1)); // barre2
delay(50);
}
//###########################
//# Bouton poussoir sens 01 #
//###########################
void BoutonSens01() {
valeurBoutonInvert01 = digitalRead(buttonInvertPin01); // lit l'état du bouton
if ((valeurBoutonInvert01 == LOW) && (valBoutonInvert_prec01 == LOW)) {
if (etatInvert01 == HIGH) {
etatInvert01 = LOW;
digitalWrite(input1, LOW); //Freiner
digitalWrite(input2, LOW);
delay(300);
}
else {
etatInvert01 = HIGH;
digitalWrite(input1, LOW); //Freiner
digitalWrite(input2, LOW);
delay(300);
}
// Serial.print("etat Rotation: ");
// Serial.println(etatInvert01);
valBoutonInvert_prec01 == valeurBoutonInvert01;
delay(50);
}
}
//##################
//# Bouton Stop 01 #
//##################
void BoutonStopGo01() {
valeurBoutonStartStop01 = digitalRead(buttonStartStopPin01); // lit l'état du bouton
if ((valeurBoutonStartStop01 == LOW) && (valBoutonStartStop_prec01 == LOW)) {
if (etatStop01 == HIGH) {
etatStop01 = LOW;
}
else {
etatStop01 = HIGH;
}
// Serial.print("etat STOP : ");
// Serial.println(etatStop01);
lcd.setCursor(0, 1);
if (etatStop01 == HIGH & etatInvert01 == LOW) {
lcd.print(" >> ");
}
else if (etatStop01 == HIGH & etatInvert01 == HIGH) {
lcd.print(" << ");
}
else {
lcd.print("STOP ");
lcd.setCursor(9, 1);
lcd.write(byte(0)); // barre1
lcd.setCursor(10, 1);
lcd.write(byte(1)); // barre2
}
valBoutonStartStop_prec01 == valeurBoutonStartStop01;
delay(300);
}
}
//##################################################
//# Mode Vitesse + inverser le sens de rotation 02 #
//##################################################
void Vitesse02()
{
int valfaderVitesse02 = analogRead(faderVitesse02); // valeurs de 0 à 1023
int vitesse = map(valfaderVitesse02, 0, 1023, 0, 255); // Discrétise la valeur du potentiomètre, 0 à 0 (0 à 75 pour vitesse très lente) et 1023 à 255
// int vitesse = map(valfaderVitesse02, 0, 1023, 75, 255); // Discrétise la valeur du potentiomètre, 0 à 0 (0 à 75 pour vitesse très lente) et 1023 à 255
int vitesseLCD = map(valfaderVitesse02, 0, 1023, 0, 99);
if (etatInvert02 == LOW) { // si le bouton est appuiyé
digitalWrite(input3, LOW); //le moteur va dans un sens
digitalWrite(input4, HIGH);
// Serial.print("+");
lcd.setCursor(11, 1);
lcd.print(" >> ");
}
else {
digitalWrite(input3, HIGH); //le moteur va dans l'autre sens
digitalWrite(input4, LOW);
// Serial.print("-");
lcd.setCursor(11, 1);
lcd.print(" << ");
}
analogWrite(enable2, vitesse); // envoie la vitesse, doit recevoir valeurs de 0 à 255
// Serial.println(vitesse);
lcd.setCursor(18, 1);
lcd.print(vitesseLCD);
lcd.setCursor(9, 1);
lcd.write(byte(0)); // barre1
lcd.setCursor(10, 1);
lcd.write(byte(1)); // barre2
delay(50);
}
//###########################
//# Bouton poussoir sens 02 #
//###########################
void BoutonSens02() {
valeurBoutonInvert02 = digitalRead(buttonInvertPin02); // lit l'état du bouton
if ((valeurBoutonInvert02 == LOW) && (valBoutonInvert_prec02 == LOW)) {
if (etatInvert02 == HIGH) {
etatInvert02 = LOW;
digitalWrite(input3, LOW); //Freiner
digitalWrite(input4, LOW);
delay(300);
}
else {
etatInvert02 = HIGH;
digitalWrite(input3, LOW); //Freiner
digitalWrite(input4, LOW);
delay(300);
}
// Serial.print("etat Rotation: ");
// Serial.println(etatInvert02);
valBoutonInvert_prec02 == valeurBoutonInvert02;
delay(50);
}
}
//##################
//# Bouton Stop 02 #
//##################
void BoutonStopGo02() {
valeurBoutonStartStop02 = digitalRead(buttonStartStopPin02); // lit l'état du bouton
if ((valeurBoutonStartStop02 == LOW) && (valBoutonStartStop_prec02 == LOW)) {
if (etatStop02 == HIGH) {
etatStop02 = LOW;
}
else {
etatStop02 = HIGH;
}
// Serial.print("etat STOP : ");
// Serial.println(etatStop02);
lcd.setCursor(11, 1);
if (etatStop02 == HIGH & etatInvert02 == LOW) {
lcd.print(" >> ");
}
else if (etatStop02 == HIGH & etatInvert02 == HIGH) {
lcd.print(" << ");
}
else {
lcd.print("STOP ");
lcd.setCursor(9, 1);
lcd.write(byte(0)); // barre1
lcd.setCursor(10, 1);
lcd.write(byte(1)); // barre2
}
valBoutonStartStop_prec02 == valeurBoutonStartStop02;
delay(300);
}
}</pre>
<p><a href="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/20190706_165408.jpg"><img src="http://burogu.makotoworkshop.org/public/electronique/VariateurTrain/.20190706_165408_m.jpg" alt="" style="display:table; margin:0 auto;" /></a><br /></p>
<p>Le code est aussi <a href="https://github.com/makotoworkshop/Variateur-Vitesse-Train">documenté ici</a>.<br /></p>
<p><ins>Ressources</ins> :<br />
<a href="https://howtomechatronics.com/tutorials/arduino/arduino-dc-motor-control-tutorial-l298n-pwm-h-bridge/">https://howtomechatronics.com/tutorials/arduino/arduino-dc-motor-control-tutorial-l298n-pwm-h-bridge/</a><br />
<a href="https://www.locoduino.org/">https://www.locoduino.org/</a></p>http://burogu.makotoworkshop.org/index.php?post/2019/12/28/variateur-train#comment-formhttp://burogu.makotoworkshop.org/index.php?feed/atom/comments/681