Oui, bien sûr,
Pour commencer, j'ai étudié les différentes façons de commander les rubans leds, la seule possible s'est révélée être par les entrées de la carte son.
Avec les plans et le câblage, je devais utiliser les entrées S1, S2, S4, S8, S16., la visualisation par des leds entre le +5V et les entrées était incompréhensible.
j'ai donc inverser le problème et commandé la carte sons par des interrupteurs
il m'a suffit de basculer les inters et de valider par le bouton poussoir pour jouer les musiques et sons.
j'ai pu définir le rôle de S16
état 0 : il active la musique
état 1 : il active les bruitages
les séquences étant trouvées, je me suis penché sur la technique
j'ai commencé avec des portes logiques : trop de données à gérer
Je me suis tourné vers un module raspberry Pi B : trop lent au démarrage
j'ai enfin fini par un arduino UNO ; très bien pour le nombre d'entrées et de sorties, démarrage instantané.
pour la mise en forme du signal, j'ai utilisé des optocoupleurs 4N25
J'ai créé mon circuit imprimé à l'ancienne (typon + révélateur + gravure)
Attention, il y a des erreurs comme David sauf que moi je ne le fais pas exprès !!! (il manque la masse sur le dernier optocoupleur)

l'entrée S20 correspond au relais Q "Game Over" qui me désactive l'attract mode
J'attaque directement les bases des transistors du module de commande du ruban led avec les sorties de l'arduino
la plaque gravée
la plaque montée
le ruban led se découpe par groupe de 3 leds
la création d'un support en 3D s'est donc imposée, le but étant de prendre la place de la lampe d'origine
J'ai laissé les douilles en attente sous le plateau pour remettre en configuration d'origine si besoin
la programmation de l'arduino s'est faite avec "arduino pour les nuls" et quelques tutos, la vérification avec Tinkercad
le programme ;
Jeu de lumière
Jeu de lumière flipper
circuit:
- LED RGB + résistance rouge pin 9 bleu pin 10 vert pin 11 to ground
- pushbutton en série avec 4 interrupteurs en parallèle S1 pin 2 S2 pin 3 S4 pin 4 S8 pin 5 S16 pin 6 depuis GND utilisation R interne PULLUP
created 2021
by JS
This example code is in the public domain.
*/
// constants won't change. They're used here to set pin numbers:
const int S1 = 2; // the number of the switch pin
const int S2 = 3; // the number of the switch pin
const int S4 = 4; // the number of the switch pin
const int S8 = 5; // the number of the switch pin
const int S16 = 6; // the number of the switch pin
const int S20 = 7; // the number of the switch pin
const int ledPinR = 13; // the number of the LED pin
const int ledPinB = 11; // the number of the LED pin
const int ledPinG = 12; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin R as an output:
pinMode(ledPinR, OUTPUT);
// initialize the LED pin B as an output:
pinMode(ledPinB, OUTPUT);
// initialize the LED G pin as an output:
pinMode(ledPinG, OUTPUT);
// initialize the switch pin as an input:
pinMode(S1, INPUT_PULLUP);
// initialize the switch pin as an input:
pinMode(S2, INPUT_PULLUP);
// initialize the switch pin as an input:
pinMode(S4, INPUT_PULLUP);
// initialize the switch pin as an input:
pinMode(S8, INPUT_PULLUP);
// initialize the switch pin as an input:
pinMode(S16, INPUT_PULLUP);
// initialize the switch pin as an input:
pinMode(S20, INPUT_PULLUP);
}
void loop() {
// read the state of the pushbutton value:
int A = digitalRead(S1);
int B = digitalRead(S2);
int C = digitalRead(S4);
int D = digitalRead(S8);
int E = digitalRead(S16);
int F = digitalRead(S20);
// attente début jeu
if (F == HIGH ){
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinG, LOW);
for (int r = 0; r < 256; r++){
analogWrite(ledPinR, r);
delay(1);}
for (int r = 0; r < 256; r++){
digitalWrite(ledPinR, LOW);
analogWrite(ledPinB, r);
delay(1);}
for (int r = 0; r < 256; r++){
digitalWrite(ledPinB, LOW);
analogWrite(ledPinG, r);
delay(1);}
}
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (A == LOW && B == LOW && C == HIGH && D == LOW && E == HIGH) {
// turn LED off:
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinR, HIGH);}
if (A == HIGH && B == LOW && C == HIGH && D == LOW && E == HIGH) {
// turn LED off:
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinG, HIGH);}
if (A == HIGH && B == HIGH && C == LOW && D == LOW && E == HIGH) {
// turn LED off:
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinG, HIGH);}
if (A == LOW && B == HIGH && C == LOW && D == LOW && E == HIGH) {
// turn LED off:
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinR, HIGH);
digitalWrite(ledPinG, HIGH);
}
if (A == LOW && B == LOW && C == LOW && D == LOW && E == HIGH) {
// turn LED off:
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinR, HIGH);
digitalWrite(ledPinG, HIGH);
}
}
Les 1ers essais ont été infructueux, notamment le S 20, le 24V prélevé n'étant pas filtré, arduino l'interprétait comme un signal 100Hz, aussi le ruban leds restait en attract mode, j'ai du
ajouter un condo en parallèle sur la led du photocoupleur.
La carte avec des leds de contrôle et l'arduino monté en lieu et place de la carte reset
L'arduino est enfichable, donc facilement démontable pour reprogrammer.
je posterai d'autres photos si besoin.
Jean