WIP mon flipper arduino home made

Astuces, conseils, infos, tout sur les flip en général (tout type confondu)

Flipper concerné :

Si necessaire, merci de proposer un flipper en relation avec ce sujet.
Règles du forum
Attention, si votre sujet ne concerne pas tous les flippers, merci de poster dans la rubrique DOT, numérique/alpha ou électromécanique.
Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:33

salut !

j'ouvre un topic pour partager avec vous mon projet de flipper fabriqué maison à partir de zéro...

Me voilà pris par le besoin irrépressible de fabriquer un flipper ! car j'aime bricoler, programmer et personnaliser (mon thème, ma table, ma musique, mes décors...)
après je sais que mes qualités ne vont pas dans les finitions :roll:
mais j'essaierai de faire propre car ça doit finir dans mon salon et agréer ma chère et tendre :wink:

Deux alternatives :

► un pincab = une borne de jeu avec un écran de télé à plat pour le plateau, un écran vertical pour le fronton et deux boutons !
ensuite un PC et un logiciel gratuit (visual pinbal 9 ou pinball arcade) qui vous propose des centaines de flippers différents :+:
http://www.pincabpassion.net/
http://www.pincabpassion.net/t781-wip-pincab-de-vulbas ça donne bien envie aussi :biere:
un article en français pour la transformation d'un flipper en flipper virtuel (pincab) : contru…l-pinball-diy-t87212.html
un chouette historique en français des flippers virtuels (nostalgie...) http://robinson-special-jeux.franceserv ... rique.html

ici un article très détaillé sur un pincab : https://blog.codinghorror.com/your-digi ... l-machine/

► un vrai flipper avec la bille en acier !

Hop, mon choix est fait : ce sera un vrai flipper et pas un pincab :!: :!: :!: de la physique, une vraie bille
sur les pincabs, je ne vois jamais vraiment bien la bille...

Un peu de vocabulaire :
il y a pas mal de vocabulaire à maîtriser dans le monde du flipper
dictionnaire-mots-techniques-traduits-e ... t4821.html
https://www.flipperfrance.com/threads/a ... stiques.8/
https://web.archive.org/web/20040805120 ... /glossary/

Dimensions d'un plateau : 20 à 26" par 50" = 51 cm x 129 cm environ
http://pinballmakers.com/wiki/index.php/Playfield_Sizes
Dimension bille : 1"1/6 = 28mm
Inclinaison 6,5°

Devenir un champion de flipper
ici un guide sur "comment devenir un champion de flipper"
https://papa.org/learning-center/player ... et=general
en français : http://robinson-special-jeux.franceserv ... jouer.html
et des vidéos de technique : https://papa.org/learning-center/videos ... techniques

que j'aime le toucher subtil du flipping pass :
Modifié en dernier par RacingMat le mer. 04 12, 2019 17:00, modifié 1 fois.
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:35

Des tutos sur internet

► un reportage complet sur la restauration d'un flipper en français !
https://alexbrau4.wixsite.com/bornearca ... preflipper

► un reportage complet en anglais avec un ebook décrivant tous les détails !
http://www.pinballdesign.com/

et ici https://create.arduino.cc/projecthub/gr ... ine-281c0b pour la partie arduino

► un instructables détaillé https://www.instructables.com/id/How-to ... l-Machine/



► un wiki pas encore parcouru
This site is a web resource for those interested in making their own pinball machines, from the initial idea to a completed and working game.
http://pinballmakers.com/wiki/index.php/Main_Page

