まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

samedi, 27 décembre 2025

Pocket SDVX pico, Makoto's edition -5-

Suite des précédents travaux :

Je ne me suis pas rendu compte du temps qui passait − autour d'une année lol − assez occupé sur d'autres sujets en partie chroniqués parmi ces pages…
Mais enfin ! J'ai compilé toutes mes sources, apporté les corrections nécessaires et mis tout cela en ordre pour que cela soit digeste et exploitable.
Je vais donc décrire tout ça, en espérant que cela en motive certain·e·s à se lancer dans la reproduction de l'objet, et pourquoi pas dans des améliorations/modifications ou de nouvelles fonctions. Vous me montrerez ça !

  • Hors usage personnel, la seule condition au repartage étant de respecter la licence CC-BY-SA 4.0 voulue par Speedy Potato, l'auteur originel du contrôleur sur lequel j'ai basé mes travaux, en citant également Woody Tsai (je n'ai pas trouvé de sources le concernant, il ne semble pas partager ses travaux autrement qu'en mode « hey tavu ce que j'ai fait… », la jeunesse en mal de reconnaissance sur les rézo ou bien en mode portfolio d'une activité lucrative, mais puisque je me suis inspiré de son idée de dessin… Voilà).
  • On trouvera donc en annexe à ce billet deux archives.

Pocket-SDVX-Pico MAKOTO final.zip :

Cette archive contient deux dossiers principaux et une liste des composants électro-mécaniques dans un fichier tableur.

  • Le dossier PRODUCTION, pour celleux qui souhaiteraient reproduire tel quel mon contrôleur :

− Il y a les fichiers STL pour imprimer les pièces 3D.
− Les fichiers vectoriels SVG pour la découpe laser en PMMA transparent.
− Et les fichiers Gerber dans plusieurs archives zip pour faire fabriquer les plaques. On a besoin de la plaque PCB qui constitue le circuit électronique et la plaque PLATE qui constitue la plaque décorative supérieure.

Cette dernière existe en 3 versions,
PLATE est celle que je présente ici, depuis le début de ces travaux,
PLATE2 est quasi identique sauf qu'elle ne présente pas deux grands trous ronds pour les boutons d'encodeur − knob −, mais deux petits trous pour laisser juste dépasser la tige de l'encodeur, donc dans le cas où l'on souhaiterait que le knob soit placé au dessus de la plaque et non incrusté comme c'est le cas avec la PLATE. Ce qui laisse la liberté de choix pour le diamètre des knob !
PLATE3 est prévue pour être utilisée à la manière des modèles Pocket SDVX Pico v4 ou v5 originels, c'est à dire qu'on va clipser les switchs MX dans cette plaque, et qu'il n'y aura pas d'autres plaque par dessus. J'en parlais dans le premier billet sur le sujet, avant de faire d'autres choix techniques qui m'ont menés à la PLATE.
Donc avec PLATE3 on n'utilisera pas les supports de switch MX imprimé 3D, ni les plaques en découpe laser, Le contrôleur sera alors moins épais et le cadre formant le boîtier n'ira pas avec non-plus. Il faudra que vous bricoliez quelque chose vous-même car je n'ai pas mené cette version à son terme.

  • Et pour fabriquer tout ça ?? Une petite vidéo sous-titrée !

En complément, je reposte la vidéo de l'assemblage 3D du billet N°3 en bas de cette page.

  • Le dossier SOURCES, pour celleux qui souhaiteraient modifier quoique ce soit au contrôleur :

− Il y a les ressources Kicad 7 pour la PCB et les PLATE, PLATE2, et PLATE3.
− Les fichiers FreeCAD 1.0 pour la modélisation 3D et 2D.
− Ainsi que les fichiers des graphismes que j'ai mis tant de temps à dessiner,
qui ont permis de fabriquer les ressources du dossier PRODUCTION que j'ai décrites.

Le contenu de l'archive est aussi disponible sur github :

Firmware Pico-Game-Controller-20220705-v4 Makoto-edition.tar.gz :

Comme son nom l'indique, elle contient le firmware du contrôleur USB.

  • Le binaire à flasher sur le Raspberry Pi Pico se trouve dans le dossier build_uf2

