Applications microcontrôleur Arduino

Un collègue me parle de ces nouveaux microcontrôleurs de type Arduino. En gros ce sont des ordinateurs à 15€, grands comme une carte de visite, connectables en USB et programmables en C++, équipés de pas mal d’entrées/sorties digitales et analogiques. De nombreux capteurs (t°, pression, lumière, …) et actuateurs (relais, moteurs, LEDs, …) sont disponibles à des prix dérisoires. Ces modules sont donc de superbes petits systèmes pour créer des applications pratiques. Certains remplacent même déjà les CPUs de flippers avec ce type d’appareils.

A l’occasion d’un dépannage de carte lampes sur un Stern Big Game et afin d’accélérer les diagnostics je me lance dans un projet de générateur de commandes digitales de cartes lampes, solénoïdes, afficheurs et sons sur base d’un Arduino Uno.

Testeur de cartes lampes

J’achète un kit (avec télécommande, afficheur 7 segments et autres composants), monte l’Arduino, le support de piles et la plaque de test sur une planche, fabrique un connecteur Molex pour connecter l’Arduino à la carte lampes, soude 28 LEDs sur une plaque à souder et ajoute un connecteur Molex. La programmation se fait facilement … et le résultat est très probant ! Les LEDs doivent avoir un fil commun du côté + (raccordé au +5V ou à une sortie Arduino, voir test carte lampe type2), puis chacune est en série avec une résistance de 330 ohms, qui se connecte à chaque broche du connecteur de sortie de la carte à tester.

Montage type 1

Une première version (type 1) du programme ne faisait qu'allumer les LEDs. En effet comme les LEDS sont alimentées par un pile en continu, une fois activés les thyristors conduisent en permanence, donc jusqu’à extinction de l’alimentation. Le programme (type 1) ne peut donc qu’allumer les LEDs, jamais les éteindre. Il active les 16 sorties de chaque démultiplexeur avec ½ seconde d’intervalle (l’Arduino pourrait les allumer toutes instantanément, mais avec un délai c’est plus visuel et cela fait durer le suspense ! Donc toute LED allumée de suite ou toujours éteinte à la fin du cycle montre un composant défectueux sur la carte. CQFD.

Afin de faciliter la lecture du N° de connecteur et d’indiquer quelles LEDs doivent rester éteintes car non utilisées (Bally n’utilise que 60 lampes sur les 64 possibles, la ligne 15 n’est jamais utilisée), un petit carton d’aide a été réalisé.

Pour tester la carte, il suffit d’enfoncer la barrette de LEDs à la suite sur les 3 connecteurs de sortie J1, J2 et J3 et ainsi en contrôler le fonctionnement complet en moins d’une minute ! Ensuite, en étant sûr à 100% de la carte, dans une machine en mode de test lampes il suffit de changer les ampoules et de décrasser les sockets des lignes inactives pour rapidement remettre le circuit des lampes commandées en ordre ! Contrôle des circuits de commandes des lampes, voir explications sur la page du flipper Big Game.

Montage type 2

Lors d'un dépannage ultérieur, je découvre que dans le flipper une lampe commandée reste allumée en permanence, mais qu'avec mon montage Arduino type 1 tout semble normal ! Zut, mon programme n'est pas au point : il ne détecte pas les pannes où la lampe s'allume mais ne s'éteint plus, suite à un défaut dans un circuit intégré multiplexeur. Pour éteindre la LED il faut couper l'alimentation du thyristor. Dans les flippers l'alimentation est en 6V redressé mais non filtré, ce qui fait que l'alimentation tombe à zéro et désactive les thyristors 100 fois par seconde. Donc, au lieu d'alimenter mes LEDs avec le 5V (continu) de la pile, il suffit de les alimenter par une sortie digitale de l'Arduino et de programmer cette sortie pour qu'elle passe de temps en temps par zéro ! Petit souci, une sortie Arduino ne peut débiter que 50 mA, soit maximum 5 LEDs ... et en aucun cas les 28 LEDs en même temps ! Je revois mon programme et crée la version type 2, et avec un peu d'astuce et des boucles logicielles on arrive à faire clignoter rapidement toutes les LEDs. Sur la photo et la vidéo on voit bien qu'elle "vivent", mais surtout on repère celle qui est bloquée. Sur la photo et le schéma ci-dessous on voit que l'alimentation se fait par la sortie DO9.

controleur arduino pour carte lampes bally
Arduino lamp card connexions

A gauche, vue du montage en cours de fonctionnement et à droite le schéma de câblage

        

Contrôle des circuits de commandes des lampes du connecteur J1, le circuit de la LED n° 17 a un défaut

Cette version est nettement supérieure, car visuellement je peux détecter très rapidement 4 cas :

Une fois la ligne défectueuse repérée, une visualisation du signal de sortie du multiplexeur s'avère très intéressante. Ci-dessous à gauche une ligne normale et à droite le signal chaotique et défectueux de la LED n° 17 (attention l'échelle a été doublée et on est en AC).