► ici un fou qui conçu entièrement son flip (du genre câbler à la main 512 LED pour faire l'affichage)
http://www.benheck.com/bill-paxton-pinball-making-of/

et toute la mécanique avec des éléments standards : http://www.benheck.com/Games/Pinball/BP ... _large.jpg

un flipper réalisé principalement en impression 3D :
http://3dfilaprint.com/tonys%20pinball/ ... 3D&mw=MjQw



ici des rampes en 3D : http://pinballmakers.com/wiki/index.php/Files_Section (en bas)


► un chouette projet en cours (fin 2017) d'un flipper low-cost (avec impression 3D) https://hackaday.io/project/27816/logs
principe pour les batteurs : 3€ le vérin électrique de fermeture de porte automobile vs 50€ avec solénoïde...

► autre projet en cours (2018) avec les verins de porte
https://fdproj.wordpress.com/2018/01/11 ... #more-1233

► Ben Heck : pinball building overview


et sa chaîne dédiée "minipinball"
https://www.youtube.com/watch?v=CD_DIaP ... eaDMpXtiKT

► reportage complet d'un passage en électronique d'un vieux plateau
https://imgur.com/a/Vhrvl

des projets non aboutis
► plein de photos d'une construction amateur avec des éléments du commerce :
https://www.instagram.com/zacaj/

► un blog sur plusieurs années... mais pas encore terminé (glups)
https://homebrewpinball.blogspot.fr/2010/12/eureka.html
Modifié en dernier par RacingMat le mer. 04 12, 2019 17:00, modifié 2 fois.
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:35


Principe des circuits électro-mécaniques[/hr][/u][/b]

https://pinside.com/pinball/forum/topic ... t-so-basic

scrollez la page : du plus bête interrupteur à un compteur multijoueur à base de relais, came, interrupteurs...


Schémas électroniques


ici des références avec des schémas sur la partie électronique :

https://howtobuildapinballmachine.wordpress.com/


l'explication complète détaillé de la double bobine du batteur : http://stevekulpa.net/pinball/bally_flipper1.htm


piloter les solenoides des batteurs : ancienne école (double bobinage) vs nouvelle école (PWM) https://howtobuildapinballmachine.wordp ... -flippers/


IRL540 (and not IRF540) the "L" signifies Logic Level Drive - meaning the part can be directly driven from a 5V TTL source - the standard part cannot be driven like this as it often requires as much as 12V or sometimes even more to make the part switch on correctly.


► Comment piloter une bobine en PWM :

- https://mikesprojecttracker.blogspot.fr ... ntrol.html


- DRV102 http://www.ti.com/lit/ds/sbvs009b/sbvs009b.pdf

The DRV102 can be set to provide a strong initial closure, automatically switching to a soft hold mode for power savings. Duty cycle can be controlled by a resistor, analog voltage, or digital-to-analog converter for versatility. La classe a un prix 19€...


- L295 http://www.st.com/content/ccc/resource/ ... 000061.pdf


des infos ici sur le pilotage du batteur https://www.flipperfrance.com/threads/b ... roes.2075/
Couin, post: 21749, member: 9 a écrit :Sur ce jeu, l'EOS ne sert uniquement à redonner une impulsion de puissance à la bobine au cas où le batteur redescende (si une bille arrive dessus et qu'il est levé par exemple).Lorsque tu appuies sur le bouton de flip, tu as une impulsion de l'ordre de 30 ms (si tu retiens le batteur, tu dois sentir une breve vibration lors de l'appui sur le bouton).
#p362048

Les data east/sega et stern utilisent des bobines à 1 seul enroulement, les première systèmes utilisaient des cartes de contrôle de flip avec 2 tension 50v et 9v environ, mais continu et surtout filtré (avec une très faible ondulation), lors de l'appui il y avait une impulsion d'environ 50ms avec du 50v puis c'est le transistor du 9v qui prenait le relais, ça faisait donc 2 alims et 2 transistor pour commander 1 flip + 2 diodes pour éviter les retours dans chaque transistor, bref beaucoup d'électronique mais aucun bruit parasite.Les stern récent sont beaucoup plus simples et n'utilisent plus de 9v, ni de 2ème transistor, ni de carte de contrôle, il n'y a plus que du 50v commandé par un seul transistor commandé directement par la cpu, l'idée est la même: il se ferme de façon continue pendant 50ms por balancer du 50v puis ensuite il est commandé avec des impulsions 50v-0v-50v-0v-etc c'est du signal carré avec rapport cyclique faible pour simuler à peu près le 9v, mais il n'y a aucun filtrage, c'est continu au sens électrique (la tension est toujours positive) mais ça ondule à mort, on entend la mécanique qui vibre et aussi des parasites dans l'électronique.

Flipper à commande électronique de la marque Data East : Les premiers modèles de flippers à commande électronique de la marque Data East (Hook par exemple), il n'y a pas de contact EOS et la bobine ne comporte qu'un enroulement de puissance. C'est l'électronique de commande qui envoie une tension différente pour l'appel (forte tension pendant une courte durée fixée par l'électronique) et pour le maintient (tension plus faible tant que le joueur appuie sur le bouton de commande). Inconvénient de ce système : si, pendant que le flipper est maintenu "en l'air" par le joueur, la bille redescend violemment sur le batteur et le force à descendre (le joueur n'a pas lâché le bouton) celui-ci redescend et le joueur peut perdre la bille. Data East à corrigé cet inconvénient par la suite en rajoutant un contact EOS à ouverture (c'est-à-dire fermé au repos) qui permet à l'électronique de commande de redonner une impulsion de puissance dans le cas ou la bille redescend violemment sur le batteur, ainsi le joueur ne risque plus de perdre la bille.

