Controller Beatmania

Dopo ore di lavoro e grazie ai vostri consigli sono riuscito a terminare e vorrei presentarvi il mio progetto anche come tutorial. Prendendo spunto da un lavoro di un canale youtube (chi è interessato lo può seguire qui: Parliamo di Videogiochi - YouTube) ho costruito tramite un arduino leonardo un controller da gioco per il Beatmania IIDX che comprende 9 pulsanti totali.

Il Beatmania IIDX è un gioco musicale per cabinato (arcade e ps2): per maggiori info: Beatmania IIDX - Wikipedia

Occorrente (solo per la parte elettronica)
-Arduino Leonardo (ovviamente :))
-1 breadboard o millefori
-9 transistor npn (io ho utilizzato i bc337)
-Tanti cavi
-7 pulsanti rettangolari (nelle foto 1 è sbagliato)
-2 pulsanti quadrati

Per collegare gli switch dei pulsanti è sufficente collegare esso alla massa, ai 5V e a un pin digitale tramite i 3 connettori mentre per l'illuminazione ho collegato il collettore alla massa la base a un pin digitale e l'emettitore all'anodo del led mentre il catodo ai 5V.

Sketch per il funzionamento:

/* 
ABP (Arduino Beatmania Project)
Source Code
 */

const int buttonPin1 = 3;
const int buttonPin2 = 4;
const int buttonPin3 = 5;
const int buttonPin4 = 6;
const int buttonPin5 = 7;
const int buttonPin6 = 8;
const int buttonPin7 = 9;
const int buttonPin8 = 10;
const int buttonPin9 = 11;

int previousButtonState1 = HIGH;
int previousButtonState2 = HIGH;
int previousButtonState3 = HIGH;
int previousButtonState4 = HIGH;
int previousButtonState5 = HIGH;
int previousButtonState6 = HIGH;
int previousButtonState7 = HIGH;
int previousButtonState8 = HIGH;
int previousButtonState9 = HIGH;

const int ledPin1 = 2;
const int ledPin2 = A1;
const int ledPin3 = A4;
const int ledPin4 = 13;
const int ledPin5 = A2;
const int ledPin6 = A0;
const int ledPin7 = 12;
const int ledPin8 = A5;
const int ledPin9 = A3;

void setup() {
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
  pinMode(buttonPin5, INPUT);
  pinMode(buttonPin6, INPUT);
  pinMode(buttonPin7, INPUT);
  pinMode(buttonPin8, INPUT);
  pinMode(buttonPin9, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin8, OUTPUT);
  pinMode(ledPin9, OUTPUT);
  Keyboard.begin();
}

void loop() {
  int buttonState1 = digitalRead(buttonPin1);
  int buttonState2 = digitalRead(buttonPin2);
  int buttonState3 = digitalRead(buttonPin3);
  int buttonState4 = digitalRead(buttonPin4);
  int buttonState5 = digitalRead(buttonPin5);
  int buttonState6 = digitalRead(buttonPin6);
  int buttonState7 = digitalRead(buttonPin7);
  int buttonState8 = digitalRead(buttonPin8);
  int buttonState9 = digitalRead(buttonPin9);
  
  if ((buttonState1 != previousButtonState1) 
  && (buttonState1 == HIGH)) {
    Keyboard.print("a");
    digitalWrite(ledPin1, HIGH);
  }
  if ((buttonState2 != previousButtonState2) 
  && (buttonState2 == HIGH)) {
    Keyboard.print("b");
    digitalWrite(ledPin2, HIGH);
  }
  if ((buttonState3 != previousButtonState3) 
  && (buttonState3 == HIGH)) {
    Keyboard.print("c");
    digitalWrite(ledPin3, HIGH);
  }
  if ((buttonState4 != previousButtonState4) 
  && (buttonState4 == HIGH)) {
    Keyboard.print("d");
    digitalWrite(ledPin4, HIGH);
  }
  if ((buttonState5 != previousButtonState5) 
  && (buttonState5 == HIGH)) {
    Keyboard.print("e");
    digitalWrite(ledPin5, HIGH);
  }
  if ((buttonState6 != previousButtonState6) 
  && (buttonState6 == HIGH)) {
    Keyboard.print("f");
    digitalWrite(ledPin6, HIGH);
  }
  if ((buttonState7 != previousButtonState7) 
  && (buttonState7 == HIGH)) {
    Keyboard.print("g");
    digitalWrite(ledPin7, HIGH);
  }
  if ((buttonState8 != previousButtonState8) 
  && (buttonState8 == HIGH)) {
    Keyboard.print("h");
    digitalWrite(ledPin8, HIGH);
  }
  if ((buttonState9 != previousButtonState9) 
  && (buttonState9 == HIGH)) {
    Keyboard.print("i");
    digitalWrite(ledPin9, HIGH);
  }
 
  previousButtonState1 = buttonState1; 
  previousButtonState2 = buttonState2; 
  previousButtonState3 = buttonState3; 
  previousButtonState4 = buttonState4; 
  previousButtonState5 = buttonState5; 
  previousButtonState6 = buttonState6; 
  previousButtonState7 = buttonState7; 
  previousButtonState8 = buttonState8; 
  previousButtonState9 = buttonState9; 
  delay(20);
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  digitalWrite(ledPin6, LOW);
  digitalWrite(ledPin7, LOW);
  digitalWrite(ledPin8, LOW);
  digitalWrite(ledPin9, LOW);
}

