Restauration d’un flipper : Part 1

Depuis deux ans j’ai récupéré un flipper Staal Gunmen, une machine made in France de 1979. Comme beaucoup de choses que je récupère il ne fonctionne pas et est en mauvais (très mauvais) état.

Au boulot !

Commençons par le fronton (partie supérieure du flipper qui affiche le score). Chose étrange, le bois utilisé pour le flipper est du contreplaqué couvert d’une épaisseur (5 mm) d’aggloméré sur lequel il y a la peinture. Comme il n’a pas été entreposé dans un endroit sain, l’agglo s’est dégradé et ne semble pas récupérable.

fronton

On emploie alors les grands moyens et on fait sauter la couche d’agglo et on la remplace par du contre plaqué de 5 mm. Après de longues heures de travail, pas mal de colle, de pâte à bois et quelques coups de rouleaux de peinture le résultat est plutôt satisfaisant.

fronton_new

Il reste à faire les décors mais ce sera pour plus tard.

Un peu d’arduino

Je souhaite réutiliser au maximum les éléments d’origine, mais malheureusement sur ces flippers les cartes mères ont tendance à lâcher à causse des CPU de mauvaise qualité… Donc pas le choix, il faut tout refaire avec les moyens du bord. Sur le fronton les afficheurs 7 segments utilisent des circuits assez standard j’ai donc pu les faire tourner sans problème avec un arduino. Bien sur tout le code sera disponible sur mon github.

afficheur.jpg

Aux pieds !

Comme je le disais plus haut les flippers et l’humidité ne font pas bon ménage, les pieds sont assez fatigués …Les voici après un petit coup (quelques heures) de grattage intensif.

Il ne reste qu’a les lustrer pour que ça brille …

 

 

 

Développer sur Méga Drive : Part 2

Comme précisé dans le dernier articles nous allons parlé ici de Debug et de JoyPad.

Debug

