Toujours vivant !

De droite à gauche:

3 Bally récupérés pour sauvetage !

Le Supersonic,

Sert de prototype pour l’implémentation de ma platforme MPF à base de Raspberry Pi + Arduino. Certaines mécaniques sont fatiguées, mais entièrement fonctionnel. Tout le faisceau de lampes a été enlevé, ça fait beaucoup moins de fils !

Le Playboy,

Le plateau est assez propre mais la caisse est défoncée, et pas backglass. Je ne sais pas encore ce que je vais en faire, même si j’ai envie de le redémarrer avec les cartes d’origines.

Le Xenon,

Dans un sinistre état, voué à un désossage complet, il va me servir de réserve de pièces mécaniques pour le flipper TheLegoMoviePinball. J’ai commencé le démontage de l’électronique, la tête est maintenant vide. Je vais attaquer le démontage complet du plateau et repartir d’une planche neuve !

 

MPF migration V5

J’ai migré le code de la machine Supersonic en V5, tout n’est pas encore dépoussiéré mais ça se lance !

J’ai repris le code de la plateforme RaspPinball pour coller aux nouvelles API de MPF en V5, mais surtout qui permet de s’installer en plateforme externe, c’est à dire sans devoir modifier le code du projet original (/mpf). Ça permet entre autre de profiter des mises à jours via PIP de mpf/mpf-mc sans devoir modifier systématiquement la partie pour intégrer sa propre plateforme. Bien joué la MPF team !

 

Aujourd’hui tout se lance sous Windows + PyCharm + Arduino + Matrice de switch, reste à pousser tout ça sur le Raspberry et le vrai plateau pour voir ce que ça donne en vrai !

 

 

 

 

 

Ca sent le chaud, non ?

Grosse pause, ça n’avance plus beaucoup. Un petit coup de chaud a mis un coup de frein au développement. J’ai laissé tourner le flipper dans les mains des enfants qui ont joué seuls pendant quelques heures. Malheureusement, un « petit » bug dans mes routines de l’Arduino a laissé une bobine d’un bumper collée. Inévitablement celle-ci a fondu, faisant aussi surchauffer le mosfet correspondant.

Quand j’ai arrêté le flipper c’était bien évidemment trop tard, et je m’estime heureux qu’il n’y ait pas eu de départ d’incendie ! Certes je n’ai pas encore installé de fusible, mais comme je travaille avec une alim de laboratoire, celle-ci a limité le courant et ne s’est pas coupée, mais a fourni quelques 2.5A pendant deux heures. Un vrai radiateur d’appoint.

Les vacances d’été sont arrivées, pas le temps de bosser sur la partie électronique ni de changer la bobine. La trêve estivale étant terminée, j’ai changé les composants, mais je me retrouve dans une situation qui demande plus de temps de recherche:

  • l’arduino réagit partiellement, est-ce que j’ai croisé quelque chose sur la carte puissance réparée ?
  • le raspberry reboot en boucle… La SD card est-elle ?

Bref, un petit retour à la case départ sans toucher les 20000$ qui coupe un peu la motivation… Ca va revenir !

 

C’est quand qu’on arrive ?

Communication

Peu d’articles dans ce blog, mais du progrès coté programmation ! Le raspberry et l’arduino communiquent enfin !

L’arduino renvoie en temps réel l’état des capteurs (matrice de switch), mais aussi boutons cablés en direct (flips et bouton start). Le raspberry traduit ça en score via mpf.

De son coté, le raspberry/mpf envoie les macros matérieles pour que l’arduino réagisse plus rapidement et en autonomie au bumpers, slingshots et flips.

 

Une courte démo:

 

De nouveaux problèmes…

Raspberry instable

Depuis peu, et sans raison apparente, je subis des plantages réguliers du raspberry, complètement freeze. J’exclus un problème d’alimentation car le raspberry est directement relié à une alim ATX de PC, que j’imagine plutôt stable et pas en manque de puissance. Pourtant j’ai souvent le logo de pb d’alim en surbrillance sur l’écran. Les processus python mpf sont à 98% d’occupation du processeur.

J’ai pensé à de la surchauffe car je n’ai pas installé les dissipateurs sur le raspberry, mais je ne trouve pas celui ci trop chaud. Dans le doute j’ai ajouté un ventilateur, mais sans résultat.

Dialogue de sourd

Je perds des morceaux de trames du raspberry vers l’arduino. Dans l’autre sens la communication est stable et complète. Bizarrement, c’est plus stable à 115200 qu’à 9600 bauds.

 

Prochaines étapes

Debug, debug, debug, logiciel et matériel…