Pour opérer, il suffit de maintenir le bouton poussoir du Rpi Pico enfoncé tout en connectant le câble USB-C à l'ordinateur, puis de relâcher la pression.
Un média amovible est alors monté automatiquement par le système d'exploitation de votre machine, et il suffit alors de glisser le fichier Pico_Game_Controller_Makoto-edition.uf2 dans ce média. Sitôt fait, le média sera automatiquement démonté et le Rpi Pico redémarrera. En principe le contrôleur de jeux doit alors être disponible dans l'ordinateur.

Le reste des fichiers constituent les sources du programme que j'ai modifié pour prendre en charge les leds et boutons supplémentaires, ainsi que les différents modes de couleurs additionnels.
Le SDK Rpi pico est lui aussi inclu, ce qui fait que si on a gcc, cmake et ninja installés sur son ordi, il suffira de lancer depuis le dossier build les commandes :

cd build
cmake ..
ninja

pour obtenir le binaire dans le sous-dossier build/src en fin de compilation.
Si ça se passe bien, on pourra ensuite modifier le programme à loisir en éditant les fichier .c et .h disponibles dans le dossier src présent à la racine.
Sinon, on peut aussi faire ça avec l'usine à gaz Visual Studio code

  • Ce programme est donc basé sur le firmware 20220705, à ce que j'ai compris le dernier en date que j'ai trouvé concernant la v4 du contrôleur qui m'a servi de modèle.

Le contenu de l'archive est aussi disponible sur github :



  • Voilà, je pense que j'ai fait le tour de la question, on termine avec ça :

samedi, 13 décembre 2025

Pocket SDVX pico, Makoto's edition -4-

Suite des précédents travaux :

Le fond :

Au départ il était prévu que le dessous de l'appareil soit constitué d'une plaque imprimée 3D, notamment car celle-ci doit venir s'appuyer sur la plaque électronique afin de rigidifier la structure. Pour cela il est nécessaire de prévoir tout un tas de creux dans la plaques afin que la matière ne viennent pas contre les pattes soudées des composants.

  • J'ai à nouveau dû imprimer la pièce en deux morceaux, ainsi que des petites plaquettes


qui vont servir à consolider le collage à la cyanoacrylate.

  • Sont prévu les trous pour accueillir des inserts fileté de 4 mm de diamètre à destination des pieds en caoutchouc où des ventouses !


  • Voici l'intérieur de la plaque avec la vis de la ventouse qui dépasse. Il sera donc coupé à dimension.


On peut donc alterner à loisir entre pieds ou ventouses, à l'aide d'un tournevis pour le premier et en tournant l'objet à la main pour la seconde.
La vis dans le coin est celle qui ferme ce couvercle de fond, et elle sera complémentent cachée par le pieds en caoutchouc.

Plus tard j'ai envisagé la possibilité d'utiliser des plaques de PMMA transparente à la place de l'impression 3D. J'ai simplement eu l'idée de demander la découpe de deux plaques, une de 3 mm d'épaisseurs qui comporterait non pas les creux mais des trous, et l'autre de 2 mm pour venir fermer le tout.

  • La première plaque de 3 mm, puis la seconde de 2 mm par dessus :


  • La plaque de 2 mm est tout de même trouée pour laisser passer l'épaisseur du port USB du Rpi Pico qui reste là, et permettre d'appuyer sur son bouton de programmation.


Voulant suivre la même logique pour la fixation des pieds/ventouses, j'avais prévu des trous larges dans la plaque de 3 mm pour y mettre les inserts.

Mais ce fut une idée assez galère, car en fondant le PMMA boursouffle un peu en repoussant la matière fondue à la surface, ce qu'il a fallu gratter afin d'aplanir le périmètre autour de l'insert. Et comme l'insert dépasse dans la plaque de 2 mm, il a fallu élargir et le chanfreiner le trou correspondant… Bref, pas une partie de plaisir, alors qu'il suffisait de prévoir un trou plus petit et de le tarauder pour y créer le filetage qui aurait permis de visser les pieds/ventouses directement dans le PMMA, plastique suffisamment dur pour cela.