Bally lamp card signal
Bally lamp card signal

Testeur de carte solénoïde

Dans la foulée, j’ai fait pareil pour contrôler les cartes solenoids driver (programme). J’utilise la même barrette de LEDs que pour la tester la carte lampes, il suffit de réaliser les divers harnais et connecteurs. Ici la LED s’allume tour à tour ½ seconde pour chacun des 19 transistors, seuls le Q4 non utilisé et Q15 commande relais ne sont pas activés sur la barrette. Vraiment pratique.

 

Controleur Arduino pour carte solénoïde Bally
Arduino Coil card connexions

 

Contrôle des circuits de commandes des bobines, voir explications sur la page du flipper Big Game

Testeur d'afficheur

Passons au testeur d'afficheur. Deux programmes sont mis au point : type 1 pour compter de 0 à 9 puis passer au digit suivant et le type 2 pour passer le même chiffre à tous les digits avant d'incrémenter. Il y a une seule astuce de câblage pour les afficheurs 7 digits : le 7ème digit est activé via la broche 12 sur les afficheurs Bally et sur la broche 11 pour les afficheurs Stern ! Il faut donc commander ces 2 broches en parallèle pour être universel. La vraie difficulté est d'avoir une alimentation d'à peu près 170V DC pour ioniser l'afficheur. Je trouve un petit transfo qui me descend la tension, je rajoute une résistance de puissance au primaire pour diminuer encore la tension d'alimentation, puis un pont de diode, un condensateur de filtrage et une charge résistive de stabilisation au secondaire. C'est rudimentaire et à ne pas mettre entre toutes les mains mais ça marche, voir sur la vidéo et la photo.

Test d'afficheur avec programme type 2

Avec ce nouveau système, je peux enfin tester à la chaine tous les afficheurs laissés de côté pour cause de panne, en fouillant dans toutes mes caisses j'en déniche 25 ! Y a du boulot, mais cela va aller bien plus vite pour diagnostiquer et vérifier chaque afficheur, aucun flipper n'est nécessaire.

Controleur afficheur flipper bally avec Arduino

Les 25 afficheurs à tester !

 

 Arduino Afficheur card connexions

Finalement, je développe une troisième version du programme de test qui allume tous les segments de tous les digits le plus rapidement possible en séquence. Le résultat est un ensemble de "8" qui clignotent très rapidement (à la vitesse de l'Arduino). Cette configuration permet de vérifier l'afficheur en un seul coup d'œil et met aussi l'afficheur et l'alimentation à rude épreuve. Au moins je sais que s'il survit à ce test, il sera à l'aise dans la machine !

Testeur de carte son 

Il me reste à faire pareil pour piloter les cartes sons. Le principe de programmation est toujours le même, les cartes sons sont habituellement pilotées via un bus de données de 4 ou 5 bits et d'une ligne de synchronisation. La première carte testée est une vieille et petite carte utilisée dans les Bally Harlem Globetrotter, Supersonic (AS-2518-50, détails ici), ... Le bus de données utilise les 5 sorties digitales D0->D4 et le "bank select" est piloté par D5. Le connecteur est réalisé avec des pinces crocodiles plutôt qu'un connecteur Molex afin de rester universel, ce programme fonctionnera avec toutes les cartes Ballly, Williams ou Gottlieb ayant un bus de 4 ou 5 bits. Sur la vidéo ci-dessous, on entend le résultat. Alors que les sons sont activés dans l'ordre binaire de 00000 à 11111 (programme ici), les notes qui sortent sont aléatoires ... et la mélodie peu agréable ! Je m'attendais à une chouette montée chromatique, je suis un peu déçu. Mais bon, le but n'est pas de faire de la musique, mais d'activer la carte en permanence à l'entrée et de pouvoir suivre les divers signaux à l'oscilloscope sur la carte jusqu'au haut-parleur. Avant j'utilisais une batterie d'interrupteurs ... qu'est-ce que c'était fastidieux.

 

Controlleur carte son Bally Arduino

 

Test carte son Bally AS-2518-50

Conclusion

Avec 15€ d'investissement, il est donc parfaitement possible de développer un petit banc de test pratique et flexible. Ces microcontrolleurs sont de petites merveilles de (nouvelles) technologies bien adaptées pour l'aide au dépannage des vieilles (technologies) !

Dernière remarque, il ne faut pas regarder de trop la qualité de ma programmation, c'est un peu "force brute", le but n'était pas d'écrire du beau code mais quelque chose qui fonctionne rapidement. J'ai prévu de regrouper toutes ces routines en un seul programme et pour choisir le type de test avec un sélecteur, afin d'éviter les nombreux téléversements à chaque changement de carte, mais ce sera peut-être dans une autre vie ...

(CS janvier 2015)