Sur la série WPC, une carte (appelée "Fliptronic") est fixée avec les autres dans le fronton. Cette carte est prévue pour 4 flippers, et possèdes 4 fusibles de protection. Elle envoie une impulsion de courte durée dans l'enroulement de puissance (gros fil) de la bobine de flipper et une tension permanente tant que le joueur appuie sur le bouton de commande dans l'enroulement de maintient (fil fin de la bobine). Les fusibles de protection sont sur la carte. Elle communique aussi avec la carte CPU principale de l'appareil pour envoyer l'information si le joueur appuie sur un bouton de commande de flipper (droite ou gauche) pour faire déplacer des illuminations de couloirs au autre, ou bien encore pour que la carte CPU puisse commander directement les flippers sans l'intervention du joueur (tir de "la chose" sur le Family Adams par exemple).

http://pinballchameleon.blogspot.fr/201 ... oject.html

I am not using PWM for any solenoids (or for the lights for that matter). The 'fire time' simply refers to the amount of time the solenoid is turned on, allowing it to fully extend, before turning it back off. To my surprise, I found that a total energized time of about 20ms was enough for almost all solenoids to exert full power onto the ball. The exception was the pop bumpers, which seemed to work best when energized for 40ms.


► the Arduino controls a small NPN transistor which then triggers a P-Channel MOSFET. In this case the NPN transistor isolates the microcontroller pin from the higher voltage of the solenoid.

► TVS diode http://pinballchameleon.blogspot.fr/201 ... ct_28.html


https://pinside.com/pinball/forum/topic ... controller

In my Setup, i power the solenoids direct with the stock 24V Power suply for 100 ms, if the Button is still hold after this time, the power is reduced to 30% by PWM. This works really well on the Star Galaxy! Much more Power than the Stock Setup, no forced deactivation after some seconds (you can hold the ball as long as you wish) and best of all: the solenoids stay cool as ice even after heavy gaming!.

Stock Star Galaxy: weak flipper power, forced solenoid deactivation after 3? seconds and solenoids became very hot after some games

(for the Slingshots and Bumpers i used a 60 ms Impulse with a 100 ms debounce time by the way)
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:38

Maintenance des flippers
un site hyper bien documenté sur la maintenance :voispas:
http://www.pinrepair.com/em/index3.htm
et la liste des 39 choses à ne pas faire à son flipper !

http://www.zaccaria-pinball.com/misc/arnold.html

10 règles
http://pinballhelp.com/the-10-commandme ... intenance/

un article de référence très bien écrit
http://www.multibille.fr/wiki/V%C3%A9ri ... 3%A9riques

ici deux articles techniques sur l'usure et le remplacement des flips : illustrés et expliqués !
https://pinside.com/pinball/forum/topic ... g-flippers
https://www.flipperfrance.com/threads/d ... ipper.185/
les-flippers-les-connaissances-bases-avoir-t49886.html


quand remplacer les élastiques ? http://coin-op.pinballmedic.net/techtip ... bber_rings
comment les remplacer (Fr) http://www.flipper-fr.org/copie-phortai ... p?pg=art11

http://www.pbresource.com/pfbumpb.htm

une personne qui a restauré une centaine de flippers et qui raconte ses aventures !
http://www.csprojects.eu/flippers.htm

Des liens d'appro en pièces détachées :
https://fdproj.wordpress.com/2016/04/20 ... -5/#more-8

Pour le moment, je trouve des mécanismes de flip à 40/50€ ça fait un peu cher mais c'est le moteur du truc quand même
https://www.---------------.com/
http://www.marcospecialties.com/pinball-parts/B-195-R-1
https://www.pinballlife.com/index.php?p=product&id=3732
http://www.pinball.center/en/shop/pinba ... 2r-c11626r
http://www.thepinballwizard.net/index.p ... ct&id=2194 40$ from Utah
http://bayareaamusements.com/Merchant2/ ... =price_asc
http://www.competitiveproducts.com/list.php?id=304
http://www.lakesidepinballparts.com/

https://www.zpeakabonks-pinball-paradise.com/ FR pas trop cher

http://www.pinballspareparts.com.au/pla ... d-kit.html à 80$