C’est un peu la base quand on développe de pouvoir debugger son programme afin de savoir ce qu’il se passe et pouvoir résoudre d’éventuels problèmes. Le SDK fournis tout le nécessaire pour débugger en alliance avec Gens KMod (menu CPU->Debug). Il y a différents items dans le menue permetant de voir pas mal de choses (registres des cpu, video, son, …). Nous allons utiliser la méthode la plus simple, les messages; elle permet simplement d’envoyer des messages dans une console un peu comme si vous utilisiez des « printf ». Pour cela c’est très simple il suffit d’utiliser la fonction KDebug_Alert qui prend en paramètre un string et le tour est joué (ne pas oublier le #include <kdebug.h> pour inclure les entêtes de debug).

 

#include <genesis.h>
 #include <kdebug.h>
 
 int main()
 {
 
        VDP_drawText("GENESIS HELLO !", 1, 1);
        KDebug_Alert("debug genesis hello");
 
        while(1)
        {
                VDP_waitVSync();
        }
        return (0);
 }

 

Une fois la rom chargée, en allant dans CPU->Debug->Messages nous voyons notre magnifique message de debug apparaître, facile mais très utile.

debug_1

 

JoyPad

Passons maintenant aux contrôles. Le JoyPad de base avait 3 boutons (A B C), un bouton start et une croix directionnelle puis il y a eu ensuite une version avec 6 boutons et d’autres type de contrôleurs (souris, clavier, pistolet…) qui sont aussi géré par le SDK. La capture des événements se fait pas un callback que l’on défini dans le main avec la fonction JOY_setEventHandler(nom_de_la_fonction_de_callback).  Cette fonction prend trois paramètres (u16 joy, u16 changed, u16 state) :

  • joy étant le joypad utilisé (JOY_1, JOY_2, …)
  • changed définie si un bouton a été pressé
  • state définie si un bouton à été relâché

 

Petit code pour mieux comprendre ….

 

#include <genesis.h>
 #include <kdebug.h>
 
 
 void handleJoyEvent(u16 joy, u16 changed, u16 state)
 {
    KDebug_Alert("joy callback");
    if (joy == JOY_1)
    {
        if (state & BUTTON_UP)
        {
            KDebug_Alert("up press");
        }
        else if (changed & BUTTON_UP)
        {
            KDebug_Alert("up rel");
        }
    }
 }
 
 
 int main()
 {
 
 
        JOY_setEventHandler(handleJoyEvent);
 
 
        VDP_drawText("GENESIS HELLO !", 1, 1);
        KDebug_Alert("debug genesis hello");
 
        while(1)
        {
                VDP_waitVSync();
        }
        return (0);
 }

 

Le résultat

 

debug_2

Fin de cette deuxième partie…. Dans la suite nous parlerons de l’affichage.

 

Développer sur Méga Drive : Part 1

Ceux qui me connaissent savent que j’apprécie les jeux vidéo, surtout les « vieux » jeux, et plus précisément les jeux et les consoles de la marque SEGA et je suis tombé il y a peu sur un SDK (Software Development Kit) permettant de développer facilement (en C) des applications pour la Mega Drive.

Je ne pouvais donc pas passer à côté sans jouer avec et j’en profite pour écrire quelques articles sur le sujet.

Présentation

La Mega Drive (Genesis aux US), est une console 16bits de SEGA sortie fin 1988 au japon, pour connaître son histoire je vous invite à lire sa page sur wikipedia.

Elle possède un CPU principal Motorola 68000 (7.6Mhz) et un coprocesseur Z80 (3.58Mhz)  très souvent utilisé pour gérer la partie son et qui permet aussi une rétrocompatibilité totale avec les jeux Master System le tout agrémenté de 64Ko de RAM (dont 32 accessibles par le Z80).

Au niveau vidéo, le VDP (Video Display Processor) permet d’afficher avec des résolutions de 320×224 et 256×224 (ou 320×240 et 256×240 pour les versions PAL), nous reviendrons en détail sur la partie vidéo plus tard.

Prérequis

  • Le SDK, récupérer les sources sur ce dépot git et les compiler.
  • Un éditeur de texte, Vim est parfait pour ça.
  • Gens KMod qui est une version de l’émulateur modifié avec pas mal d’options de debug (fonctionne très bien sous linux avec Wine).

On se lance dans le premier programme

Comme tout le monde nous allons faire un petit « Hello Wolrd » que nous enrichirons au fur et à mesure de notre apprentissage.

#include <genesis.h>

int main()
 {

       VDP_drawText("GENESIS HELLO !", 1, 1);

       while(1)
        {
                VDP_waitVSync();
        }
        return (0);
 }

Petite analyse du code :

  • L’inclusion du début permet de charger les entêtes des librairies fournies par le SDK.
  • VDP_drawText sert a afficher du texte suivant les coordonnées X et Y données ensuite.
  • Le while sert juste a avoir une boucle qui tourne dans laquelle nous pouvons faire plusieurs choses (lire les informations du joypad, mettre à jour des variable, modifier l’affichage …) et surtout on y met dedans le VDP_waitVSync qui permet de caler la boucle sur le rafraîchissement de l’affichage de la console 50Hz en PAL et 60Hz en NTSC.

Plus qu’a compiler notre programme avec le Makefile fournis dans le SDK pour simplifier les choses :

make -f /opt/gendev/sgdk/mkfiles/makefile.gen 

La compilation nous crée deux répertoires à la racine du projet. Le premier est nommé src dans lequel on retrouve deux fichiers :

rom_head.c qui contient les métadonnées concernant la rom (Copyright, Nom, Zone…).

sega.s qui lui comprends le code nécessaire au boot du programme sur la console.

Dans le dossier out nous trouvons les fichiers objets (.o) et les binaires résultants de la compilation. Celui qui nous intéresse est le fichier rom.bin qui est la rom de notre programme.

Il ne reste plus qu’à l’ouvrir dans un émulateur pour voir le résultat.

Dans la prochaines partie nous verrons comment récupérer les information d’un joypad et comment débugger simplement ses programmes.

 

Un peu de détente sous hypnose …

Aujourd’hui je vais vous parler d’un masque connecté d’hypnose qui se nomme Hypnos et qui est développé par une société française appelée DreaminzZz. Ils nous promettent donc de faire des séance d’hypnose à domicile…

Pour commencer on déballe.

 

boite

 

La boite est très simple avec sur le dessus un dessin du masque et un petit liseré bleu blanc rouge pour nous rappeler que c’est Français. Sur le dos nous avons un petit descriptif et quelques informations techniques et légales.

 

boitearr

 

A l’intérieur une pochette pour transporter son masque, le masque, un « mini » manuel et un câble de charge USB.

 

 

Petit tour du propriétaire.

Sur le dessus du masque on remarque une fermeture éclair, derrière se cache le « cœur » d’hypnos (Un PIC 32, un chipset bluetooth LE PIC, quelques capteurs, une batterie de 320mah, 7 leds RGB et un Vibreur). Le connecteur de charge n’est pas un standard, j’aurai apprécié un USB-C mais ils ont opté pour un connecteur aimanté… certains verront cela comme un point fort d’autre un point faible, chacun son avis.

Il y a dans le masque trois boutons qui sont indiqués discrètement sur le décor à l’avant, marche/arrêt et choix du mode autonome.

Sur la partie arrière nous distinguons juste trois leds devant chaque oeil et le bandeau permettant de maintenir le masque en place avec un système anti dérapant.

Concrètement, c’est quoi ?                                                                                                                    

 L’application contient un store avec différentes catégories (relaxation, douleur, détente,…) qui permettent à l’utilisateur de choisir son type de séance.

 

 

Pour mon premier essai j’ai été attiré par un voyage spatial (j’avais déjà écouté le teaser sur PC,et j’avoue j’étais bien sceptique sur les possible sensations promises…). Je m’allonge donc sur le canapé, enfile mon masque et me laisse guider par l’histoire de Guillaume Gautier qui explique comment se détendre et comment rythmer sa respiration. Il se présente comme coéquipier de cette mission Apollo Z qui va nous emmener sur la lune… Et là je l’avoue, c’est la claque. Le son, la voix, les effet lumineux et les vibrations m’ont littéralement emporté.

 

 

Depuis ce premier test j’ai fait plusieurs séances de différentes natures et j’accroche plus ou moins suivant les sujets, mais dans l’ensemble c’est plutôt concluant; je l’ai même utilisé pour faire passer un mal de tête avec succès. Voyant les effets positif qu’il avait sur moi, ma femme l’a testé et je pense qu’il va bientôt falloir en acheter un second …

Avantages :

  • Confortable
  • Joli
  • Facile à utiliser
  • Support ultra réactif

Inconvénients :

  • Uniquement un câble USB pour la charge, pas de transfo fourni
  • Store encore léger mais le produit est tout nouveau il devrait donc se remplir rapidement

Scan to pancakes

Le chandeleur est passée mais il est toujours temps de manger quelques crêpes. Pour ce dernier « bricolage » j’ai essayé de faire avec un maximum de récupération et un minimum d’investissement.

Quoi que c’est ?

Tout simplement une imprimante à pancakes. Le principe est simple, on se déplace sur 2 axes et on dépose de la pâte sur une plaque de cuisson.

 

Liste du matériel nécessaire

Que j’ai acheté :

  • Une plancha basique 20€
  • Une pompe avec tube 20€
  • Deux bouteilles à sauce 4€
  • Un shield CNC 15€

Que j’avais déjà :

  • Un relais
  • Une alimentation 12V
  • Deux vieux scanner
  • Des tasseaux de bois
  • Un Arduino
  • De la quincaillerie

Commençons le montage

Les vieux scanners sont parfaits pour ce genre de bricole car ils embarquent des moteurs pas à pas et sont montés avec des axes rectifiés. Les plus récent sont tout en plastique et donc ne peuvent pas faire l’affaire. Pour l’axe Y, j’ai ouvert le premier scanner et je l’ai posé tel quel. J’ai fixé un joli cadre fait avec les tasseaux de bois sur le support de la lampe du scanner. Puis j’ai fixé en haut de celui-ci l’autre bas de scanner découpé sur le sens de la longueur. A ce niveau là, les deux axes sont en place, il ne reste plus qu’à placer le système de dépôt de pâte.

  

J’ai pensé à plusieurs solutions :

La seringue : solution très précise mais qui nécessite un montage plus compliqué et sa faible contenance rendra plus complexe l’utilisation de la machine et le remplissage.

Une pompe : elle servirait à pomper le liquide avec un tuyaux et le faire sortir dans un autre tuyaux à l’axe opposé. Cela paraît une bonne idée mais les quelques tests effectués ont démontré que de la pâte coule toujours un peu même quand on ne pompe pas.

La pompe à vide : l’idée est d’avoir un contenant dans lequel on met la pâte et l’on empêche la pâte de tomber en aspirant. Quand la pâte doit tomber, on relâche la pression et la gravité fait son travail.

La dernière solution est donc la plus efficace, même si je n’utilise pas vraiment une pompe à vide cela fonctionne bien. Il reste cependant deux défauts, en aspirant la pâte se sèche dans la buse il faut parfois la déboucher et surtout il faut être un grand maître dans l’art du pancacke (merci Philippe) pour réussir une pâte assez fluide mais pas trop:)