Autre déconvenue aussi, je l'évoquais dans ma série sur le pincab, le contour des plaques découpées au laser présente un angle de 3°, ce qui n'avait pas posé de problème pour la plaque de protection du dessus, mais ici, avec 3 + 2 mm d'épaisseur, c'est suffisant pour gêner quelque peu la mise en place des plaques. Il a donc fallu limer les 4 champs des deux plaques, afin de les redresser à 90°.

  • C'est tout bon, elles rentrent maintenant bien à plat, ouf !



Finitions :

Je l'évoquais plus haut, pour estomper la jointure du cadre du boîtier, j'ai une solution qui ne fonctionne qu'avec du plastique ABS.

En effet, le solvan qui permet de ramollir ce plastique n'est autre que l'acétone, et il est alors aisé de se confectionner du mastique coloré qu'on va utiliser pour combler toutes les imperfections. Une fois bien sec il suffira de limer et poncer jusqu'au résultat attendu. Toutefois il faut faire attention au ratio acétone/quantité de plastique, car j'ai remarqué que si la mixture est trop diluée, en séchant elle laisse des micro-bulles blanches assez disgracieuses.

  • Alors on verra toujours l'emplacement de la jointure, mais ça jure moins et au toucher, on ne la ressent plus sous les doigts.


  • On peut aussi pousser la chose jusqu'à poncer toute la pièce, de plus en plus fin…


Et ensuite polir et lustrer la surface jusqu'à obtenir cette brillance !

  • Une dernière chose à faire, est de chanfreiner les trous sur les plaques en PMMA pour permettre d'engager des vis à tête fraisée à fleur de la surface.



Fonctionnalités :

  • Une petite vidéo qui montre le montage des ventouses et leurs utilité :

J'ai dû bricoler le firmware d'origine afin de pouvoir attribuer des fonctions aux cinq boutons que j'ai ajouté sur les tranches.
Ceux de la tranche inférieure sont vu comme des boutons de gamepad et pourront servir en cours de partie.
Tandis que ceux de la tranche supérieure sont là pour configurer la déco.

Celui de gauche pour basculer entre le mode « color cycle » qui présente une vague de couleurs défilantes et le mode « turbocharger » qui permet aux « knobs » d'animer la vague de leds en rouge ou en bleu.
Celui de droite incrémente d'une couleurs parmi douze.

  • Pour bien comprendre, voici tout cela montré dans cette petite vidéo :


Lire la suite...

lundi, 24 novembre 2025

Péritel multiple

Un peu de contexte,

Il y a bien longtemps, dans les années '90, j'étais l'heureux propriétaire de deux consoles de jeux, une Sega Master System et une PC Engine qu'on appelait plus simplement la NEC à l'époque.
Quasi toutes mes économies amassées au fil du temps y étaient passées, et il ne me restait pas grand chose mais suffisamment pour acheter un accessoire qui aurait dû me simplifier la vie : un quadrupleur de prises péritel.

En effet, celleux qui ont vécu l'époque savent à quel point il était pénible de brancher un appareil sur une télévision, sachant qu'elles étaient souvent disposées dans un coin peu accessible, voire dans un meuble dédié et que la manœuvre consistait alors à se munir de la dite prise péritel, plonger son bras derrière la télé, et à l'aveugle tenter d'aligner la prise dans celle de la TV… Une galère sans nom, sans compter qu'à force d'opérer, la prise de la TV avait tendance à devenir lâche et devenait alors source de faux contacts générant parasitage vidéo, coupe de son et autre nuisances si on n'avait pas pris soin de bien coincer la prise… Et malheur à celui qui toucherait par mégarde au câble péritel, provoquant alors le déséquilibre de ce savant réglage.
Voilà, donc ça, chaque fois qu'on voulait passer du magnétoscope, ou à une des deux consoles, misère !

  • Au supermaché de mon coin, j'ai donc déboursé 15 Francs, si mes souvenirs sont exacts, pour obtenir l'accessoire qui aurait donc dû me permettre de connecter jusqu'à 4 appareils sur la TV 36 cm à ma disposition.

Sauf que ! Ça n'a jamais fonctionné.
Le simple fait d'avoir plusieurs appareils connectés, même éteints, provoquait une perte de qualité d'image et de son sur l'unique appareil qu'on utilisait.