http://www.dmspinballs.com/flipper.html 30$ from Alabama

https://pinparts.co.uk/t/all-flipper-kits
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:40

D'abord comprendre comment ça marche !

Une liste de brevets sur les flippers :
des mécanismes vraiment ingénieux dans ces machines ! :1er:
http://markgibson.zenfolio.com/fun-with ... es/patents

Les actionneurs mécaniques
http://shortcircuitpinball.blogspot.fr/ ... shots.html

Similarly, the slingshot board has its own complications. While it uses just one transistor, it, like the flippers, should be controlled directly by the input switches (which we wired in series) for a fast response as well as to not require additional output pins on the Arduino. Unfortunately, if the gate of the transistor is connected to the switch directly, the response is far too fast to have more than a barely-noticeable kick since the switch does not stay closed for very long. In order to have a more powerful kick (i.e. letting the slingshot solenoid "follow through"), we added a diode and a large resistor at the gate of the transistors, which allows for a quick response but creates a large time constant of voltage decay at that node so that the gate remains close to 5V (and the transistor on) long enough to have a noticeable kick, even after the slingshot switches have been re-opened. Another complication is sending this input to the Arduino, as the input board (as we will see later) requires low inputs, and the slingshot operates when an input is pushed high. To solve this problem, we included a third transistor that closes whenever either input goes high, and thus can be treated like any other input switch on the playfield


► Bob Blomquist a acheté les parties mécaniques (liens dans le tuto) et piloté le tout par Arduino :)
https://create.arduino.cc/projecthub/Bo ... ine-525863

https://create.arduino.cc/projecthub/Bo ... ine-525863

pop bumpers : when I ordered them, they came with a AE-26-1200 coil. As I mentioned above, they were a little under-powered. I thought this was due to the 24v power supply I used. It turns out that I was able to increase the power from the pop bumpers by changing the coils. I installed a more powerful AE-25-1000 coil. The lower the last number (the number of wire windings) the more powerful the coil. This did the trick. If you order pop bumpers using the link above, you can specify the size coil you want.


► pop bumper complet à 58$
http://www.actionpinball.com/parts.php?item=POP_ASSY1


restauration d'un pop bumper : https://www.flipperfrance.com/threads/b ... ges.15470/

ici un bumper imprimé 3D qui compte les points (mais pas de mécanique) :



ici un pop bumper fabriqué à partir d'un actionneur de porte https://loggs2.wordpress.com/2014/12/26 ... p-bumpers/
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:41

Ma réflexion sur le code Arduino :

Voici une bonne structure de base "machine d'état" :
http://pinballmakers.com/wiki/index.php/Programming

http://forum.locoduino.org/index.php?to ... 763#msg763
La modélisation d'un système par machine d'états-transitions est, à ma connaissance, un des moyens les plus efficaces pour analyser un problème et écrire du bon code (dans le sens conforme, efficace, facile à mettre au point et à maintenir). Cela s'applique à la gestion de systèmes physiques en toute sécurité ou à des protocoles de communication, avec la même facilité.

Pour chaque état, un (ou des) évènements permettent une transition vers un autre état (ou d'autres états), en réalisant éventuellement une action déterminée. Il peut parfois y avoir retour vers le même état (à une variable d'état près, éventuellement). A chaque état peuvent être associées un jeu de valeurs des variables d'état (ce qui peu matérialiser en quoi consiste une 'transition', mais pas toujours).