impression réalisée par le Tiers-Lieu Fontgrande-Carmaux pour le fablab festival 2017

Et pour le soft ?

Notre montage étant terminé il a fallu penser au coté logiciel. Si l’on regarde de plus près, la machine ressemble beaucoup à une découpe laser ou à un plotter. J’ai donc regardé ce qu’il se fait de ce coté et je me suis orienté vers le firmware GRBL avec un plugin GCODE pour Insckape.

Et voila… je m’étais fixé pour objectif de finir ce projet pour le Festival d’Art Numérique organisé par les étudiants de l’IUT MMI de castres et je l’ai finie à temps. Il ne me reste plus qu’a trouver un nouveau projet pour la prochaine édition à laquelle je compte bien participer 😉

 

la machine au fablab festival 2017

la machine au fablab festival 2017

On en parle ici : http://www.ladepeche.fr/article/2017/05/14/2574356-une-imprimante-3d-pour-fabriquer-des-gateaux.html

 

UNOJOY, l’ami des Arduino et des arcades ?

J’avais depuis quelques temps une borne Sega Rally qui trainait dans un coin (oui le gros truc avec les sièges et volant). Après de multiples tentatives de réparation j’ai opté pour une solution simple mais efficace, vider le tout et mettre un PC avec des émulateurs et des jeux.