En parallèle, sans avoir besoin d’être devant le flipper, je continue le développement des règles du Supersonic dans les fichiers de configuration du mission pinball !

It’s aliiiive !!

Remontage !

La première version vivante du flipper fonctionnait grâce aux contacts des bumpers et autres slingshots directement relié à la commande de la carte de puissance (transistor/mosfet). C’était amusant et ça permettait « aux gamins » de passer un peu de temps dessus.

Depuis quelques semaines, l’objectif était de réintroduire de l’intelligence dans la machine.

J’ai donc reconstruit la matrice de contacts dans l’état d’origine et commencé à appliquer la lecture de celui ci sur l’Arduino.

Un peu de code disponible ici, attention ça tache, c’est du draft-n-quick-n-dirty, sur mon github, pleins d’évolutions sont à venir.

Après la gestion des contacts, j’ai appliqué la gestion des règles matérielles comme prévu pour l’intégration avec le Mission Pinball Framework.

En attendant la gestion de la communication MPF entre l’Arduino et le Raspberry Pi, les règles de base sont ajoutées en dur dans le lancement du code:

  • réaction des bumpers
  • réaction des slingshots
  • gestion des flippers (par des contacts en dehors de la matrice)
  • quelques autres contacts permettent de relancer une bille, de relever les targets, etc.

Une petite vidéo qui montre l’activité des cartes de puissance:

 

Et une autre vue plus générale du flipper:

 

Prochaines étapes:

Terminer la communication pour informer MPF de ce qui se passe sur le plateau de jeu, et que MPF puisse envoyer des commandes.

Combien d’ingénieurs faut-il pour changer une ampoule ?!

Je ne terminerai pas la blague, mais je viens de passer le weekend pour en changer une soixantaine, et je n’en fait que les deux tiers !

Démontage

En premier, démontage des anciennes lampes et douilles. Voici le plateau « dépouillé »:

2017-01-20-16-37-00

Regarde maman, sans les lampes !

Il reste beaucoup de filasse, j’ai laissé le faisceau lampes en place pour le moment. Et j’ai laissé les douilles pour l’éclairage général.

Lampes !

Un microdirecteur à l’attaque des lampes 🙂

Le butin retiré !

Patronage !

La scotch double face étant évidemment au dos des leds, il me fallait un moyen artisanal pour positionner celles-ci. Je ne voulais pas fixer non plus toutes les leds sur le plateau, histoire de faire les soudures en dehors de celui-ci pour avoir de la liberté de mouvement. Me voilà à faire un patron comme un couture, afin de visualiser l’espace disponible, repérer les emplacements des inserts avec une lampe de l’autre coté du plateau.

Ca n’est pas très beau, mais j’ai collé les leds sur du carton fin, soudé ensuite le cablage. Certains montages sont assez simples et droits, d’autres sont beaucoup plus alambiqués avec de multiples croisements ! J’ai positionné des connecteurs entre chaque plaque histoire de faciliter les futurs dépannages.

Des montages plus ou moins simples:

Premiers résultats:

Après quelques heures de soudage, découpage, cramage — ah oui j’ai réussi à dézinguer tout un bandeau de 8 leds en inversant la polarité, le fil rouge sur le bouton rouge, c’était pourtant facile ! –, voici ce que ça donne:

Et même si ça ne se voit pas du tout sur la photo « de jour », les inserts du plateau sont correctement éclairés. La photo « de nuit » permet de mieux voir ce qui a été réalisé. Les inserts du Supersonic sont à peine translucides et pas du tout transparent comme les flippers récents, donc l’éclairage perd de la puissance. Certains sont aussi teintés dans la masse, du coup l’éclairage en RVB n’est pas du tout adapté, il faudra du blanc.

Une courte vidéo:

On peut voir beaucoup de couleurs différentes, mais c’est juste un sample qui tournait sur le Raspberry et non pas le soft du flipper. Ce sera beaucoup plus classique au final.

Prochaines étapes:

Il me reste encore la partie centrale, avec l’étoile qui a des inserts avec des switchs, du coup c’est difficile de poser la led facilement, et la rampe de bonus, qui elle aura des leds très serrées…

Ensuite coder ces lampes dans le soft du flipper.

Un peu de vie avec MPF!

J’ai effectué deux « grands » pas dans l’exploration du framework MPF.

Le ruban de leds est maintenant intégré dans ma plateform « rasppinball », les leds sont donc pilotées par le moteur de mpf. Le tuto est parfait pour comprendre les bases des « modes » qui permettent de faire de jolis « chenillards ».

http://docs.missionpinball.org/en/latest/tutorial/index.html