Débutant à l'époque en électronique, j'ai alors ouvert le quadrupleur et tenté de comprendre l'origine du problème.
Je ne me souviens plus de ce que j'ai conclu alors à la vue du circuit…

  • Par contre aujourd'hui en regardant cette plaquette en bakélite je peux dire que c'est d'une conception catastrophique !

Les quatre prises comportant 12 signaux sont simplement tous connectés ensembles… C'est à dire par exemple que l'appareil allumé envoyait son signal audio/vidéo à la TV, certes, mais aussi aux autres appareils !!! Et si on en allume plusieurs, c'est tout ce monde qui se « repisse dessus » (jargon d'électronicien) joyeusement, quelle horreur ! Surtout quand on sait aujourd'hui (l'ados de l'époque ne savait pas) qu'en plus de ça, les broches 8 et 16 des péritel envoient chacune 5 et 12 Vots. Heureusement que les puissances de tous ces signaux sont très faibles et n'ont pas détruit de matériel.

Je n'avais pas tout compris, cependant j'avais quand même pensé qu'il faudrait isoler les prises péritel les unes des autres, ce que j'avais fait en coupant le circuit des pistes à la surface de la bakélite.
Puis avec le peu de ressources dont je disposais j'ai imaginé et bricolé d'abord un connecteur à l'aide de dominos… Imaginez un peu, souder des fils sur le bornier de la prise péritel mâle, et d'autres sur le pastilles des broches des péritel femelles.
Ces fils sont ensuite vissés d'un côté du dominos noir pour la péritel mâle, et de l'autre côté, j'ai vissé des clous que j'ai coupé à dimensions. Ce montage devenant alors le connecteur mâle.
Puis les fils provenant des 2 broches péritel femelles sont vissés chacun d'un côté des dominos translucide, pour faire les connecteurs femelles. Suffisait alors d'insérer une des deux femelle sur le mâle, en jouant sur la souplesse du domino, ça n'était pas toujours facile mais ça fonctionnait…

  • J'ai retrouvé les dit dominos, j'ai tenté de reproduire la scène, imaginez juste les clous ne dépassant que de 5 mm :


J'ai donc dû percer le boîtier pour sortir les bottes de fils, on verra ces trous de plus prés ensuite.
Et oué, quand t'as pas de permis, pas de voiture, pas de magasin à proximité, tu te débrouilles avec ce que tu as sous la main.

  • Plus tard j'ai découvert l’existance d'un magasin d'électronique accessible en 20 min à pieds de l'école (et 20 min retour…) auprès duquel j'ai pu aller m'acheter des petits interrupteurs inverseurs. J'ai pu disposer du matériel de l'école, me permettant de simplifier mon montage, par une plaquette gravée sur laquelle j'ai soudés tous les fils dont je parlais ci-dessus, afin de les raccorder sur les interrupteurs :


Pour cacher la grand entaille faite dans le boîtier, j'avais collé du carton de chemise colorée. (notez l'isolant en chiffon quadrillé, utilisé là car les seules vis que j'ai trouvé étaient trop grosses et auraient fait court-circuit en touchant les pistes de ma plaquette).
Pour passer d'une péritel à l'autre, au lieu de débrancher un domino pour brancher l'autre, il fallait alors basculer tous les inverseurs dans la position opposée. C'était mieux, mais pas ouf, et on ne disposait là encore que de deux péritel en source audio/vidéo.

Lire la suite...

samedi, 22 novembre 2025

Joystick Arcade pour Nintendo GameCube

La borne est en travaux !
En plus du PC « mame » je souhaite lui installer deux autres systèmes de jeux, dont l'un est la console GameCube.
Motivation ? Jouer à Ikaruga et SoulCalibur sur la borne avec les sticks arcade.
Sauf que ! Comment faire pour connecter ces derniers à la console ?

Avant de réinventer la roue, j'ai traîné sur le web à la recherche d'une proposition de circuit électronique.
J'ai eu un peu de mal à trouver ce que je cherchai, visiblement ça n'intéresse pas trop les foules… L'occasion de constater au passage que la manette GameCube n'était pas aussi électroniquement simple que ses aînées, et qu'il faudrait un circuit programmable pour faire le travail.