sega-rally-twin-sit-down-racing-arcade-machine

Avantages :

  • Alléger le tout
  • Pouvoir jouer à plein de jeux

Inconvénients :

  • Perte du retour de force
  • Beaucoup de travail
  • Se faire huer par les puristes

J’ai donc commencé par tout désosser, remplacé les écrans par des écrans LCD, refait les parties bois, tout repeint … Vient alors le moment de remonter la borne et de tout câbler. Pendant toutes ces étapes une question restait alors sans réponse… que faire pour le volant. J’ai pensé utiliser un volant du marché mais souhaitant conserver au maximum le design de la borne cela n’allait pas, et un jour je suis tombé sur UNOJOY.

UNOJOY permet de transformer son Arduino en Joystick en utilisant les entrées analogiques et numériques, ceci est tout simplement génial.

UNOJOY fonctionne sur Arduino Uno, Mega et Leonardo; en gros ça reprogramme l’atmega 8U2 ou 16U2 (suivant la carte utilisée) pour faire reconnaître l’Arduino comme un joystick par le PC (mais apparement aussi la ps3).

windows

Avant cette étape il faut bien sûr câbler le tout et vérifier que ça fonctionne, pour cela un petit outil Processing permet de voir en live si les contrôles fonctionnent bien.

processing

En cas de contrôles un peu plus complexe (comme la boîte de vitesse sur ma borne) il est possible d’adapter le code (UnoJoyArduinoSample.ino) afin de gérer ces contrôles.

vitesses

Voici le petit hack pour utiliser mon levier à 4 vitesses avec trois Switchs qui sont connectés sur les pins numérique 2, 3 et 4 :

controllerData.triangleOn = LOW;

controllerData.circleOn = LOW;

controllerData.squareOn = LOW;

controllerData.crossOn = LOW;

  

//  operator to invert the readings from the pins

if (!digitalRead(2)&& digitalRead(3))

  controllerData.triangleOn=HIGH;