Cette approche permet effectivement de réfléchir à bien poser le problème, à trouver les bons états, les bonnes variables d'état, à tester sur papier la conformité du fonctionnement aux attentes, tout cela avec rapidité (ce n'est finalement que du dessin servant de support à une 'expérience de pensée') mais avec une grande sûreté (l'automate dessiné fait ce que l'on veut, ou non, le constat est immédiat, et en cas de non, c'est que la modélisation est à revoir). Cette approche événementielle est en général vécue comme assez naturelle. Tout cela sans avoir écrit une seule ligne de code !
http://fadiese.hd.free.fr/barbadidoua/i ... nes-d-etat
là c'est clair et concis : il faut lire toute la page :)

Le programme va donc regarder dans quelle étape il se trouve (y positionner les actionneurs, c'est à dire agir sur l'environnement=écriture des sorties) puis voir (en observation l'environnement=lecture des entrées)s'il doit effectuer la transition vers l'étape suivante
Règles
http://pinballmakers.com/wiki/index.php/Rule_Flow

des exemples de règles à coder : http://pinball.org/rules/devilsdare.txt

► exemples :
https://create.arduino.cc/proj…l-machin ... 3?f=1#code
Le code de Bob Blomquist est un bon début car plutôt simple :
- 1 seul arduino pour piloter le tout
- gestion d'une seule bille en jeu

Pendant ma lecture pour l'analyser, j'ai retravaillé le code (quelques bugs mineurs, découpage en fonctions, petite optimisation de la taille des variables, gestion des pins par un tableau et des boucles...). Ca se compile mais ce n'est pas testé ;) en particulier le recours aux pointeurs pour modifier les points selon les types de cible.

Code : Tout sélectionner

// January 24, 2016
// created by Bob Blomquist
// https://create.arduino.cc/projecthub/BobB/arduino-controlled-pinball-machine-525863?f=1
// pinball controlled by a single Arduino Mega 2560 board
// 8 targets, 3 roll overs, 4 pop bumpers, 1 pressure sensor to check if the ball has been lost
// 1 single ball management
// pop bumpers status is read through analog pin via a voltage divider
// 02-2018
// added comments, sliced into 4 sub procedures or function, changed variable types, pin numbers and status managed through arrays, speed up loop tweak by Mat13
// compiled OK but untested ?
const byte TxPin = 17;
long Score = 0;
long OldScore = 0;
byte Target_Points;
byte Pop_Points;
byte Roll_Points;
// target rollover alley popbumper
// array index: 0 - 7 8 - 10 11-12 13-16
byte switches_pin[17] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 20, 21, 22, 23};
// to determine when all have been hit and the value needs upgrading
// and the lights need turning off.
byte switches_status[17] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int Milli = 10;
int Flash = 100;
byte Sum = 0; //number of target < 255
byte Ball = 0; //number of ball < 255
byte Shot = 0; //number of shot < 255
boolean Lost = false;
int Tare_Pressure_Sensor = 1024;
#include <SoftwareSerial.h>
SoftwareSerial mySerial = SoftwareSerial(255, TxPin);
void reset_points_values()
{
Target_Points = 1;
Pop_Points = 1;
Roll_Points = 10;
}
void setup() {
// setupo the LCD serial interface and pin
pinMode(TxPin, OUTPUT);
digitalWrite(TxPin, HIGH);
mySerial.begin(9600);
mySerial.write(12); // Clear
mySerial.write(17); // Turn backlight on
//turn target pins into inputs
//If a pull-down resistor is used, the input pin will be LOW when the switch is open and HIGH when the switch is closed.
for (int i = 0; i < 13; i++) {
//rollover inputs
//lower ball shot switch
//upper ball shot switch
pinMode(switches_pin[i], INPUT_PULLUP);
//turn target light pins into output, respective
//ie ( target pin number + 30 ) = light pin number
//rollover lights, respective
//pop bumper lights, respective
pinMode(switches_pin[i] + 30, OUTPUT);
}
//pop bumper lights
pinMode(50, OUTPUT);
pinMode(51, OUTPUT);
pinMode(52, OUTPUT);
pinMode(53, OUTPUT);
reset_points_values();
}
void loop() {
while (1 == 1) //a tweak that creates a real time loop code without any arduino's framework delays
{
// put your main code here, to run repeatedly:
//check targets, roll over and pop bumpers
checkhits_light_score_mult(0, 7, &Target_Points, 2);
//scan all the targets inputs
//switch on the light of the hit target
//store the target status
//check the rule "if all targets have been hit, then multiply the value of one target"
// check Rollovers
checkhits_light_score_mult(8, 10, &Roll_Points, 5);
// check PopBumpers
checkhits_light_score_mult(13, 16, &Pop_Points, 10);
//increment ball number when ball hit lower alley switch or ball hit upper alley switch
if ( (digitalRead(15) == LOW) || (digitalRead(16) == LOW))
{  increase_ball_counter(); // increase ball counter and tare the pressure gauge
}
//test if ball is on the pressure pad
if (analogRead(7) > Tare_Pressure_Sensor) { //ball is on the pressure pad  Shot = 0;  if (Lost == false) {    //mySerial.print(analogRead(7));    //Score = Score + 100;    Lost = true;    if (Ball >= 5) {      //Game Over      game_over();    }  }
}
//print to LCD
print_score_and_ball_to_LCD();
}
}
void checkhits_light_score_mult(byte first, byte last, byte *points, byte multiplier)
{
// *points is a pointer: this will allow the procedure to modify the global value of Target_Points, Pop_Points, Roll_Points
//a loop to read all the switchs of the target
//to check if a target was hit
for (int i = first; i <= last; i++) {
switch (i) {
case 0 ... 12: //digital pins
if (digitalRead(switches_pin[i]) == LOW) {
//Target activated
switches_status[i] = 1; // status memorized outside the main loop (global variable)
//add target score to the score
Score = Score + *points;
//turn on Target light because target has been hit
digitalWrite(switches_pin[i] + 30, HIGH);
//delay so as not get multiple points for one hit
delay(Milli); //debounce
// slow the whole loop in case of target hit but the ball needs time to travel to the next target, so it's OK
break;
}
default: //analog pins used to read the pop bumper status through voltage diviser
if (analogRead(switches_pin[i]) > 500) {
//Target activated
switches_status[i] = 1; // status memorized outside the main loop (global variable)
//add target score to the score
Score = Score + *points;
//turn on Target light because target has been hit
digitalWrite(switches_pin[i] + 30, HIGH);
//delay so as not get multiple points for one hit
delay(Milli); //debounce
// slow the whole loop in case of target hit but the ball needs time to travel to the next target, so it's OK
break;
}
}
}
// count the number of targets that have been hit
byte Sum = 0;
byte maximum_hits = 0;
for (int i = first; i <= last; i++) {
Sum = Sum + switches_status[i];
maximum_hits++;
}
//compare number of targets hit versus maximum
if (Sum == maximum_hits) {
//all Targets are now lit
for (int j = 0; j < 3; j++) {
// so flash and then turn off 3 times (j loop)
for (int i = first; i <= last; i++) {
digitalWrite(switches_pin[i] + 30, LOW);
}
delay(Flash);
for (int i = first; i <= last; i++) {
digitalWrite(switches_pin[i] + 30, HIGH);
}
delay(Flash);
}
//reset the target to "not hit" status and switch off the light
for (int i = first; i <= last; i++) {
digitalWrite(switches_pin[i] + 30, LOW); // switch off the light
switches_status[i] = 0; // reset target status to 0
}
delay(Flash);
// Rule : if all targets have been hit, then enter X multiplier mode
//Multiply target value by the multiplier factor
*points = *points * multiplier;
}
}
void print_score_and_ball_to_LCD()
{
if (Score != OldScore) {
mySerial.write(12); // Clear
delay(5); // Required delay
//mySerial.print(analogRead(7));
// First line for the score
mySerial.print(Score);
mySerial.write(13); // Form feed
// Second line: # ball or game over
if (Lost == true) {
mySerial.print("Game Over!!!");
}
else {
mySerial.print("Ball = ");
mySerial.print(Ball);
}
// if OldScore was -1 because of increase_ball_counter procedure, reset the score as previous score
OldScore = Score;
}
}
void increase_ball_counter()
{
//if not already done so, increase Ball
if (Shot == 0) {
//Set Lost = false since not on pressure pad
Lost = false;
Tare_Pressure_Sensor = analogRead(7) + 20;
//set OldScore to force reprint ball value on LCD
OldScore = -1; //the LCD procedure will then refresh the print on LCD with new ball value
Ball = Ball + 1;
Shot = 1;
}
if (Ball > 5) {
// reset the value in order to start a new game
Ball = 1;
Score = 0;
//reset the score value of hits
reset_points_values();
}
}
void game_over()
{
//Flash Targets and target status reset to 0.
//flash and then turn off 3 times (j loop)
for (int j = 0; j < 3; j++) {
for (int i = 0; i <= 16; i++) {
digitalWrite(switches_pin[i] + 30, LOW);
}
delay(Flash);
for (int i = 0; i <= 16; i++) {
digitalWrite(switches_pin[i] + 30, HIGH);
}
delay(Flash);
for (int i = 0; i <= 16; i++) {
digitalWrite(switches_pin[i] + 30, LOW);
}
}
// reset target status to 0
for (int i = 0; i <= 16; i++) {
switches_status[i] = 0;
}
}
un autre exemple par Frogger1108
https://create.arduino.cc/proj…no-pinba ... ine-4a3314

plusieurs exemples simple ou compliqué :
howtobuildapinballmachine.wordpress.com -> http://www.space-eight.com/Downloads.html

► des liens pour des projets Flipper arduinos :

une liste ici https://pinside.com/pinball/forum/topic ... w-and-tell (pas de mise à jour depuis 2 ans)
https://retronics.wordpress.com/2015/07 ... h-arduino/ code arduino https://github.com/retronics/aspen_logi ... _logic.ino


"Pinduino" https://pinside.com/pinball/forum/topic ... in-pinhead : une carte pour repiquer les infos du flipper et ajouter des mods (éclairages...) en fonction des événements.

une idée pour chronométrer ses billes : https://pinside.com/pinball/forum/topic ... your-balls
"l'ai-je vraiment gardée 5 minutes pleines ???" ça tombe bien j'ai le petit afficheur 8 chiffres qui ne me servait plus :pp
Modifié en dernier par RacingMat le mer. 04 12, 2019 17:12, modifié 2 fois.
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:46

L'idée est d'utiliser une bande de LED WS2811 (DIGITAL RGB LED strips)
avec 3 fils on pilote toutes les LED individuellement et à la couleur près
The WS2811/WS2812 is really neat! The WS2811 is a chip that uses a purely timing-based serial protocol. They can be driven by an arduino or digispark running at 8 or 16 megahertz, they hold their colour (set and forget) just like the ws2801, and are basically the same, but you only need a single data wire instead of two.


All ws2812 LED modules run in the 800khz protocol, not the 400khz protocol available on some ws2811 devices. This means they run at twice the speed, allowing your program to communciate with them faster, so each time you send an update to your LEDs your program will spend less time doing it, and get back to your colour calculation code quicker - this potentially means a higher framerate.

You fill your buffer with data for one strip and output it, then fill it with colours for a different group of LEDs and output it to a different pin! With this technique you can have roughly (100 * number of free pins)

Working Voltage: DC5V / Drive current per piece: 60mA / Power consunption piece: 0.3W
-> 15W pour 50 leds
https://fr.aliexpress.com/item/50pcs-Pr ... 14997.html

https://fr.aliexpress.com/item/Free-Shi ... 06598.html



LED STRIP

ici un très bon article sur les différentes technos de LED :

https://www.tweaking4all.com/hardware/a ... s2812-led/

- biblio à choisir entre la librairie AdafruitNeoPixel ou FastLED

la consommation ne sera pas énorme car toutes les LED ne seront pas allumées simultanément


- biblio "no delay" http://yaab-arduino.blogspot.fr/p/ala.html

(préférez le Vin qui a un régulateur de voltage pour mieux alimenter l'arduino)
arduino_no_computer_power.jpg
Motifs différents et simultanés

afficher différents motifs en même temps : par exemple 5 led qui tracent l'entrée d'une rampe et d'autre part une animation sur un bonus obtenu.

https://arduino.stackexchange.com/quest ... d-patterns !


https://learn.adafruit.com/multi-taskin ... ommon-bits !


https://github.com/FastLED/FastLED/wiki ... r-Examples ?
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:48

afficheur matrice LED
évidemment il faut un affichage dot matrice pour un flipper 8)
8x8 MAX7219

► liste des librairies utilisables : https://playground.arduino.cc/Main/LEDMatrix

► tuto de base : https://www.brainy-bits.com/how-to-cont ... ed-matrix/

avec la library ledcontrol
max7219_schema.png
https://www.electroschematics.com/10510 ... ed-matrix/
MAX7219 IC setup, available as a pre-wired module is used. Typical specification of this LED Matrix Module is shown below:

Operating Voltage: DC 4.7V – 5.3V
Typical Voltage: 5V
Operating Current: 320mA
Max Operating Current: 2A

► avec la librairie MAxMatrix https://github.com/riyas-org/max7219
tuto ici : https://howtomechatronics.com/tutorials ... bluetooth/
qui permet des effets de défilement (sprite) : mmmm c'est tentant si la biblio n'est pas trop gourmande
avec stockage des motifs (alphabet) en PROGMEM
le principe est simple on définit des motifs pour chaque caractère :
Characters-Bytes.png
Characters-Bytes.png (43.64 Kio) Vu 281 fois
convert long to string https://forum.arduino.cc/index.php?topic=454276.0


Matrix editor pour caractères sur mesure https://xantorohara.github.io/led-matrix-editor/

► souvent consommateur de mémoire, l'affichage de chaînes de caractères nécessite plus de mémoire :
http://quai-lab.com/arduino-ses-memoires/

Progmem -> Flash (32 k)
https://www.arduino.cc/reference/en/lan ... s/progmem/

Eeprom -> lecture seule, mémoire morte (100 000 écritures, infinité de lecture)
Eeprom interne (1 k) ou externe (256 à 512 k) : les composants Eeprom 24LC256 et Eeprom 24LC512 nous permettent d’étendre considérablement l’espace de stockage de notre Arduino pour y stocker des données de manière permanente et fonctionne comme un mini disque dur.

http://www.zem.fr/augmenter-le-stockage ... m-24lc512/

http://www.hobbytronics.co.uk/arduino-external-eeprom
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:50

du gros son !

il me faut coordonner des échantillons sonoresr avec des actions (pop bumpers, gain d'un bonus...)

https://freesound.org/people/relwin/packs/10675/
https://www.soundsnap.com/tags/pinball
http://www.findsounds.com/ISAPI/search. ... ds=pinball
http://www.wavsource.com/sfx/sfx.htm
https://www.zapsplat.com/sound-effect-c ... on/page/3/

de la polyphonie impérativement
C'est incontournable il me faut de la polyphonie : un bruit pour une cible activée en même temps qu'une musique d'ambiance et qu'une annonce genre "extra ball" ou "mission ..."
Et en multi-billes, on a plusieurs cibles simultanées.

Je vise au moins 4 voies.

►la solution : la carte Wav trigger à 50€

https://www.lextronic.fr/interfaces-aud ... igger.html 8 voies ! --> 55€10 livrée
https://robertsonics.com/wav-trigger à 2:55
t à 2min45


ou sa cousine MP3 trigger (attention à quelques défauts de conceptions : corrigés ainsi www.zachpoff.com improving-the-sparkfun-mp3-trigger)
https://www.sparkfun.com/products/13720 à 50$ pareillement


j'ai cherché moins cher mais ce serait plusieurs cartes à coordonner ensemble
puis fusionner les sorties audio : ça ne vaut pas le coup (ni le coût)

► à propos des cartes sons, il y a un tuto sur la Wav trigger que je viens seulement de voir par Bob Blomquist
https://www.hackster.io/BobB/pinball-so ... sic-bac92b

mais il ne gère pas le gain lorsque les sons se superposent ce qui peut amener une distorsion du signal par clipping :
dans son cas, ça n'a pas l'air gênant sur sa vidéo puisqu'il a seulement 1 musique de fond et un bruit pour chaque contact (en mono bille)
https://robertsonics.com/wav-trigger-online-user-guide/

Polyphony also affects how you handle volume. If you mix 4 tracks together that are all full-scale volume, the result will be clipped and distorted. In this case, it won’t help to lower the WAV Trigger gain setting since this only affects the final output stage – you’ll just lower the volume of an already clipped mix. You must reduce the volume of the .wav files themselves so that the resulting addition of the tracks does not clip.
Modifié en dernier par RacingMat le mer. 04 12, 2019 17:23, modifié 3 fois.
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Avatar du membre
RacingMat
Dept: 13
Rech/Achete: 0 flip
aimable donateur
Messages : 155
Enregistré le : ven. 23 11, 2018 10:37
Niveau : Initié
Pro / revendeur : non
Localisation : Marseille
Contact :

Re: WIP mon flipper arduino home made

Message par RacingMat » mer. 04 12, 2019 16:52

Architecture
Il faut répartir la charge entre plusieurs Arduino : le principal doit boucler le plus rapidement possible sur les entrées (interrupteurs activés par la bille)
un autre affichera le score sur un Dot Matrix et des infos sur un LCD : il y a des pauses dans ces boucles pour le délai de rafraichissement
un autre pilotera l'allumage des LED sur le plateau : boucles pour chenillard, ... donc des pauses

► I2C :
https://letmeknow.fr/blog/2013/08/09/tu ... -en-serie/
http://wiki.mchobby.be/index.php?title= ... et_esclave
http://www.pobot.org/Echange-maitre-esclave-en-I2C.html
http://www.gammon.com.au/i2c :)
https://github.com/madsci1016/Arduino-EasyTransfer

► CanBus :
http://www.locoduino.org/spip.php?article130

► SPI (en cascade) : utilisé pour les dot matrix 8x8 en MAX7219 pour le score

► RS422
https://howtobuildapinballmachine.wordpress.com/ il utilise des modules qui communiquent entre eux en réseau http://www.futurlec.com/Mini_RS422.shtml

Finalement je retiens la solution I2C : un maitre et plusieurs esclaves !
Mon projet de flipper arduino home made : https://www.flipjuke.fr/viewtopic.php?t=138822

Répondre