J'ai fini par trouver cette page, qui décrit comment construire un contrôleur maison, avec un Arduino, et surtout l’existence de la bibliothèque logicielle adéquate : https://github.com/NicoHood/Nintendo (que je joins en annexe à ce billet)

  • Le code C++ est vraiment très simple à adapter grâce aux exemples donnés, et j'ai alors pu assigner les numéros de broches d'un Arduino Pro Mini 5V aux boutons d'une manette GameCube et établir le schéma de câblage suivant :


Une fois un câble de manette de remplacement acheté, restait alors le plus long à faire, câbler les broches sur le joystick.

  • Ici le brochage est réalisé à l'aide de connecteurs « maisons », qui permettront d'interchanger le joystick entre plusieurs systèmes de jeu (USB ou GameCube pour le moment).


  • Le brochage du câble de la manette est le suivant :
Couleur  −   Usage 

Jaune    −   5V
Blanc    −   GND
Vert     −   GND
Noir     −   GND
Bleu     −   3,3V
Rouge    −   DATA
  • Voici le Scketch à inscrire sur l'Arduino, en ayant pris soins de charger la librairie de NicoHood :

https://github.com/makotoworkshop/Joystick_Arcade_GameCube

#include <Nintendo.h>

// Variables
#define Bouton_A  A1
#define Bouton_B  9
#define Bouton_X  A2
#define Bouton_Y  3
#define Bouton_START  A3
#define Bouton_L  7
#define Bouton_R  8
#define Bouton_Z  2
#define Direction_UP  6
#define Direction_DOWN  5
#define Direction_LEFT  A0
#define Direction_RIGHT  4

// Broche de communication vers la console GameCube
CGamecubeConsole gc_console(10);

// Structure de données de la manette
Gamecube_Data_t gc_data = defaultGamecubeData;


void setup() {
//  Serial.begin(115200);
  // Configuration des boutons en entrée avec résistance pull-up
  pinMode(Bouton_A, INPUT_PULLUP);
  pinMode(Bouton_B, INPUT_PULLUP);
  pinMode(Bouton_X, INPUT_PULLUP);
  pinMode(Bouton_Y, INPUT_PULLUP);
  pinMode(Bouton_START, INPUT_PULLUP);
  pinMode(Bouton_L, INPUT_PULLUP);
  pinMode(Bouton_R, INPUT_PULLUP);
  pinMode(Bouton_Z, INPUT_PULLUP);
  pinMode(Direction_UP, INPUT_PULLUP);
  pinMode(Direction_DOWN, INPUT_PULLUP);
  pinMode(Direction_LEFT, INPUT_PULLUP);
  pinMode(Direction_RIGHT, INPUT_PULLUP);
  delay(100);
}

void loop() {
  // Lecture des boutons
  gc_data.report.a      = !digitalRead(Bouton_A);
  gc_data.report.b      = !digitalRead(Bouton_B);
  gc_data.report.x      = !digitalRead(Bouton_X);
  gc_data.report.y      = !digitalRead(Bouton_Y);
  gc_data.report.start  = !digitalRead(Bouton_START);
  gc_data.report.z      = !digitalRead(Bouton_Z);
  gc_data.report.l      = !digitalRead(Bouton_L);
  gc_data.report.r      = !digitalRead(Bouton_R);

  gc_data.report.dup    = !digitalRead(Direction_UP);
  gc_data.report.ddown  = !digitalRead(Direction_DOWN);
  gc_data.report.dleft  = !digitalRead(Direction_LEFT);
  gc_data.report.dright = !digitalRead(Direction_RIGHT);

  // Stick analogique centré
  gc_data.report.xAxis = 128;
  gc_data.report.yAxis = 128;

  // Stick C centré
  gc_data.report.cxAxis = 128;
  gc_data.report.cyAxis = 128;

  // Gâchettes analogiques à 0
  gc_data.report.left = 0;
  gc_data.report.right = 0;

  // Envoi du rapport à la console de jeux
  gc_console.write(gc_data);

//  Serial.print("bouton Y = ");
//  Serial.println(gc_data.report.y);
  
}

- page 1 de 176