else if (!digitalRead(3) && !digitalRead(4))

  controllerData.circleOn=HIGH;

else if (!digitalRead(3))

  controllerData.squareOn=HIGH;

else if (!digitalRead(4))

   controllerData.crossOn=HIGH;  

On envoie ensuite le code sur l’Arduino, puis on lance le petit bat qui le transforme en périphérique de jeux et le tour est joué. Il est bien sûr possible de transformer à nouveau sa carte en Arduino avec un autre bat.

Je vous ferai découvrir très prochainement une réalisation utilisant UnoJoy, « stay tuned » comme on dit !

Le code de UnoJoy : https://github.com/AlanChatham/UnoJoy

Faire sa propre borne d’arcade ?

Bonjour, ça fait un moment que ce projet me traîne dans la tête… j’ai toujours rêvé d’une salle de jeux à la maison (et ce rêve prend forme petit à petit). Il me fallait donc un borne d’arcade, objet indispensable dans un tel lieu. Il est très facile d’en trouver sur les sites d’annonces mais bien souvent la borne se limite à un seul jeux et/ou est hors de prix ; la solution était donc de la fabriquer moi-même.

 

logo-mame

Comment ?

Il y a tout ce qu’il faut sur notre cher Internet. J’ai passé pas mal de temps à faire des recherches et j’ai fini par opter pour ce modèle :  http://www.koenigs.dk/mame/eng/draw.htm Les plans sont assez clair et on peut voir sur le site pas mal de réalisation plutôt réussie. J’ai donc commencé cette aventure (qui n’est pas encore terminée) il y a une semaine et je vais vous donner quelques informations qui m’ont manqué pendant la construction.

Liste du matériel nécessaire

Je n’ai pas trouvé de liste claire, j’ai donc recensé tout ce que j’ai acheté ou récupéré, ça peut toujours aider :

  • Bois (j’ai opté pour des tablettes en pin 200×60 pour le prix et l’aspect du bois que j’aime bien).
  • Tasseaux, il faut quelques morceaux pour pouvoir attacher tout ça, 27×27 c’est parfait.
  • Des vis de 3×40.
  • De la colle à bois (tous les tasseaux sont collés et vissés).
  • Deux petites charnières et un loquet pour ouvrir l’arrière.
  • Du plexiglas pour faire le tour de l’écran (bezel) et le haut (marquee).
  • De la peinture bois et du vernis pour protéger tout ça.
  • Un Raspberry pi complet (alimentation, carte SD, …).
  • Un écran LCD (24” 16/9 pour moi).
  • Un kit de joysticks et boutons. Celui-là par exemple : http://www.ebay.fr/itm/Kit-Joystick-Arcade-2-Joueurs-COMPLET-/121551540944?hash=item1c4d0952d0).
  • Un kit 2.1 pour le son.
  • Deux grilles pour haut parleur à la bonne taille.
  • Une lampe LED complète pour rétro-éclairer le marquee.

Modifications personnelles

  • J’ai modifié le dos de la borne, j’ai fait une porte d’environ 125cm pour avoir un accès complet au câblage et une planche fixe au dessus et en dessous pour solidifier la boîte.
  • Je n’ai pas fermé le bas, j’ai juste mis deux tasseaux traversant sur lesquels j’ai vissé un caisson de basse.
  • Pour le panel j’ai utilisé les dessins qui sont disponible ici : http://www.slagcoin.com/joystick/layout.html , à vous de choisir celui qui vous plaît. Pour perçage , rien de plus simple il suffit de l’imprimer et le scotcher sur la planche pour faire les trous.
  • Si votre kit de son comporte une télécommande vous pouvez la fixer sous le panel et y accéder par dessous pour régler le son.

Quelques photos de la réalisation


Conclusion

Elle est enfin jouable, il me reste a faire :

  • Un beau marquee décoré avec une lampe pour le rétro éclairer.
  • Le bezel autour de l’écran.
  • Poser des grilles devant les HP.
  • Et décorer le tout avec de beaux stickers.
  • J’ai testé raspicade, retropie et recalbox comme distributions et je conseille les deux dernières car très simple à configurer et utiliser.