Foto:




Certo che si può fare... anzi si dovrebbe sempre.
Grazie per aver presentato il tuo progetto e complimenti.

Se lo completi con lo schema elettrico e se riscuoterà molto interesse potrebbe anche essere spostato nella sezione Megatopic/Progetti. :grin:

P.S.
Si, puoi citare le fonti.

Scusa, potresti descrivere cos'è questo Beatmania? Io non lo conosco ed immagino anche altri. A che serve quel 45 giri? E' di bellezza o ha un suo scopo?

Leo: mi stavo chiedendo anch'io lo scopo del 33 giri "imbullonato" li sopra :stuck_out_tongue: XD

Sì, è un 33 giri.

Il beatmania è un gioco musicale (tipo guitar vero per intenderci ma molto più difficile tanto che da alcuni è considerato uno dei giochi più difficili al mondo). Il 33 giri funziona da scratch e il suo movimento è letto tramite un mouse ottico che invia i movimenti all'emulatore (emulatore poiché è un gioco arcade su cabinato)

Quindi alla "console" attacchi Mouse e Tastiera (Leonardo). :grin:
Non vedo le resistenze per i Led. :roll_eyes: (a meno che non siano quegli strani manicotti)
Mancano anche le resistenze di pull-down. :roll_eyes:

Ma ti funziona? :blush:

L'idea era quella ma per ignoranza personale soprattutto in elettronica (ho 14 anni) ho solo creato un programma che mi converte il movimento del mouse in pressioni della tastiera e ho posizionato un "vero" mouse ottico sotto il controller che legge la rotazione del disco

mandymarck:
Il beatmania è un gioco musicale (tipo guitar vero per intenderci ma molto più difficile tanto che da alcuni è considerato uno dei giochi più difficili al mondo). ...

Bé ... effettivamente ... impressionante ...

... le spiegazioni QUI ... credo :wink:

Guglielmo

Il progetto non è male, ma dovresti correggerlo.
Guarda qui per i collegamenti di base --> http://forum.arduino.cc/index.php/topic,146152.0.html (http://www.pighixxx.com/abc-arduino-basic-connections/)

P.S.
I transistor come li hai usati?

PaoloP:
Il progetto non è male, ma dovresti correggerlo.
Guarda qui per i collegamenti di base --> http://forum.arduino.cc/index.php/topic,146152.0.html (pighixxx.com - pighixxx Resources and Information.)

P.S.
I transistor come li hai usati?

Per i transistor ho seguito una guida per utilizzarli come interruttore e ho utilizzato solo delle resistenze da 4.7 kohm alla base mentre per i pulsanti non ho utilizzatl ne resistenze di pull-up ne di pull-down ma sembra funzionare perfettamente cosí

Oddio, a quel ritmo i micro dureranno 20 minuti :disappointed_relieved:

Detto questo, bravo e grazie della condivisione :slight_smile:

ratto93:
Oddio, a quel ritmo i micro dureranno 20 minuti :disappointed_relieved:

Detto questo, bravo e grazie della condivisione :slight_smile:

Bisogna precisare che quella del video è una difficoltà per noi normali sovraumana. Quelli che fanno video del genere sono (si solito) dei giapponesi che si allenano 24 ore su 24 anche se ci sono degli italiani molto bravi. Qualcuno prima mi aveva detto di postare lo schema elettrico, lo devo mettere a mano o con programmi come fritzing? Grazie

Non è obbligatorio.
Ma solo per completare il progetto.

NOO! ti prego... Fritzing... no.. :sweat_smile: :grin: :grin:

PaoloP:
Non è obbligatorio.
Ma solo per completare il progetto.

NOO! ti prego... Fritzing... no.. :sweat_smile: :grin: :grin:

Scusa non volevo :slight_smile: Allora con cosa posso farlo? A mano?

mandymarck:
Scusa non volevo :slight_smile: Allora con cosa posso farlo? A mano?

Impara ad usare Eagle ... che è sempre utile :wink:

Guglielmo

gpb01:
Bé ... effettivamente ... impressionante ...

E questi qui allora ?

:stuck_out_tongue: XD XD XD

Etemenanki:

gpb01:
Bé ... effettivamente ... impressionante ...

E questi qui allora ?

http://www.youtube.com/watch?v=HXx3pMBzMzQ

:stuck_out_tongue: XD XD XD

Questo si chiama stepmania se guardi il link del canale del primo post hanno fatto anche una guida per costruire il "controller" di quel gioco

Come promesso ecco gli schemi elettrici


Non avevo mai usato eagle prima: possono andare bene? Ne devo fare uno unico?

Le resistenze sulla base dei transistor le puoi mettere anche da 1K.
Ti servono invece le resistenze in serie ai led, da calcolare in base al colore dei led e alla tensione di lavoro.

Per il pulsanti potevi fare in un modo diverso ma siccome hai collegato sia Vcc che GND (sono deviatori e non pulsanti) potrebbe andare bene uguale.