L’équipe de MPF a aussi eu la bonne idée de développer un client BCP qui se connecte au moteur MPF et permet de visualiser l’état de tous les composants sur une image du flipper, un rond pour les lampes, un carré pour les capteurs. Les actionneurs ne sont pas représentés sur l’image.

supersonic mpf-monitor.png

Ça rendrait beaucoup mieux avec un GIF animé, il faudra que j’y travaille !

En attendant, une petite vidéo où on peut voir tourner MPF et MPF-MC sur le Raspberry, et en parralèle le MPF-MONITOR. On voit, au délai près, que les leds correspondent au monitor. C’est un outil parfait pour bosser en pur virtuel pour préparer les règles de son flipper.

 

La prochaine étape, coder dans ma plateforme les actionneurs (coils).

A bientôt 🙂

 

MPF – Mission Pinball Framework

Contrairement aux apparences, ceci est un flipper:

2016-11-19-17-41-29

Je concède qu’il faut encore beaucoup d’imagination, mais les briques [de lego] se mettent progressivement en place:

J’ai attaqué ma plateforme (mpf/platforms/rasppinball) pour intégrer la futur électronique maison dans le framework MPF : Mission Pinball Framework. Ce n’est pas trivial car cette partie n’est pas encore beaucoup documentée, mais grâce aux exemples des autres plateformes (opp, roc, …) je commence à m’en sortir.

Merci aussi au support de mpf sur les forums : mpf-users

Coté configuration, j’apprends le fonctionnement du mission pinball framework. Donc je vais intégrer le flipper « supersonic » d’origine pour le moment:

2016-11-13-18-14-29

L’émulateur clavier de switch est fonctionnel dans mpf. Le bouton « rouge » simule  la bille en position de départ, qui est aussi le drain dans ce flipper. Le bouton jaune est le bouton crédit/start.

Dans la vidéo, je dois appuyer sur les deux boutons afin que mpf accepte de préparer une partie avec une bille présente. Les autres boutons simulent les bumpers, cibles, etc. Les scores sont configurés sur quelques switchs seulement.

Sur l’écran, on peut voir incrustée la vidéo en sortie du raspberry (cadre noir), et au dessus la session ssh qui lance le framework (ssh bleu).

 

 

Suite des expériences à venir: implémentation des LEDS dans le framework, puis aussi jouer avec le « mpf monitor », qui affiche sur l’image du flipper l’état des capteurs et des actionneurs.

 

 

 

 

switch matrix

C’est le moment de rentrer dans la matrice !

 

Maintenant que j’ai la lumière, je vais tester les intéractions avec le raspberry.

Le moyen simple e était de jouer avec quelques contacts qui traînaient dans mes tas de récup, mais histoire de bosser comme dans le futur flipper, je me suis orienté vers une matrice de contacts.

Evidemment j’aurais pu simplement commander ceci:
sku_156679_1

Ma patience a préféré se laisser guider vers le « do it yourself »:

2016-11-06-14-40-242016-11-06-13-42-50

Une chute de plinthe Ikea, quelques vis, une canette de soda découpée en tranche. Les fils sont un peu longs mais ce sont des fils pré-découpés et pré-étamés. A quelques centimes le fil sur internet, faut arrêter de s’emm…

Et j’imagine que la qualité des contacts simulera parfaitement ceux du flipper !

Encore quelques lignes de code python, récupérée ici histoire de lancer rapidement quelques tests, et voici le résultat:

 

Le code, Modifié à la hache pour gérer du 4 x 4 :https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=34235

 

Coté électronique et Raspberry, les résistances de rappels sont interne et configurable via la librairie GPIO, ce qui simplifie la mise en place.

 

Fiat lux

 

Premier pb, les leds ws2812 se pilotent en 5V, mais la logique du Raspberry fonctionne en 3.3V, du coup pas possible de faire une simple connexion. J’avais la chance d’avoir déjà commandé quelques 74HCT125 qui permettent, entre autre, de faire la conversion.

Comme je dois être la millionième personne qui cherche à piloter ces leds depuis un Raspberry, c’est parti pour creuser les pages google et trouver le bon tuto, la bonne lib, et après pas mal d’essais infructueux, voici une qui fonctionne bien, superbement bien expliquée:

http://popoklopsi.github.io/RaspberryPi-LedStrip/#!/ws2812

 

J’ai juste découpé un morceau du ruban à leds pour mes essais, voici ce que ça donne:

 

Prochaine étape, préparer un « banc de test » pour simuler un matrice de switch. Ca me donnera une base pour faire du dev sur le framework sans devoir rester dans le garage au coté du flipper 🙂